Version 2.9.0-14.0.dev

Merge commit '02915ec5ce8a1cb71dac244a73efcd9a5e75416a' into dev
diff --git a/.gitattributes b/.gitattributes
index 207c1a2..6ac541d 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -13,11 +13,11 @@
 *.md text
 *.yaml text
 
-# Files that should not be converted.
-tests/compiler/dart2js_extra/eof_line_ending_test.dart -text
-tests/compiler/dart2js_extra/string_interpolation_test.dart -text
-tests/compiler/dart2js_extra/string_interpolation_dynamic_test.dart -text
-tests/compiler/dart2js_extra/literal_string_juxtaposition_test.dart -text
+# File that should not be converted.
+tests/dart2js_2/eof_line_ending_test.dart -text
+tests/dart2js_2/string_interpolation_test.dart -text
+tests/dart2js_2/string_interpolation_dynamic_test.dart -text
+tests/dart2js_2/literal_string_juxtaposition_test.dart -text
 tests/language_2/string/raw_string_test.dart -text
 tests/language_2/string/multiline_strings_test.dart -text
 tests/language_2/string/multiline_newline_cr.dart -text
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f698d6a..438fa0c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,13 @@
 
 ### Core libraries
 
+#### `dart:io`
+
+*   [#42006][]: The signature of `exit` has been changed to return the
+    `Never`type instead of `void`. since no code will run after it,
+
+[#42006]: https://github.com/dart-lang/sdk/issues/42006
+
 #### `dart:convert`
 
 *   **Breaking Change** [#41100][]: When encoding a string containing unpaired
@@ -80,6 +87,10 @@
 ### Dart VM
 
 ### Pub
+* `pub run` and `pub global run` accepts a `--enable-experiment` flag enabling
+  experiments in the Dart VM (and language).
+* Publishing Flutter plugins using the old plugin format is no longer allowed.
+  Plugins using the old plugin format can still be consumed.
 * Introduce `pub outdated --mode=null-safety` that will report which of your
   dependencies you can upgrade to fully support null safety.
 * Fix `pub run` precompilation with relative `PUB_CACHE` paths (#2486)
@@ -92,6 +103,14 @@
   column will be empty.
 * `pub upgrade`: Show summary count of outdated packages after running.
 
+## 2.8.4 - 2020-06-04
+
+This is a patch release that fixes potential memory leaks in the Dart front-end
+(issues [#42111][] and [#42112][]).
+
+[#42111]: https://github.com/dart-lang/sdk/issues/42111
+[#42112]: https://github.com/dart-lang/sdk/issues/42112
+
 ## 2.8.3 - 2020-05-28
 
 This is a patch release that fixes the following issues:
diff --git a/DEPS b/DEPS
index 2ffcf83..dd69128 100644
--- a/DEPS
+++ b/DEPS
@@ -11,6 +11,7 @@
   'chrome-infra-packages.appspot.com',
   'chromium.googlesource.com',
   'dart.googlesource.com',
+  'dart-internal.googlesource.com',
   'fuchsia.googlesource.com',
 ]
 
@@ -25,8 +26,8 @@
   # We mirror our github repos on Dart's git servers.
   # DO NOT use this var if you don't see a mirror here:
   #   https://dart.googlesource.com/
-  "dart_git":
-      "https://dart.googlesource.com/",
+  "dart_git": "https://dart.googlesource.com/",
+  "dart_internal_git": "https://dart-internal.googlesource.com",
   # If the repo you want to use is at github.com/dart-lang, but not at
   # dart.googlesource.com, please file an issue
   # on github and add the label 'area-infrastructure'.
@@ -44,7 +45,11 @@
   # hashes. It requires access to the dart-build-access group, which EngProd
   # has.
   "co19_rev": "9dacb12cf963ce92fb056b7f2fb87096fd576e9a",
-  "co19_2_rev": "ef2cb6474595d3ed60870e1a26e8913a980d6d59",
+  "co19_2_rev": "620c1148c8b7a3d7f74afacf348c46f109eb64f2",
+
+  # The internal benchmarks to use. See go/dart-benchmarks-internal
+  "benchmarks_internal_rev": "4f5285d3711ed4225d0bf5673379e7afdc6cb8e5",
+  "checkout_benchmarks_internal": False,
 
   # As Flutter does, we use Fuchsia's GN and Clang toolchain. These revision
   # should be kept up to date with the revisions pulled by the Flutter engine.
@@ -63,18 +68,18 @@
   "args_tag": "1.6.0",
   "async_tag": "2.4.1",
   "bazel_worker_tag": "v0.1.22",
-  "benchmark_harness_tag": "81641290dea44c34138a109a37e215482f405f81",
-  "boolean_selector_tag": "1309eabed510cc3b7536fd4367d39b97ebee3d69",
+  "benchmark_harness_rev": "81641290dea44c34138a109a37e215482f405f81",
+  "boolean_selector_rev": "1309eabed510cc3b7536fd4367d39b97ebee3d69",
   "boringssl_gen_rev": "b9e27cff1ff0803e97ab1f88764a83be4aa94a6d",
   "boringssl_rev" : "4dfd5af70191b068aebe567b8e29ce108cee85ce",
   "browser-compat-data_tag": "v1.0.22",
-  "charcode_tag": "9085e6b6127f084d66c0a94810a808121459012a",
+  "charcode_rev": "9085e6b6127f084d66c0a94810a808121459012a",
   "chrome_rev" : "19997",
   "cli_util_tag" : "0.1.4",
-  "collection_tag": "7be42e03d427cc19571cd7f9fc628a5913a6b757",
-  "convert_tag": "49bde5b371eb5c2c8e721557cf762f17c75e49fc",
-  "crypto_tag": "7422fb2f6584fe1839eb30bc4ca56e9f9760b801",
-  "csslib_tag": "bf372d4fdc6dfa232ad93f77a0a3de0891edd04c",
+  "collection_rev": "7be42e03d427cc19571cd7f9fc628a5913a6b757",
+  "convert_rev": "49bde5b371eb5c2c8e721557cf762f17c75e49fc",
+  "crypto_rev": "7422fb2f6584fe1839eb30bc4ca56e9f9760b801",
+  "csslib_rev": "bf372d4fdc6dfa232ad93f77a0a3de0891edd04c",
   "dart2js_info_tag" : "0.6.0",
 
   # Note: Updates to dart_style have to be coordinated with the infrastructure
@@ -92,37 +97,37 @@
   "dart_style_tag": "1.3.6",  # Please see the note above before updating.
 
   "dartdoc_tag" : "v0.32.1",
-  "ffi_tag": "454ab0f9ea6bd06942a983238d8a6818b1357edb",
-  "fixnum_tag": "eb3748663dc979271ff6a3d014fbe522543b1d91",
-  "glob_tag": "e9f4e6b7ae8abe5071461cf8f47191bb19cf7ef6",
-  "html_tag": "083a36cd801a4b787ba156b7c6e4c8b2e2daed4a",
+  "ffi_rev": "454ab0f9ea6bd06942a983238d8a6818b1357edb",
+  "fixnum_rev": "13da5123989a5d91cb59e76793c3923dd8d06e90",
+  "glob_rev": "e9f4e6b7ae8abe5071461cf8f47191bb19cf7ef6",
+  "html_rev": "083a36cd801a4b787ba156b7c6e4c8b2e2daed4a",
   "http_io_rev": "2fa188caf7937e313026557713f7feffedd4978b",
   "http_multi_server_rev" : "ea269f79321d659208402088f3297e8920a88ee6",
-  "http_parser_tag": "6e63a97b5aaa2b4d1215fe01683e51fb73258e54",
+  "http_parser_rev": "6e63a97b5aaa2b4d1215fe01683e51fb73258e54",
   "http_retry_tag": "0.1.1",
-  "http_tag": "a131e563c09349f624d5421237183a06fb10552d",
+  "http_rev": "a131e563c09349f624d5421237183a06fb10552d",
   "http_throttle_tag" : "1.0.2",
   "icu_rev" : "5005010d694e16571b8dfbf07d70817841f80a69",
   "idl_parser_rev": "5fb1ebf49d235b5a70c9f49047e83b0654031eb7",
   "intl_tag": "0.16.1",
   "jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
-  "json_rpc_2_tag": "d589e635d8ccb7cda6a804bd571f88abbabab146",
+  "json_rpc_2_rev": "d589e635d8ccb7cda6a804bd571f88abbabab146",
   "linter_tag": "0.1.116",
-  "logging_tag": "9561ba016ae607747ae69b846c0e10958ca58ed4",
+  "logging_rev": "9561ba016ae607747ae69b846c0e10958ca58ed4",
   "markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
-  "markdown_tag": "dd150bb64c5f3b41d31f20f399ae2a855f7f8c00",
-  "matcher_tag": "af4fe7daf8e94a46981e4f072872be550a6969e9",
-  "mime_tag": "179b5e6a88f4b63f36dc1b8fcbc1e83e5e0cd3a7",
-  "mockito_tag": "d39ac507483b9891165e422ec98d9fb480037c8b",
-  "mustache_tag": "664737ecad027e6b96d0d1e627257efa0e46fcb1",
+  "markdown_rev": "dd150bb64c5f3b41d31f20f399ae2a855f7f8c00",
+  "matcher_rev": "af4fe7daf8e94a46981e4f072872be550a6969e9",
+  "mime_rev": "179b5e6a88f4b63f36dc1b8fcbc1e83e5e0cd3a7",
+  "mockito_rev": "d39ac507483b9891165e422ec98d9fb480037c8b",
+  "mustache_rev": "664737ecad027e6b96d0d1e627257efa0e46fcb1",
   "oauth2_tag": "1.6.0",
-  "package_config_tag": "9c586d04bd26fef01215fd10e7ab96a3050cfa64",
-  "path_tag": "4b8c83cd5ccfcc8101acd2940ffb5a44d24ec57e",
+  "package_config_rev": "9c586d04bd26fef01215fd10e7ab96a3050cfa64",
+  "path_rev": "4b8c83cd5ccfcc8101acd2940ffb5a44d24ec57e",
   "pedantic_tag": "v1.9.0",
   "ply_rev": "604b32590ffad5cbb82e4afef1d305512d06ae93",
-  "pool_tag": "86fbb2cde9bbc66c8d159909d2f65a5981ea5b50",
+  "pool_rev": "86fbb2cde9bbc66c8d159909d2f65a5981ea5b50",
   "protobuf_rev": "3746c8fd3f2b0147623a8e3db89c3ff4330de760",
-  "pub_rev": "a4bc2dd08630f85a94f506eab037fcaaedb42222",
+  "pub_rev": "6178cdf284baf2345d1ea578b7176a754aa576fe",
   "pub_semver_tag": "v1.4.4",
   "quiver-dart_tag": "2.0.0+1",
   "resource_rev": "f8e37558a1c4f54550aa463b88a6a831e3e33cd6",
@@ -135,25 +140,25 @@
   "shelf_web_socket_tag": "0.2.2+3",
   "source_map_stack_trace_tag": "2.0.0",
   "source_maps-0.9.4_rev": "38524",
-  "source_maps_tag": "87b4fd9027378bbd51b02e9d7df794eee8a82b7a",
+  "source_maps_rev": "87b4fd9027378bbd51b02e9d7df794eee8a82b7a",
   "source_span_tag": "1.7.0",
   "stack_trace_tag": "1.9.3",
   "stagehand_tag": "v3.3.7",
   "stream_channel_tag": "2.0.0",
-  "string_scanner_tag": "a918e7371af6b6e73bfd534ff9da6084741c1f99",
+  "string_scanner_rev": "a918e7371af6b6e73bfd534ff9da6084741c1f99",
   "test_descriptor_tag": "1.1.1",
   "test_process_tag": "1.0.3",
-  "term_glyph_tag": "b3da31e9684a99cfe5f192b89914492018b44da7",
+  "term_glyph_rev": "b3da31e9684a99cfe5f192b89914492018b44da7",
   "test_reflective_loader_tag": "0.1.9",
-  "test_tag": "988e38ff3051f24607ad0aaf4e780835785f2ab5",
+  "test_rev": "988e38ff3051f24607ad0aaf4e780835785f2ab5",
   "tflite_native_rev": "3c777c40608a2a9f1427bfe0028ab48e7116b4c1",
   "typed_data_tag": "1.1.6",
   "usage_tag": "3.4.0",
   "watcher_rev": "fc3c9aae5d31d707b3013b42634dde8d8a1161b4",
   "web_components_rev": "8f57dac273412a7172c8ade6f361b407e2e4ed02",
-  "web_socket_channel_tag": "490061ef0e22d3c8460ad2802f9948219365ad6b",
+  "web_socket_channel_rev": "490061ef0e22d3c8460ad2802f9948219365ad6b",
   "WebCore_rev": "fb11e887f77919450e497344da570d780e078bc8",
-  "yaml_tag": "62e9f6b3a933b1f76dd3007d1a5ce0be8e429b2d",
+  "yaml_rev": "62e9f6b3a933b1f76dd3007d1a5ce0be8e429b2d",
   "zlib_rev": "c44fb7248079cc3d5563b14b3f758aee60d6b415",
   "crashpad_rev": "bf327d8ceb6a669607b0dbab5a83a275d03f99ed",
   "minichromium_rev": "8d641e30a8b12088649606b912c2bc4947419ccc",
@@ -178,6 +183,11 @@
     Var("chromium_git") + "/chromium/llvm-project/cfe/tools/clang-format.git" +
     "@" + Var("clang_format_scripts_rev"),
 
+  Var("dart_root") + "/benchmarks-internal": {
+    "url": Var("dart_internal_git") + "/benchmarks-internal.git" +
+           "@" + Var("benchmarks_internal_rev"),
+    "condition": "checkout_benchmarks_internal",
+  },
   Var("dart_root") + "/tools/sdks": {
       "packages": [{
           "package": "dart/dart-sdk/${{platform}}",
@@ -257,7 +267,7 @@
   Var("dart_root") + "/third_party/WebCore":
       Var("dart_git") + "webcore.git" + "@" + Var("WebCore_rev"),
 
-  Var("dart_root") + "/third_party/mdn/browser-compat-data":
+  Var("dart_root") + "/third_party/mdn/browser-compat-data/src":
       Var('chromium_git') + '/external/github.com/mdn/browser-compat-data' +
       "@" + Var("browser-compat-data_tag"),
 
@@ -273,22 +283,22 @@
       Var("dart_git") + "bazel_worker.git" + "@" + Var("bazel_worker_tag"),
   Var("dart_root") + "/third_party/pkg/benchmark_harness":
       Var("dart_git") + "benchmark_harness.git" + "@" +
-      Var("benchmark_harness_tag"),
+      Var("benchmark_harness_rev"),
   Var("dart_root") + "/third_party/pkg/boolean_selector":
       Var("dart_git") + "boolean_selector.git" +
-      "@" + Var("boolean_selector_tag"),
+      "@" + Var("boolean_selector_rev"),
   Var("dart_root") + "/third_party/pkg/charcode":
-      Var("dart_git") + "charcode.git" + "@" + Var("charcode_tag"),
+      Var("dart_git") + "charcode.git" + "@" + Var("charcode_rev"),
   Var("dart_root") + "/third_party/pkg/cli_util":
       Var("dart_git") + "cli_util.git" + "@" + Var("cli_util_tag"),
   Var("dart_root") + "/third_party/pkg/collection":
-      Var("dart_git") + "collection.git" + "@" + Var("collection_tag"),
+      Var("dart_git") + "collection.git" + "@" + Var("collection_rev"),
   Var("dart_root") + "/third_party/pkg/convert":
-      Var("dart_git") + "convert.git" + "@" + Var("convert_tag"),
+      Var("dart_git") + "convert.git" + "@" + Var("convert_rev"),
   Var("dart_root") + "/third_party/pkg/crypto":
-      Var("dart_git") + "crypto.git" + "@" + Var("crypto_tag"),
+      Var("dart_git") + "crypto.git" + "@" + Var("crypto_rev"),
   Var("dart_root") + "/third_party/pkg/csslib":
-      Var("dart_git") + "csslib.git" + "@" + Var("csslib_tag"),
+      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_tag"),
   Var("dart_root") + "/third_party/pkg/dart2js_info":
@@ -296,22 +306,22 @@
   Var("dart_root") + "/third_party/pkg/dartdoc":
       Var("dart_git") + "dartdoc.git" + "@" + Var("dartdoc_tag"),
   Var("dart_root") + "/third_party/pkg/ffi":
-      Var("dart_git") + "ffi.git" + "@" + Var("ffi_tag"),
+      Var("dart_git") + "ffi.git" + "@" + Var("ffi_rev"),
   Var("dart_root") + "/third_party/pkg/fixnum":
-      Var("dart_git") + "fixnum.git" + "@" + Var("fixnum_tag"),
+      Var("dart_git") + "fixnum.git" + "@" + Var("fixnum_rev"),
   Var("dart_root") + "/third_party/pkg/glob":
-      Var("dart_git") + "glob.git" + "@" + Var("glob_tag"),
+      Var("dart_git") + "glob.git" + "@" + Var("glob_rev"),
   Var("dart_root") + "/third_party/pkg/html":
-      Var("dart_git") + "html.git" + "@" + Var("html_tag"),
+      Var("dart_git") + "html.git" + "@" + Var("html_rev"),
   Var("dart_root") + "/third_party/pkg/http":
-      Var("dart_git") + "http.git" + "@" + Var("http_tag"),
+      Var("dart_git") + "http.git" + "@" + Var("http_rev"),
   Var("dart_root") + "/third_party/pkg_tested/http_io":
     Var("dart_git") + "http_io.git" + "@" + Var("http_io_rev"),
   Var("dart_root") + "/third_party/pkg/http_multi_server":
       Var("dart_git") + "http_multi_server.git" +
       "@" + Var("http_multi_server_rev"),
   Var("dart_root") + "/third_party/pkg/http_parser":
-      Var("dart_git") + "http_parser.git" + "@" + Var("http_parser_tag"),
+      Var("dart_git") + "http_parser.git" + "@" + Var("http_parser_rev"),
   Var("dart_root") + "/third_party/pkg/http_retry":
       Var("dart_git") + "http_retry.git" +
       "@" + Var("http_retry_tag"),
@@ -321,34 +331,34 @@
   Var("dart_root") + "/third_party/pkg/intl":
       Var("dart_git") + "intl.git" + "@" + Var("intl_tag"),
   Var("dart_root") + "/third_party/pkg/json_rpc_2":
-      Var("dart_git") + "json_rpc_2.git" + "@" + Var("json_rpc_2_tag"),
+      Var("dart_git") + "json_rpc_2.git" + "@" + Var("json_rpc_2_rev"),
   Var("dart_root") + "/third_party/pkg/linter":
       Var("dart_git") + "linter.git" + "@" + Var("linter_tag"),
   Var("dart_root") + "/third_party/pkg/logging":
-      Var("dart_git") + "logging.git" + "@" + Var("logging_tag"),
+      Var("dart_git") + "logging.git" + "@" + Var("logging_rev"),
   Var("dart_root") + "/third_party/pkg/markdown":
-      Var("dart_git") + "markdown.git" + "@" + Var("markdown_tag"),
+      Var("dart_git") + "markdown.git" + "@" + Var("markdown_rev"),
   Var("dart_root") + "/third_party/pkg/matcher":
-      Var("dart_git") + "matcher.git" + "@" + Var("matcher_tag"),
+      Var("dart_git") + "matcher.git" + "@" + Var("matcher_rev"),
   Var("dart_root") + "/third_party/pkg/mime":
-      Var("dart_git") + "mime.git" + "@" + Var("mime_tag"),
+      Var("dart_git") + "mime.git" + "@" + Var("mime_rev"),
   Var("dart_root") + "/third_party/pkg/mockito":
-      Var("dart_git") + "mockito.git" + "@" + Var("mockito_tag"),
+      Var("dart_git") + "mockito.git" + "@" + Var("mockito_rev"),
   Var("dart_root") + "/third_party/pkg/mustache":
       Var("dart_git")
       + "external/github.com/xxgreg/mustache"
-      + "@" + Var("mustache_tag"),
+      + "@" + Var("mustache_rev"),
   Var("dart_root") + "/third_party/pkg/oauth2":
       Var("dart_git") + "oauth2.git" + "@" + Var("oauth2_tag"),
   Var("dart_root") + "/third_party/pkg_tested/package_config":
       Var("dart_git") + "package_config.git" +
-      "@" + Var("package_config_tag"),
+      "@" + Var("package_config_rev"),
   Var("dart_root") + "/third_party/pkg/path":
-      Var("dart_git") + "path.git" + "@" + Var("path_tag"),
+      Var("dart_git") + "path.git" + "@" + Var("path_rev"),
   Var("dart_root") + "/third_party/pkg/pedantic":
       Var("dart_git") + "pedantic.git" + "@" + Var("pedantic_tag"),
   Var("dart_root") + "/third_party/pkg/pool":
-      Var("dart_git") + "pool.git" + "@" + Var("pool_tag"),
+      Var("dart_git") + "pool.git" + "@" + Var("pool_rev"),
   Var("dart_root") + "/third_party/pkg/protobuf":
        Var("dart_git") + "protobuf.git" + "@" + Var("protobuf_rev"),
   Var("dart_root") + "/third_party/pkg/pub_semver":
@@ -374,7 +384,7 @@
       Var("dart_git") + "shelf_web_socket.git" +
       "@" + Var("shelf_web_socket_tag"),
   Var("dart_root") + "/third_party/pkg/source_maps":
-      Var("dart_git") + "source_maps.git" + "@" + Var("source_maps_tag"),
+      Var("dart_git") + "source_maps.git" + "@" + Var("source_maps_rev"),
   Var("dart_root") + "/third_party/pkg/source_span":
       Var("dart_git") + "source_span.git" + "@" + Var("source_span_tag"),
   Var("dart_root") + "/third_party/pkg/source_map_stack_trace":
@@ -389,11 +399,11 @@
       "@" + Var("stream_channel_tag"),
   Var("dart_root") + "/third_party/pkg/string_scanner":
       Var("dart_git") + "string_scanner.git" +
-      "@" + Var("string_scanner_tag"),
+      "@" + Var("string_scanner_rev"),
   Var("dart_root") + "/third_party/pkg/term_glyph":
-      Var("dart_git") + "term_glyph.git" + "@" + Var("term_glyph_tag"),
+      Var("dart_git") + "term_glyph.git" + "@" + Var("term_glyph_rev"),
   Var("dart_root") + "/third_party/pkg/test":
-      Var("dart_git") + "test.git" + "@" + Var("test_tag"),
+      Var("dart_git") + "test.git" + "@" + Var("test_rev"),
   Var("dart_root") + "/third_party/pkg/tflite_native":
       Var("dart_git") + "tflite_native.git" + "@" + Var("tflite_native_rev"),
   Var("dart_root") + "/third_party/pkg/test_descriptor":
@@ -414,9 +424,9 @@
       "@" + Var("web_components_rev"),
   Var("dart_root") + "/third_party/pkg/web_socket_channel":
       Var("dart_git") + "web_socket_channel.git" +
-      "@" + Var("web_socket_channel_tag"),
+      "@" + Var("web_socket_channel_rev"),
   Var("dart_root") + "/third_party/pkg/yaml":
-      Var("dart_git") + "yaml.git" + "@" + Var("yaml_tag"),
+      Var("dart_git") + "yaml.git" + "@" + Var("yaml_rev"),
 
   Var("dart_root") + "/buildtools/" + Var("host_os") + "-" + Var("host_cpu") + "/clang": {
       "packages": [
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 4b5138d..85551ac 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -67,11 +67,13 @@
     a test, the test's counterpart (if it exists at all) should be in the CL
     too.
     """
-    DIRS = ["co19", "corelib", "language", "lib", "standalone"]
+    DIRS = ["co19", "corelib", "ffi", "language", "lib", "standalone"]
 
     files = [git_file.LocalPath() for git_file in input_api.AffectedTextFiles()]
     unsynchronized = []
     for file in files:
+        if file.endswith('.status'): continue
+
         for dir in DIRS:
             legacy_dir = "tests/{}_2/".format(dir)
             nnbd_dir = "tests/{}/".format(dir)
@@ -83,19 +85,14 @@
                 counterpart = file.replace(nnbd_dir, legacy_dir)
 
             if counterpart:
-                # Changed one file with a potential counterpart. If it exists
-                # on disc, make sure it is also in the CL.
-                if counterpart not in files and os.path.exists(counterpart):
-                    unsynchronized.append("- {} -> {}".format(
-                        file, counterpart))
+                # Changed one file with a potential counterpart.
+                if counterpart not in files:
+                    missing = '' if os.path.exists(
+                        counterpart) else ' (missing)'
+                    unsynchronized.append("- {} -> {}{}".format(
+                        file, counterpart, missing))
                 break
 
-    # TODO(rnystrom): Currently, we only warn if a test does exist in both
-    # places on disc but only one is touched by a CL. We don't warn for files
-    # that only exist on one side because the migration isn't complete and the
-    # CL may be migrating. Once the migration is complete, consider making
-    # these checks more rigorous.
-
     if unsynchronized:
         return [
             output_api.PresubmitPromptWarning(
diff --git a/benchmarks/BigIntParsePrint/dart2/BigIntParsePrint.dart b/benchmarks/BigIntParsePrint/dart2/BigIntParsePrint.dart
new file mode 100644
index 0000000..fe904ee
--- /dev/null
+++ b/benchmarks/BigIntParsePrint/dart2/BigIntParsePrint.dart
@@ -0,0 +1,318 @@
+// 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:benchmark_harness/benchmark_harness.dart';
+import 'package:fixnum/fixnum.dart';
+
+import 'native_version_dummy.dart'
+    if (dart.library.js) 'native_version_javascript.dart';
+
+// Benckmark BigInt and Int64 formatting and parsing.
+
+// A global sink that is used in the [check] method ensures that the results are
+// not optimized.
+dynamic sink1, sink2;
+
+void check(bool sink2isEven) {
+  if (sink1.codeUnits.last.isEven != sink2isEven) {
+    throw StateError('Inconsistent $sink1 vs $sink2');
+  }
+}
+
+// These benchmarks measure digit-throughput for parsing and formatting.
+//
+// Each benchmark targets processing [requiredDigits] decimal digits, spread
+// over a list of input values. This makes the benchmarks for different integer
+// lengths roughly comparable.  The number is chosen so that most benchmarks
+// have very close to this number of digits. It corresponds to nine 4096-bit
+// integers.
+const requiredDigits = 11106;
+
+class ParseBigIntBenchmark extends BenchmarkBase {
+  final int bits;
+  final BigInt seed;
+  final List<String> strings = [];
+
+  ParseBigIntBenchmark(String name, this.bits)
+      : seed = (BigInt.one << bits) - BigInt.one,
+        super(name);
+
+  void setup() {
+    BigInt b = seed;
+    int totalLength = 0;
+    while (totalLength < requiredDigits) {
+      if (b.bitLength < bits) {
+        b = seed;
+      }
+      String string = b.toString();
+      strings.add(string);
+      totalLength += string.length;
+      b = b - (b >> 8);
+    }
+  }
+
+  void run() {
+    for (String s in strings) {
+      BigInt b = BigInt.parse(s);
+      sink1 = s;
+      sink2 = b;
+    }
+    check(sink2.isEven);
+  }
+}
+
+int int64UnsignedBitLength(Int64 i) => i.isNegative ? 64 : i.bitLength;
+
+class ParseInt64Benchmark extends BenchmarkBase {
+  final int bits;
+  final Int64 seed;
+  final List<String> strings = [];
+
+  ParseInt64Benchmark(String name, this.bits)
+      : seed = (Int64.ONE << bits) - Int64.ONE,
+        super(name);
+
+  void setup() {
+    Int64 b = seed;
+    int totalLength = 0;
+    while (totalLength < requiredDigits) {
+      if (int64UnsignedBitLength(b) < bits) {
+        b = seed;
+      }
+      String string = b.toStringUnsigned();
+      strings.add(string);
+      totalLength += string.length;
+      b = b - b.shiftRightUnsigned(8);
+    }
+  }
+
+  void run() {
+    for (String s in strings) {
+      Int64 b = Int64.parseInt(s);
+      sink1 = s;
+      sink2 = b;
+    }
+    check(sink2.isEven);
+  }
+}
+
+class ParseJsBigIntBenchmark extends BenchmarkBase {
+  final int bits;
+  final Object seed;
+  final List<String> strings = [];
+
+  ParseJsBigIntBenchmark(String name, this.bits)
+      : seed = nativeBigInt.subtract(
+            nativeBigInt.shiftLeft(
+                nativeBigInt.one, nativeBigInt.fromInt(bits)),
+            nativeBigInt.one),
+        super(name);
+
+  void setup() {
+    Object b = seed;
+    int totalLength = 0;
+    while (totalLength < requiredDigits) {
+      if (nativeBigInt.bitLength(b) < bits) {
+        b = seed;
+      }
+      String string = nativeBigInt.toStringMethod(b);
+      strings.add(string);
+      totalLength += string.length;
+      b = nativeBigInt.subtract(
+          b, nativeBigInt.shiftRight(b, nativeBigInt.eight));
+    }
+  }
+
+  void run() {
+    for (String s in strings) {
+      Object b = nativeBigInt.parse(s);
+      sink1 = s;
+      sink2 = b;
+    }
+    check(nativeBigInt.isEven(sink2));
+  }
+}
+
+class FormatBigIntBenchmark extends BenchmarkBase {
+  final int bits;
+  final BigInt seed;
+  final List<BigInt> values = [];
+
+  FormatBigIntBenchmark(String name, this.bits)
+      : seed = (BigInt.one << bits) - BigInt.one,
+        super(name);
+
+  void setup() {
+    BigInt b = seed;
+    int totalLength = 0;
+    while (totalLength < requiredDigits) {
+      if (b.bitLength < bits) {
+        b = seed;
+      }
+      String string = b.toString();
+      values.add(b - BigInt.one); // We add 'one' back later.
+      totalLength += string.length;
+      b = b - (b >> 8);
+    }
+  }
+
+  void run() {
+    for (BigInt b0 in values) {
+      // Instances might cache `toString()`, so use arithmetic to create a new
+      // instance to try to protect against measuring a cached string.
+      BigInt b = b0 + BigInt.one;
+      String s = b.toString();
+      sink1 = s;
+      sink2 = b;
+    }
+    check(sink2.isEven);
+  }
+}
+
+class FormatInt64Benchmark extends BenchmarkBase {
+  final int bits;
+  final Int64 seed;
+  final List<Int64> values = [];
+
+  FormatInt64Benchmark(String name, this.bits)
+      : seed = (Int64.ONE << bits) - Int64.ONE,
+        super(name);
+
+  void setup() {
+    Int64 b = seed;
+    int totalLength = 0;
+    while (totalLength < requiredDigits) {
+      if (int64UnsignedBitLength(b) < bits) {
+        b = seed;
+      }
+      String string = b.toStringUnsigned();
+      values.add(b - Int64.ONE);
+      totalLength += string.length;
+      b = b - b.shiftRightUnsigned(8);
+    }
+  }
+
+  void run() {
+    for (Int64 b0 in values) {
+      // Instances might cache `toString()`, so use arithmetic to create a new
+      // instance to try to protect against measuring a cached string.
+      Int64 b = b0 + Int64.ONE;
+      String s = b.toStringUnsigned();
+      sink1 = s;
+      sink2 = b;
+    }
+    check(sink2.isEven);
+  }
+}
+
+class FormatJsBigIntBenchmark extends BenchmarkBase {
+  final int bits;
+  final Object seed;
+  final List<Object> values = [];
+
+  FormatJsBigIntBenchmark(String name, this.bits)
+      : seed = nativeBigInt.subtract(
+            nativeBigInt.shiftLeft(
+                nativeBigInt.one, nativeBigInt.fromInt(bits)),
+            nativeBigInt.one),
+        super(name);
+
+  void setup() {
+    final one = nativeBigInt.one;
+    Object b = seed;
+    int totalLength = 0;
+    while (totalLength < requiredDigits) {
+      if (nativeBigInt.bitLength(b) < bits) {
+        b = seed;
+      }
+      String string = nativeBigInt.toStringMethod(b);
+      values.add(nativeBigInt.subtract(b, one)); // We add 'one' back later.
+      totalLength += string.length;
+      b = nativeBigInt.subtract(
+          b, nativeBigInt.shiftRight(b, nativeBigInt.eight));
+    }
+  }
+
+  void run() {
+    final one = nativeBigInt.one;
+    for (Object b0 in values) {
+      // Instances might cache `toString()`, so use arithmetic to create a new
+      // instance to try to protect against measuring a cached string.
+      Object b = nativeBigInt.add(b0, one);
+      String s = nativeBigInt.toStringMethod(b);
+      sink1 = s;
+      sink2 = b;
+    }
+    check(nativeBigInt.isEven(sink2));
+  }
+}
+
+/// [DummyBenchmark] instantly returns a fixed 'slow' result.
+class DummyBenchmark extends BenchmarkBase {
+  DummyBenchmark(String name) : super(name);
+  double measure() => 2000 * 1000 * 1.0; // A rate of one run per 2s.
+}
+
+/// Create [ParseJsBigIntBenchmark], or a dummy benchmark if JavaScript BigInt
+/// is not available.  This is to satisfy Golem's constraint that group
+/// benchmarks always produce results for the same set of series.
+BenchmarkBase Function() selectParseNativeBigIntBenchmark(
+    String name, int bits) {
+  return nativeBigInt.enabled
+      ? () => ParseJsBigIntBenchmark(name, bits)
+      : () => DummyBenchmark(name);
+}
+
+/// Create [FormatJsBigIntBenchmark], or a dummy benchmark if JavaScript BigInt
+/// is not available.  This is to satisfy Golem's constraint that group
+/// benchmarks always produce results for the same set of series.
+BenchmarkBase Function() selectFormatNativeBigIntBenchmark(
+    String name, int bits) {
+  return nativeBigInt.enabled
+      ? () => FormatJsBigIntBenchmark(name, bits)
+      : () => DummyBenchmark(name);
+}
+
+main() {
+  final benchmarks = [
+    () => ParseInt64Benchmark('Int64.parse.0009.bits', 9),
+    () => ParseInt64Benchmark('Int64.parse.0032.bits', 32),
+    () => ParseInt64Benchmark('Int64.parse.0064.bits', 64),
+    () => ParseBigIntBenchmark('BigInt.parse.0009.bits', 9),
+    () => ParseBigIntBenchmark('BigInt.parse.0032.bits', 32),
+    () => ParseBigIntBenchmark('BigInt.parse.0064.bits', 64),
+    () => ParseBigIntBenchmark('BigInt.parse.0256.bits', 256),
+    () => ParseBigIntBenchmark('BigInt.parse.1024.bits', 1024),
+    () => ParseBigIntBenchmark('BigInt.parse.4096.bits', 4096),
+    selectParseNativeBigIntBenchmark('JsBigInt.parse.0009.bits', 9),
+    selectParseNativeBigIntBenchmark('JsBigInt.parse.0032.bits', 32),
+    selectParseNativeBigIntBenchmark('JsBigInt.parse.0064.bits', 64),
+    selectParseNativeBigIntBenchmark('JsBigInt.parse.0256.bits', 256),
+    selectParseNativeBigIntBenchmark('JsBigInt.parse.1024.bits', 1024),
+    selectParseNativeBigIntBenchmark('JsBigInt.parse.4096.bits', 4096),
+    () => FormatInt64Benchmark('Int64.toString.0009.bits', 9),
+    () => FormatInt64Benchmark('Int64.toString.0032.bits', 32),
+    () => FormatInt64Benchmark('Int64.toString.0064.bits', 64),
+    () => FormatBigIntBenchmark('BigInt.toString.0009.bits', 9),
+    () => FormatBigIntBenchmark('BigInt.toString.0032.bits', 32),
+    () => FormatBigIntBenchmark('BigInt.toString.0064.bits', 64),
+    () => FormatBigIntBenchmark('BigInt.toString.0256.bits', 256),
+    () => FormatBigIntBenchmark('BigInt.toString.1024.bits', 1024),
+    () => FormatBigIntBenchmark('BigInt.toString.4096.bits', 4096),
+    selectFormatNativeBigIntBenchmark('JsBigInt.toString.0009.bits', 9),
+    selectFormatNativeBigIntBenchmark('JsBigInt.toString.0032.bits', 32),
+    selectFormatNativeBigIntBenchmark('JsBigInt.toString.0064.bits', 64),
+    selectFormatNativeBigIntBenchmark('JsBigInt.toString.0256.bits', 256),
+    selectFormatNativeBigIntBenchmark('JsBigInt.toString.1024.bits', 1024),
+    selectFormatNativeBigIntBenchmark('JsBigInt.toString.4096.bits', 4096),
+  ];
+
+  // Warm up all benchmarks to ensure consistent behavious of shared code.
+  benchmarks.forEach((bm) => bm()
+    ..setup()
+    ..run()
+    ..run());
+
+  benchmarks.forEach((bm) => bm().report());
+}
diff --git a/benchmarks/BigIntParsePrint/dart2/native_version.dart b/benchmarks/BigIntParsePrint/dart2/native_version.dart
new file mode 100644
index 0000000..cfc64fa
--- /dev/null
+++ b/benchmarks/BigIntParsePrint/dart2/native_version.dart
@@ -0,0 +1,23 @@
+// 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.
+
+abstract class NativeBigIntMethods {
+  bool get enabled;
+
+  Object parse(String string);
+  String toStringMethod(Object value);
+
+  Object fromInt(int i);
+
+  Object get one;
+  Object get eight;
+
+  int bitLength(Object value);
+  bool isEven(Object value);
+
+  Object add(Object left, Object right);
+  Object shiftLeft(Object value, Object count);
+  Object shiftRight(Object value, Object count);
+  Object subtract(Object left, Object right);
+}
diff --git a/benchmarks/BigIntParsePrint/dart2/native_version_dummy.dart b/benchmarks/BigIntParsePrint/dart2/native_version_dummy.dart
new file mode 100644
index 0000000..3858e92
--- /dev/null
+++ b/benchmarks/BigIntParsePrint/dart2/native_version_dummy.dart
@@ -0,0 +1,31 @@
+// 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 'native_version.dart';
+
+const NativeBigIntMethods nativeBigInt = _DummyMethods();
+
+class _DummyMethods implements NativeBigIntMethods {
+  const _DummyMethods();
+
+  bool get enabled => false;
+
+  static Object bad(String message) => UnimplementedError(message);
+
+  Object parse(String string) => throw bad('parse');
+  String toStringMethod(Object value) => throw bad('toStringMethod');
+
+  Object fromInt(int i) => throw bad('fromInt');
+
+  Object get one => throw bad('one');
+  Object get eight => throw bad('eight');
+
+  int bitLength(Object value) => throw bad('bitLength');
+  bool isEven(Object value) => throw bad('isEven');
+
+  Object add(Object left, Object right) => throw bad('add');
+  Object shiftLeft(Object value, Object count) => throw bad('shiftLeft');
+  Object shiftRight(Object value, Object count) => throw bad('shiftRight');
+  Object subtract(Object left, Object right) => throw bad('subtract');
+}
diff --git a/benchmarks/BigIntParsePrint/dart2/native_version_javascript.dart b/benchmarks/BigIntParsePrint/dart2/native_version_javascript.dart
new file mode 100644
index 0000000..fb7e83a
--- /dev/null
+++ b/benchmarks/BigIntParsePrint/dart2/native_version_javascript.dart
@@ -0,0 +1,111 @@
+// 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 'native_version.dart';
+import 'package:js/js.dart';
+
+const NativeBigIntMethods nativeBigInt = _Methods();
+
+@JS('eval')
+external Object _eval(String s);
+
+@JS('bigint_parse')
+external Object _parse(String s);
+
+@JS('bigint_toString')
+external String _toStringMethod(Object o);
+
+@JS('bigint_bitLength')
+external int _bitLength(Object o);
+
+@JS('bigint_isEven')
+external bool _isEven(Object o);
+
+@JS('bigint_add')
+external Object _add(Object left, Object right);
+
+@JS('bigint_shiftLeft')
+external Object _shiftLeft(Object o, Object i);
+
+@JS('bigint_shiftRight')
+external Object _shiftRight(Object o, Object i);
+
+@JS('bigint_subtract')
+external Object _subtract(Object left, Object right);
+
+@JS('bigint_fromInt')
+external Object _fromInt(int i);
+
+class _Methods implements NativeBigIntMethods {
+  static bool _initialized = false;
+  static bool _enabled = false;
+
+  const _Methods();
+
+  bool get enabled {
+    if (!_initialized) {
+      _initialize();
+    }
+    return _enabled;
+  }
+
+  void _initialize() {
+    try {
+      _setup();
+      _enabled = true;
+    } catch (e) {
+      // We get here if the JavaScript implementation does not have BigInt (or
+      // run in a stand-alone JavaScript implementation without the right
+      // 'preamble').
+      //
+      // Print so we can see what failed.
+      print(e);
+    }
+  }
+
+  static Object bad(String message) {
+    throw UnimplementedError(message);
+  }
+
+  Object parse(String string) => _parse(string);
+
+  String toStringMethod(Object value) => _toStringMethod(value);
+
+  Object fromInt(int i) => _fromInt(i);
+
+  Object get one => _one;
+
+  Object get eight => _eight;
+
+  int bitLength(Object value) => _bitLength(value);
+
+  bool isEven(Object value) => _isEven(value);
+
+  Object add(Object left, Object right) => _add(left, right);
+  Object shiftLeft(Object value, Object count) => _shiftLeft(value, count);
+  Object shiftRight(Object value, Object count) => _shiftRight(value, count);
+  Object subtract(Object left, Object right) => _subtract(left, right);
+}
+
+void _setup() {
+  _one = _eval('1n'); // Throws if JavaScript does not have BigInt.
+  _eight = _eval('8n');
+
+  _eval('self.bigint_parse = function parse(s) { return BigInt(s); }');
+  _eval('self.bigint_toString = function toString(b) { return b.toString(); }');
+  _eval('self.bigint_add = function add(a, b) { return a + b; }');
+  _eval('self.bigint_shiftLeft = function shl(v, i) { return v << i; }');
+  _eval('self.bigint_shiftRight = function shr(v, i) { return v >> i; }');
+  _eval('self.bigint_subtract = function subtract(a, b) { return a - b; }');
+  _eval('self.bigint_fromInt = function fromInt(i) { return BigInt(i); }');
+
+  _eval('self.bigint_bitLength = function bitLength(b) {'
+      'return b == 0 ? 0 : (b < 0 ? ~b : b).toString(2).length;'
+      '}');
+  _eval('self.bigint_isEven = function isEven(b) { return (b & 1n) == 0n; }');
+}
+
+// `dynamic` to allow null initialization pre- and post- NNBD.
+dynamic _one;
+dynamic _eight;
diff --git a/benchmarks/Calls/dart/Calls.dart b/benchmarks/Calls/dart/Calls.dart
index 7d3ca07..ac78efe 100644
--- a/benchmarks/Calls/dart/Calls.dart
+++ b/benchmarks/Calls/dart/Calls.dart
@@ -86,17 +86,17 @@
           () => performAwaitForIterationPolymorphic(generateNumbersManualAsync))
       .report();
 
-  await SyncCallBenchmark('Calls.SyncCall', performSyncCalls).report();
-  await SyncCallBenchmark('Calls.SyncCallClosureTarget',
+  SyncCallBenchmark('Calls.SyncCall', performSyncCalls).report();
+  SyncCallBenchmark('Calls.SyncCallClosureTarget',
       () => performSyncCallsClosureTarget(returnSync)).report();
-  await SyncCallBenchmark('Calls.SyncCallInstanceTargetPolymorphic',
+  SyncCallBenchmark('Calls.SyncCallInstanceTargetPolymorphic',
       () => performSyncCallsInstanceTargetPolymorphic(target)).report();
 
-  await SyncCallBenchmark('Calls.IterableSyncStarIterablePolymorphic',
+  SyncCallBenchmark('Calls.IterableSyncStarIterablePolymorphic',
       () => performSyncIterationPolymorphic(generateNumbersSyncStar)).report();
-  await SyncCallBenchmark('Calls.IterableManualIterablePolymorphic',
+  SyncCallBenchmark('Calls.IterableManualIterablePolymorphic',
       () => performSyncIterationPolymorphic(generateNumbersManual)).report();
-  await SyncCallBenchmark(
+  SyncCallBenchmark(
       'Calls.IterableManualIterablePolymorphicManyYields',
       () => performSyncIterationPolymorphic(
           generateNumbersSyncStarManyYields)).report();
@@ -185,52 +185,93 @@
 
 @pragma('vm:never-inline')
 @pragma('dart2js:noInline')
-Future<int> performAwaitAsyncCallsInstanceTargetPolymorphicManyAwaits(Target t) async {
+Future<int> performAwaitAsyncCallsInstanceTargetPolymorphicManyAwaits(
+    Target t) async {
   int sum = 0;
   int i = 0;
 
   final int blockLimit = iterationLimitAsync - (iterationLimitAsync % 80);
   while (i < blockLimit) {
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
-    sum += await t.returnAsync(i++); sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
   }
 
   while (i < iterationLimitAsync) {
@@ -385,26 +426,146 @@
 
   final int blockLimit = limit - (limit % (20 * 7));
   while (i < blockLimit) {
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
   }
 
   while (i < limit) {
@@ -419,26 +580,146 @@
 
   final int blockLimit = limit - (limit % (20 * 7));
   while (i < blockLimit) {
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
-    yield i++; yield i++; yield i++; yield i++; yield i++; yield i++; yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
   }
 
   while (i < limit) {
diff --git a/benchmarks/Calls/dart2/Calls.dart b/benchmarks/Calls/dart2/Calls.dart
new file mode 100644
index 0000000..ac78efe
--- /dev/null
+++ b/benchmarks/Calls/dart2/Calls.dart
@@ -0,0 +1,855 @@
+// 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.
+
+// Micro-benchmarks for sync/sync*/async/async* functionality.
+
+import "dart:async";
+
+const int iterationLimitAsync = 200;
+const int sumOfIterationLimitAsync =
+    iterationLimitAsync * (iterationLimitAsync - 1) ~/ 2;
+
+const int iterationLimitSync = 5000;
+const int sumOfIterationLimitSync =
+    iterationLimitSync * (iterationLimitSync - 1) ~/ 2;
+
+main() async {
+  final target = Target();
+  final target2 = Target2();
+  final target3 = Target3();
+
+  // Ensure the call sites will have another target in the ICData.
+  performAwaitCallsClosureTargetPolymorphic(returnAsync);
+  performAwaitCallsClosureTargetPolymorphic(returnFuture);
+  performAwaitCallsClosureTargetPolymorphic(returnFutureOr);
+  performAwaitAsyncCallsInstanceTargetPolymorphic(target);
+  performAwaitAsyncCallsInstanceTargetPolymorphic(target2);
+  performAwaitAsyncCallsInstanceTargetPolymorphic(target3);
+  performAwaitFutureCallsInstanceTargetPolymorphic(target);
+  performAwaitFutureCallsInstanceTargetPolymorphic(target2);
+  performAwaitFutureCallsInstanceTargetPolymorphic(target3);
+  performAwaitFutureOrCallsInstanceTargetPolymorphic(target);
+  performAwaitFutureOrCallsInstanceTargetPolymorphic(target2);
+  performAwaitFutureOrCallsInstanceTargetPolymorphic(target3);
+  performSyncCallsInstanceTargetPolymorphic(target);
+  performSyncCallsInstanceTargetPolymorphic(target2);
+  performSyncCallsInstanceTargetPolymorphic(target3);
+  performAwaitAsyncCallsInstanceTargetPolymorphicManyAwaits(target);
+  performAwaitAsyncCallsInstanceTargetPolymorphicManyAwaits(target2);
+  performAwaitAsyncCallsInstanceTargetPolymorphicManyAwaits(target3);
+
+  performAwaitForIterationPolymorphic(generateNumbersAsyncStar);
+  performAwaitForIterationPolymorphic(generateNumbersAsyncStar2);
+  performAwaitForIterationPolymorphic(generateNumbersManualAsync);
+  performAwaitForIterationPolymorphic(generateNumbersAsyncStarManyYields);
+  performSyncIterationPolymorphic(generateNumbersSyncStar);
+  performSyncIterationPolymorphic(generateNumbersSyncStar2);
+  performSyncIterationPolymorphic(generateNumbersManual);
+  performSyncIterationPolymorphic(generateNumbersSyncStarManyYields);
+
+  await AsyncCallBenchmark('Calls.AwaitAsyncCall', performAwaitAsyncCalls)
+      .report();
+  await AsyncCallBenchmark('Calls.AwaitAsyncCallClosureTargetPolymorphic',
+      () => performAwaitCallsClosureTargetPolymorphic(returnAsync)).report();
+  await AsyncCallBenchmark('Calls.AwaitAsyncCallInstanceTargetPolymorphic',
+      () => performAwaitAsyncCallsInstanceTargetPolymorphic(target)).report();
+
+  await AsyncCallBenchmark('Calls.AwaitFutureCall', performAwaitFutureCalls)
+      .report();
+  await AsyncCallBenchmark('Calls.AwaitFutureCallClosureTargetPolymorphic',
+      () => performAwaitCallsClosureTargetPolymorphic(returnFuture)).report();
+  await AsyncCallBenchmark('Calls.AwaitFutureCallInstanceTargetPolymorphic',
+      () => performAwaitFutureCallsInstanceTargetPolymorphic(target)).report();
+
+  await AsyncCallBenchmark('Calls.AwaitFutureOrCall', performAwaitFutureOrCalls)
+      .report();
+  await AsyncCallBenchmark('Calls.AwaitFutureOrCallClosureTargetPolymorphic',
+      () => performAwaitCallsClosureTargetPolymorphic(returnFutureOr)).report();
+  await AsyncCallBenchmark('Calls.AwaitFutureOrCallInstanceTargetPolymorphic',
+          () => performAwaitFutureOrCallsInstanceTargetPolymorphic(target))
+      .report();
+  await AsyncCallBenchmark(
+          'Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits',
+          () =>
+              performAwaitAsyncCallsInstanceTargetPolymorphicManyAwaits(target))
+      .report();
+
+  await AsyncCallBenchmark('Calls.AwaitForAsyncStarStreamPolymorphic',
+          () => performAwaitForIterationPolymorphic(generateNumbersAsyncStar))
+      .report();
+  await AsyncCallBenchmark(
+      'Calls.AwaitForAsyncStarStreamPolymorphicManyYields',
+      () => performAwaitForIterationPolymorphic(
+          generateNumbersAsyncStarManyYields)).report();
+  await AsyncCallBenchmark('Calls.AwaitForManualStreamPolymorphic',
+          () => performAwaitForIterationPolymorphic(generateNumbersManualAsync))
+      .report();
+
+  SyncCallBenchmark('Calls.SyncCall', performSyncCalls).report();
+  SyncCallBenchmark('Calls.SyncCallClosureTarget',
+      () => performSyncCallsClosureTarget(returnSync)).report();
+  SyncCallBenchmark('Calls.SyncCallInstanceTargetPolymorphic',
+      () => performSyncCallsInstanceTargetPolymorphic(target)).report();
+
+  SyncCallBenchmark('Calls.IterableSyncStarIterablePolymorphic',
+      () => performSyncIterationPolymorphic(generateNumbersSyncStar)).report();
+  SyncCallBenchmark('Calls.IterableManualIterablePolymorphic',
+      () => performSyncIterationPolymorphic(generateNumbersManual)).report();
+  SyncCallBenchmark(
+      'Calls.IterableManualIterablePolymorphicManyYields',
+      () => performSyncIterationPolymorphic(
+          generateNumbersSyncStarManyYields)).report();
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Future<int> performAwaitCallsClosureTargetPolymorphic(
+    FutureOr<int> fun(int count)) async {
+  int sum = 0;
+  for (int i = 0; i < iterationLimitAsync; ++i) {
+    sum += await fun(i);
+  }
+  if (sum != sumOfIterationLimitAsync) throw 'BUG';
+  return iterationLimitAsync;
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Future<int> performAwaitAsyncCallsInstanceTargetPolymorphic(
+    Target target) async {
+  int sum = 0;
+  for (int i = 0; i < iterationLimitAsync; ++i) {
+    sum += await target.returnAsync(i);
+  }
+  if (sum != sumOfIterationLimitAsync) throw 'BUG';
+  return iterationLimitAsync;
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Future<int> performAwaitFutureCallsInstanceTargetPolymorphic(
+    Target target) async {
+  int sum = 0;
+  for (int i = 0; i < iterationLimitAsync; ++i) {
+    sum += await target.returnFuture(i);
+  }
+  if (sum != sumOfIterationLimitAsync) throw 'BUG';
+  return iterationLimitAsync;
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Future<int> performAwaitFutureOrCallsInstanceTargetPolymorphic(
+    Target target) async {
+  int sum = 0;
+  for (int i = 0; i < iterationLimitAsync; ++i) {
+    sum += await target.returnFutureOr(i);
+  }
+  if (sum != sumOfIterationLimitAsync) throw 'BUG';
+  return iterationLimitAsync;
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Future<int> performAwaitAsyncCalls() async {
+  int sum = 0;
+  for (int i = 0; i < iterationLimitAsync; ++i) {
+    sum += await returnAsync(i);
+  }
+  if (sum != sumOfIterationLimitAsync) throw 'BUG';
+  return iterationLimitAsync;
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Future<int> performAwaitFutureCalls() async {
+  int sum = 0;
+  for (int i = 0; i < iterationLimitAsync; ++i) {
+    sum += await returnFuture(i);
+  }
+  if (sum != sumOfIterationLimitAsync) throw 'BUG';
+  return iterationLimitAsync;
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Future<int> performAwaitFutureOrCalls() async {
+  int sum = 0;
+  for (int i = 0; i < iterationLimitAsync; ++i) {
+    sum += await returnFutureOr(i);
+  }
+  if (sum != sumOfIterationLimitAsync) throw 'BUG';
+  return iterationLimitAsync;
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Future<int> performAwaitAsyncCallsInstanceTargetPolymorphicManyAwaits(
+    Target t) async {
+  int sum = 0;
+  int i = 0;
+
+  final int blockLimit = iterationLimitAsync - (iterationLimitAsync % 80);
+  while (i < blockLimit) {
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+    sum += await t.returnAsync(i++);
+  }
+
+  while (i < iterationLimitAsync) {
+    sum += await t.returnAsync(i++);
+  }
+
+  if (sum != sumOfIterationLimitAsync) throw 'BUG';
+
+  return iterationLimitAsync;
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Future<int> performAwaitForIterationPolymorphic(
+    Stream<int> fun(int count)) async {
+  int sum = 0;
+  await for (int value in fun(iterationLimitAsync)) {
+    sum += value;
+  }
+  if (sum != sumOfIterationLimitAsync) throw 'BUG';
+  return iterationLimitAsync;
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+int performSyncCallsClosureTarget(int fun(int count)) {
+  int sum = 0;
+  for (int i = 0; i < iterationLimitSync; ++i) {
+    sum += fun(i);
+  }
+  if (sum != sumOfIterationLimitSync) throw 'BUG';
+  return iterationLimitSync;
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+int performSyncCallsInstanceTargetPolymorphic(Target target) {
+  int sum = 0;
+  for (int i = 0; i < iterationLimitSync; ++i) {
+    sum += target.returnSync(i);
+  }
+  if (sum != sumOfIterationLimitSync) throw 'BUG';
+  return iterationLimitSync;
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+int performSyncCalls() {
+  int sum = 0;
+  for (int i = 0; i < iterationLimitSync; ++i) {
+    sum += returnSync(i);
+  }
+  if (sum != sumOfIterationLimitSync) throw 'BUG';
+  return iterationLimitSync;
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+int performSyncIterationPolymorphic(Iterable<int> fun(int count)) {
+  int sum = 0;
+  for (int value in fun(iterationLimitSync)) {
+    sum += value;
+  }
+  if (sum != sumOfIterationLimitSync) throw 'BUG';
+  return iterationLimitSync;
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+FutureOr<int> returnFutureOr(int i) => i;
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Future<int> returnFuture(int i) => Future.value(i);
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Future<int> returnAsync(int i) async => i;
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Stream<int> generateNumbersAsyncStar(int limit) async* {
+  for (int i = 0; i < limit; ++i) {
+    yield i;
+  }
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Stream<int> generateNumbersAsyncStar2(int limit) async* {
+  for (int i = 0; i < limit; ++i) {
+    yield i;
+  }
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Stream<int> generateNumbersManualAsync(int limit) {
+  int current = 0;
+  StreamController<int> controller = StreamController(sync: true);
+  void emit() {
+    while (true) {
+      if (controller.isPaused || !controller.hasListener) return;
+      if (current < limit) {
+        controller.add(current++);
+      } else {
+        controller.close();
+        return;
+      }
+    }
+  }
+
+  void run() {
+    scheduleMicrotask(emit);
+  }
+
+  controller.onListen = run;
+  controller.onResume = run;
+
+  return controller.stream;
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+int returnSync(int i) => i;
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Iterable<int> generateNumbersSyncStar(int limit) sync* {
+  for (int i = 0; i < limit; ++i) {
+    yield i;
+  }
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Iterable<int> generateNumbersSyncStar2(int limit) sync* {
+  for (int i = 0; i < limit; ++i) {
+    yield i;
+  }
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Iterable<int> generateNumbersManual(int limit) =>
+    Iterable<int>.generate(limit, (int i) => i);
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Iterable<int> generateNumbersSyncStarManyYields(int limit) sync* {
+  int i = 0;
+
+  final int blockLimit = limit - (limit % (20 * 7));
+  while (i < blockLimit) {
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+  }
+
+  while (i < limit) {
+    yield i++;
+  }
+}
+
+@pragma('vm:never-inline')
+@pragma('dart2js:noInline')
+Stream<int> generateNumbersAsyncStarManyYields(int limit) async* {
+  int i = 0;
+
+  final int blockLimit = limit - (limit % (20 * 7));
+  while (i < blockLimit) {
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+    yield i++;
+  }
+
+  while (i < limit) {
+    yield i++;
+  }
+}
+
+class Target {
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  FutureOr<int> returnFutureOr(int i) => i;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  Future<int> returnFuture(int i) => Future.value(i);
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  Future<int> returnAsync(int i) async => i;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  int returnSync(int i) => i;
+}
+
+class Target2 extends Target {
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  FutureOr<int> returnFutureOr(int i) => i;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  Future<int> returnFuture(int i) => Future.value(i);
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  Future<int> returnAsync(int i) async => i;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  int returnSync(int i) => i;
+}
+
+class Target3 extends Target {
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  FutureOr<int> returnFutureOr(int i) => i;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  Future<int> returnFuture(int i) => Future.value(i);
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  Future<int> returnAsync(int i) async => i;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  int returnSync(int i) => i;
+}
+
+typedef PerformSyncCallsFunction = int Function();
+typedef PerformAsyncCallsFunction = Future<int> Function();
+
+class SyncCallBenchmark {
+  final String name;
+  final PerformSyncCallsFunction performCalls;
+
+  SyncCallBenchmark(this.name, this.performCalls);
+
+  // Returns the number of nanoseconds per call.
+  double measureFor(Duration duration) {
+    final sw = Stopwatch()..start();
+    final durationInMicroseconds = duration.inMicroseconds;
+
+    int numberOfCalls = 0;
+    int totalMicroseconds = 0;
+    do {
+      numberOfCalls += performCalls();
+      totalMicroseconds = sw.elapsedMicroseconds;
+    } while (totalMicroseconds < durationInMicroseconds);
+
+    final int totalNanoseconds = sw.elapsed.inMicroseconds * 1000;
+    return totalNanoseconds / numberOfCalls;
+  }
+
+  // Runs warmup phase, runs benchmark and reports result.
+  void report() {
+    // Warmup for 200 ms.
+    measureFor(const Duration(milliseconds: 100));
+
+    // Run benchmark for 2 seconds.
+    final double nsPerCall = measureFor(const Duration(seconds: 2));
+
+    // Report result.
+    print("$name(RunTimeRaw): $nsPerCall ns.");
+  }
+}
+
+class AsyncCallBenchmark {
+  final String name;
+  final PerformAsyncCallsFunction performCalls;
+
+  AsyncCallBenchmark(this.name, this.performCalls);
+
+  // Returns the number of nanoseconds per call.
+  Future<double> measureFor(Duration duration) async {
+    final sw = Stopwatch()..start();
+    final durationInMicroseconds = duration.inMicroseconds;
+
+    int numberOfCalls = 0;
+    int totalMicroseconds = 0;
+    do {
+      numberOfCalls += await performCalls();
+      totalMicroseconds = sw.elapsedMicroseconds;
+    } while (totalMicroseconds < durationInMicroseconds);
+
+    final int totalNanoseconds = sw.elapsed.inMicroseconds * 1000;
+    return totalNanoseconds / numberOfCalls;
+  }
+
+  // Runs warmup phase, runs benchmark and reports result.
+  Future report() async {
+    // Warmup for 100 ms.
+    await measureFor(const Duration(milliseconds: 100));
+
+    // Run benchmark for 2 seconds.
+    final double nsPerCall = await measureFor(const Duration(seconds: 2));
+
+    // Report result.
+    print("$name(RunTimeRaw): $nsPerCall ns.");
+  }
+}
diff --git a/benchmarks/Example/dart2/Example.dart b/benchmarks/Example/dart2/Example.dart
new file mode 100644
index 0000000..451124b
--- /dev/null
+++ b/benchmarks/Example/dart2/Example.dart
@@ -0,0 +1,22 @@
+// 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:benchmark_harness/benchmark_harness.dart';
+
+class Example extends BenchmarkBase {
+  const Example() : super("Example");
+
+  // The benchmark code.
+  void run() {}
+
+  // Not measured setup code executed prior to the benchmark runs.
+  void setup() {}
+
+  // Not measures teardown code executed after the benchark runs.
+  void teardown() {}
+}
+
+main() {
+  const Example().report();
+}
diff --git a/benchmarks/FfiBoringssl/dart2/FfiBoringssl.dart b/benchmarks/FfiBoringssl/dart2/FfiBoringssl.dart
new file mode 100644
index 0000000..104588e
--- /dev/null
+++ b/benchmarks/FfiBoringssl/dart2/FfiBoringssl.dart
@@ -0,0 +1,141 @@
+// 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.
+
+// Macro-benchmark for ffi with boringssl.
+
+import 'dart:convert';
+import 'dart:ffi';
+import 'dart:typed_data';
+
+import 'package:benchmark_harness/benchmark_harness.dart';
+import 'package:ffi/ffi.dart';
+
+import 'digest.dart';
+import 'types.dart';
+
+//
+// BoringSSL functions
+//
+
+Uint8List inventData(int length) {
+  final result = Uint8List(length);
+  for (int i = 0; i < length; i++) {
+    result[i] = i % 256;
+  }
+  return result;
+}
+
+Uint8List toUint8List(Bytes bytes, int length) {
+  final result = Uint8List(length);
+  final uint8bytes = bytes.asUint8Pointer();
+  for (int i = 0; i < length; i++) {
+    result[i] = uint8bytes[i];
+  }
+  return result;
+}
+
+void copyFromUint8ListToTarget(Uint8List source, Data target) {
+  final int length = source.length;
+  final uint8target = target.asUint8Pointer();
+  for (int i = 0; i < length; i++) {
+    uint8target[i] = source[i];
+  }
+}
+
+String hash(Pointer<Data> data, int length, Pointer<EVP_MD> hashAlgorithm) {
+  final context = EVP_MD_CTX_new();
+  EVP_DigestInit(context, hashAlgorithm);
+  EVP_DigestUpdate(context, data, length);
+  final int resultSize = EVP_MD_CTX_size(context);
+  final Pointer<Bytes> result = allocate<Uint8>(count: resultSize).cast();
+  EVP_DigestFinal(context, result, nullptr);
+  EVP_MD_CTX_free(context);
+  final String hash = base64Encode(toUint8List(result.ref, resultSize));
+  free(result);
+  return hash;
+}
+
+//
+// Benchmark fixtures.
+//
+
+// Number of repeats: 1 && Length in bytes: 10000000
+//  * CPU: Intel(R) Xeon(R) Gold 6154
+//    * Architecture: x64
+//      * 23000 - 52000000 us (without optimizations)
+//      * 23000 - 30000 us (with optimizations)
+const int L = 1000; // Length of data in bytes.
+
+final hashAlgorithm = EVP_sha512();
+
+// Hash of generated data of `L` bytes with `hashAlgorithm`.
+const String expectedHash =
+    "bNLtqb+cBZcSkCmwBUuB5DP2uLe0madetwXv10usGUFJg1sdGhTEi+aW5NWIRW1RKiLq56obV74rVurn014Iyw==";
+
+/// This benchmark runs a digest algorithm on data residing in C memory.
+///
+/// This benchmark is intended as macro benchmark with a realistic workload.
+class DigestCMemory extends BenchmarkBase {
+  DigestCMemory() : super("FfiBoringssl.DigestCMemory");
+
+  Pointer<Data> data; // Data in C memory that we want to digest.
+
+  void setup() {
+    data = allocate<Uint8>(count: L).cast();
+    copyFromUint8ListToTarget(inventData(L), data.ref);
+    hash(data, L, hashAlgorithm);
+  }
+
+  void teardown() {
+    free(data);
+  }
+
+  void run() {
+    final String result = hash(data, L, hashAlgorithm);
+    if (result != expectedHash) {
+      throw Exception("$name: Unexpected result: $result");
+    }
+  }
+}
+
+/// This benchmark runs a digest algorithm on data residing in Dart memory.
+///
+/// This benchmark is intended as macro benchmark with a realistic workload.
+class DigestDartMemory extends BenchmarkBase {
+  DigestDartMemory() : super("FfiBoringssl.DigestDartMemory");
+
+  Uint8List data; // Data in C memory that we want to digest.
+
+  void setup() {
+    data = inventData(L);
+    final Pointer<Data> dataInC = allocate<Uint8>(count: L).cast();
+    copyFromUint8ListToTarget(data, dataInC.ref);
+    hash(dataInC, L, hashAlgorithm);
+    free(dataInC);
+  }
+
+  void teardown() {}
+
+  void run() {
+    final Pointer<Data> dataInC = allocate<Uint8>(count: L).cast();
+    copyFromUint8ListToTarget(data, dataInC.ref);
+    final String result = hash(dataInC, L, hashAlgorithm);
+    free(dataInC);
+    if (result != expectedHash) {
+      throw Exception("$name: Unexpected result: $result");
+    }
+  }
+}
+
+//
+// Main driver.
+//
+
+main() {
+  final benchmarks = [
+    () => DigestCMemory(),
+    () => DigestDartMemory(),
+  ];
+  benchmarks.forEach((benchmark) => benchmark().report());
+}
diff --git a/benchmarks/FfiBoringssl/dart2/digest.dart b/benchmarks/FfiBoringssl/dart2/digest.dart
new file mode 100644
index 0000000..655e12f
--- /dev/null
+++ b/benchmarks/FfiBoringssl/dart2/digest.dart
@@ -0,0 +1,99 @@
+// 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:ffi';
+import 'dart:io';
+
+import 'dlopen_helper.dart';
+import 'types.dart';
+
+// See:
+// https://commondatastorage.googleapis.com/chromium-boringssl-docs/digest.h.html
+
+DynamicLibrary openSsl() {
+  // Force load crypto.
+  dlopenPlatformSpecific("crypto",
+      path: Platform.script.resolve("../native/out/").path);
+  DynamicLibrary ssl = dlopenPlatformSpecific("ssl",
+      path: Platform.script.resolve("../native/out/").path);
+  return ssl;
+}
+
+final DynamicLibrary ssl = openSsl();
+
+/// The following functions return EVP_MD objects that implement the named
+/// hash function.
+///
+/// ```c
+/// const EVP_MD *EVP_sha512(void);
+/// ```
+final Pointer<EVP_MD> Function() EVP_sha512 =
+    ssl.lookupFunction<Pointer<EVP_MD> Function(), Pointer<EVP_MD> Function()>(
+        'EVP_sha512');
+
+/// EVP_MD_CTX_new allocates and initialises a fresh EVP_MD_CTX and returns it,
+/// or NULL on allocation failure. The caller must use EVP_MD_CTX_free to
+/// release the resulting object.
+///
+/// ```c
+/// EVP_MD_CTX *EVP_MD_CTX_new(void);
+/// ```
+final Pointer<EVP_MD_CTX> Function() EVP_MD_CTX_new = ssl.lookupFunction<
+    Pointer<EVP_MD_CTX> Function(),
+    Pointer<EVP_MD_CTX> Function()>('EVP_MD_CTX_new');
+
+/// EVP_MD_CTX_free calls EVP_MD_CTX_cleanup and then frees ctx itself.
+///
+/// ```c
+/// void EVP_MD_CTX_free(EVP_MD_CTX *ctx);
+/// ```
+final void Function(Pointer<EVP_MD_CTX>) EVP_MD_CTX_free = ssl.lookupFunction<
+    Void Function(Pointer<EVP_MD_CTX>),
+    void Function(Pointer<EVP_MD_CTX>)>('EVP_MD_CTX_free');
+
+/// EVP_DigestInit acts like EVP_DigestInit_ex except that ctx is initialised
+/// before use.
+///
+/// ```c
+/// int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
+/// ```
+final int Function(Pointer<EVP_MD_CTX>, Pointer<EVP_MD>) EVP_DigestInit =
+    ssl.lookupFunction<Int32 Function(Pointer<EVP_MD_CTX>, Pointer<EVP_MD>),
+        int Function(Pointer<EVP_MD_CTX>, Pointer<EVP_MD>)>('EVP_DigestInit');
+
+/// EVP_DigestUpdate hashes len bytes from data into the hashing operation
+/// in ctx. It returns one.
+///
+/// ```c
+/// int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *data,
+///                                     size_t len);
+/// ```
+final int Function(Pointer<EVP_MD_CTX>, Pointer<Data>, int) EVP_DigestUpdate =
+    ssl.lookupFunction<
+        Int32 Function(Pointer<EVP_MD_CTX>, Pointer<Data>, IntPtr),
+        int Function(
+            Pointer<EVP_MD_CTX>, Pointer<Data>, int)>('EVP_DigestUpdate');
+
+/// EVP_DigestFinal acts like EVP_DigestFinal_ex except that EVP_MD_CTX_cleanup
+/// is called on ctx before returning.
+///
+/// ```c
+/// int EVP_DigestFinal(EVP_MD_CTX *ctx, uint8_t *md_out,
+///                                    unsigned int *out_size);
+/// ```
+final int Function(Pointer<EVP_MD_CTX>, Pointer<Bytes>, Pointer<Uint32>)
+    EVP_DigestFinal = ssl.lookupFunction<
+        Int32 Function(Pointer<EVP_MD_CTX>, Pointer<Bytes>, Pointer<Uint32>),
+        int Function(Pointer<EVP_MD_CTX>, Pointer<Bytes>,
+            Pointer<Uint32>)>('EVP_DigestFinal');
+
+/// EVP_MD_CTX_size returns the digest size of ctx, in bytes. It will crash if
+/// a digest hasn't been set on ctx.
+///
+/// ```c
+/// size_t EVP_MD_CTX_size(const EVP_MD_CTX *ctx);
+/// ```
+final int Function(Pointer<EVP_MD_CTX>) EVP_MD_CTX_size = ssl.lookupFunction<
+    IntPtr Function(Pointer<EVP_MD_CTX>),
+    int Function(Pointer<EVP_MD_CTX>)>('EVP_MD_CTX_size');
diff --git a/benchmarks/FfiBoringssl/dart2/dlopen_helper.dart b/benchmarks/FfiBoringssl/dart2/dlopen_helper.dart
new file mode 100644
index 0000000..b031002
--- /dev/null
+++ b/benchmarks/FfiBoringssl/dart2/dlopen_helper.dart
@@ -0,0 +1,58 @@
+// 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:ffi';
+import 'dart:io';
+
+const kArm = "arm";
+const kArm64 = "arm64";
+const kIa32 = "ia32";
+const kX64 = "x64";
+
+// https://stackoverflow.com/questions/45125516/possible-values-for-uname-m
+final _unames = {
+  "arm": kArm,
+  "aarch64_be": kArm64,
+  "aarch64": kArm64,
+  "armv8b": kArm64,
+  "armv8l": kArm64,
+  "i386": kIa32,
+  "i686": kIa32,
+  "x86_64": kX64,
+};
+
+String _checkRunningMode(String architecture) {
+  // Check if we're running in 32bit mode.
+  final int pointerSize = sizeOf<IntPtr>();
+  if (pointerSize == 4 && architecture == kX64) return kIa32;
+  if (pointerSize == 4 && architecture == kArm64) return kArm;
+
+  return architecture;
+}
+
+String _architecture() {
+  final String uname = Process.runSync("uname", ["-m"]).stdout.trim();
+  final String architecture = _unames[uname];
+  if (architecture == null)
+    throw Exception("Unrecognized architecture: '$uname'");
+
+  // Check if we're running in 32bit mode.
+  return _checkRunningMode(architecture);
+}
+
+String _platformPath(String name, {String path = ""}) {
+  if (Platform.isMacOS || Platform.isIOS)
+    return "${path}mac/${_architecture()}/lib$name.dylib";
+
+  if (Platform.isWindows)
+    return "${path}win/${_checkRunningMode(kX64)}/$name.dll";
+
+  // Unknown platforms default to Unix implementation.
+  return "${path}linux/${_architecture()}/lib$name.so";
+}
+
+DynamicLibrary dlopenPlatformSpecific(String name, {String path}) {
+  final String fullPath = _platformPath(name, path: path);
+  return DynamicLibrary.open(fullPath);
+}
diff --git a/benchmarks/FfiBoringssl/dart2/types.dart b/benchmarks/FfiBoringssl/dart2/types.dart
new file mode 100644
index 0000000..5d97475
--- /dev/null
+++ b/benchmarks/FfiBoringssl/dart2/types.dart
@@ -0,0 +1,25 @@
+// 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:ffi';
+
+/// digest algorithm.
+class EVP_MD extends Struct {}
+
+/// digest context.
+class EVP_MD_CTX extends Struct {}
+
+/// Type for `void*` used to represent opaque data.
+class Data extends Struct {
+  static Data fromUint8Pointer(Pointer<Uint8> p) => p.cast<Data>().ref;
+
+  Pointer<Uint8> asUint8Pointer() => this.addressOf.cast();
+}
+
+/// Type for `uint8_t*` used to represent byte data.
+class Bytes extends Struct {
+  static Data fromUint8Pointer(Pointer<Uint8> p) => p.cast<Data>().ref;
+
+  Pointer<Uint8> asUint8Pointer() => this.addressOf.cast();
+}
diff --git a/benchmarks/FfiCall/dart2/FfiCall.dart b/benchmarks/FfiCall/dart2/FfiCall.dart
new file mode 100644
index 0000000..a2857e4
--- /dev/null
+++ b/benchmarks/FfiCall/dart2/FfiCall.dart
@@ -0,0 +1,1149 @@
+// 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.
+
+// TODO(37581): Generate this file.
+
+// These micro benchmarks track the speed of reading and writing C memory from
+// Dart with a specific marshalling and unmarshalling of data.
+
+import 'dart:ffi';
+import 'dart:io';
+
+import 'package:ffi/ffi.dart';
+import 'package:benchmark_harness/benchmark_harness.dart';
+
+import 'dlopen_helper.dart';
+
+//
+// Trampoline functions.
+//
+
+DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("native_functions",
+    path: Platform.script.resolve("native/out/").path);
+
+typedef NativeFunction1Uint8 = Uint8 Function(Uint8);
+typedef Function1int = int Function(int);
+Function1int function1Uint8 = ffiTestFunctions
+    .lookupFunction<NativeFunction1Uint8, Function1int>("Function1Uint8");
+
+typedef NativeFunction1Uint16 = Uint16 Function(Uint16);
+Function1int function1Uint16 = ffiTestFunctions
+    .lookupFunction<NativeFunction1Uint16, Function1int>("Function1Uint16");
+
+typedef NativeFunction1Uint32 = Uint32 Function(Uint32);
+Function1int function1Uint32 = ffiTestFunctions
+    .lookupFunction<NativeFunction1Uint32, Function1int>("Function1Uint32");
+
+typedef NativeFunction1Uint64 = Uint64 Function(Uint64);
+Function1int function1Uint64 = ffiTestFunctions
+    .lookupFunction<NativeFunction1Uint64, Function1int>("Function1Uint64");
+
+typedef NativeFunction1Int8 = Int8 Function(Int8);
+Function1int function1Int8 = ffiTestFunctions
+    .lookupFunction<NativeFunction1Int8, Function1int>("Function1Int8");
+
+typedef NativeFunction1Int16 = Int16 Function(Int16);
+Function1int function1Int16 = ffiTestFunctions
+    .lookupFunction<NativeFunction1Int16, Function1int>("Function1Int16");
+
+typedef NativeFunction1Int32 = Int32 Function(Int32);
+Function1int function1Int32 = ffiTestFunctions
+    .lookupFunction<NativeFunction1Int32, Function1int>("Function1Int32");
+
+typedef NativeFunction2Int32 = Int32 Function(Int32, Int32);
+typedef Function2int = int Function(int, int);
+Function2int function2Int32 = ffiTestFunctions
+    .lookupFunction<NativeFunction2Int32, Function2int>("Function2Int32");
+
+typedef NativeFunction4Int32 = Int32 Function(Int32, Int32, Int32, Int32);
+typedef Function4int = int Function(int, int, int, int);
+Function4int function4Int32 = ffiTestFunctions
+    .lookupFunction<NativeFunction4Int32, Function4int>("Function4Int32");
+
+typedef NativeFunction10Int32 = Int32 Function(
+    Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32);
+typedef Function10int = int Function(
+    int, int, int, int, int, int, int, int, int, int);
+Function10int function10Int32 = ffiTestFunctions
+    .lookupFunction<NativeFunction10Int32, Function10int>("Function10Int32");
+
+typedef NativeFunction20Int32 = Int32 Function(
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32,
+    Int32);
+typedef Function20int = int Function(int, int, int, int, int, int, int, int,
+    int, int, int, int, int, int, int, int, int, int, int, int);
+Function20int function20Int32 = ffiTestFunctions
+    .lookupFunction<NativeFunction20Int32, Function20int>("Function20Int32");
+
+typedef NativeFunction1Int64 = Int64 Function(Int64);
+Function1int function1Int64 = ffiTestFunctions
+    .lookupFunction<NativeFunction1Int64, Function1int>("Function1Int64");
+
+typedef NativeFunction2Int64 = Int64 Function(Int64, Int64);
+Function2int function2Int64 = ffiTestFunctions
+    .lookupFunction<NativeFunction2Int64, Function2int>("Function2Int64");
+
+typedef NativeFunction4Int64 = Int64 Function(Int64, Int64, Int64, Int64);
+Function4int function4Int64 = ffiTestFunctions
+    .lookupFunction<NativeFunction4Int64, Function4int>("Function4Int64");
+
+typedef NativeFunction10Int64 = Int64 Function(
+    Int64, Int64, Int64, Int64, Int64, Int64, Int64, Int64, Int64, Int64);
+Function10int function10Int64 = ffiTestFunctions
+    .lookupFunction<NativeFunction10Int64, Function10int>("Function10Int64");
+
+typedef NativeFunction20Int64 = Int64 Function(
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64,
+    Int64);
+Function20int function20Int64 = ffiTestFunctions
+    .lookupFunction<NativeFunction20Int64, Function20int>("Function20Int64");
+
+typedef NativeFunction1Float = Float Function(Float);
+typedef Function1double = double Function(double);
+Function1double function1Float = ffiTestFunctions
+    .lookupFunction<NativeFunction1Float, Function1double>("Function1Float");
+
+typedef NativeFunction2Float = Float Function(Float, Float);
+typedef Function2double = double Function(double, double);
+Function2double function2Float = ffiTestFunctions
+    .lookupFunction<NativeFunction2Float, Function2double>("Function2Float");
+
+typedef NativeFunction4Float = Float Function(Float, Float, Float, Float);
+typedef Function4double = double Function(double, double, double, double);
+Function4double function4Float = ffiTestFunctions
+    .lookupFunction<NativeFunction4Float, Function4double>("Function4Float");
+
+typedef NativeFunction10Float = Float Function(
+    Float, Float, Float, Float, Float, Float, Float, Float, Float, Float);
+typedef Function10double = double Function(double, double, double, double,
+    double, double, double, double, double, double);
+Function10double function10Float = ffiTestFunctions
+    .lookupFunction<NativeFunction10Float, Function10double>("Function10Float");
+
+typedef NativeFunction20Float = Float Function(
+    Float,
+    Float,
+    Float,
+    Float,
+    Float,
+    Float,
+    Float,
+    Float,
+    Float,
+    Float,
+    Float,
+    Float,
+    Float,
+    Float,
+    Float,
+    Float,
+    Float,
+    Float,
+    Float,
+    Float);
+typedef Function20double = double Function(
+    double,
+    double,
+    double,
+    double,
+    double,
+    double,
+    double,
+    double,
+    double,
+    double,
+    double,
+    double,
+    double,
+    double,
+    double,
+    double,
+    double,
+    double,
+    double,
+    double);
+Function20double function20Float = ffiTestFunctions
+    .lookupFunction<NativeFunction20Float, Function20double>("Function20Float");
+
+typedef NativeFunction1Double = Double Function(Double);
+Function1double function1Double = ffiTestFunctions
+    .lookupFunction<NativeFunction1Double, Function1double>("Function1Double");
+
+typedef NativeFunction2Double = Double Function(Double, Double);
+Function2double function2Double = ffiTestFunctions
+    .lookupFunction<NativeFunction2Double, Function2double>("Function1Double");
+
+typedef NativeFunction4Double = Double Function(Double, Double, Double, Double);
+Function4double function4Double = ffiTestFunctions
+    .lookupFunction<NativeFunction4Double, Function4double>("Function1Double");
+
+typedef NativeFunction10Double = Double Function(Double, Double, Double, Double,
+    Double, Double, Double, Double, Double, Double);
+Function10double function10Double =
+    ffiTestFunctions.lookupFunction<NativeFunction10Double, Function10double>(
+        "Function10Double");
+
+typedef NativeFunction20Double = Double Function(
+    Double,
+    Double,
+    Double,
+    Double,
+    Double,
+    Double,
+    Double,
+    Double,
+    Double,
+    Double,
+    Double,
+    Double,
+    Double,
+    Double,
+    Double,
+    Double,
+    Double,
+    Double,
+    Double,
+    Double);
+Function20double function20Double =
+    ffiTestFunctions.lookupFunction<NativeFunction20Double, Function20double>(
+        "Function20Double");
+
+typedef Function1PointerUint8 = Pointer<Uint8> Function(Pointer<Uint8>);
+Function1PointerUint8 function1PointerUint8 = ffiTestFunctions.lookupFunction<
+    Function1PointerUint8, Function1PointerUint8>("Function1PointerUint8");
+
+typedef Function2PointerUint8 = Pointer<Uint8> Function(
+    Pointer<Uint8>, Pointer<Uint8>);
+Function2PointerUint8 function2PointerUint8 = ffiTestFunctions.lookupFunction<
+    Function2PointerUint8, Function2PointerUint8>("Function2PointerUint8");
+
+typedef Function4PointerUint8 = Pointer<Uint8> Function(
+    Pointer<Uint8>, Pointer<Uint8>, Pointer<Uint8>, Pointer<Uint8>);
+Function4PointerUint8 function4PointerUint8 = ffiTestFunctions.lookupFunction<
+    Function4PointerUint8, Function4PointerUint8>("Function4PointerUint8");
+
+typedef Function10PointerUint8 = Pointer<Uint8> Function(
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>);
+Function10PointerUint8 function10PointerUint8 = ffiTestFunctions.lookupFunction<
+    Function10PointerUint8, Function10PointerUint8>("Function10PointerUint8");
+
+typedef Function20PointerUint8 = Pointer<Uint8> Function(
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>,
+    Pointer<Uint8>);
+Function20PointerUint8 function20PointerUint8 = ffiTestFunctions.lookupFunction<
+    Function20PointerUint8, Function20PointerUint8>("Function20PointerUint8");
+
+//
+// Trampoline call.
+//
+
+int doCall1Uint8(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function1Uint8(17);
+  }
+  return x;
+}
+
+int doCall1Uint16(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function1Uint16(17);
+  }
+  return x;
+}
+
+int doCall1Uint32(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function1Uint32(i);
+  }
+  return x;
+}
+
+int doCall1Uint64(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function1Uint64(i);
+  }
+  return x;
+}
+
+int doCall1Int8(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function1Int8(17);
+  }
+  return x;
+}
+
+int doCall1Int16(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function1Int16(17);
+  }
+  return x;
+}
+
+int doCall1Int32(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function1Int32(i);
+  }
+  return x;
+}
+
+int doCall2Int32(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function2Int32(i, i);
+  }
+  return x;
+}
+
+int doCall4Int32(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function4Int32(i, i, i, i);
+  }
+  return x;
+}
+
+int doCall10Int32(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function10Int32(i, i, i, i, i, i, i, i, i, i);
+  }
+  return x;
+}
+
+int doCall20Int32(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function20Int32(
+        i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i);
+  }
+  return x;
+}
+
+int doCall1Int64(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function1Int64(i);
+  }
+  return x;
+}
+
+int doCall2Int64(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function2Int64(i, i);
+  }
+  return x;
+}
+
+int doCall4Int64(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function4Int64(i, i, i, i);
+  }
+  return x;
+}
+
+int doCall10Int64(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function10Int64(i, i, i, i, i, i, i, i, i, i);
+  }
+  return x;
+}
+
+int doCall20Int64(int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function20Int64(
+        i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i);
+  }
+  return x;
+}
+
+int doCall1Int64Mint(int length) {
+  int x = 0x7FFFFFFF00000000;
+
+  for (int i = 0; i < length; i++) {
+    x = function1Int64(x);
+  }
+  return x;
+}
+
+double doCall1Float(int length) {
+  double x = 0.0;
+  for (int i = 0; i < length; i++) {
+    x += function1Float(17.0);
+  }
+  return x;
+}
+
+double doCall2Float(int length) {
+  double x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function2Float(1.0, 2.0);
+  }
+  return x;
+}
+
+double doCall4Float(int length) {
+  double x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function4Float(1.0, 2.0, 3.0, 4.0);
+  }
+  return x;
+}
+
+double doCall10Float(int length) {
+  double x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function10Float(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0);
+  }
+  return x;
+}
+
+double doCall20Float(int length) {
+  double x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function20Float(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0,
+        11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0);
+  }
+  return x;
+}
+
+double doCall1Double(int length) {
+  double x = 0.0;
+  for (int i = 0; i < length; i++) {
+    x += function1Double(17.0);
+  }
+  return x;
+}
+
+double doCall2Double(int length) {
+  double x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function2Double(1.0, 2.0);
+  }
+  return x;
+}
+
+double doCall4Double(int length) {
+  double x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function4Double(1.0, 2.0, 3.0, 4.0);
+  }
+  return x;
+}
+
+double doCall10Double(int length) {
+  double x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function10Double(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0);
+  }
+  return x;
+}
+
+double doCall20Double(int length) {
+  double x = 0;
+  for (int i = 0; i < length; i++) {
+    x += function20Double(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0,
+        11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0);
+  }
+  return x;
+}
+
+Pointer<Uint8> doCall1PointerUint8(int length, Pointer<Uint8> p1) {
+  Pointer<Uint8> x = p1;
+  for (int i = 0; i < length; i++) {
+    x = function1PointerUint8(x);
+  }
+  return x;
+}
+
+Pointer<Uint8> doCall2PointerUint8(
+    int length, Pointer<Uint8> p1, Pointer<Uint8> p2) {
+  Pointer<Uint8> x = p1;
+  for (int i = 0; i < length; i++) {
+    x = function2PointerUint8(x, p2);
+  }
+  return x;
+}
+
+Pointer<Uint8> doCall4PointerUint8(int length, Pointer<Uint8> p1,
+    Pointer<Uint8> p2, Pointer<Uint8> p3, Pointer<Uint8> p4) {
+  Pointer<Uint8> x = p1;
+  for (int i = 0; i < length; i++) {
+    x = function4PointerUint8(x, p2, p3, p4);
+  }
+  return x;
+}
+
+Pointer<Uint8> doCall10PointerUint8(
+    int length,
+    Pointer<Uint8> p1,
+    Pointer<Uint8> p2,
+    Pointer<Uint8> p3,
+    Pointer<Uint8> p4,
+    Pointer<Uint8> p5,
+    Pointer<Uint8> p6,
+    Pointer<Uint8> p7,
+    Pointer<Uint8> p8,
+    Pointer<Uint8> p9,
+    Pointer<Uint8> p10) {
+  Pointer<Uint8> x = p1;
+  for (int i = 0; i < length; i++) {
+    x = function10PointerUint8(x, p2, p3, p4, p5, p6, p7, p8, p9, p10);
+  }
+  return x;
+}
+
+Pointer<Uint8> doCall20PointerUint8(
+    int length,
+    Pointer<Uint8> p1,
+    Pointer<Uint8> p2,
+    Pointer<Uint8> p3,
+    Pointer<Uint8> p4,
+    Pointer<Uint8> p5,
+    Pointer<Uint8> p6,
+    Pointer<Uint8> p7,
+    Pointer<Uint8> p8,
+    Pointer<Uint8> p9,
+    Pointer<Uint8> p10,
+    Pointer<Uint8> p11,
+    Pointer<Uint8> p12,
+    Pointer<Uint8> p13,
+    Pointer<Uint8> p14,
+    Pointer<Uint8> p15,
+    Pointer<Uint8> p16,
+    Pointer<Uint8> p17,
+    Pointer<Uint8> p18,
+    Pointer<Uint8> p19,
+    Pointer<Uint8> p20) {
+  Pointer<Uint8> x = p1;
+  for (int i = 0; i < length; i++) {
+    x = function20PointerUint8(x, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
+        p13, p14, p15, p16, p17, p18, p19, p20);
+  }
+  return x;
+}
+
+//
+// Benchmark fixtures.
+//
+
+// Number of repeats: 1000
+//  * CPU: Intel(R) Xeon(R) Gold 6154
+//    * Architecture: x64
+//      * 200 - 1100 us
+const N = 1000;
+
+class Uint8x01 extends BenchmarkBase {
+  Uint8x01() : super("FfiCall.Uint8x01");
+
+  void run() {
+    final int x = doCall1Uint8(N);
+    if (x != N * 17 + N * 42) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Uint16x01 extends BenchmarkBase {
+  Uint16x01() : super("FfiCall.Uint16x01");
+
+  void run() {
+    final int x = doCall1Uint16(N);
+    if (x != N * 17 + N * 42) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Uint32x01 extends BenchmarkBase {
+  Uint32x01() : super("FfiCall.Uint32x01");
+
+  void run() {
+    final int x = doCall1Uint32(N);
+    if (x != N * (N - 1) / 2 + N * 42) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Uint64x01 extends BenchmarkBase {
+  Uint64x01() : super("FfiCall.Uint64x01");
+
+  void run() {
+    final int x = doCall1Uint64(N);
+    if (x != N * (N - 1) / 2 + N * 42) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Int8x01 extends BenchmarkBase {
+  Int8x01() : super("FfiCall.Int8x01");
+
+  void run() {
+    final int x = doCall1Int8(N);
+    if (x != N * 17 + N * 42) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Int16x01 extends BenchmarkBase {
+  Int16x01() : super("FfiCall.Int16x01");
+
+  void run() {
+    final int x = doCall1Int16(N);
+    if (x != N * 17 + N * 42) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Int32x01 extends BenchmarkBase {
+  Int32x01() : super("FfiCall.Int32x01");
+
+  void run() {
+    final int x = doCall1Int32(N);
+    if (x != N * (N - 1) / 2 + N * 42) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Int32x02 extends BenchmarkBase {
+  Int32x02() : super("FfiCall.Int32x02");
+
+  void run() {
+    final int x = doCall2Int32(N);
+    if (x != N * (N - 1) * 2 / 2) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Int32x04 extends BenchmarkBase {
+  Int32x04() : super("FfiCall.Int32x04");
+
+  void run() {
+    final int x = doCall4Int32(N);
+    if (x != N * (N - 1) * 4 / 2) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Int32x10 extends BenchmarkBase {
+  Int32x10() : super("FfiCall.Int32x10");
+
+  void run() {
+    final int x = doCall10Int32(N);
+    if (x != N * (N - 1) * 10 / 2) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Int32x20 extends BenchmarkBase {
+  Int32x20() : super("FfiCall.Int32x20");
+
+  void run() {
+    final int x = doCall20Int32(N);
+    if (x != N * (N - 1) * 20 / 2) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Int64x01 extends BenchmarkBase {
+  Int64x01() : super("FfiCall.Int64x01");
+
+  void run() {
+    final int x = doCall1Int64(N);
+    if (x != N * (N - 1) / 2 + N * 42) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Int64x02 extends BenchmarkBase {
+  Int64x02() : super("FfiCall.Int64x02");
+
+  void run() {
+    final int x = doCall2Int64(N);
+    if (x != N * (N - 1) * 2 / 2) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Int64x04 extends BenchmarkBase {
+  Int64x04() : super("FfiCall.Int64x04");
+
+  void run() {
+    final int x = doCall4Int64(N);
+    if (x != N * (N - 1) * 4 / 2) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Int64x10 extends BenchmarkBase {
+  Int64x10() : super("FfiCall.Int64x10");
+
+  void run() {
+    final int x = doCall10Int64(N);
+    if (x != N * (N - 1) * 10 / 2) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Int64x20 extends BenchmarkBase {
+  Int64x20() : super("FfiCall.Int64x20");
+
+  void run() {
+    final int x = doCall20Int64(N);
+    if (x != N * (N - 1) * 20 / 2) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Int64Mintx01 extends BenchmarkBase {
+  Int64Mintx01() : super("FfiCall.Int64Mintx01");
+
+  void run() {
+    final int x = doCall1Int64Mint(N);
+    if (x != 0x7FFFFFFF00000000 + N * 42) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Floatx01 extends BenchmarkBase {
+  Floatx01() : super("FfiCall.Floatx01");
+
+  void run() {
+    final double x = doCall1Float(N);
+    final double expected = N * (N - 1) / 2 + N * 42;
+    if (0.999 * expected > x && x > 1.001 * expected) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Floatx02 extends BenchmarkBase {
+  Floatx02() : super("FfiCall.Floatx02");
+
+  void run() {
+    final double x = doCall2Float(N);
+    final double expected = N * 55.0;
+    if (0.999 * expected > x && x > 1.001 * expected) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Floatx04 extends BenchmarkBase {
+  Floatx04() : super("FfiCall.Floatx04");
+
+  void run() {
+    final double x = doCall4Float(N);
+    final double expected = N * 55.0;
+    if (0.999 * expected > x && x > 1.001 * expected) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Floatx10 extends BenchmarkBase {
+  Floatx10() : super("FfiCall.Floatx10");
+
+  void run() {
+    final double x = doCall10Float(N);
+    final double expected = N * 55.0;
+    if (0.999 * expected > x && x > 1.001 * expected) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Floatx20 extends BenchmarkBase {
+  Floatx20() : super("FfiCall.Floatx20");
+
+  void run() {
+    final double x = doCall20Float(N);
+    final double expected = N * 220.0;
+    if (0.999 * expected > x && x > 1.001 * expected) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Doublex01 extends BenchmarkBase {
+  Doublex01() : super("FfiCall.Doublex01");
+
+  void run() {
+    final double x = doCall1Double(N);
+    final double expected = N * (N - 1) / 2 + N * 42;
+    if (0.999 * expected > x && x > 1.001 * expected) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Doublex02 extends BenchmarkBase {
+  Doublex02() : super("FfiCall.Doublex02");
+
+  void run() {
+    final double x = doCall2Double(N);
+    final double expected = N * 55.0;
+    if (0.999 * expected > x && x > 1.001 * expected) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Doublex04 extends BenchmarkBase {
+  Doublex04() : super("FfiCall.Doublex04");
+
+  void run() {
+    final double x = doCall4Double(N);
+    final double expected = N * 55.0;
+    if (0.999 * expected > x && x > 1.001 * expected) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Doublex10 extends BenchmarkBase {
+  Doublex10() : super("FfiCall.Doublex10");
+
+  void run() {
+    final double x = doCall10Double(N);
+    final double expected = N * 55.0;
+    if (0.999 * expected > x && x > 1.001 * expected) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class Doublex20 extends BenchmarkBase {
+  Doublex20() : super("FfiCall.Doublex20");
+
+  void run() {
+    final double x = doCall20Double(N);
+    final double expected = N * 220.0;
+    if (0.999 * expected > x && x > 1.001 * expected) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerUint8x01 extends BenchmarkBase {
+  PointerUint8x01() : super("FfiCall.PointerUint8x01");
+
+  Pointer<Uint8> pointer;
+  void setup() => pointer = allocate(count: N + 1);
+  void teardown() => free(pointer);
+
+  void run() {
+    final Pointer<Uint8> x = doCall1PointerUint8(N, pointer);
+    if (x.address != pointer.address + N) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerUint8x02 extends BenchmarkBase {
+  PointerUint8x02() : super("FfiCall.PointerUint8x02");
+
+  Pointer<Uint8> pointer, pointer2;
+
+  void setup() {
+    pointer = allocate(count: N + 1);
+    pointer2 = pointer.elementAt(1);
+  }
+
+  void teardown() {
+    free(pointer);
+  }
+
+  void run() {
+    final Pointer<Uint8> x = doCall2PointerUint8(N, pointer, pointer2);
+    if (x.address != pointer.address + N * sizeOf<Uint8>()) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerUint8x04 extends BenchmarkBase {
+  PointerUint8x04() : super("FfiCall.PointerUint8x04");
+
+  Pointer<Uint8> pointer, pointer2, pointer3, pointer4;
+
+  void setup() {
+    pointer = allocate(count: N + 1);
+    pointer2 = pointer.elementAt(1);
+    pointer3 = pointer.elementAt(2);
+    pointer4 = pointer.elementAt(3);
+  }
+
+  void teardown() {
+    free(pointer);
+  }
+
+  void run() {
+    final Pointer<Uint8> x =
+        doCall4PointerUint8(N, pointer, pointer2, pointer3, pointer4);
+    if (x.address != pointer.address + N * sizeOf<Uint8>()) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerUint8x10 extends BenchmarkBase {
+  PointerUint8x10() : super("FfiCall.PointerUint8x10");
+
+  Pointer<Uint8> pointer,
+      pointer2,
+      pointer3,
+      pointer4,
+      pointer5,
+      pointer6,
+      pointer7,
+      pointer8,
+      pointer9,
+      pointer10;
+
+  void setup() {
+    pointer = allocate(count: N + 1);
+    pointer2 = pointer.elementAt(1);
+    pointer3 = pointer.elementAt(2);
+    pointer4 = pointer.elementAt(3);
+    pointer5 = pointer.elementAt(4);
+    pointer6 = pointer.elementAt(5);
+    pointer7 = pointer.elementAt(6);
+    pointer8 = pointer.elementAt(7);
+    pointer9 = pointer.elementAt(8);
+    pointer10 = pointer.elementAt(9);
+  }
+
+  void teardown() {
+    free(pointer);
+  }
+
+  void run() {
+    final Pointer<Uint8> x = doCall10PointerUint8(
+        N,
+        pointer,
+        pointer2,
+        pointer3,
+        pointer4,
+        pointer5,
+        pointer6,
+        pointer7,
+        pointer8,
+        pointer9,
+        pointer10);
+    if (x.address != pointer.address + N * sizeOf<Uint8>()) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerUint8x20 extends BenchmarkBase {
+  PointerUint8x20() : super("FfiCall.PointerUint8x20");
+
+  Pointer<Uint8> pointer,
+      pointer2,
+      pointer3,
+      pointer4,
+      pointer5,
+      pointer6,
+      pointer7,
+      pointer8,
+      pointer9,
+      pointer10,
+      pointer11,
+      pointer12,
+      pointer13,
+      pointer14,
+      pointer15,
+      pointer16,
+      pointer17,
+      pointer18,
+      pointer19,
+      pointer20;
+
+  void setup() {
+    pointer = allocate(count: N + 1);
+    pointer2 = pointer.elementAt(1);
+    pointer3 = pointer.elementAt(2);
+    pointer4 = pointer.elementAt(3);
+    pointer5 = pointer.elementAt(4);
+    pointer6 = pointer.elementAt(5);
+    pointer7 = pointer.elementAt(6);
+    pointer8 = pointer.elementAt(7);
+    pointer9 = pointer.elementAt(8);
+    pointer10 = pointer.elementAt(9);
+    pointer11 = pointer.elementAt(10);
+    pointer12 = pointer.elementAt(11);
+    pointer13 = pointer.elementAt(12);
+    pointer14 = pointer.elementAt(13);
+    pointer15 = pointer.elementAt(14);
+    pointer16 = pointer.elementAt(15);
+    pointer17 = pointer.elementAt(16);
+    pointer18 = pointer.elementAt(17);
+    pointer19 = pointer.elementAt(18);
+    pointer20 = pointer.elementAt(19);
+  }
+
+  void teardown() {
+    free(pointer);
+  }
+
+  void run() {
+    final Pointer<Uint8> x = doCall20PointerUint8(
+        N,
+        pointer,
+        pointer2,
+        pointer3,
+        pointer4,
+        pointer5,
+        pointer6,
+        pointer7,
+        pointer8,
+        pointer9,
+        pointer10,
+        pointer11,
+        pointer12,
+        pointer13,
+        pointer14,
+        pointer15,
+        pointer16,
+        pointer17,
+        pointer18,
+        pointer19,
+        pointer20);
+    if (x.address != pointer.address + N * sizeOf<Uint8>()) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+//
+// Main driver.
+//
+
+main() {
+  final benchmarks = [
+    () => Uint8x01(),
+    () => Uint16x01(),
+    () => Uint32x01(),
+    () => Uint64x01(),
+    () => Int8x01(),
+    () => Int16x01(),
+    () => Int32x01(),
+    () => Int32x02(),
+    () => Int32x04(),
+    () => Int32x10(),
+    () => Int32x20(),
+    () => Int64x01(),
+    () => Int64x02(),
+    () => Int64x04(),
+    () => Int64x10(),
+    () => Int64x20(),
+    () => Int64Mintx01(),
+    () => Floatx01(),
+    () => Floatx02(),
+    () => Floatx04(),
+    () => Floatx10(),
+    () => Floatx20(),
+    () => Doublex01(),
+    () => Doublex02(),
+    () => Doublex04(),
+    () => Doublex10(),
+    () => Doublex20(),
+    () => PointerUint8x01(),
+    () => PointerUint8x02(),
+    () => PointerUint8x04(),
+    () => PointerUint8x10(),
+    () => PointerUint8x20(),
+  ];
+  benchmarks.forEach((benchmark) => benchmark().report());
+}
diff --git a/benchmarks/FfiCall/dart2/dlopen_helper.dart b/benchmarks/FfiCall/dart2/dlopen_helper.dart
new file mode 100644
index 0000000..b031002
--- /dev/null
+++ b/benchmarks/FfiCall/dart2/dlopen_helper.dart
@@ -0,0 +1,58 @@
+// 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:ffi';
+import 'dart:io';
+
+const kArm = "arm";
+const kArm64 = "arm64";
+const kIa32 = "ia32";
+const kX64 = "x64";
+
+// https://stackoverflow.com/questions/45125516/possible-values-for-uname-m
+final _unames = {
+  "arm": kArm,
+  "aarch64_be": kArm64,
+  "aarch64": kArm64,
+  "armv8b": kArm64,
+  "armv8l": kArm64,
+  "i386": kIa32,
+  "i686": kIa32,
+  "x86_64": kX64,
+};
+
+String _checkRunningMode(String architecture) {
+  // Check if we're running in 32bit mode.
+  final int pointerSize = sizeOf<IntPtr>();
+  if (pointerSize == 4 && architecture == kX64) return kIa32;
+  if (pointerSize == 4 && architecture == kArm64) return kArm;
+
+  return architecture;
+}
+
+String _architecture() {
+  final String uname = Process.runSync("uname", ["-m"]).stdout.trim();
+  final String architecture = _unames[uname];
+  if (architecture == null)
+    throw Exception("Unrecognized architecture: '$uname'");
+
+  // Check if we're running in 32bit mode.
+  return _checkRunningMode(architecture);
+}
+
+String _platformPath(String name, {String path = ""}) {
+  if (Platform.isMacOS || Platform.isIOS)
+    return "${path}mac/${_architecture()}/lib$name.dylib";
+
+  if (Platform.isWindows)
+    return "${path}win/${_checkRunningMode(kX64)}/$name.dll";
+
+  // Unknown platforms default to Unix implementation.
+  return "${path}linux/${_architecture()}/lib$name.so";
+}
+
+DynamicLibrary dlopenPlatformSpecific(String name, {String path}) {
+  final String fullPath = _platformPath(name, path: path);
+  return DynamicLibrary.open(fullPath);
+}
diff --git a/benchmarks/FfiCall/dart2/native/.gitignore b/benchmarks/FfiCall/dart2/native/.gitignore
new file mode 100644
index 0000000..4baa5ba
--- /dev/null
+++ b/benchmarks/FfiCall/dart2/native/.gitignore
@@ -0,0 +1,5 @@
+# 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.
+
+out/
diff --git a/benchmarks/FfiCall/dart2/native/Makefile b/benchmarks/FfiCall/dart2/native/Makefile
new file mode 100644
index 0000000..5e5d716
--- /dev/null
+++ b/benchmarks/FfiCall/dart2/native/Makefile
@@ -0,0 +1,60 @@
+# 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.
+
+# TODO(37531): Remove this makefile and build with sdk instead when
+# benchmark runner gets support for that.
+
+CC=gcc
+CCARM=arm-linux-gnueabihf-gcc
+CCARM64=aarch64-linux-gnu-gcc
+CFLAGS=-Wall -g -O -fPIC
+
+# Bump this whenever the benchmark is updated.
+VERSION=1
+
+.PHONY: all clean
+
+all: out/linux/x64/libnative_functions.so out/linux/ia32/libnative_functions.so out/linux/arm64/libnative_functions.so out/linux/arm/libnative_functions.so
+
+cipd:
+	cipd create -name dart/benchmarks/fficall -in out -install-mode copy -tag version:$(VERSION)
+
+clean:
+	rm -rf *.o *.so out
+
+out/linux/x64:
+	mkdir -p out/linux/x64
+
+out/linux/x64/native_functions.o: native_functions.c | out/linux/x64
+	$(CC) $(CFLAGS) -c -o $@ native_functions.c
+
+out/linux/x64/libnative_functions.so: out/linux/x64/native_functions.o
+	$(CC) $(CFLAGS) -s -shared -o $@ out/linux/x64/native_functions.o
+
+out/linux/ia32:
+	mkdir -p out/linux/ia32
+
+out/linux/ia32/native_functions.o: native_functions.c | out/linux/ia32
+	$(CC) $(CFLAGS) -m32 -c -o $@ native_functions.c
+
+out/linux/ia32/libnative_functions.so: out/linux/ia32/native_functions.o
+	$(CC) $(CFLAGS) -m32 -s -shared -o $@ out/linux/ia32/native_functions.o
+
+out/linux/arm64:
+	mkdir -p out/linux/arm64
+
+out/linux/arm64/native_functions.o: native_functions.c | out/linux/arm64
+	$(CCARM64) $(CFLAGS) -c -o $@ native_functions.c
+
+out/linux/arm64/libnative_functions.so: out/linux/arm64/native_functions.o
+	$(CCARM64) $(CFLAGS) -s -shared -o $@ out/linux/arm64/native_functions.o
+
+out/linux/arm:
+	mkdir -p out/linux/arm
+
+out/linux/arm/native_functions.o: native_functions.c | out/linux/arm
+	$(CCARM) $(CFLAGS) -c -o $@ native_functions.c
+
+out/linux/arm/libnative_functions.so: out/linux/arm/native_functions.o
+	$(CCARM) $(CFLAGS) -s -shared -o $@ out/linux/arm/native_functions.o
diff --git a/benchmarks/FfiCall/dart2/native/native_functions.c b/benchmarks/FfiCall/dart2/native/native_functions.c
new file mode 100644
index 0000000..9fcee4d
--- /dev/null
+++ b/benchmarks/FfiCall/dart2/native/native_functions.c
@@ -0,0 +1,132 @@
+// 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 <stdint.h>
+
+uint8_t Function1Uint8(uint8_t x) { return x + 42; }
+
+uint16_t Function1Uint16(uint16_t x) { return x + 42; }
+
+uint32_t Function1Uint32(uint32_t x) { return x + 42; }
+
+uint64_t Function1Uint64(uint64_t x) { return x + 42; }
+
+int8_t Function1Int8(int8_t x) { return x + 42; }
+
+int16_t Function1Int16(int16_t x) { return x + 42; }
+
+int32_t Function1Int32(int32_t x) { return x + 42; }
+
+int32_t Function2Int32(int32_t a, int32_t b) {
+  return a + b;
+}
+
+int32_t Function4Int32(int32_t a, int32_t b, int32_t c, int32_t d) {
+  return a + b + c + d;
+}
+
+int32_t Function10Int32(int32_t a, int32_t b, int32_t c, int32_t d, int32_t e,
+                        int32_t f, int32_t g, int32_t h, int32_t i, int32_t j) {
+  return a + b + c + d + e + f + g + h + i + j;
+}
+
+int32_t Function20Int32(int32_t a, int32_t b, int32_t c, int32_t d, int32_t e,
+                        int32_t f, int32_t g, int32_t h, int32_t i, int32_t j,
+                        int32_t k, int32_t l, int32_t m, int32_t n, int32_t o,
+                        int32_t p, int32_t q, int32_t r, int32_t s, int32_t t) {
+  return a + b + c + d + e + f + g + h + i + j + k + l + m + n + o +
+                   p + q + r + s + t;
+}
+
+int64_t Function1Int64(int64_t x) { return x + 42; }
+
+int64_t Function2Int64(int64_t a, int64_t b) {
+  return a + b;
+}
+
+int64_t Function4Int64(int64_t a, int64_t b, int64_t c, int64_t d) {
+  return a + b + c + d;
+}
+
+int64_t Function10Int64(int64_t a, int64_t b, int64_t c, int64_t d, int64_t e,
+                        int64_t f, int64_t g, int64_t h, int64_t i, int64_t j) {
+  return a + b + c + d + e + f + g + h + i + j;
+}
+
+int64_t Function20Int64(int64_t a, int64_t b, int64_t c, int64_t d, int64_t e,
+                        int64_t f, int64_t g, int64_t h, int64_t i, int64_t j,
+                        int64_t k, int64_t l, int64_t m, int64_t n, int64_t o,
+                        int64_t p, int64_t q, int64_t r, int64_t s, int64_t t) {
+  return a + b + c + d + e + f + g + h + i + j + k + l + m + n + o +
+                   p + q + r + s + t;
+}
+
+float Function1Float(float x) { return x + 42.0f; }
+
+float Function2Float(float a, float b) {
+  return a + b;
+}
+
+float Function4Float(float a, float b, float c, float d) {
+  return a + b + c + d;
+}
+
+float Function10Float(float a, float b, float c, float d, float e, float f,
+                      float g, float h, float i, float j) {
+  return a + b + c + d + e + f + g + h + i + j;
+}
+
+float Function20Float(float a, float b, float c, float d, float e, float f,
+                      float g, float h, float i, float j, float k, float l,
+                      float m, float n, float o, float p, float q, float r,
+                      float s, float t) {
+  return a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p +
+                 q + r + s + t;
+}
+
+double Function1Double(double x) { return x + 42.0; }
+
+double Function2Double(double a, double b) {
+  return a + b;
+}
+
+double Function4Double(double a, double b, double c, double d) {
+  return a + b + c + d;
+}
+
+double Function10Double(double a, double b, double c, double d, double e,
+                        double f, double g, double h, double i, double j) {
+  return a + b + c + d + e + f + g + h + i + j;
+}
+
+double Function20Double(double a, double b, double c, double d, double e,
+                        double f, double g, double h, double i, double j,
+                        double k, double l, double m, double n, double o,
+                        double p, double q, double r, double s, double t) {
+  return a + b + c + d + e + f + g + h + i + j + k + l + m + n + o +
+                  p + q + r + s + t;
+}
+
+uint8_t *Function1PointerUint8(uint8_t *a) { return a + 1; }
+
+uint8_t *Function2PointerUint8(uint8_t *a, uint8_t *b) { return a + 1; }
+
+uint8_t *Function4PointerUint8(uint8_t *a, uint8_t *b, uint8_t *c, uint8_t *d) {
+  return a + 1;
+}
+
+uint8_t *Function10PointerUint8(uint8_t *a, uint8_t *b, uint8_t *c, uint8_t *d,
+                                uint8_t *e, uint8_t *f, uint8_t *g, uint8_t *h,
+                                uint8_t *i, uint8_t *j) {
+  return a + 1;
+}
+
+uint8_t *Function20PointerUint8(uint8_t *a, uint8_t *b, uint8_t *c, uint8_t *d,
+                                uint8_t *e, uint8_t *f, uint8_t *g, uint8_t *h,
+                                uint8_t *i, uint8_t *j, uint8_t *k, uint8_t *l,
+                                uint8_t *m, uint8_t *n, uint8_t *o, uint8_t *p,
+                                uint8_t *q, uint8_t *r, uint8_t *s,
+                                uint8_t *t) {
+  return a + 1;
+}
diff --git a/benchmarks/FfiMemory/dart2/FfiMemory.dart b/benchmarks/FfiMemory/dart2/FfiMemory.dart
new file mode 100644
index 0000000..50f8435
--- /dev/null
+++ b/benchmarks/FfiMemory/dart2/FfiMemory.dart
@@ -0,0 +1,429 @@
+// 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.
+
+// TODO(37581): Generate this file.
+
+// Micro-benchmarks for ffi memory stores and loads.
+//
+// These micro benchmarks track the speed of reading and writing C memory from
+// Dart with a specific marshalling and unmarshalling of data.
+
+import 'dart:ffi';
+
+import 'package:ffi/ffi.dart';
+import 'package:benchmark_harness/benchmark_harness.dart';
+
+//
+// Pointer store.
+//
+
+void doStoreInt8(Pointer<Int8> pointer, int length) {
+  for (int i = 0; i < length; i++) {
+    pointer[i] = 1;
+  }
+}
+
+void doStoreUint8(Pointer<Uint8> pointer, int length) {
+  for (int i = 0; i < length; i++) {
+    pointer[i] = 1;
+  }
+}
+
+void doStoreInt16(Pointer<Int16> pointer, int length) {
+  for (int i = 0; i < length; i++) {
+    pointer[i] = 1;
+  }
+}
+
+void doStoreUint16(Pointer<Uint16> pointer, int length) {
+  for (int i = 0; i < length; i++) {
+    pointer[i] = 1;
+  }
+}
+
+void doStoreInt32(Pointer<Int32> pointer, int length) {
+  for (int i = 0; i < length; i++) {
+    pointer[i] = 1;
+  }
+}
+
+void doStoreUint32(Pointer<Uint32> pointer, int length) {
+  for (int i = 0; i < length; i++) {
+    pointer[i] = 1;
+  }
+}
+
+void doStoreInt64(Pointer<Int64> pointer, int length) {
+  for (int i = 0; i < length; i++) {
+    pointer[i] = 1;
+  }
+}
+
+void doStoreUint64(Pointer<Uint64> pointer, int length) {
+  for (int i = 0; i < length; i++) {
+    pointer[i] = 1;
+  }
+}
+
+void doStoreFloat(Pointer<Float> pointer, int length) {
+  for (int i = 0; i < length; i++) {
+    pointer[i] = 1.0;
+  }
+}
+
+void doStoreDouble(Pointer<Double> pointer, int length) {
+  for (int i = 0; i < length; i++) {
+    pointer[i] = 1.0;
+  }
+}
+
+void doStorePointer(
+    Pointer<Pointer<Int8>> pointer, int length, Pointer<Int8> data) {
+  for (int i = 0; i < length; i++) {
+    pointer[i] = data;
+  }
+}
+
+void doStoreInt64Mint(Pointer<Int64> pointer, int length) {
+  for (int i = 0; i < length; i++) {
+    pointer[i] = 0x7FFFFFFFFFFFFFFF;
+  }
+}
+
+//
+// Pointer load.
+//
+
+int doLoadInt8(Pointer<Int8> pointer, int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += pointer[i];
+  }
+  return x;
+}
+
+int doLoadUint8(Pointer<Uint8> pointer, int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += pointer[i];
+  }
+  return x;
+}
+
+int doLoadInt16(Pointer<Int16> pointer, int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += pointer[i];
+  }
+  return x;
+}
+
+int doLoadUint16(Pointer<Uint16> pointer, int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += pointer[i];
+  }
+  return x;
+}
+
+int doLoadInt32(Pointer<Int32> pointer, int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += pointer[i];
+  }
+  return x;
+}
+
+int doLoadUint32(Pointer<Uint32> pointer, int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += pointer[i];
+  }
+  return x;
+}
+
+int doLoadInt64(Pointer<Int64> pointer, int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += pointer[i];
+  }
+  return x;
+}
+
+int doLoadUint64(Pointer<Uint64> pointer, int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += pointer[i];
+  }
+  return x;
+}
+
+double doLoadFloat(Pointer<Float> pointer, int length) {
+  double x = 0;
+  for (int i = 0; i < length; i++) {
+    x += pointer[i];
+  }
+  return x;
+}
+
+double doLoadDouble(Pointer<Double> pointer, int length) {
+  double x = 0;
+  for (int i = 0; i < length; i++) {
+    x += pointer[i];
+  }
+  return x;
+}
+
+// Aggregates pointers through aggregrating their addresses.
+int doLoadPointer(Pointer<Pointer<Int8>> pointer, int length) {
+  Pointer<Int8> x;
+  int address_xor = 0;
+  for (int i = 0; i < length; i++) {
+    x = pointer[i];
+    address_xor ^= x.address;
+  }
+  return address_xor;
+}
+
+int doLoadInt64Mint(Pointer<Int64> pointer, int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += pointer[i];
+  }
+  return x;
+}
+
+//
+// Benchmark fixtures.
+//
+
+// Number of repeats: 1000
+//  * CPU: Intel(R) Xeon(R) Gold 6154
+//    * Architecture: x64
+//      * 48000 - 125000 us (without optimizations)
+//      * 14 - ??? us (expected with optimizations, on par with typed data)
+const N = 1000;
+
+class PointerInt8 extends BenchmarkBase {
+  Pointer<Int8> pointer;
+  PointerInt8() : super("FfiMemory.PointerInt8");
+
+  void setup() => pointer = allocate(count: N);
+  void teardown() => free(pointer);
+
+  void run() {
+    doStoreInt8(pointer, N);
+    final int x = doLoadInt8(pointer, N);
+    if (x != N) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerUint8 extends BenchmarkBase {
+  Pointer<Uint8> pointer;
+  PointerUint8() : super("FfiMemory.PointerUint8");
+
+  void setup() => pointer = allocate(count: N);
+  void teardown() => free(pointer);
+
+  void run() {
+    doStoreUint8(pointer, N);
+    final int x = doLoadUint8(pointer, N);
+    if (x != N) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerInt16 extends BenchmarkBase {
+  Pointer<Int16> pointer;
+  PointerInt16() : super("FfiMemory.PointerInt16");
+
+  void setup() => pointer = allocate(count: N);
+  void teardown() => free(pointer);
+
+  void run() {
+    doStoreInt16(pointer, N);
+    final int x = doLoadInt16(pointer, N);
+    if (x != N) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerUint16 extends BenchmarkBase {
+  Pointer<Uint16> pointer;
+  PointerUint16() : super("FfiMemory.PointerUint16");
+
+  void setup() => pointer = allocate(count: N);
+  void teardown() => free(pointer);
+
+  void run() {
+    doStoreUint16(pointer, N);
+    final int x = doLoadUint16(pointer, N);
+    if (x != N) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerInt32 extends BenchmarkBase {
+  Pointer<Int32> pointer;
+  PointerInt32() : super("FfiMemory.PointerInt32");
+
+  void setup() => pointer = allocate(count: N);
+  void teardown() => free(pointer);
+
+  void run() {
+    doStoreInt32(pointer, N);
+    final int x = doLoadInt32(pointer, N);
+    if (x != N) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerUint32 extends BenchmarkBase {
+  Pointer<Uint32> pointer;
+  PointerUint32() : super("FfiMemory.PointerUint32");
+
+  void setup() => pointer = allocate(count: N);
+  void teardown() => free(pointer);
+
+  void run() {
+    doStoreUint32(pointer, N);
+    final int x = doLoadUint32(pointer, N);
+    if (x != N) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerInt64 extends BenchmarkBase {
+  Pointer<Int64> pointer;
+  PointerInt64() : super("FfiMemory.PointerInt64");
+
+  void setup() => pointer = allocate(count: N);
+  void teardown() => free(pointer);
+
+  void run() {
+    doStoreInt64(pointer, N);
+    final int x = doLoadInt64(pointer, N);
+    if (x != N) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerUint64 extends BenchmarkBase {
+  Pointer<Uint64> pointer;
+  PointerUint64() : super("FfiMemory.PointerUint64");
+
+  void setup() => pointer = allocate(count: N);
+  void teardown() => free(pointer);
+
+  void run() {
+    doStoreUint64(pointer, N);
+    final int x = doLoadUint64(pointer, N);
+    if (x != N) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerFloat extends BenchmarkBase {
+  Pointer<Float> pointer;
+  PointerFloat() : super("FfiMemory.PointerFloat");
+
+  void setup() => pointer = allocate(count: N);
+  void teardown() => free(pointer);
+
+  void run() {
+    doStoreFloat(pointer, N);
+    final double x = doLoadFloat(pointer, N);
+    if (0.99 * N > x || x > 1.01 * N) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerDouble extends BenchmarkBase {
+  Pointer<Double> pointer;
+  PointerDouble() : super("FfiMemory.PointerDouble");
+
+  void setup() => pointer = allocate(count: N);
+  void teardown() => free(pointer);
+
+  void run() {
+    doStoreDouble(pointer, N);
+    final double x = doLoadDouble(pointer, N);
+    if (0.99 * N > x || x > 1.01 * N) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerPointer extends BenchmarkBase {
+  Pointer<Pointer<Int8>> pointer;
+  Pointer<Int8> data;
+  PointerPointer() : super("FfiMemory.PointerPointer");
+
+  void setup() {
+    pointer = allocate(count: N);
+    data = allocate();
+  }
+
+  void teardown() {
+    free(pointer);
+    free(data);
+  }
+
+  void run() {
+    doStorePointer(pointer, N, data);
+    final int x = doLoadPointer(pointer, N);
+    if (x != 0 || x == data.address) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+class PointerInt64Mint extends BenchmarkBase {
+  Pointer<Int64> pointer;
+  PointerInt64Mint() : super("FfiMemory.PointerInt64Mint");
+
+  void setup() => pointer = allocate(count: N);
+  void teardown() => free(pointer);
+
+  void run() {
+    doStoreInt64Mint(pointer, N);
+    final int x = doLoadInt64Mint(pointer, N);
+    // Using overflow semantics in aggregation.
+    if (x != -N) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+//
+// Main driver.
+//
+
+main() {
+  final benchmarks = [
+    () => PointerInt8(),
+    () => PointerUint8(),
+    () => PointerInt16(),
+    () => PointerUint16(),
+    () => PointerInt32(),
+    () => PointerUint32(),
+    () => PointerInt64(),
+    () => PointerInt64Mint(),
+    () => PointerUint64(),
+    () => PointerFloat(),
+    () => PointerDouble(),
+    () => PointerPointer(),
+  ];
+  benchmarks.forEach((benchmark) => benchmark().report());
+}
diff --git a/benchmarks/FfiStruct/dart2/FfiStruct.dart b/benchmarks/FfiStruct/dart2/FfiStruct.dart
new file mode 100644
index 0000000..f2952ec
--- /dev/null
+++ b/benchmarks/FfiStruct/dart2/FfiStruct.dart
@@ -0,0 +1,121 @@
+// 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.
+
+// Micro-benchmark for ffi struct field stores and loads.
+//
+// Only tests a single field because the FfiMemory benchmark already tests loads
+// and stores of different field sizes.
+
+import 'dart:ffi';
+
+import 'package:ffi/ffi.dart';
+import 'package:benchmark_harness/benchmark_harness.dart';
+
+//
+// Struct field store (plus Pointer elementAt and load).
+//
+
+void doStoreInt32(Pointer<VeryLargeStruct> pointer, int length) {
+  for (int i = 0; i < length; i++) {
+    pointer[i].c = 1;
+  }
+}
+
+//
+// Struct field load (plus Pointer elementAt and load).
+//
+
+int doLoadInt32(Pointer<VeryLargeStruct> pointer, int length) {
+  int x = 0;
+  for (int i = 0; i < length; i++) {
+    x += pointer[i].c;
+  }
+  return x;
+}
+
+//
+// Benchmark fixture.
+//
+
+// Number of repeats: 1000
+//  * CPU: Intel(R) Xeon(R) Gold 6154
+//    * Architecture: x64
+//      * 150000 - 465000 us (without optimizations)
+//      * 14 - ??? us (expected with optimizations, on par with typed data)
+const N = 1000;
+
+class FieldLoadStore extends BenchmarkBase {
+  Pointer<VeryLargeStruct> pointer;
+  FieldLoadStore() : super("FfiStruct.FieldLoadStore");
+
+  void setup() => pointer = allocate(count: N);
+  void teardown() => free(pointer);
+
+  void run() {
+    doStoreInt32(pointer, N);
+    final int x = doLoadInt32(pointer, N);
+    if (x != N) {
+      throw Exception("$name: Unexpected result: $x");
+    }
+  }
+}
+
+//
+// Main driver.
+//
+
+main() {
+  final benchmarks = [
+    () => FieldLoadStore(),
+  ];
+  benchmarks.forEach((benchmark) => benchmark().report());
+}
+
+//
+// Test struct.
+//
+class VeryLargeStruct extends Struct {
+  @Int8()
+  int a;
+
+  @Int16()
+  int b;
+
+  @Int32()
+  int c;
+
+  @Int64()
+  int d;
+
+  @Uint8()
+  int e;
+
+  @Uint16()
+  int f;
+
+  @Uint32()
+  int g;
+
+  @Uint64()
+  int h;
+
+  @IntPtr()
+  int i;
+
+  @Double()
+  double j;
+
+  @Float()
+  double k;
+
+  Pointer<VeryLargeStruct> parent;
+
+  @IntPtr()
+  int numChildren;
+
+  Pointer<VeryLargeStruct> children;
+
+  @Int8()
+  int smallLastField;
+}
diff --git a/benchmarks/Isolate/dart2/Isolate.dart b/benchmarks/Isolate/dart2/Isolate.dart
new file mode 100644
index 0000000..465d56a
--- /dev/null
+++ b/benchmarks/Isolate/dart2/Isolate.dart
@@ -0,0 +1,186 @@
+// 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:async';
+import 'dart:isolate';
+import 'dart:typed_data';
+
+import 'package:benchmark_harness/benchmark_harness.dart'
+    show PrintEmitter, ScoreEmitter;
+import 'package:meta/meta.dart';
+
+class SendReceiveBytes extends AsyncBenchmarkBase {
+  SendReceiveBytes(String name,
+      {@required int this.size, @required bool this.useTransferable})
+      : super(name);
+
+  @override
+  Future<void> run() async {
+    await helper.run();
+  }
+
+  @override
+  Future<void> setup() async {
+    helper = SendReceiveHelper(size, useTransferable: useTransferable);
+    await helper.setup();
+  }
+
+  @override
+  Future<void> teardown() async {
+    await helper.finalize();
+  }
+
+  final bool useTransferable;
+  final int size;
+  SendReceiveHelper helper;
+}
+
+// Identical to BenchmarkBase from package:benchmark_harness but async.
+abstract class AsyncBenchmarkBase {
+  final String name;
+  final ScoreEmitter emitter;
+
+  Future<void> run();
+  Future<void> setup();
+  Future<void> teardown();
+
+  const AsyncBenchmarkBase(this.name, {this.emitter = const PrintEmitter()});
+
+  // Returns the number of microseconds per call.
+  Future<double> measureFor(int minimumMillis) async {
+    final minimumMicros = minimumMillis * 1000;
+    int iter = 0;
+    final watch = Stopwatch();
+    watch.start();
+    int elapsed = 0;
+    while (elapsed < minimumMicros) {
+      await run();
+      elapsed = watch.elapsedMicroseconds;
+      iter++;
+    }
+    return elapsed / iter;
+  }
+
+  // Measures the score for the benchmark and returns it.
+  Future<double> measure() async {
+    await setup();
+    await measureFor(500); // warm-up
+    final result = await measureFor(4000); // actual measurement
+    await teardown();
+    return result;
+  }
+
+  Future<void> report() async {
+    emitter.emit(name, await measure());
+  }
+}
+
+class StartMessage {
+  final SendPort sendPort;
+  final bool useTransferable;
+  final int size;
+
+  StartMessage(this.sendPort, this.useTransferable, this.size);
+}
+
+// Measures how long sending and receiving of [size]-length Uint8List takes.
+class SendReceiveHelper {
+  SendReceiveHelper(this.size, {@required bool this.useTransferable});
+
+  Future<void> setup() async {
+    data = new Uint8List(size);
+
+    port = ReceivePort();
+    inbox = StreamIterator<dynamic>(port);
+    workerCompleted = Completer<bool>();
+    workerExitedPort = ReceivePort()
+      ..listen((_) => workerCompleted.complete(true));
+    worker = await Isolate.spawn(
+        isolate, StartMessage(port.sendPort, useTransferable, size),
+        onExit: workerExitedPort.sendPort);
+    await inbox.moveNext();
+    outbox = inbox.current;
+  }
+
+  Future<void> finalize() async {
+    outbox.send(null);
+    await workerCompleted.future;
+    workerExitedPort.close();
+    port.close();
+  }
+
+  // Send data to worker, wait for an answer.
+  Future<void> run() async {
+    outbox.send(packageList(data, useTransferable));
+    await inbox.moveNext();
+    final received = inbox.current;
+    if (useTransferable) {
+      final TransferableTypedData transferable = received;
+      transferable.materialize();
+    }
+  }
+
+  Uint8List data;
+  ReceivePort port;
+  StreamIterator<dynamic> inbox;
+  SendPort outbox;
+  Isolate worker;
+  Completer<bool> workerCompleted;
+  ReceivePort workerExitedPort;
+  final int size;
+  final bool useTransferable;
+}
+
+packageList(Uint8List data, bool useTransferable) =>
+    useTransferable ? TransferableTypedData.fromList(<Uint8List>[data]) : data;
+
+Future<void> isolate(StartMessage startMessage) async {
+  final port = ReceivePort();
+  final inbox = StreamIterator<dynamic>(port);
+  final data = Uint8List.view(new Uint8List(startMessage.size).buffer);
+
+  startMessage.sendPort.send(port.sendPort);
+  while (true) {
+    await inbox.moveNext();
+    final received = inbox.current;
+    if (received == null) {
+      break;
+    }
+    if (startMessage.useTransferable) {
+      final TransferableTypedData transferable = received;
+      transferable.materialize();
+    }
+    startMessage.sendPort.send(packageList(data, startMessage.useTransferable));
+  }
+  port.close();
+}
+
+class SizeName {
+  const SizeName(this.size, this.name);
+
+  final int size;
+  final String name;
+}
+
+final List<SizeName> sizes = <SizeName>[
+  SizeName(1 * 1024, "1KB"),
+  SizeName(10 * 1024, "10KB"),
+  SizeName(100 * 1024, "100KB"),
+  SizeName(1 * 1024 * 1024, "1MB"),
+  SizeName(10 * 1024 * 1024, "10MB"),
+  SizeName(100 * 1024 * 1024, "100MB")
+];
+
+Future<void> main() async {
+  for (SizeName sizeName in sizes) {
+    await SendReceiveBytes("Isolate.SendReceiveBytes${sizeName.name}",
+            size: sizeName.size, useTransferable: false)
+        .report();
+    await SendReceiveBytes(
+            "Isolate.SendReceiveBytesTransferable${sizeName.name}",
+            size: sizeName.size,
+            useTransferable: true)
+        .report();
+  }
+}
diff --git a/benchmarks/IsolateJson/dart2/IsolateJson.dart b/benchmarks/IsolateJson/dart2/IsolateJson.dart
new file mode 100644
index 0000000..6d11738
--- /dev/null
+++ b/benchmarks/IsolateJson/dart2/IsolateJson.dart
@@ -0,0 +1,161 @@
+// 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:async';
+import 'dart:convert';
+import 'dart:io';
+import 'dart:isolate';
+import 'dart:typed_data';
+
+import 'package:benchmark_harness/benchmark_harness.dart' show BenchmarkBase;
+import 'package:meta/meta.dart';
+
+import 'runtime/tests/vm/dart/export_sendAndExit_helper.dart' show sendAndExit;
+
+class JsonDecodingBenchmark {
+  JsonDecodingBenchmark(this.name,
+      {@required this.sample,
+      @required this.numTasks,
+      @required this.useSendAndExit});
+
+  Future<void> report() async {
+    final stopwatch = Stopwatch()..start();
+    // Benchmark harness counts 10 iterations as one.
+    for (int i = 0; i < 10; i++) {
+      final decodedFutures = <Future>[];
+      for (int i = 0; i < numTasks; i++) {
+        decodedFutures.add(decodeJson(useSendAndExit, sample));
+      }
+      await Future.wait(decodedFutures);
+    }
+
+    print("$name(RunTime): ${stopwatch.elapsedMicroseconds} us.");
+  }
+
+  final String name;
+  final Uint8List sample;
+  final int numTasks;
+  final bool useSendAndExit;
+}
+
+Uint8List createSampleJson(final size) {
+  final list = List.generate(size, (i) => i);
+  final map = <dynamic, dynamic>{};
+  for (int i = 0; i < size; i++) {
+    map['$i'] = list;
+  }
+  return utf8.encode(json.encode(map));
+}
+
+class JsonDecodeRequest {
+  final bool useSendAndExit;
+  final SendPort sendPort;
+  final Uint8List encodedJson;
+  const JsonDecodeRequest(this.useSendAndExit, this.sendPort, this.encodedJson);
+}
+
+Future<Map> decodeJson(bool useSendAndExit, Uint8List encodedJson) async {
+  final port = ReceivePort();
+  final inbox = StreamIterator<dynamic>(port);
+  final completer = Completer<bool>();
+  final workerExitedPort = RawReceivePort((v) {
+    completer.complete(true);
+  });
+  final workerErroredPort = RawReceivePort((v) {
+    stderr.writeln('worker errored out $v');
+    completer.completeError(true);
+  });
+  await Isolate.spawn(jsonDecodingIsolate,
+      JsonDecodeRequest(useSendAndExit, port.sendPort, encodedJson),
+      onError: workerErroredPort.sendPort, onExit: workerExitedPort.sendPort);
+  await completer.future;
+  workerExitedPort.close();
+  workerErroredPort.close();
+  await inbox.moveNext();
+  final decodedJson = inbox.current;
+  port.close();
+  return decodedJson;
+}
+
+Future<void> jsonDecodingIsolate(JsonDecodeRequest request) async {
+  final result = json.decode(utf8.decode(request.encodedJson));
+  if (request.useSendAndExit) {
+    sendAndExit(request.sendPort, result);
+  } else {
+    request.sendPort.send(result);
+  }
+}
+
+class SyncJsonDecodingBenchmark extends BenchmarkBase {
+  SyncJsonDecodingBenchmark(String name,
+      {@required this.sample, @required this.iterations})
+      : super(name);
+
+  @override
+  void run() {
+    int l = 0;
+    for (int i = 0; i < iterations; i++) {
+      final Map map = json.decode(utf8.decode(sample));
+      l += map.length;
+    }
+    assert(l > 0);
+  }
+
+  final Uint8List sample;
+  final int iterations;
+}
+
+class BenchmarkConfig {
+  BenchmarkConfig(this.suffix, this.sample);
+
+  final String suffix;
+  final Uint8List sample;
+}
+
+Future<void> main() async {
+  final jsonString =
+      File('benchmarks/IsolateJson2/dart/sample.json').readAsStringSync();
+  final json250KB = utf8.encode(jsonString); // 294356 bytes
+  final decoded = json.decode(utf8.decode(json250KB));
+  final decoded1MB = <dynamic, dynamic>{
+    "1": decoded["1"],
+    "2": decoded["1"],
+    "3": decoded["1"],
+    "4": decoded["1"],
+  };
+  final json1MB = utf8.encode(json.encode(decoded1MB)); // 1177397 bytes
+  decoded["1"] = (decoded["1"] as List).sublist(0, 200);
+  final json100KB = utf8.encode(json.encode(decoded)); // 104685 bytes
+  decoded["1"] = (decoded["1"] as List).sublist(0, 100);
+  final json50KB = utf8.encode(json.encode(decoded)); // 51760 bytes
+
+  final configs = <BenchmarkConfig>[
+    BenchmarkConfig("50KB", json50KB),
+    BenchmarkConfig("100KB", json100KB),
+    BenchmarkConfig("250KB", json250KB),
+    BenchmarkConfig("1MB", json1MB),
+  ];
+
+  for (BenchmarkConfig config in configs) {
+    for (final iterations in <int>[1, 4]) {
+      await JsonDecodingBenchmark(
+              "IsolateJson.Decode${config.suffix}x$iterations",
+              useSendAndExit: false,
+              sample: config.sample,
+              numTasks: iterations)
+          .report();
+      await JsonDecodingBenchmark(
+              "IsolateJson.SendAndExit_Decode${config.suffix}x$iterations",
+              useSendAndExit: true,
+              sample: config.sample,
+              numTasks: iterations)
+          .report();
+      SyncJsonDecodingBenchmark(
+              "IsolateJson.SyncDecode${config.suffix}x$iterations",
+              sample: config.sample,
+              iterations: iterations)
+          .report();
+    }
+  }
+}
diff --git a/benchmarks/IsolateJson/dart2/runtime/tests/vm/dart/export_sendAndExit_helper.dart b/benchmarks/IsolateJson/dart2/runtime/tests/vm/dart/export_sendAndExit_helper.dart
new file mode 100644
index 0000000..75628d6
--- /dev/null
+++ b/benchmarks/IsolateJson/dart2/runtime/tests/vm/dart/export_sendAndExit_helper.dart
@@ -0,0 +1 @@
+export 'dart:_internal' show sendAndExit;
diff --git a/benchmarks/IsolateJson/dart2/sample.json b/benchmarks/IsolateJson/dart2/sample.json
new file mode 100644
index 0000000..8d3888c
--- /dev/null
+++ b/benchmarks/IsolateJson/dart2/sample.json
@@ -0,0 +1 @@
+{"1":[{"1":{"1":"https://images.pexels.com/photos/733416/pexels-photo-733416.jpeg?cs=srgb&dl=animal-dog-pet-733416.jpg&fm=jpg","3":4608,"4":3456},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQw3eEZzgfnJWrfcDcwVIMy_Y1V5XoFESHax7oIlPzSQxJ-9s4o4A","3":200,"4":149},"3":{"1":"Pexels","2":"https://www.pexels.com/search/dog/","3":"Dog images · Pexels · Free Stock Photos","4":"You can find photos of bulldogs, retrievers, beagles and of course puppies.","10":"SguaQKdRqRdlsC"},"5":{"1":"lLLVuSKOKaBoUui"}},{"1":{"1":"http://www.petmd.com/sites/default/files/Dogs-and-vomiting.jpg","3":590,"4":428},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRTC2-E8GsGxryTokj2Djx33PcWpZAMYjiQRoIDS31Ux-ENHEWH","3":200,"4":144},"3":{"1":"PetMD","2":"https://www.petmd.com/dog/conditions/digestive/different-types-dog-vomit-and-what-they-indicate","3":"Different Types of Dog Vomit, and What They Indicate | petMD","4":"Different Types of Dog Vomit, and What They Indicate","10":"rgVRJtKOVXpdLe"},"5":{"1":"xUEbAsVXOsAMkMO"}},{"1":{"1":"https://images.pexels.com/photos/356378/pexels-photo-356378.jpeg?auto=compress&cs=tinysrgb&h=350","3":525,"4":350},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcToY88EZcEUA-UgqGCQVzuvR-8YxpK8RzNKMdd4KyeleCu35qyw","3":200,"4":133},"3":{"1":"Pexels","2":"https://www.pexels.com/search/dog/","3":"Dog images · Pexels · Free Stock Photos","4":"Free stock photo of animal, dog, pet, cute","10":"WFheUvWgXjwXtD"},"5":{"1":"prHPnfIfXBtFhXY"}},{"1":{"1":"https://static.boredpanda.com/blog/wp-content/uploads/2016/09/dogs-catching-treats-fotos-frei-schnauze-christian-vieler-66-57e8d9d0ec7ee__880.jpg","3":880,"4":660},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTr_sMZE8eDNndt5ttEAqacKcA-7IgQ0naBGd3A9XVG1GCIWdjj","3":200,"4":149},"3":{"1":"Bored Panda","2":"https://www.boredpanda.com/dogs-catching-treats-fotos-frei-schnauze-christian-vieler/","3":"Hilarious Expressions Of Dogs Trying To Catch Treats In Mid ...","4":"Dog Catching Treat","10":"hCBhQWwnqCrhel"},"5":{"1":"QalunmBgihmCcmj"}},{"1":{"1":"https://i.ytimg.com/vi/GruPNmCb-fQ/maxresdefault.jpg","3":1280,"4":720},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSYVG0JeW7ISz-4OcZ0CiUb0AE3cni6IzuGPYVIbJoAccAM2Umx","3":200,"4":112},"3":{"1":"YouTube","2":"https://www.youtube.com/watch?v=GruPNmCb-fQ","3":"dogs pictures of dogs","4":"","10":"MJJqMJlsVluLXc"},"5":{"1":"iMAXrPRULaMbSKm"},"7":{"1":{"11":{"1":"dogs pictures of dogs","2":"dogs barking, dogs 101, dogs mating, dogs howling, dogs who fail at being  dogs, dogs and babies, dogs funny, dogs talking, dogs annoying cats with  their frie...","3":"0:55","4":"149947","5":"1439251200000","6":"lifestyle","7":"505","8":"16"}}}},{"1":{"1":"https://i2-prod.mirror.co.uk/incoming/article9769854.ece/ALTERNATES/s615/PROD-Mixed-breed-lab-cross-8-week-old-puppy-in-farm-yard-near-Cochrane-AlbertajpgED.jpg","3":615,"4":409},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQqOXnBZYPgzFX8sgcA1iTrixxTbt15sDmyqN1Sy07IXB4acmbM","3":200,"4":133},"3":{"1":"Irish Mirror","2":"https://www.irishmirror.ie/news/world-news/facts-secret-life-of-dogs-9769971","3":"20 amazing dog facts as you watch Secret Life of Dogs series ...","4":"Mixed breed (lab cross) 8-week old puppy in farm","10":"pRFceHyATKdlWr"},"5":{"1":"pNVdrhPrtToqnQq"}},{"1":{"1":"https://images.pexels.com/photos/36477/dogs-batons-play-bite.jpg?auto=compress&cs=tinysrgb&h=350","3":712,"4":350},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSrHgf1GKr5sPjRAytMGs5xrzQ4akViEXH5sPlgs3wGKv4IiFVY9A","3":200,"4":98},"3":{"1":"Pexels","2":"https://www.pexels.com/search/dogs/","3":"1000+ Great Dogs Photos · Pexels · Free Stock Photos","4":"White Short Coat Dog","10":"kVfxtLWgXLSNXO"},"5":{"1":"IArTKYCDEkFNdQJ"}},{"1":{"1":"https://s.abcnews.com/images/US/160825_vod_orig_historyofdogs_16x9_992.jpg","3":992,"4":558},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSiS1BpxgmU8dZtUcZM9ZhCLH0MVGioF9jOuVeSUeKJorZqblc6Zw","3":200,"4":112},"3":{"1":"ABC News - Go.com","2":"https://abcnews.go.com/Lifestyle/history-dogs-pets/story?id=41671149","3":"The History of Dogs as Pets - ABC News","4":"buffering","10":"qPlCWSIdyKBbrM"},"5":{"1":"fXDVNQwDhIpuOwD"}},{"1":{"1":"https://media.mnn.com/assets/images/2013/10/Corgeek.jpg","3":900,"4":600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTtIZicNvg3fENA9X_vbniL40lcfwe7ioZJ6YulS0GmFe6GfGXI1A","3":200,"4":133},"3":{"1":"Mother Nature Network","2":"https://www.mnn.com/family/pets/stories/31-photos-of-dogs-wearing-glasses","3":"29 photos of dogs wearing glasses | MNN - Mother Nature Network","4":"Corgeek wearing thick-rimmed glasses","10":"lSHpPWQpaPISjU"},"5":{"1":"GYKvLpLqDGPFJXg"}},{"1":{"1":"https://static.scientificamerican.com/sciam/cache/file/B7943D3A-35D3-4D27-906280F095578EC2.jpg","3":320,"4":320},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSNCsn1AuroUrSnWm7f1Wykc9ROorMxkSXPHY-AVOOgV6L-0N0T","3":200,"4":200},"3":{"1":"Scientific American","2":"https://www.scientificamerican.com/article/the-origin-of-dogs/","3":"The Origin of Dogs - Scientific American","4":"","10":"fxsACuFxGdCjOi"},"5":{"1":"hugEXJRCUBEtjsd"}},{"1":{"1":"https://cdn.psychologytoday.com/sites/default/files/styles/image-article_inline_full/public/field_blog_entry_images/2018-03/sandeephanda.jpg?itok=iXHqSFgZ","3":639,"4":430},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSFEOQ3smXMSwFXqUvEr1vJ5x21ciMWO0gAiGNpRCvg5rhwxDkD","3":200,"4":134},"3":{"1":"Psychology Today","2":"https://www.psychologytoday.com/us/blog/canine-corner/201803/are-there-some-truths-behind-isle-dogs","3":"Are There Some Truths Behind 'Isle of Dogs'? | Psychology Today","4":"SandeepHanda photo - Creative Commons License CC0","10":"bagMKHtgcbRaDB"},"5":{"1":"modfWdcGLNxQAyJ"}},{"1":{"1":"https://www.healthline.com/hlcmsresource/images/Dog-Breeds-Health-Problems/3180-Pug_green_grass-732x549-thumbnail.jpg","3":732,"4":549},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT9fyeRFN6y6AUMwe_0vQvP7mCIf5iurFZrTAcei1CQlN2gfwqrig","3":200,"4":149},"3":{"1":"Healthline","2":"https://www.healthline.com/health/dog-breeds-and-health-issues","3":"12 Common Dog Breeds and Their Health Issues","4":"","10":"JhFfVvGodohGEK"},"5":{"1":"oeXrDfFoklVmGtq"}},{"1":{"1":"https://static.boredpanda.com/blog/wp-content/uploads/2016/09/dogs-catching-treats-fotos-frei-schnauze-christian-vieler-4-57e8d08f5fc8f__880.jpg","3":880,"4":1173},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTHMV0D4vwUH9TK5xMCanXYzWgaKAefyVB33Ehg06OK31Nwqm9g","3":149,"4":200},"3":{"1":"Bored Panda","2":"https://www.boredpanda.com/dogs-catching-treats-fotos-frei-schnauze-christian-vieler/","3":"Hilarious Expressions Of Dogs Trying To Catch Treats In Mid ...","4":"Dog Catching Treat","10":"FyEKtGxRPjfnKO"},"5":{"1":"hDUbUkdaJjjbuqP"}},{"1":{"1":"http://www.dogbreedslist.info/uploads/allimg/dog-pictures/Beagle-1.jpg","3":400,"4":300},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQox7_4om515DH4IbD8Prr6Sbnq30OFIJjaqMeHIjlsLy7nvUfX5w","3":200,"4":149},"3":{"1":"Dog Breeds List","2":"http://www.dogbreedslist.info/all-dog-breeds/","3":"All Dog Breeds, All Dog Types, All Dog List Names & Pictures","4":"Beagle","10":"bfNEoguPVtbtLd"},"5":{"1":"CnXysoILLwWyCtD"}},{"1":{"1":"https://media1.fdncms.com/stranger/imager/u/original/25231124/dog-stock-photos-9.jpg","3":700,"4":508},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQIvUyRcVTeIRW3TJQfwIJAZhoPB4cr_OKWIc0zVIZoEv63MkmHYA","3":200,"4":144},"3":{"1":"The Stranger","2":"https://www.thestranger.com/slog/2017/06/21/25230993/drunk-man-killed-by-a-pack-of-dogs","3":"Drunk Man Eaten Alive By a Pack of Dogs - Slog - The Stranger","4":"This is a free stock photo of a dog. If you want to see the","10":"IgSvbNIltWEEwd"},"5":{"1":"cYgCBcJcaUhVfax"}},{"1":{"1":"https://i.dailymail.co.uk/i/pix/2017/04/24/16/3F907F8A00000578-4440672-image-m-84_1493049047546.jpg","3":470,"4":518},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSncPu-uh8ZvUmH5pHt44DzkScX-iiFVHHSJPZXJpob0NJKtJ9ylg","3":181,"4":200},"3":{"1":"Daily Mail","2":"https://www.dailymail.co.uk/sciencetech/article-4440672/Map-shows-breeds-dogs-evolved-globe.html","3":"Map shows how breeds of dogs evolved around the globe | Daily ...","4":"The researchers have spent year sequencing the genomes of dogs, including  golden retrievers (pictured","10":"IexeHMwHeSSRNj"},"5":{"1":"pAbGXlIdKaoFpeq"}},{"1":{"1":"https://www.telegraph.co.uk/content/dam/Pets/spark/royal-canin/rc-7_dogs.jpg?imwidth=450","3":480,"4":300},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQNFuT_iGr6VUtsCWNJPagVAQbwr38Hf60DH71_60-P6Q43IccrbA","3":200,"4":124},"3":{"1":"The Telegraph","2":"https://www.telegraph.co.uk/pets/essentials/seven-types-of-dog/","3":"The 7 types of dog","4":"7 types of dog","10":"NMEuhtiMRpwOpI"},"5":{"1":"OfowkXWGdhgIatC"}},{"1":{"1":"https://amp.businessinsider.com/images/5ab514477708e97acc0f0cc9-750-562.jpg","3":750,"4":562},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSDknn1s15Hxsl9Ia0VWFreeM2JQ3j_1quuxN2gct1k2UNs-mKjDg","3":200,"4":149},"3":{"1":"Business Insider","2":"https://www.businessinsider.com/isle-of-dogs-movie-i-love-dogs-tweets-reactions-2018-3","3":"Isle of Dogs' is pronounced 'I love dogs' and people are ...","4":"Isle of Dogs movie Wes Anderson Fox Searchlight Pictures","10":"iXypfDeEmRoQat"},"5":{"1":"HTpoQgGnRUeWIXc"}},{"1":{"1":"https://images.agoramedia.com/everydayhealth/gcms/Best-and-Worst-Dog-Breeds-for-Allergies-06-1440x810.jpg?width=730","3":730,"4":410},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ_xRgFtXHo-nTTWZhLeZWReUdLNv2kLjUdVqneQsYHTG1Ql83_","3":200,"4":112},"3":{"1":"Everyday Health","2":"https://www.everydayhealth.com/allergy-pictures/best-and-worst-dog-breeds-for-people-with-allergies.aspx","3":"Best and Worst Dog Breeds for People With Allergies ...","4":"Best: The Bichon Frise and Labradoodle Are Great Hypoallergenic Dogs","10":"ehAAXIHECfjrGJ"},"5":{"1":"wdVCorFRYSIGGKr"}},{"1":{"1":"http://www.insidedogsworld.com/wp-content/uploads/2016/03/Dog-Pictures.jpg","3":1600,"4":1092},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSwCLO0IhU0gJtCtO7z_oe2TqADEtc_s57hjyxba-omx7Q524EF","3":200,"4":136},"3":{"1":"Inside Dogs World","2":"http://www.insidedogsworld.com/doggy-dna-learn-how-to-determine-your-dogs-breed/","3":"Doggy DNA - Learn How to Determine Your Dog's Breed - Inside ...","4":"Doggy DNA – Learn How to Determine Your Dog's Breed","10":"uuCtKfTFMKWRRC"},"5":{"1":"EQBsTFvYFYLhfah"}},{"1":{"1":"https://www.planwallpaper.com/static/images/3e9c5ad3af07e573b0e74bdb0a1dce3e.jpg","3":1600,"4":1200},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQkrUyVlOK9hkIWgIDkh4os23NxTTL925HmkGHa0KhalcOy29at","3":200,"4":149},"3":{"1":"planwallpaper.com","2":"https://www.planwallpaper.com/pictures-dogs","3":"Nice pictures of different types of dogs including, Labrador ...","4":"Pictures of Dogs","10":"mklFCiXFYyFYkP"},"5":{"1":"FlnaWswreHfokNn"}},{"1":{"1":"https://pbs.twimg.com/profile_images/962016398657536000/ygoklDXh_400x400.jpg","3":400,"4":400},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR45pwTGoDqneOjTgTvSA6rhDEkmhprQi08wkhcR3qIW3vLNSZuaQ","3":200,"4":200},"3":{"1":"Twitter","2":"https://twitter.com/isleofdogsmovie","3":"Isle of Dogs (@isleofdogsmovie) | Twitter","4":"Isle of Dogs","10":"COMSuLFTKJfFRc"},"5":{"1":"NXbmwUJVPlrVJDq"}},{"1":{"1":"https://www.telegraph.co.uk/content/dam/news/2017/10/16/alamy_trans_NvBQzQNjv4Bq_yHCl97T-pmmS890d_-lMLlnpmZnLOvn-dZ00jolDcU.png?imwidth=450","3":480,"4":300},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSpabtx60ZO8jN9PviVFQHSNuHQE4Hohoo2nEZG0wDm7WRLYtH2cw","3":200,"4":124},"3":{"1":"The Telegraph","2":"https://www.telegraph.co.uk/news/2017/10/16/california-first-us-state-bans-sale-dogs-puppy-mills/","3":"California to be first US state that bans sale of dogs from ...","4":"Follow the author of this article","10":"AbJpjbQJvFhEOp"},"5":{"1":"aLDaXCkraGQRXJj"}},{"1":{"1":"https://images.pexels.com/photos/850602/pexels-photo-850602.jpeg?auto=compress&cs=tinysrgb&h=350","3":525,"4":350},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR13B6xa4L-1BX-lW6akzUcZGSagbZX-aZpI4ynZ8H8EBufjEgk","3":200,"4":133},"3":{"1":"Pexels","2":"https://www.pexels.com/search/dogs/","3":"1000+ Great Dogs Photos · Pexels · Free Stock Photos","4":"Photography of Three Dogs Looking Up","10":"bCleKSaPgwaqsp"},"5":{"1":"HqvqIYprPdbySFd"}},{"1":{"1":"https://g77v3827gg2notadhhw9pew7-wpengine.netdna-ssl.com/wp-content/uploads/2017/02/side-effects-of-dog-seizures_canna-pet-e1488305138683-1024x675.jpg","3":1024,"4":675},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcROkfK9Akkc6FPWW6QbNvnIZIvYc2jh6J-FiFW6i6cVMFWGs6CS","3":200,"4":131},"3":{"1":"Canna-Pet","2":"https://canna-pet.com/side-effects-dog-seizures/","3":"Side Effects of Dog Seizures | Canna-Pet","4":"When your dog suffers from a seizure, things can get scary. Unless you have  prior experience dealing ...","10":"CuWqYDalAItEAC"},"5":{"1":"ShraFjJEYLkJTuM"}},{"1":{"1":"https://gfnc1kn6pi-flywheel.netdna-ssl.com/wp-content/uploads/2016/12/beagle.jpg","3":2734,"4":1503},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR3tZYFHIKJ_a_DdRQ7iwKDgbdovkQxiOGePEGb4LO0jA1ZiFL9Yg","3":200,"4":109},"3":{"1":"The Happy Puppy Site","2":"https://thehappypuppysite.com/dog-breed-groups/","3":"Different Types Of Dogs: The Dog Breed Groups Explained","4":"","10":"PjvrqgbFNJbdVk"},"5":{"1":"yatyBgWoyTxLMtP"}},{"1":{"1":"http://images6.fanpop.com/image/photos/33200000/cute-puppy-dogs-33237869-1024-768.jpg","3":1024,"4":768},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRo2A34saU-H_gKu_2IRv3s1V9iDvCSj8GCu5UPEglrHBh4Kp8qEw","3":200,"4":149},"3":{"1":"Fanpop","2":"http://www.fanpop.com/clubs/dogs/images/33237869/title/cute-puppy-photo","3":"Dogs images cute puppy HD wallpaper and background photos ...","4":"Dogs images cute puppy HD wallpaper and background photos","10":"egPjrYYHpdvPme"},"5":{"1":"EEICyeYkCvYwXLO"}},{"1":{"1":"https://d17fnq9dkz9hgj.cloudfront.net/uploads/2012/11/dog-how-to-select-your-new-best-friend-thinkstock99062463.jpg","3":2048,"4":1536},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTRIvpifkq9hrRGj8H8kia131DoNNU69BJD13Vbh0RS1Fyc3eir","3":200,"4":149},"3":{"1":"Petfinder","2":"https://www.petfinder.com/pet-adoption/dog-adoption/type-dog-adoption/","3":"What Kind of Dog is Right for You? | Petfinder","4":"How to Select Your New Best Friend","10":"hvnHFcgyhBEWKo"},"5":{"1":"XvtJWtvCTtTUGUE"}},{"1":{"1":"https://phz8.petinsurance.com/-/media/all-phz-images/2016-images-850/painful_condition_dogs850.jpg","3":850,"4":477},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSUaqtvYYYQKvrfvutDGGaiNT8vb-nmbFhs4svZisNCJutwkT7s","3":200,"4":112},"3":{"1":"Pet HealthZone - Nationwide Pet Insurance","2":"https://phz8.petinsurance.com/ownership-adoption/pet-ownership/pet-behavior/secret-language-of-dogs","3":"Secret Language of Dogs","4":"5 of the Most Painful Conditions for Dogs Infographic","10":"WvTABueqaEenmO"},"5":{"1":"RnDslGiNkbYImvT"}},{"1":{"1":"https://boygeniusreport.files.wordpress.com/2016/11/puppy-dog.jpg?quality=98&strip=all&w=782","3":782,"4":529},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRtCG9yitxng6vXipfsQ9Ix4kKetdMjZqC6SEsLsaWiUXpvn2DoWw","3":200,"4":135},"3":{"1":"BGR.com","2":"https://bgr.com/2018/04/30/dog-food-recall-illness-2018-australia/","3":"Pet food maker whose food sickened dozens of dogs will now ...","4":"dog food recall","10":"CnJIxRQSgtHwrK"},"5":{"1":"efIduFqGkIJUaKO"}},{"1":{"1":"https://s3.amazonaws.com/cdn-origin-etr.akc.org/wp-content/uploads/2017/11/14144545/Afghan-Hound.981631440-400x267.jpg","3":400,"4":267},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSEOtJxduRSati0Da8xMEWEu-XkITbsLG9p7HRWqPdom6wq7ZpSbQ","3":200,"4":133},"3":{"1":"American Kennel Club","2":"https://www.akc.org/dog-breeds/largest-dog-breeds/","3":"Largest Dog Breeds – American Kennel Club","4":"Afghan Hound","10":"fYEbncuQaxwNql"},"5":{"1":"YAgwGCfdvHlIfNe"}},{"1":{"1":"http://www.termcoord.eu/wp-content/uploads/2014/06/Dog1-300x300.jpg","3":300,"4":300},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSyYEIkXsOSEDtelosTsFUwgOvndtVRU05csD-Xls1ih23V6xkIQg","3":200,"4":200},"3":{"1":"TermCoord","2":"http://termcoord.eu/2014/06/language-dogs/","3":"The Language of Dogs - Terminology Coordination Unit [DGTRAD ...","4":"Whether you're a cat or dog person, or even a… turtle person, knowing what  your pet is trying to say ...","10":"tqEScIlTpwyTGg"},"5":{"1":"IltOuDYoEvnfdNp"}},{"1":{"1":"https://2.bp.blogspot.com/-fZNgK0_TgOc/WK82Vp7SKoI/AAAAAAAAClQ/Wp-ptafLniU4Qrq21v9_-GceX1wScZklgCLcB/s1600/dog-puppy-info.jpg","3":736,"4":1128},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTef30plTwjVco7_6sYT-1MGDCo13ArTTkrRDKgdS5RY7nHabQ9ZA","3":130,"4":200},"3":{"1":"Companion Animal Psychology","2":"https://www.companionanimalpsychology.com/p/all-about-dogs.html","3":"Companion Animal Psychology: All About Dogs","4":"Essential info for owners of dogs, like this cute mixed-breed puppy","10":"tCihFexyfCGTyK"},"5":{"1":"DXPnPecpPDdVSyL"}},{"1":{"1":"http://discovermagazine.com/~/media/Images/Issues/2016/December/DSC-A1216_01.jpg","3":1200,"4":1054},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcToOmuh2CoCK5KII7an_lwwd9QvDUXWFv-o5C3ZtTpIMkkxeIFMkg","3":200,"4":175},"3":{"1":"Discover Magazine","2":"http://discovermagazine.com/2016/dec/the-origins-of-dogs","3":"The Origins of Dogs | DiscoverMagazine.com","4":"William Zuback/Discover","10":"SYCeycfBKoolRt"},"5":{"1":"qMPWqKXVSSnvyAS"}},{"1":{"1":"https://www.petmd.com/sites/default/files/excess-protein-urine-dogs.jpg","3":590,"4":428},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTXDZ8HeQFcHunFGNZn9x_lNaMnT4RNp6musZ8E9uWkt2E8L97HCA","3":200,"4":144},"3":{"1":"PetMD","2":"https://www.petmd.com/dog/conditions/urinary/c_multi_proteinuria","3":"Excess Protein in the Urine of Dogs | petMD","4":"Excess Protein in the Urine of Dogs","10":"FYHbeBBukLntuP"},"5":{"1":"CyfaFOmUMgNnQab"}},{"1":{"1":"https://timedotcom.files.wordpress.com/2017/04/world-of-dogs-06.jpg","3":2560,"4":1828},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQC_HWVgXvr-oaEoiPhQCqlakG4CjOJhOFpO0iz1offaVxC8saPTA","3":200,"4":142},"3":{"1":"Time","2":"http://time.com/4775436/how-smart-is-a-dog-really/","3":"A Dog's Brain: Inside the Complex Canine Mind | Time","4":"Isabella, a 14 year-old Pomeranian photographed in New York, NY on April","10":"efLLIMPDyVtVHU"},"5":{"1":"muCEStXmFieFAXV"}},{"1":{"1":"https://www.indiewire.com/wp-content/uploads/2018/02/05-isle-of-dogs-1-w710-h473.jpg?w=710","3":710,"4":473},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQZ5l8kHahaV_4Y9pHXud4pFwy4dG1DSUy5Pq5L_BBUcKCRyvo6og","3":200,"4":133},"3":{"1":"IndieWire","2":"https://www.indiewire.com/2018/02/wes-anderson-isle-of-dogs-soundtrack-kurosawa-seven-samurai-1201933682/","3":"Wes Anderson's 'Isle of Dogs' Official Soundtrack Revealed ...","4":"\"Isle of Dogs\"","10":"KIxyaUxLUheWqo"},"5":{"1":"cmMlrpWYBWodKUt"}},{"1":{"1":"https://doggonesafe.com/Resources/Pictures/close%20up%20on%20two%20dogs%20mouths.jpg","3":1600,"4":1066},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSvSC5m7zvD0WLFNVWXbdtql8yUsa_QODDOSoLBxzmueG463wVm","3":200,"4":133},"3":{"1":"Doggone Safe","2":"https://doggonesafe.com/event-2017914","3":"Doggone Safe - Learn How To Effectively Manage Groups of Dogs ...","4":"Learn How To Effectively & Safely Manage Groups of Dogs In an Off Leash  Environment","10":"bMtNLBtEdWoimM"},"5":{"1":"kIroRbkLSsunErY"}},{"1":{"1":"https://ksassets.timeincuk.net/wp/uploads/sites/55/2018/03/Isle-Of-Dogs-Wes-Anderson-920x584.jpg","3":920,"4":584},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRBtFZgJ_dAq_1mez2TICKHMQF8A5Y_H2TOdjTbhKwI5gJpalpj6Q","3":200,"4":126},"3":{"1":"NME.com","2":"https://www.nme.com/news/film/wes-anderson-isle-of-dogs-accused-of-cultural-appropriation-2270903","3":"Wes Anderson's new film 'Isle Of Dogs' accused of cultural ...","4":"Wes Anderson's 'Isle Of Dogs' Credit: Press/Fox Searchlight","10":"WeFAhcACgFtWre"},"5":{"1":"WSjvUvHYAcYxlOV"}},{"1":{"1":"https://www.southwalesargus.co.uk/resources/images/8069964/?type=responsive-gallery-fullscreen","3":1200,"4":853},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSPbAFtbuGs_brIhYaS5WeL1XS3d_-0cobmR3emTzDOfFIAOYcYKA","3":200,"4":142},"3":{"1":"South Wales Argus","2":"https://www.southwalesargus.co.uk/news/16354776.dog-of-the-week-special-urgent-homes-needed-for-influx-of-dogs/","3":"DOG OF THE WEEK SPECIAL: Urgent homes needed for influx of ...","4":"DOG OF THE WEEK SPECIAL: Urgent homes needed for influx of dogs","10":"iPPwrCQrHtUwnj"},"5":{"1":"ThnKbyBJkSonlPR"}},{"1":{"1":"http://images1.fanpop.com/images/photos/1900000/Puppy-3-dogs-1993798-1024-768.jpg","3":1024,"4":768},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRT4zOhw6SIGsnLaqC8XG3RQTwx1iEJKT98YoiDDYgCKr2dGWhrjw","3":200,"4":149},"3":{"1":"Fanpop","2":"http://www.fanpop.com/clubs/dogs/images/1993798/title/puppy-3-wallpaper","3":"Dogs images Puppy! <3 HD wallpaper and background photos ...","4":"Dogs images Puppy! <3 HD wallpaper and background photos","10":"FIfPysmQXPcEoO"},"5":{"1":"llqdQJtxyVThaQa"}},{"1":{"1":"https://media.newyorker.com/photos/591dccd9394e5718feb60feb/master/w_767,c_limit/NY-Hot-Dogs-23126.jpg","3":767,"4":767},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR0ZnFlsmwesaIXdETZY5aoM2LRKo3hoDcKy2mvnKVFW66j1iIY","3":200,"4":200},"3":{"1":"The New Yorker","2":"https://www.newyorker.com/culture/photo-booth/the-resplendent-humanity-of-dogs-up-close","3":"The Resplendent Humanity of Dogs, Up Close | The New Yorker","4":"18","10":"obsdwjSMvUjVkE"},"5":{"1":"dVCLBRwfFqBXWCd"}},{"1":{"1":"https://www.smartcompany.com.au/content/uploads/2015/02/labrador-600.jpg","3":600,"4":476},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ1oCXNLUiN5QKs8ocIR9-B6Wp8mEu0ZJthZWrIy4_xQ5X2yVyD0A","3":200,"4":158},"3":{"1":"SmartCompany","2":"https://www.smartcompany.com.au/business-advice/legal/dog-food-brand-purina-accused-of-killing-thousands-of-dogs-in-us-lawsuit/","3":"Dog food brand Purina accused of killing thousands of dogs in ...","4":"Dog food brand Purina accused of killing thousands of dogs in US lawsuit","10":"mAroiaYTrBkUhJ"},"5":{"1":"QclmbLEPrprbuAQ"}},{"1":{"1":"https://pmcvariety.files.wordpress.com/2018/03/klaus-dyba_dog1-e1521434052499.jpg?w=1000&h=563&crop=1","3":1000,"4":563},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQmpK4KAjLAgKsfHh3h4UgzoEWBZs8dkmcbPUkNwKCR3BQvVL8E","3":200,"4":112},"3":{"1":"Variety","2":"https://variety.com/2018/digital/news/isle-of-dogs-photo-filters-vsco-1202729830/","3":"Isle of Dogs Photo Filters Launched by VSCO App – Variety","4":"VSCO Isle of Dogs","10":"yIIQcRMdUELwFK"},"5":{"1":"DRwSIJbAJufcUvs"}},{"1":{"1":"https://stylesatlife.com/wp-content/uploads/2015/11/Types-of-Dogs-1.jpg","3":500,"4":400},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtD7XVGiTjOyaMLl6KKi1zgmt4Ksg3FqjyjYxTHpFfBlTf8Cp9gw","3":200,"4":160},"3":{"1":"Styles At Life","2":"https://stylesatlife.com/articles/types-of-dogs/","3":"25 Different Types of Dogs with Origins and Pictures | Styles ...","4":"Types of Dogs 1","10":"tOJvdJJkojReHe"},"5":{"1":"gHncbSaPleDBLkS"}},{"1":{"1":"https://static.independent.co.uk/s3fs-public/thumbnails/image/2018/10/17/11/pitbull-terrier.jpg","3":1885,"4":1414},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTFkzuvCcwzalnLPoz_B_GFuVJbWdy1gU18WCNntvEx6723UA_4","3":200,"4":149},"3":{"1":"The Independent","2":"https://www.independent.co.uk/topic/Dogs","3":"Dogs - latest news, breaking stories and comment - The ...","4":"Hundreds of dogs killed unnecessarily due to misguided laws, say MPs. '","10":"dBrfyemnfqPUHL"},"5":{"1":"bDcFFScCEXkdfSE"}},{"1":{"1":"https://housemydog.com/blog/wp-content/uploads/2017/01/cute-bulldog-smiling-sleeping-dog-narcoleptic-frenchiebutt-millo-2.jpg","3":605,"4":605},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR5p9r1S8m6p7LxLVWdn7SIZ7pOxT4LjWxyXmGICcPsSkzdDBC7","3":200,"4":200},"3":{"1":"HouseMyDog","2":"https://housemydog.com/blog/12-photos-of-dogs-and-people-hugging","3":"12 Photos Of Dogs And People Hugging | HouseMyDog Blog","4":"12 Photos of Dogs And People Hugging","10":"BfHFdqIsgdXnvg"},"5":{"1":"hGdfYXJjwBWNhiH"}},{"1":{"1":"http://blog.petmeds.com/wp-content/uploads/2015/12/Dogs-scoot-for-a-variety-of-reasons-720x539.jpg","3":720,"4":539},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTJY4S4-LSPElx1yw0jWJlAVtb4nVk_k1iZWjh5nSFLtfqw7eHJ","3":200,"4":149},"3":{"1":"Pet Meds","2":"https://blog.petmeds.com/ask-the-vet/dogs-that-scoot/","3":"The five W's of dogs that scoot","4":"Pug puppy scoots in the grass","10":"QuSVvhWOfrLOve"},"5":{"1":"NSiUBmiSPsgmdbh"}},{"1":{"1":"https://www.petdoors.com/blog/wp-content/uploads/2016/11/20160608_162336.jpg","3":3445,"4":2134},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRxitlvtt6iIOW0ARaZPUAD3TDnUbICzdaNH-MolMhbNFPkcjDLgQ","3":200,"4":124},"3":{"1":"Pet Doors","2":"https://www.petdoors.com/blog/weird-sleeping-positions-of-dogs/","3":"8 Weird Sleeping Positions of Dogs and What They May Mean","4":"tonks sleeping on side","10":"ugFixbcaUjflVW"},"5":{"1":"XjfrAbWCSueIFVj"}},{"1":{"1":"https://www.rover.com/blog/wp-content/uploads/2014/08/puppy-in-popcorn-bucket-960x540.jpg","3":960,"4":540},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRkb9P2Sc2YYiAQL-svc-HhRTTRRaoRXmDmCPAhlZXEnxUnC_S_DQ","3":200,"4":112},"3":{"1":"Rover.com","2":"https://www.rover.com/blog/list-of-dog-movies/","3":"Dog best friends in film: A list of dog movies","4":"Puppy in popcorn - list of dog movies","10":"KAbDbSDgeRWRSh"},"5":{"1":"qHkIgRTfksaBNLN"}},{"1":{"1":"http://www.beliefnet.com/columnists/islaminamerica/files/2015/07/puppy-300x200.jpg","3":300,"4":200},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTFpW2rKLGgXz98fq6kA1ZfOpppZFQCS7DiWYZc_E9yw92k8g4W","3":200,"4":133},"3":{"1":"Beliefnet","2":"http://www.beliefnet.com/columnists/islaminamerica/2015/08/01/of-dogs-faith-and-islam/","3":"Of Dogs, Faith and Islam\" - Islam In America","4":"The Qu'ran doesn't label dogs as untouchable (in fact, there's quite a nice  vignette of the Prophet ...","10":"wTWCnjOjpgPeqC"},"5":{"1":"pcaojGbsRwBSnlg"}},{"1":{"1":"https://nationalpostcom.files.wordpress.com/2018/08/pot-dog-1.png","3":1000,"4":750},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSMHAQsQ9v5uiLxRcYzACMQaeYlASsLgRCdf7FQCR7dvd-dq5BpXg","3":200,"4":149},"3":{"1":"National Post","2":"https://nationalpost.com/cannabis/veterinarian-warns-dog-owners-on-cannabis-risks-saying-cases-come-in-weekly","3":"Vet warns of increase in cases of dogs suffering from ...","4":"Aspen, a Husky who was taken to emergency after consuming a presumed  cannabis product at a public ...","10":"ifbKSyggOghgok"},"5":{"1":"QYLiYKmNioYcMKF"}},{"1":{"1":"https://cdn1-www.dogtime.com/assets/uploads/2015/07/file_26979_column_grumpy-dog-earl.jpg","3":399,"4":400},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSUhbiihu3jBahI_uxXELM5b39I1Jfgys43_yg2wcvB9u16gV1d_w","3":199,"4":200},"3":{"1":"Dogtime","2":"https://dogtime.com/trending/26979-meet-grumpy-dog-the-grumpy-cat-of-dogs","3":"Meet Grumpy Dog: The Grumpy Cat Of Dogs - Dogtime","4":"Meet Grumpy Dog: The Grumpy Cat Of Dogs","10":"tkDKCPGmDEwsLp"},"5":{"1":"pKJSXPQvDqeoJwt"}},{"1":{"1":"https://d17fnq9dkz9hgj.cloudfront.net/uploads/2012/11/147083304-dogs-home-alone-all-day-632x475.jpg","3":632,"4":475},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQqYHACs2dhbqxtHrQkONT2kpL_266Yyz1Nr8Qx47NjM54tWY_rvg","3":200,"4":150},"3":{"1":"Petfinder","2":"https://www.petfinder.com/dogs/dog-care/dogs-home-alone-all-day/","3":"Dogs Who Are Home Alone All Day | Petfinder","4":"Dogs Who Are Home Alone All Day","10":"aRApkLsryspgvr"},"5":{"1":"pTnBSeEyxfvAcdB"}},{"1":{"1":"https://www.what-dog.net/Images/faces2/scroll008.jpg","3":600,"4":600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQeRO06aRgpx_cMscbjMIB1xhtYZOQ1x2lr4JL1zyw1V9dtVQlfzA","3":200,"4":200},"3":{"2":"https://www.what-dog.net/","3":"What is your dog?","4":"","10":"DVhcDonMkEPCvc"},"5":{"1":"XuuDRWfawIEwkmT"}},{"1":{"1":"https://usercontent1.hubstatic.com/7968066.jpg","3":1024,"4":768},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSLTxAtZayQYGIp-mX48YfSTdZ1uZBbCG7C13VvSipFeWpT1XLS0g","3":200,"4":149},"3":{"1":"PetHelpful","2":"https://pethelpful.com/dogs/The-Advantages-and-Disadvantages-of-Having-a-Dog","3":"The Advantages and Disadvantages of Having a Dog | PetHelpful","4":"","10":"PHAjVhJQgBreCM"},"5":{"1":"KGclwXLTfhffRbE"}},{"1":{"1":"http://www.picturesofdogs.co.uk/pictures/poodle1%20copy.jpg","3":450,"4":345},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTEd2IqP7IPgmOq72NfG6kBOSML6oNcKU1RP7GUVcXFhygTyCFiVw","3":200,"4":153},"3":{"2":"http://www.picturesofdogs.co.uk/","3":"Pictures of Dogs- Pictures Please","4":"Pictures of Dogs","10":"MjeyCYwFOOXIiD"},"5":{"1":"IqdKtHYxoHDvClM"}},{"1":{"1":"https://i.ytimg.com/vi/jJGItJSU1aM/hqdefault.jpg","3":480,"4":360},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT8f2B8tVeG9hrinolfzSFeYqiSgGiK6-HYtLlrUhVDg7YTT-wJgQ","3":200,"4":149},"3":{"1":"YouTube","2":"https://www.youtube.com/watch?v=jJGItJSU1aM","3":"Different Breeds of Dogs","4":"Different Breeds of Dogs","10":"fJgMXsPToLMMdP"},"5":{"1":"kwiHRNPInpkbNNL"},"7":{"1":{"11":{"1":"Different Breeds of Dogs","2":"A slide show of a different variety of Dogs","3":"4:15","4":"34165","5":"1218844800000","6":"Natasha Eyden","7":"79","8":"20"}}}},{"1":{"1":"https://3c1703fe8d.site.internapcdn.net/newman/gfx/news/hires/2018/2-dogs.jpg","3":1920,"4":1755},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRLa94Qb6HvKe7C-Ubn0jxrHHlSj4eemB7DwvDrv6RVjt8Oa7tgSQ","3":200,"4":182},"3":{"1":"Phys.org","2":"https://phys.org/news/2018-10-evidence-dogs-accompanying-humans-europe.html","3":"Evidence of dogs accompanying humans to Europe during Neolithic","4":"Credit: CC0 Public Domain","10":"UlWSqGAKobFJKA"},"5":{"1":"UILGEmQFEFoVAsn"}},{"1":{"1":"https://pixel.nymag.com/imgs/daily/vulture/2018/03/14/14-isle-of-dogs.w1200.h630.jpg","3":1200,"4":630},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTnStaY7_N_-4QdrCvyM4lL2lhbyva5oq2XffsaNXNFpAs9vGM0","3":200,"4":105},"3":{"1":"Vulture","2":"http://www.vulture.com/2018/03/watch-this-video-introducing-the-dogs-of-isle-of-dogs.html","3":"Watch This Short Film Introducing the Dogs of Isle of Dogs","4":"","10":"mypNHTvWswtCOc"},"5":{"1":"lDgHnJMPFmMtKJf"}},{"1":{"1":"https://i.pinimg.com/736x/f5/7e/00/f57e00306f3183cc39fa919fec41418b--teddy-bears-teddy-bear-dogs.jpg","3":736,"4":1169},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTJCqloOub7mjnQN642eZl5b6--cZA9bCIbF2djsa8iu49b4ZCGWg","3":125,"4":200},"3":{"1":"Pinterest","2":"https://www.pinterest.com/pin/436075176396371066/","3":"Pin by Debbie Smith on A ! ADORABLE | Pinterest | Dog, Animal ...","4":"Pin by Debbie Smith on A ! ADORABLE | Pinterest | Dog, Animal and Puppys","10":"hKSgDyvRymSNOK"},"5":{"1":"nrkXvuIUqRUTJTg"}},{"1":{"1":"https://s.abcnews.com/images/Video/GTY_dog_day_jef_160826_16x9_992.jpg","3":992,"4":558},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRbFXNRTNnAXdUs_QDs214jo1FjE8COPoo4G-_P9qWw9ARNwuyb","3":200,"4":112},"3":{"1":"ABC News - Go.com","2":"https://abcnews.go.com/Lifestyle/history-dogs-pets/story?id=41671149","3":"The History of Dogs as Pets - ABC News","4":"","10":"dQNaxWEwmsEgUC"},"5":{"1":"bjrXwgWopfKXlyE"}},{"1":{"1":"https://ichef.bbci.co.uk/news/660/cpsprodpb/B45D/production/_100637164_dogs_fox.jpg","3":660,"4":371},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT91tSrZ8U2pYvHbjt0zlEMAUJqWF4MaUv1eQ_LUQljDRpWygA7ag","3":200,"4":112},"3":{"1":"BBC","2":"https://www.bbc.co.uk/news/entertainment-arts-43595611","3":"Why Isle of Dogs is no shaggy dog story - BBC News","4":"Isle of Dogs","10":"adxyWuDDKnakQS"},"5":{"1":"NSqbjoIcrHjXDQU"}},{"1":{"1":"http://bdfjade.com/data/out/65/5719631-picture-of-dogs.jpg","3":600,"4":507},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTghCT-JVAlT-a7YLqHgjsIUDd22U7pV1NlFp2lA9z2XY4PrdZncQ","3":200,"4":168},"3":{"1":"BDFjade","2":"http://bdfjade.com/picture-of-dogs.html","3":"Picture Of Dogs - BDFjade","4":"Dogs Background Galleries » PT-5719631 FHDQ Pictures","10":"TtaqJYSoykOYvn"},"5":{"1":"lHKIsGwxfrMSwTa"}},{"1":{"1":"https://www.stayathomemum.com.au/cache/860x380-0/wp-content/uploads/2017/01/photo-1513549054-cb3611a004fe.jpg","3":574,"4":380},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTlsQHCHS3pVNI4Jm3Z7tcezteSPg9GGv676JZLJBEsNjYvYJHBaQ","3":200,"4":132},"3":{"1":"Stay at Home Mum","2":"https://www.stayathomemum.com.au/houseandhome/pets-and-pet-food/10-breeds-of-dogs-suited-to-family-life-and-children/","3":"10 Breeds Of Dogs Suited To Family Life And Children","4":"","10":"vmDYjbCRtwgNQP"},"5":{"1":"WkdpRVbYsEDmsBq"}},{"1":{"1":"https://stylesatlife.com/wp-content/uploads/2015/11/Types-of-Dogs-22.jpg","3":482,"4":420},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSr-BIza-ID0B_5mHNYZVelACXRObpmJR0A5-vL7LpFQt16XH8t3g","3":200,"4":174},"3":{"1":"Styles At Life","2":"https://stylesatlife.com/articles/types-of-dogs/","3":"25 Different Types of Dogs with Origins and Pictures | Styles ...","4":"Types of Dogs 22","10":"SmymfRmNuLHFEc"},"5":{"1":"DnhvsmvWSkWTSkR"}},{"1":{"1":"https://images.pexels.com/photos/406014/pexels-photo-406014.jpeg?auto=compress&cs=tinysrgb&h=350","3":525,"4":350},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQMgpV4Dnq4Jd3rBDSJn7AgBp8tMMC9mvRmrd3mCQFe5fs_pW4u","3":200,"4":133},"3":{"1":"Pexels","2":"https://www.pexels.com/search/dog/","3":"Dog images · Pexels · Free Stock Photos","4":"Free stock photo of animal, dog, pet, cute","10":"dxlyAYargfusMe"},"5":{"1":"GwgMRCRrwyIBqXi"}},{"1":{"1":"https://s3.amazonaws.com/cdn-origin-etr.akc.org/wp-content/uploads/2017/11/13001724/American-Eskimo-Dog-On-White-01-400x267.jpg","3":400,"4":267},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTsGNRvlsg6L4sauv_tewVzBQdd7kdb-vT-jKmX6_AB6RWes_V2VA","3":200,"4":133},"3":{"1":"American Kennel Club","2":"https://www.akc.org/dog-breeds/smallest-dog-breeds/","3":"Smallest Dog Breeds – American Kennel Club","4":"American Eskimo Dog","10":"VJLsPEQkfoTgaB"},"5":{"1":"ToAVtwjKBjwaVpB"}},{"1":{"1":"https://www.nc3rs.org.uk/sites/default/files/Images/Animals/Beagles%20in%20safety%20testing%20of%20pharmaceuticals%20-%20RDS.Wellcome.jpg","3":1200,"4":993},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQebnD-bP3tQJxRd0Lw5FaVB6Tmn2b65Or7Snpg04onQpecxfU7ng","3":200,"4":165},"3":{"1":"NC3Rs","2":"https://www.nc3rs.org.uk/3rs-resources/housing-and-husbandry/housing-and-husbandry-dogs","3":"Housing and Husbandry of Dogs | NC3Rs","4":"This page provides advice on the housing of laboratory dogs, tools for  their welfare assessment, ...","10":"pOQBKsUaAExDxp"},"5":{"1":"soKGyPTBNHVPxGm"}},{"1":{"1":"https://cdn.theatlantic.com/assets/media/img/mt/2016/07/max_2/lead_720_405.jpg?mod=1533691832","3":720,"4":405},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRrD_FLFfRw23FSZMRB5oLYOi28vU0rrIsEPf6O_oqlKVtYth2RRA","3":200,"4":112},"3":{"1":"The Atlantic","2":"https://www.theatlantic.com/entertainment/archive/2016/07/the-secret-life-of-pets/490580/","3":"For the Love of Dogs: 'The Secret Life of Pets,' Reviewed ...","4":"Illumination","10":"YYLAymmDrQbMHf"},"5":{"1":"HmwhYiETYOWcYNv"}},{"1":{"1":"https://upload.wikimedia.org/wikipedia/commons/d/d9/Collage_of_Nine_Dogs.jpg","3":1665,"4":1463},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRGLQqDCxokM9-_Unrinvx32TEgykSGEiFd8ZN9_ZSsfrEI1ue4iQ","3":200,"4":175},"3":{"1":"Wikipedia","2":"https://en.wikipedia.org/wiki/Dog","3":"Dog - Wikipedia","4":"Collage of Nine Dogs.jpg","10":"uUlLvuUdcuOcIL"},"5":{"1":"uRpIPGNqDVNVpKg"}},{"1":{"1":"http://nldogwhisperer.com/_Media/p4180071_med.jpeg","3":281,"4":281},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSDL2Bb5WHO2ylKI0hZM6TqQdBdlk89CR4BMmWlOK02VWBc-dBbNw","3":200,"4":200},"3":{"1":"Newfoundland's Dog Whisperer","2":"http://nldogwhisperer.com/for-the-love-of-dogs/","3":"For the Love of Dogs | Newfoundland's Dog Whisperer","4":"P4180071","10":"DLKanCBMubnDNQ"},"5":{"1":"WBbNVOrlmjMkMgc"}},{"1":{"1":"https://www.wikihow.com/images/1/1d/Take-Care-of-Your-Dog's-Basic-Needs-Step-35.jpg","3":3200,"4":2400},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTYXiN0MJz5noouc0Rd01auqVsg8HYdxj4XBWBUl9bMMY8lTVG8yA","3":200,"4":149},"3":{"1":"wikiHow","2":"https://www.wikihow.com/Take-Care-of-Your-Dog%27s-Basic-Needs","3":"How to Take Care of Your Dog's Basic Needs (with Pictures)","4":"","10":"bQvvWVUSirmQyO"},"5":{"1":"XuJuXQFfiNvxlyK"}},{"1":{"1":"https://res.cloudinary.com/dk-find-out/image/upload/q_80,w_640,f_auto/12173877_lnvjts.jpg","3":640,"4":459},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSOCIJw6yuhX0fDgoYYzEQXpa7a4ThCE0N_IaetPAZx_Nb0HoTf","3":200,"4":143},"3":{"1":"DK Find Out!","2":"https://www.dkfindout.com/us/animals-and-nature/dogs/domestic-dogs/","3":"Domestic Dogs | Different Types of Dogs | DK Find Out","4":"Dog-main gdcdzd 12173877 lnvjts ...","10":"LpcncxxURIVDEA"},"5":{"1":"RFwLNBmyxgHhnwp"}},{"1":{"1":"https://amp.thisisinsider.com/images/57991d1dd7c3dbae2f8b4657-750-753.png","3":750,"4":753},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQTpJq9dJS4dwAjqC6XT35fePL5fVdzpOcgr7djBXCQC45K3OFSCw","3":199,"4":200},"3":{"1":"Insider","2":"https://www.thisisinsider.com/dogs-before-and-after-haircuts-2016-7","3":"Dogs before and after haircuts - INSIDER","4":"Dogs Grace Chon","10":"OBPPjJXnGrWwvC"},"5":{"1":"UfREGxjhQAMqYTc"}},{"1":{"1":"https://timedotcom.files.wordpress.com/2017/04/world-of-dogs-07.jpg","3":2560,"4":1828},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQyXm57CVzJ5EUvu0HvCxqJ7QazwoqMvtL_CH8d-njiLP2lJXlk","3":200,"4":142},"3":{"1":"Time","2":"http://time.com/4775436/how-smart-is-a-dog-really/","3":"A Dog's Brain: Inside the Complex Canine Mind | Time","4":"Nina, an 8-month old Mini Australian Shepherd photographed in New York, NY","10":"SeOxdryAqGCQsI"},"5":{"1":"hPksBoksmOBlNAe"}},{"1":{"1":"https://www.sciencefriday.com/wp-content/uploads/2015/07/12872-1.JPG","3":1000,"4":586},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQuiulGxI6NDSiHAn-tomXc8p0pbyoFyE8F5LGL4Al6ov-QIC0uDQ","3":200,"4":117},"3":{"1":"Science Friday","2":"https://www.sciencefriday.com/segments/dogs-theyre-just-like-us/","3":"Dogs, They're Just Like Us - Science Friday","4":"","10":"hyVtWTqlYpfQXU"},"5":{"1":"goAktcmFFRUUUxT"}},{"1":{"1":"http://images.performgroup.com/di/library/sporting_news/dc/50/dog-3jpg_cp4bgn0c2fk31va2bwpmsci2b.jpg?t=1041338754&w=960&quality=70","3":960,"4":540},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRyNLvBbdisDSOVgm54zOFo3euAJl01P_n7MHrsjGwKHnE-Svjr","3":200,"4":112},"3":{"1":"Sporting News","2":"http://www.sportingnews.com/us/other-sports/news/adorable-dogs-2017-westminster-dog-show-photos/q4qu9orrlgq11k3mhptiohrlp","3":"Adorable photos of dogs at the 2017 Westminster Dog Show ...","4":"Dog 3.jpg","10":"rJfjBxOadbyMjm"},"5":{"1":"JSQfIlTHfpFNgrw"}},{"1":{"1":"https://i2-prod.mirror.co.uk/incoming/article6113280.ece/ALTERNATES/s615/PAY--Dog-swallowed-21-inch-riding-crop--whole.jpg","3":615,"4":409},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRtkEnSyD6xOwHjh59HAejWd4_9LUq3131QxZkw9JCmB0SJs99Jww","3":200,"4":133},"3":{"1":"Daily Mirror","2":"https://www.mirror.co.uk/news/uk-news/sickening-pictures-poorly-boxer-show-7062981","3":"Sickening pictures of poorly boxer show the danger of dogs ...","4":"Hugo the dog who swallowed a 21 inch riding crop","10":"jKlAiLEGdNSLvC"},"5":{"1":"VrBMenmDSMcGMus"}},{"1":{"1":"http://3.bp.blogspot.com/-F2N-smOO2eI/UfCrLF7syeI/AAAAAAAAAE4/Mp4o0J2vw8s/s1600/Type+of+dog+Patuljasti+SPICE.jpg","3":500,"4":477},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQYrAmtPktHqaOxLhSZekIE7JAYa75a9Y2IcCaC1RYJZJbZFUg","3":200,"4":190},"3":{"1":"types of dogs","2":"http://all-typesofdogs.blogspot.com/2013/01/type-of-dog-patuljasti-spice.html","3":"Type of dog Patuljasti SPICE - TYPES OF DOGS","4":"Type of dog Patuljasti SPICE","10":"cSrkLMkXibhHAn"},"5":{"1":"hMYJhfkRorfymFf"}},{"1":{"1":"http://www.qygjxz.com/data/out/183/3980549-pictures-of-dogs.jpg","3":1920,"4":1200},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTbcM2cUV0OTBqLzu9PI67wGMZ1zscxyhetpuCT7iDcMtL4w4Q8","3":200,"4":124},"3":{"1":"QyGjxZ","2":"http://www.qygjxz.com/pictures-of-dogs.html","3":"Pictures Of Dogs - QyGjxZ","4":"Pictures Of Dogs","10":"LOfwRGKPjLYykB"},"5":{"1":"CjNNRjsPTHWFxeo"}},{"1":{"1":"http://www.pawculture.com/uploads/magic-of-dogs-book-destroyer-card.jpg","3":300,"4":300},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRzAFi5bs4u5U0ltE5wgvLY7T-WDzDMctigQm98cc6Yt5eltVwI","3":200,"4":200},"3":{"1":"PawCulture","2":"http://www.pawculture.com/get-inspired/magic-of-dogs","3":"Magic of Dogs | PawCulture","4":"Daisy the puppy in a closet","10":"OSmQrTICUnJcUR"},"5":{"1":"mITEEsGnnMdmedm"}},{"1":{"1":"https://www.soidog.org/sites/default/files/Dogs_for_adoption.jpg","3":1200,"4":662},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ7CIoAyUpdA0z_qUGMgonqjeI0B9Vj-Ughlhil-aDrCZ8dVlrlYg","3":200,"4":110},"3":{"1":"Soi Dog Foundation","2":"https://www.soidog.org/adopt-a-dog","3":"Dogs For Adoption | Soi Dog Foundation","4":"At the Soi Dog Foundation shelter, hundreds of dogs wait in anticipation of  loving homes.","10":"LTrFnEFufygVUl"},"5":{"1":"ekyHhXeckvbeULy"}},{"1":{"1":"https://www.abc.net.au/news/image/7089596-3x2-940x627.jpg","3":940,"4":627},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSpb6cNSSuVCnstfWoSuYxVldq9VBTuPeJtu9Nvw3OiMTOVxNeuQg","3":200,"4":133},"3":{"1":"ABC","2":"http://www.abc.net.au/news/2016-01-22/dog-cruelty-stolen-pets-tourists-fuelling-growth-in-meat/7088380","3":"Dog cruelty: Rise in slaughter of stolen pets as Western ...","4":"... Thousands of dogs have been taken by dog meat smugglers but hundreds  have been saved","10":"QKBMOWnXdPgsOs"},"5":{"1":"poXeMAIMtVwnynW"}},{"1":{"1":"https://ybxzcgnc7b-flywheel.netdna-ssl.com/wp-content/uploads/2018/04/male-dog-names-696x435-2.jpg","3":696,"4":435},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSBtHfW9n6ZlEpWaon8kohv1YMJLwXGWfW9U9AB4uztQ2TyLs2ExA","3":200,"4":124},"3":{"1":"The Labrador Site","2":"https://www.thelabradorsite.com/male-dog-names/","3":"Male Dog Names - 150 Brilliant Boy Puppy Name Ideas","4":"Looking for the best male dog ...","10":"yftxFbRJDNJFiA"},"5":{"1":"CwgdpgemBLeBpKD"}},{"1":{"1":"https://www.sciencemag.org/sites/default/files/styles/inline__450w__no_aspect/public/dogs_16x9_0.jpg?itok=6bVMiQge","3":450,"4":253},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSoAY0lBnJg5p3jCKy0bYcuiA-CAS6fwaYe-dwgy0fKfchB82xYow","3":200,"4":112},"3":{"1":"Science","2":"https://www.sciencemag.org/news/2018/08/gene-editing-dogs-offers-hope-treating-human-muscular-dystrophy","3":"Gene editing of dogs offers hope for treating human muscular ...","4":"A colony of dogs at the Royal Veterinary College in London has a mutation  that causes a disease ...","10":"uXDTlpYMRxSysc"},"5":{"1":"hfpslxcHPIhamYL"}},{"1":{"1":"http://www.pbs.org/wgbh/nova/assets/img/posters/meaning-dog-barks-in.jpg","3":322,"4":215},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR83E68kzlY537bxNXFpIzyh4q5OHHa1PZMrJ3n1HOaKfuVDDO7","3":200,"4":133},"3":{"1":"PBS","2":"http://www.pbs.org/wgbh/nova/nature/meaning-dog-barks.html","3":"NOVA - Official Website | The Meaning of Dog Barks","4":"Sources","10":"HeNjnISBGrERNc"},"5":{"1":"yxTUeintWQNxRXd"}},{"1":{"1":"http://cdn.designbeep.com/wp-content/uploads/2011/07/4.dog-love-photos.jpg","3":500,"4":525},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcScX6-QU4RNXhufTydEl5dppkHDnc0XMxOKFScQUw8xjadr6Ljc","3":190,"4":200},"3":{"1":"Designbeep","2":"http://designbeep.com/2011/07/29/heart-touching-photos-of-dogs-with-humans/","3":"Heart Touching Photos of Dogs with Humans | Designbeep","4":"humans and dogs","10":"VBfUhIuRdeHujs"},"5":{"1":"uMfRjnatednVxnF"}},{"1":{"1":"https://gfnc1kn6pi-flywheel.netdna-ssl.com/wp-content/uploads/2015/04/2015-0423-1157-fb.jpg","3":1120,"4":584},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSM1fHGWOoPPAiEUl6E9FQOgXzVpYzf9isnt8a78ScgfGWq8oGP","3":200,"4":104},"3":{"1":"The Happy Puppy Site","2":"https://thehappypuppysite.com/dog-breed-groups/","3":"Different Types Of Dogs: The Dog Breed Groups Explained","4":"a group of small dogs puppies beagle","10":"NlbBUKGIwLLigm"},"5":{"1":"vNMpIKLUHNsBVaG"}},{"1":{"1":"https://www.police.gov.hk/info/img/pdu/German_Shepherd.jpg","3":400,"4":322},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQFxTlVZoUanSWoUXLNE6pXXWLSzJQu9l1FMxKLCdlSsn7uTzv5","3":200,"4":160},"3":{"2":"https://www.police.gov.hk/ppp_en/11_useful_info/pdu/type.html","3":"Type of Dogs | Hong Kong Police Force","4":"Type of Dogs","10":"HmIFpgTtwytwTY"},"5":{"1":"jNsiYMpoJodyirS"}},{"1":{"1":"https://images.penguinrandomhouse.com/cover/9780451497604","3":292,"4":450},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRvd839rC2S7o1c6nOIZt_sQ1hi0p7zWbI7cR_k6-C098hW9qPv","3":129,"4":200},"3":{"1":"Penguin Random House","2":"https://www.penguinrandomhouse.com/books/546898/the-grace-of-dogs-by-andrew-root/9780451497611/","3":"The Grace of Dogs by Andrew Root | PenguinRandomHouse.com","4":"The Grace of Dogs by Andrew Root","10":"TLRVaBgWkJywvH"},"5":{"1":"wKJVsNHAkjobIKG"},"7":{"1":{"10":{"3":"The Grace of Dogs by Andrew Root | PenguinRandomHouse.com","5":"In the bestselling tradition of Inside of a Dog and Marley & Me, a smart,  illuminating, and entertaining read on why the dog-human relationship is ...","6":true,"7":15.949999809265137,"8":"USD"}}}},{"1":{"1":"http://1.bp.blogspot.com/-D1v9yJRY3Xg/T7ZWzWXAleI/AAAAAAAABuU/4r7Cx4Fra0c/s1600/all+types+of+dogs+1.jpg","3":432,"4":625},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSAbyyckK5hIAi5GlQ0t8QhR_EItcdEtUPBhiljyqGLDey1uBta","3":138,"4":200},"3":{"1":"My Top Collection","2":"http://mytopcollection.blogspot.com/2012/05/all-types-of-dogs.html","3":"My Top Collection: All types of dogs","4":"All types of dogs","10":"UilxngmFAWEiiK"},"5":{"1":"gboiCenfWAMpIND"}},{"1":{"1":"https://cdn.theatlantic.com/assets/media/img/mt/2018/03/wes_andersons_isle_of_dogs_is_a_tenderhearted_eccentric_canine_tale_ew_review/lead_720_405.jpg?mod=1533691928","3":720,"4":405},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQAhkKwPcbRFSxfvQujIzPRVsP1vF0CURiSHZVSFvhQs31Dtth9","3":200,"4":112},"3":{"1":"The Atlantic","2":"https://www.theatlantic.com/entertainment/archive/2018/03/isle-of-dogs-review/556292/","3":"Wes Anderson's 'Isle of Dogs' Is Beautiful and Sad: Review ...","4":"Fox Searchlight Pictures. “","10":"oSNOuYnslFqJPQ"},"5":{"1":"WDVuvFIUhbsBclN"}},{"1":{"1":"https://cdn.flickeringmyth.com/wp-content/uploads/2018/03/Isle-of-Dogs-character-posters-5-600x851.jpg","3":600,"4":851},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQw50y6LpR2SFWeRSzXZhCEnBGSZ-8kL88QDFSI5CwcDosNKZCzfQ","3":140,"4":200},"3":{"1":"Flickering Myth","2":"https://www.flickeringmyth.com/2018/03/isle-of-dogs-gets-a-series-of-canine-character-posters/","3":"Isle of Dogs gets a series of canine character posters","4":"ISLE OF DOGS tells the story of ATARI KOBAYASHI, 12-year-old ward to  corrupt Mayor Kobayashi.","10":"hlcUpQnykUBRsD"},"5":{"1":"bJuriALucgcSYfp"}},{"1":{"1":"https://i.ytimg.com/vi/QrBvVOoQXCA/maxresdefault.jpg","3":1280,"4":720},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRw6PNel35EaV_kL94y7L3NITd6CI0PQXT5GvgPyzsk23ThnYvl","3":200,"4":112},"3":{"1":"YouTube","2":"https://www.youtube.com/watch?v=QrBvVOoQXCA","3":"ISLE OF DOGS | Making of: Puppets | FOX Searchlight","4":"ISLE OF DOGS ...","10":"LaWwplLDmbxIGi"},"5":{"1":"YEASMqwXoGYlCoO"},"7":{"1":{"11":{"1":"ISLE OF DOGS | Making of: Puppets | FOX Searchlight","2":"Now on Digital: http://bit.ly/Isle-Of-Dogs Now on Blu-ray and DVD:  http://bit.ly/Isle_Of_Dogs ISLE OF DOGS tells the story of ATARI KOBAYASHI,  12-year-old wa...","3":"4:01","4":"225512","5":"1522627200000","6":"FoxSearchlight","7":"4097","8":"181"}}}},{"1":{"1":"https://static.pjmedia.com/homeland-security/user-content/53/files/2017/03/AP_17071375979364.sized-770x415x0x587x2759x1487.jpg","3":770,"4":415},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQPmnBCkO9u4V6pPdOCN-tdG7t2shwky_RJitakfAZCFZpWQV-y1A","3":200,"4":107},"3":{"1":"PJ Media","2":"https://pjmedia.com/homeland-security/2017/03/14/why-do-so-many-muslims-hate-dogs/","3":"Why Does Islam Teach Hatred of Dogs?","4":"Why Do So Many Muslims Hate Dogs?","10":"knGDhxKVKYAMoa"},"5":{"1":"UXGdXsRnndWjRkG"}},{"1":{"1":"https://ksassets.timeincuk.net/wp/uploads/sites/55/2018/03/M9WC84-copy-920x584.jpg","3":920,"4":584},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT2qLLzgdW9KLjmU1WyjWV8GdiwT2E0ORCDSG05edJ-CMPngeOZ","3":200,"4":126},"3":{"1":"NME.com","2":"https://www.nme.com/reviews/movie/isle-of-dogs-wes-anderson-film-review","3":"Isle Of Dogs review: \"a canine-tastic classic from Wes Anderson\"","4":"Isle of Dogs review","10":"tqSSbIayecUptP"},"5":{"1":"kDVrLYubfwlIEsJ"}},{"1":{"1":"https://cdn.abcotvs.com/dip/images/4233273_091318wtvddogrescuepg1.jpg","3":540,"4":960},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR32rG3iGhRx5mSI8or0zA-9glC4YGt6D4suZuwCcHCQov1P_hM","3":112,"4":200},"3":{"1":"WTVD","2":"https://abc11.com/peak-lab-rescue-saves-dozens-of-dogs-ahead-of-hurricane-florence/4233351/","3":"Peak Lab Rescue saves dozens of dogs ahead of Hurricane ...","4":"Peak Lab Rescue saves dozens of dogs ahead of Hurricane Florence","10":"idpRKpkMwsFNPM"},"5":{"1":"XqVxubpOOppKldH"}},{"1":{"1":"https://media.npr.org/assets/img/2018/03/20/isleofdogs_domestictrailera_txtd_stereo_pr.max-2000x2000_wide-65e44dee126c79b304eadea538e7a6e431a3b8f5-s800-c85.jpg","3":800,"4":450},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQbw9ijmCB3MYzA9W0JI1zLSUByHhz7k8cmM-OX3ZJ8IOAyJqCC","3":200,"4":112},"3":{"1":"NPR","2":"https://www.npr.org/2018/03/22/595194000/the-fast-and-the-furry-us-wes-andersons-masterful-isle-of-dogs","3":"The Fast And The Furry Us: Wes Anderson's Masterful 'Isle Of ...","4":"The Fast And The Furry Us: Wes Anderson's Masterful 'Isle Of Dogs'","10":"TDSoYIgGdaUrsu"},"5":{"1":"fFrdWxxCaWYCrsq"}},{"1":{"1":"https://cdn.kinsights.com/cache/a2/d0/a2d0e228b189836ebc8db503b361d51b.jpg","3":700,"4":305},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRKZFyzTBFFkSPnKYJRPYqO__yyePdhoQVpuJ4NMFeNYCeId4gaNg","3":200,"4":87},"3":{"1":"Care.com","2":"https://www.care.com/c/stories/6036/10-fastest-dog-breeds/","3":"10 Fastest Dog Breeds - Care.com","4":"Over the last few centuries, certain types of dogs have been bred for  hunting and racing purposes.","10":"IPkBfAlgpdjjBJ"},"5":{"1":"GdiHoxKRefTnidc"}},{"1":{"1":"https://s.hswstatic.com/gif/frog-1.jpg","3":400,"4":349},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSkD4aIcnoKQk8ptMFEszKlT6UyhIkRee-431_9CtgdDMIvowV4","3":200,"4":175},"3":{"1":"Animals | HowStuffWorks","2":"https://animals.howstuffworks.com/amphibians/frog.htm","3":"How Frogs Work | HowStuffWorks","4":"Green tree frog (Hylidae cinerea). See more amphibian pictures.","10":"oIPgOQIeUteTVv"},"5":{"1":"qGflvvGOFClFscO"}},{"1":{"1":"https://media.wired.com/photos/5abc3122ecb0130b0e72616c/master/pass/frogleaf.jpg","3":2400,"4":1800},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS269AZWer7OVu1kw705ldxEHbn2J-pHJ6JSnb0xN5xfG_CvoEl","3":200,"4":149},"3":{"1":"Wired","2":"https://www.wired.com/story/some-frogs-may-be-developing-a-resistance-to-the-disastrous-chytrid-fungus/","3":"Some Frogs May Be Developing a Chytrid Fungus Resistance | WIRED","4":"Some Frogs May Be Developing a Resistance to the Disastrous Chytrid Fungus","10":"WADbSMNiLmVldA"},"5":{"1":"GCKOCqfbKuVTFNd"}},{"1":{"1":"https://cosmos-magazine.imgix.net/file/spina/photo/10994/170407_Frogs_Full.jpg?fit=clip&w=835","3":835,"4":557},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRaVKwWQteHk6Jw5tfXQqYA56T98oG_gFg8K94grY4KlGoUBOAi","3":200,"4":133},"3":{"1":"Cosmos Magazine","2":"https://cosmosmagazine.com/palaeontology/the-death-of-the-dinosaurs-was-good-news-for-frogs","3":"The death of the dinosaurs was good news for frogs | Cosmos","4":"Two Petropedates cameronensis frogs, from Cameroon.","10":"oGVNAKqmOAwwLE"},"5":{"1":"EoJBsLKWhdkSUpN"}},{"1":{"1":"https://images.theconversation.com/files/117973/original/image-20160408-23649-1qxbogn.jpg?ixlib=rb-1.1.0&rect=0%2C516%2C2537%2C1652&q=45&auto=format&w=926&fit=clip","3":926,"4":603},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcROccUf9pp8ecFARqw_6DGs0uNfy88wxZrrmO3OLJmt4HAO-5l-","3":200,"4":130},"3":{"1":"The Conversation","2":"http://theconversation.com/the-future-for-frogs-looks-bleak-unless-humans-change-their-habits-57505","3":"The future for frogs looks bleak, unless humans change their ...","4":"The future for frogs looks bleak, unless humans change their habits","10":"GVxYqfUfpvOaNP"},"5":{"1":"hdrXHFELxglqDQA"}},{"1":{"1":"https://r.hswstatic.com/w_907/gif/frogs-sysk.jpg","3":907,"4":510},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT4fKzSHuYmdwaVO9r3iz7z6-YU-RoiWrrU_aekfcxdSMs-_dkD","3":200,"4":112},"3":{"1":"Stuff You Should Know","2":"https://www.stuffyoushouldknow.com/podcasts/frogs.htm","3":"How Frogs Work | Stuff You Should Know","4":"How Frogs Work","10":"KcuycTLNCTKyeK"},"5":{"1":"kDRqcVBphsrCkxY"}},{"1":{"1":"https://le-www-live-s.legocdn.com/sc/media/lessons/wedo-2/wedo-projects/images/frogs-metamorphosis-project-image-feb9db40c70bcda57e12f5671d4bc278.jpg?fit=around|700:700&crop=700:700;*,*","3":700,"4":700},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRNbtN7UdIGFNqIJqRNaWtpxRa-8fONHoROYjex1_qG_s1yn_rlkw","3":200,"4":200},"3":{"1":"LEGO Education","2":"https://education.lego.com/en-us/lessons/wedo-2-science/frogs-metamorphosis","3":"Frog's Metamorphosis - WeDo 2.0 Science - Lesson Plans - LEGO ...","4":"Frog's Metamorphosis - WeDo 2.0 Science - Lesson Plans - LEGO Education","10":"LuCYFWOHovAfWs"},"5":{"1":"QYqyhfrbLHIDSaU"}},{"1":{"1":"https://www.amnh.org/var/ezflow_site/storage/images/media/amnh/images/frog/311113-1-eng-US/frog_dynamic_lead_slide.jpg","3":700,"4":350},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTtD1jRBEihnL1c2uHLMsDTPHLbxaXgm2VniPs7rmxYCGSChO7n","3":200,"4":100},"3":{"1":"American Museum of Natural History","2":"https://www.amnh.org/exhibitions/frogs-a-chorus-of-colors","3":"Frogs: A Chorus of Colors","4":"frog","10":"BHmJIRtnQIHBsx"},"5":{"1":"llGYGsDHxxtOAgh"}},{"1":{"1":"https://cdn.theatlantic.com/assets/media/img/mt/2018/05/ohanlon3HR/lead_720_405.jpg?mod=1533691465","3":720,"4":405},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSocW1F9hcYfvbUB2jHJEzREuIzDsbL6E-_20kEv-YMUbA8_A6l9Q","3":200,"4":112},"3":{"1":"The Atlantic","2":"https://www.theatlantic.com/science/archive/2018/05/frog-fungus-death/560078/","3":"The Origins of the Fungus Killing Frogs - The Atlantic","4":"A green and black frog with a red belly","10":"MEYPTxrgIFQDIY"},"5":{"1":"rlXkQPSDqhqLUYJ"}},{"1":{"1":"https://pmdvod.nationalgeographic.com/NG_Video/952/231/smpost_1507049364751.jpg","3":640,"4":360},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSNoa4awiR95D5rAClkS7gFSV4JJXD08hAIb8LxjU_1M2i8eqqIcQ","3":200,"4":112},"3":{"1":"National Geographic","2":"https://video.nationalgeographic.com/video/untamed/red-eyed-tree-frogs","3":"Why Does the Red-Eyed Tree Frog Have Three Eyelids?","4":"","10":"EodtsMOmwkmvxy"},"5":{"1":"TRhMSfpPGpbAhfi"}},{"1":{"1":"http://ichef.bbci.co.uk/wwfeatures/wm/live/1280_640/images/live/p0/29/n2/p029n2vj.jpg","3":1280,"4":640},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTLGsWeKSeL3n9sUPGD7Mi-WZF50vWpD_UiYo1vxF9P_V3LchLefQ","3":200,"4":100},"3":{"1":"BBC.com","2":"http://www.bbc.com/earth/story/20141029-rare-frog-breeds-inside-bamboo","3":"BBC - Earth - Rare bush frog breeds inside bamboo","4":"","10":"tblmAYrHcdmEcx"},"5":{"1":"qnVLROrMlgjmrAr"}},{"1":{"1":"https://3c1703fe8d.site.internapcdn.net/newman/csz/news/800/2017/whyfrogsneed.jpg","3":700,"4":450},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRAV6FLTscPNap-dxagGyyY5jA47enViUiFeyWiEpb6vS4xvxtl","3":200,"4":128},"3":{"1":"Phys.org","2":"https://phys.org/news/2017-05-frogs.html","3":"Why frogs need saving","4":"","10":"UBtkEBvnckXXVh"},"5":{"1":"wUKJyAlAUsxvETX"}},{"1":{"1":"https://3z2dsg30wpre3s82ui42uwfo-wpengine.netdna-ssl.com/wp-content/uploads/2013/02/dumpy-tree-frog.jpg","3":1000,"4":1000},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTTuPr02JgQNW-5wZUoiCNTBlMkS6hGq_Gk5-uHx2CxvXZ6JdbkBg","3":200,"4":200},"3":{"1":"Underground Reptiles","2":"https://undergroundreptiles.com/product-category/animals/amphibians/tree-frogs/","3":"Tree Frogs Archives - Underground Reptiles","4":"","10":"NFYryMgPrFWjLY"},"5":{"1":"mxKEhURnKTFDgmp"}},{"1":{"1":"https://static.boredpanda.com/blog/wp-content/uploads/2016/11/frog-photography-tantoYensen-2-5836fb5fa3383__880.jpg","3":880,"4":646},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSD54DmGda4ORwNsiNxnRytlkNBFe4POeCfwnGP6A5dsndQ35EN","3":200,"4":146},"3":{"1":"Bored Panda","2":"https://www.boredpanda.com/frog-photography-tantoyensen/","3":"This Photographer Photographs Frogs Like You've Never Seen ...","4":"Cute Frog Photography","10":"GpxCpXhhYRfLQV"},"5":{"1":"kBgYakehSGARbAa"}},{"1":{"1":"https://www.sciencedaily.com/images/2017/09/170913193106_1_540x360.jpg","3":540,"4":359},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQYc8jroyQFXBEWjaWBa0XtZCJWB1eh4Q8mphleOwt_rVftk872","3":200,"4":133},"3":{"1":"ScienceDaily","2":"https://www.sciencedaily.com/releases/2017/09/170913193106.htm","3":"Evolution of 'true frogs' defies long-held expectations of ...","4":"Ranidae family are most diverse frog ...","10":"SgOrWSoNkQjkXN"},"5":{"1":"NEnjrAUuUAJVPYY"}},{"1":{"1":"http://ichef.bbci.co.uk/wwfeatures/wm/live/1280_640/images/live/p0/4v/6s/p04v6sqx.jpg","3":1280,"4":640},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRfX2luQyVZ-zbrRFoz93CaY80yyDgBXgWTG6C-Ql7GlQbLg11M","3":200,"4":100},"3":{"1":"BBC.com","2":"http://www.bbc.com/earth/story/20170227-there-are-frogs-that-breed-high-up-in-trees","3":"BBC - Earth - There are frogs that breed high up in trees","4":"There are frogs that breed high up in trees","10":"tnfNeHaMnRjESm"},"5":{"1":"llxhwWaFRlrDOEE"}},{"1":{"1":"https://www.thelocal.fr/userdata/images/article/307e9b4f101734d3f1ed2c7ee4094e692ea7b179dbef0203206ee24ad0d7e233.jpg","3":768,"4":511},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTE8In6K644ktyYDfWI8HJsDnvZw0vFcE5nTcpa9qYL-hqFTCpQ","3":200,"4":133},"3":{"1":"The Local France","2":"https://www.thelocal.fr/20180416/why-are-dordognes-noisy-frogs-at-the-centre-of-a-bizarre-legal-battle","3":"Why are Dordogne's noisy frogs embroiled in a bizarre legal ...","4":"Why are Dordogne's noisy frogs embroiled in a bizarre legal battle?","10":"IpgQyHiQgmancc"},"5":{"1":"kJPYqQFixrMKmJp"}},{"1":{"1":"https://thumbs-prod.si-cdn.com/D8qEZnYE_JIK1U9_V6Q1igPGnhk=/800x600/filters:no_upscale()/https://public-media.smithsonianmag.com/filer/3b/6c/3b6c8ed1-90ae-4dad-a44d-8250be782a40/rayna_bell_-_litoria_revelata-040.jpg","3":800,"4":600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT9MkD2sC0lqyeGsSZ_QfsvpkuFlXPF_ld0S1IecqgoECQMajtIcA","3":200,"4":149},"3":{"1":"Smithsonian Magazine","2":"https://www.smithsonianmag.com/smithsonian-institution/color-changing-marvel-tree-frogs-looking-love-180964976/","3":"The Color-Changing Marvel of Tree Frogs Looking for Love | At ...","4":"A new study sheds light on the wild world of “dynamically dichromatic”  amphibians","10":"pEaiVEpDYmLlaL"},"5":{"1":"BDEGPeAgkqWTiSV"}},{"1":{"1":"http://www.savethefrogs.com/d/amphibians/images/ghana/Leptopeles-hyloides-Ankasa-bamboo-cathedral-1-a-328.jpg","3":328,"4":246},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQP4o62qPQpPjo_pwdks06whhF_Uz4pVbxCut95cUpidmvSgxvDDg","3":200,"4":149},"3":{"1":"Save the Frogs","2":"http://www.savethefrogs.com/d/countries/ghana/frogs.html","3":"Frogs & Toads of Ghana","4":"Ghana Frogs","10":"lIquJinHveRXLW"},"5":{"1":"vylFbObXVrHbFhs"}},{"1":{"1":"https://cdn.britannica.com/s:700x450/73/100273-004-341B9A8E.jpg","3":550,"4":372},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT9bFMIckxreAHguJKrulYJi39C4ZkLez2JhxY-E7JvGstqHe5uLQ","3":200,"4":135},"3":{"1":"Encyclopedia Britannica","2":"https://www.britannica.com/animal/frog","3":"Frog | amphibian | Britannica.com","4":"Blue arrow-poison frogs (Dendrobates azureus).","10":"PNVCAfaSvvWxRY"},"5":{"1":"aUlpffuPEYYpKFT"}},{"1":{"1":"https://media.wired.com/photos/59273130af95806129f51e1b/master/pass/353A-Ranitomeya-reticulata_Luke-Verburgt.jpg","3":1920,"4":1388},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQPrE-yAWvR2XWEizAmM2pY3K0Av9f17-c5QA-OwgjUSezsmMfGmw","3":200,"4":144},"3":{"1":"Wired","2":"https://www.wired.com/2016/02/frogs-are-really-cool-too-bad-humans-are-killing-them-all/","3":"Frogs Are Really Cool. Too Bad Humans Are Killing Them All ...","4":"Frogs Are Really Cool. Too Bad Humans Are Killing Them All | WIRED","10":"tSjajvqkTHwDPN"},"5":{"1":"NqjLVMLdPkGSOsB"}},{"1":{"1":"https://www.sciencenews.org/sites/default/files/2017/03/main/articles/033017_sm_glass-frog_main_free.jpg","3":860,"4":460},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRQHa3--9uCPkM0iiBenOnNDj2vO_kmQjEa3HbDBy26T7_BEwlG-Q","3":200,"4":106},"3":{"1":"Science News","2":"https://www.sciencenews.org/article/glass-frogs-moms-matter-after-all","3":"For glass frogs, moms matter after all | Science News","4":"Cochranella granulosa glass frog","10":"IcObVOyrqXnwvC"},"5":{"1":"ulDbeqrODGiydVM"}},{"1":{"1":"https://amp.businessinsider.com/images/5980f384b50ab181238b5252-750-563.jpg","3":750,"4":563},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT70yS_9h8ZASXTDmysouJ_pLldMTMXxX3roO92SCgsO0QSnlFg2g","3":200,"4":149},"3":{"1":"Business Insider","2":"https://www.businessinsider.com/xenopus-frogs-pregnancy-test-2017-8","3":"Pregnancy tests used to be African clawed frogs - Business ...","4":"frogs national xenopus laevis resource marine biological laboratory dave  mosher 0","10":"gCpaiJGcuchnym"},"5":{"1":"UTouCGNEmGWJBJi"}},{"1":{"1":"https://media.mnn.com/assets/images/2016/04/frog-head-tilted.jpg.620x0_q80_crop-smart_upscale-true.jpg","3":620,"4":414},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSNpAL5idNr74cEBBf75cRuQi7oFFcVXOAoDUB8jVGmqLdf3BdW","3":200,"4":133},"3":{"1":"Mother Nature Network","2":"https://www.mnn.com/earth-matters/animals/quiz/how-much-do-you-know-about-frogs","3":"How much do you know about frogs? | MNN - Mother Nature Network","4":"frog with head tilted","10":"mjkGEObGkpygTr"},"5":{"1":"WGNgwQbnnUmmsUU"}},{"1":{"1":"https://3c1703fe8d.site.internapcdn.net/newman/gfx/news/hires/2014/157-researchersd.jpg","3":2778,"4":1974},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS383ka-_gDmTcl5dHI4lnxq4HU69cU8zUA-NjtbYN5GUkfB6xuow","3":200,"4":142},"3":{"1":"Phys.org","2":"https://phys.org/news/2014-10-rare-bush-frog-bamboo.html","3":"Researchers discover for the first time that a rare bush frog ...","4":"Researchers discover for the first time that a rare bush frog breeds in  bamboo","10":"wMHSHquWwPWuIG"},"5":{"1":"BqpyHxyDjNlDOSR"}},{"1":{"1":"https://www.floridamuseum.ufl.edu/science/wp-content/uploads/2016/11/gree-treefrog-krysko-1frog.jpg","3":975,"4":649},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRV4hWTYfPeCxXNxv2vP0MLRuOrwGPF1dK-PXiR3GjapGlE_3w","3":200,"4":133},"3":{"1":"Florida Museum of Natural History","2":"https://www.floridamuseum.ufl.edu/science/florida-frog-calls/","3":"Florida Frog Calls – #FloridaMuseumScience","4":"","10":"RgOOcSgRawmGTr"},"5":{"1":"VAoaOdRoPyYymPe"}},{"1":{"1":"https://s.hswstatic.com/gif/hallucinogenic-frog-1.jpg","3":400,"4":267},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT811qRcXqq1PKIwHn9ctU6NOfMcp7OfHJrhniRNyrq9e6Q9LsJsg","3":200,"4":133},"3":{"1":"Animals | HowStuffWorks","2":"https://animals.howstuffworks.com/amphibians/hallucinogenic-frog.htm","3":"Are there really hallucinogenic frogs? | HowStuffWorks","4":"Ribbett. Australia wants to give cane toads the boot. See more amphibian  pictures.","10":"NNRXlXtRjYMXKr"},"5":{"1":"irnuUmaNbBDwXsa"}},{"1":{"1":"http://wildlife.org/wp-content/uploads/2015/08/SM-Salty-frogs-1-Greg-Schechter.jpg","3":3072,"4":1307},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSDperTWUFzqrHIxQvZoMnbg-SzfPleA99g2_Gd60dv4YyNkc0L","3":200,"4":84},"3":{"1":"The Wildlife Society","2":"http://wildlife.org/how-frogs-cope-with-road-salt-and-brackish-water/","3":"How Frogs Cope With Road Salt and Brackish Water | THE ...","4":"An ...","10":"RRpuUmLEdTvNps"},"5":{"1":"ErJdfKSPnleMFRc"}},{"1":{"1":"https://cdn.the-scientist.com/assets/articleNo/32185/iImg/5427/1c333be1-1cd8-45a4-8840-aad851ea8123-640treefrog.jpg","3":638,"4":360},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTuJIm3zsoZMJwIQI-kFWptxRxddJGx5bGJkqs-0S2xYUL0F4DtCg","3":200,"4":113},"3":{"1":"The Scientist Magazine","2":"https://www.the-scientist.com/daily-news/how-traffic-noise-affects-tree-frogs-32185","3":"How Traffic Noise Affects Tree Frogs | The Scientist Magazine®","4":"Hyla arboreaCOURTESY OF THIERRY ...","10":"jaITNMFTLHjCDB"},"5":{"1":"rDVROHvmnyPnAQf"}},{"1":{"1":"https://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Anoures.jpg/220px-Anoures.jpg","3":220,"4":319},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSB5OFn6zL-xT4LUPF21-aA9iwNV-a6ZpxbW0DL6Tr5U5pnIfFJ","3":137,"4":200},"3":{"1":"Wikipedia","2":"https://en.wikipedia.org/wiki/Frog","3":"Frog - Wikipedia","4":"Various types of frogs.","10":"TDygJSxFsEHNNb"},"5":{"1":"XeraFUqFJNRCGIG"}},{"1":{"1":"http://www.savethefrogs.com/d/amphibians/images/Litoria-Fallax-Eastern-Sedge-Frog-ds-a.jpg","3":328,"4":254},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQWVy0kfPnm_-zROsm1XFnA7EKepvf0lSJ9iTh1LJyU8P_vkTj6","3":200,"4":154},"3":{"1":"Save the Frogs","2":"http://www.savethefrogs.com/d/threats/index.html","3":"Threats to Frogs","4":"Litoria fallax - Eastern Sedge Frog","10":"vGsIryEramLpBD"},"5":{"1":"odudiYsEAYmertr"}},{"1":{"1":"https://www.pca.state.mn.us/sites/default/files/greenfrog-rclamilg.jpg","3":250,"4":192},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS_jrIVEN0NHjruuGWXQYtwz-mIZryI5Ohu5liTYZeGwick0yoetA","3":200,"4":153},"3":{"1":"Minnesota Pollution Control Agency","2":"https://www.pca.state.mn.us/living-green/frogs-minnesota","3":"Frogs of Minnesota | Minnesota Pollution Control Agency","4":"Green frog (Rana clamitans) Listen to the call","10":"DtexviIWEYAioL"},"5":{"1":"iymrjxsAarRNyqK"}},{"1":{"1":"https://static01.nyt.com/images/2018/04/03/science/30Zimmer-1/30Zimmer-1-articleLarge.jpg?quality=75&auto=webp&disable=upscale","3":600,"4":450},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRg48ytBu6zAYEm6Vak59KHCkczIts4UjZpDIXON8Xz04WiIy8P","3":200,"4":149},"3":{"1":"The New York Times","2":"https://www.nytimes.com/2018/03/29/science/frog-species-panama-fungus-rebound.html","3":"A Few Species of Frogs That Vanished May Be on the Rebound ...","4":"Image","10":"WFnybfuMiBvtbq"},"5":{"1":"iVFcPipApAbDUnM"}},{"1":{"1":"https://www.sciencedaily.com/images/2015/01/150120084545_1_540x360.jpg","3":359,"4":360},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS1u35g96pNmfdVInRYeSr1hxsC0JW_xWRn8nL1BFP69W_nA8fP4Q","3":199,"4":200},"3":{"1":"ScienceDaily","2":"https://www.sciencedaily.com/releases/2015/01/150120084545.htm","3":"The seeing power of frogs: Frogs can detect single photons of ...","4":"Red-eye frog ...","10":"DwLdSrCqGJPnQn"},"5":{"1":"avpQCfRTQPjQuRb"}},{"1":{"1":"https://www.popsci.com/sites/popsci.com/files/styles/1000_1x_/public/images/2017/09/rayna_bell_-_dscn3184_0.jpg?itok=uD3aH5n_&fc=50,50","3":1000,"4":750},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRSg8gtykqCthu94tEl1-S2BXWKLDVVCEHHQ879Ct2iEOYFpIG0","3":200,"4":149},"3":{"1":"Popular Science","2":"https://www.popsci.com/frogs-change-color-orgies","3":"These frogs might change color to avoid confusion during ...","4":"A frog couple has sex. The male is yellow.","10":"bclaQHSsaIoFaW"},"5":{"1":"fkWsCbMSUeGMUvu"}},{"1":{"1":"https://wonderopolis.org/wp-content/uploads/2017/10/Frogs_and_Toadsdreamstime_xl_30843151.jpg","3":900,"4":600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTbNlkw_129iVOBFK3N8-duInY1cCBeLYxvsmIn4usa1b99FGo","3":200,"4":133},"3":{"1":"Wonderopolis","2":"https://wonderopolis.org/wonder/are-frogs-and-toads-the-same","3":"Are Frogs and Toads the Same? | Wonderopolis","4":"Wonder Contributors","10":"eySSflmKbfKRMG"},"5":{"1":"uBpfcLuQxLKgIYx"}},{"1":{"1":"https://www.sciencenewsforstudents.org/sites/default/files/2016/06/main/articles/060116_leopardfrog_main_SNS.jpg","3":860,"4":460},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSxVLjF4xOVgAdqZcHIVYLF_0sPJaVH5N0AhcHI7or9jdNTDVYA","3":200,"4":106},"3":{"1":"Science News for Students","2":"https://www.sciencenewsforstudents.org/article/why-some-frogs-can-survive-killer-fungal-disease","3":"Why some frogs can survive killer fungal disease | Science ...","4":"Leopard frog","10":"tAPGLJWjpeNNgF"},"5":{"1":"gjqakrYgfmpSEWa"}},{"1":{"1":"http://www.torontozoo.com/adoptapond/guide_images/Green%20Frog.jpg","3":720,"4":480},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSeqz9-u1RXG1QaZUZiCafyguHmln-WNtZhUu4kIx1ub3wlU-3uCg","3":200,"4":133},"3":{"1":"Toronto Zoo | Adopt A Pond | SGuides","2":"http://www.torontozoo.com/adoptapond/frogs.asp?fr=11","3":"Toronto Zoo | Adopt A Pond | SGuides","4":"Green Frog","10":"wgFqDwNcxpBuhX"},"5":{"1":"AvVIBNnUgajVBsE"}},{"1":{"1":"https://defenders.org/sites/default/files/styles/homepage-feature-2015/public/frogs_visser-ruurd.png?itok=gAa6MAqt","3":960,"4":480},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTgMktAwGtDGr628lxn6umXvObH5FhK9gr74bSbP9WvTt7-_5ka","3":200,"4":100},"3":{"1":"Defenders of Wildlife","2":"https://defenders.org/frogs/basic-facts","3":"Frogs | Basic Facts About Frogs | Defenders of Wildlife","4":"Frogs","10":"lyJyYSIWtJWjMf"},"5":{"1":"wFayTaBYdFYafFh"}},{"1":{"1":"https://news.nationalgeographic.com/content/dam/news/2017/04/27/frog-gallery/01-frog-day-gallery.ngsversion.1493410969588.adapt.1900.1.jpg","3":1900,"4":1261},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTDEHb9huCNeicJ_22gT2yp5zapE5T0VTrh2N-Cvf1kRRpEzHyFfg","3":200,"4":132},"3":{"1":"Latest Stories - National Geographic","2":"https://news.nationalgeographic.com/2017/04/frog-photos-save-frog-day/","3":"13 Gorgeous Pictures Remind Us Why Frogs Need Our Help","4":"","10":"IjNOCPUPHhlhve"},"5":{"1":"bRNCLBJoeoEkhIm"}},{"1":{"1":"https://i.ytimg.com/vi/Fa_I68L_APY/maxresdefault.jpg","3":1280,"4":720},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQvaHJGb7GygNJu7t6mgtQ-IKRVRvpfHsGsObxrS2Cb_5YsBLzM","3":200,"4":112},"3":{"1":"YouTube","2":"https://www.youtube.com/watch?v=Fa_I68L_APY","3":"World's Most Famous Frog!","4":"","10":"bbcjDPvxYExfaL"},"5":{"1":"eTlMaEBGhKXNQsB"},"7":{"1":{"11":{"1":"World's Most Famous Frog!","2":"Please SUBSCRIBE - http://bit.ly/BWchannel Watch More -  http://bit.ly/BTpoisonfrog On this episode of Breaking Trail, Coyote tracks  down Costa Rica’s most ic...","3":"7:58","4":"2622194","5":"1484006400000","6":"Brave Wilderness","7":"56906","8":"5741"}}}},{"1":{"1":"https://www.rbg.ca/image/events/frogs/frogslide-mexicanleaf.jpg","3":980,"4":480},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTi4ERHFfdC_UtsiGGg5on4mesPQfYLrVgvuSi5LjGGXvfWVcWR","3":200,"4":97},"3":{"1":"Royal Botanical Gardens","2":"https://www.rbg.ca/frogs","3":"Frogs - Royal Botanical Gardens","4":"Mexican Leaf Frog","10":"ePEhpmgjFyRaVL"},"5":{"1":"EQwwCqjQQqUeyUu"}},{"1":{"1":"https://cosmos-images2.imgix.net/file/spina/photo/11978/170925-Frog-Full.jpg?ixlib=rails-2.1.4&auto=format&ch=Width%2CDPR&fit=max&w=835","3":835,"4":555},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSk7YieHJL3q75pri3jgdNO0li65jlUTlHLBqeo_OnMd8CWkdYxJg","3":200,"4":133},"3":{"1":"Cosmos Magazine","2":"https://cosmosmagazine.com/biology/why-poisonous-frogs-don-t-croak","3":"Why poisonous frogs don't croak | Cosmos","4":"The little devil poison frog is immune to its own toxins.","10":"UeiEkghhVkMXKs"},"5":{"1":"WUoHoDDlhgfBtrO"}},{"1":{"1":"http://www.frogsofborneo.org/images/Header%20Frontpage.jpg","3":2000,"4":1145},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSiMg-d9JBxdtDIF6MccrQmpv2DVFycXK7-vjF0S9Jcvqi_KTom","3":200,"4":114},"3":{"2":"http://www.frogsofborneo.org/","3":"Frogs of Borneo","4":"Bornean Families","10":"CRMKIDvekmMVLT"},"5":{"1":"rlfRjDeDKVSjJIx"}},{"1":{"1":"https://kids.nationalgeographic.com/content/dam/kids/photos/articles/Other%20Explore%20Photos/R-Z/Wacky%20Weekend/Frogs/ww-frogs-budgetts-tile.ngsversion.1461604295186.adapt.1900.1.jpg","3":1900,"4":1068},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQhVTWE1uxmNxemqwwuhCBflDlg12w5EV8tcdnWZdU3ml1lLe2ixw","3":200,"4":112},"3":{"1":"National Geographic Kids","2":"https://kids.nationalgeographic.com/explore/wacky-weekend/frogs/","3":"Wacky Weekend: Frogs","4":"","10":"PpMNVnlqTuNRvy"},"5":{"1":"ygHfQinPsVhlRDU"}},{"1":{"1":"https://www.swarovski.com/medias/?context=bWFzdGVyfHJvb3R8NDkzMzh8aW1hZ2UvanBlZ3xoZTIvaDllLzg4NDg0NzA4MDI0NjIuanBnfGYzMGE4MTI1NjkxZTYzYjc2OTEyZmFiMjIzODM5OWU5NjhlZWI5ZTA3ZWViOTI2MzBkNWMwZWU3OGRjMWQyNmU","3":607,"4":607},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTqBrs02ONOspqXB32cicZkYZB3Yp4IrYQxI3K_U8le5cuHrZYV","3":200,"4":200},"3":{"1":"Swarovski","2":"https://www.swarovski.com/en-AR/p-5136807/Frogs/","3":"Frogs by SWAROVSKI","4":"Frogs - Swarovski, 5136807","10":"PsQJRbaRKxpryy"},"5":{"1":"PAPVKUeteEYVjso"},"7":{"1":{"10":{"3":"Frogs by SWAROVSKI","4":"Swarovski","5":"Honoring the unique flora and fauna of the rainforest, this pair of  Swarovski frogs sparkles in a combination of vibrant crystal colors. The  frogs can ...","7":19900.0,"8":"ARS"}}}},{"1":{"1":"https://jr.brainpop.com/science/animals/frogs/screenshot_1.png","3":600,"4":460},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS0XWJGUpxOeC3j6b7az5dv7y0bWOgXV-29SwL2Hw-LIudZX5F0bA","3":200,"4":153},"3":{"1":"BrainPOP","2":"https://jr.brainpop.com/science/animals/frogs/","3":"Frogs - BrainPOP Jr.","4":"Whoops! Looks like we had a problem playing your video. Refresh the page to  try again.","10":"IFDBtpyVQMwWrO"},"5":{"1":"biORwvUFemtsbpV"}},{"1":{"1":"https://static01.nyt.com/images/2017/02/02/science/sciencetake-frogs-video/sciencetake-frogs-video-superJumbo.jpg","3":2048,"4":1365},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRpdhQxRxS3laHzJhYtcNQxezg_oIYGxbjPLI5SwmI5k5oWiJdUNQ","3":200,"4":133},"3":{"1":"The New York Times","2":"http://www.nytimes.com/topic/subject/frogs","3":"Frogs - The New York Times","4":"The Power of Frog Spit","10":"nFlfdHamKlFCET"},"5":{"1":"IgOMSaMcvdDJvfD"}},{"1":{"1":"https://www.rspb.org.uk/globalassets/images/birds-and-wildlife/non-bird-species-illustrations/common-frog_1200x675.jpg?preset=landscape_mobile","3":768,"4":432},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQneCrWRM20xTxTsyRjgncmLD4_d5dRnsVDFUzF7C5cE8Ul2_Uu","3":200,"4":112},"3":{"1":"RSPB","2":"https://www.rspb.org.uk/birds-and-wildlife/wildlife-guides/other-garden-wildlife/amphibians-and-reptiles/common-frog/","3":"Common Frog | What Do Frogs Eat & other Frog Facts - The RSPB","4":"Common frog","10":"hWliTCrvAjyrCm"},"5":{"1":"pfaqPXfSPlHMJWY"}},{"1":{"1":"https://i.kinja-img.com/gawker-media/image/upload/tgfdtzodvqb4egv9au6w","3":1152,"4":720},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTv97ml3Gr9qxutD333q_xu2TyeqQHbRs07ex_A6ypKtsTvEefD","3":200,"4":124},"3":{"1":"ClickVentures - ClickHole","2":"https://clickventures.clickhole.com/acquire-frogs-1825124396","3":"Acquire Frogs","4":"","10":"MFsYykfcUNjRcn"},"5":{"1":"sRHvGnXMaNcuJNS"}},{"1":{"1":"https://news.utexas.edu/sites/default/files/styles/news_article_main_image/public/photos/epipedobates-anthonyi_872_830.jpg?itok=oW0C6k-o","3":1660,"4":996},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcStpr6bG1jDp0RgcXcV4_ysG8p8S64TGZ5-2XDk9wz-Vlwzo0s0kg","3":200,"4":120},"3":{"1":"UT News - The University of Texas at Austin","2":"https://news.utexas.edu/2017/09/21/why-poison-frogs-don-t-poison-themselves","3":"Why Poison Frogs Don't Poison Themselves | UT News | The ...","4":"Phantasmal Poison Frog (Epipedobates anthonyi)","10":"xSqSEpkCdmrHPP"},"5":{"1":"ieaUIKHjtRyVtQS"}},{"1":{"1":"https://imagesvc.timeincapp.com/v3/mm/image?url=https%3A%2F%2Ftimedotcom.files.wordpress.com%2F2017%2F05%2Ffrog2.jpg&w=1600&q=70","3":1512,"4":1265},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRkJWTXmEQHgBuRrjqaVc6B3ylbTfQY1Pt6XV0OI-f4TOfeb-FE","3":200,"4":167},"3":{"1":"Time","2":"http://time.com/4798314/transparent-frog-new-species-amazon/","3":"Transparent Frog: Scientists Discover New Species in Amazon ...","4":"Have a look: The transparent Hyalinobatrachium yaku frog","10":"dgiUNFlNKNOccA"},"5":{"1":"XXwbLBnCIlGQyvr"}},{"1":{"1":"https://cdn.the-scientist.com/assets/articleNo/30156/iImg/1051/frogs.jpg","3":640,"4":360},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ_hM5VsgXC_2i3qjylFXbM7To9vXuHsrIdrF8ToPAVfj1ddXD4AQ","3":200,"4":112},"3":{"1":"The Scientist Magazine","2":"https://www.the-scientist.com/features/frog-skin-yields-potent-painkillers-but-none-clinic-ready-30156","3":"Frog Skin Yields Potent Painkillers, but None Clinic Ready ...","4":"Frog Skin Yields Potent Painkillers, but None Clinic Ready | The Scientist  Magazine®","10":"ynCfIlcKdHkixo"},"5":{"1":"bhsADIhKmrvyuci"}},{"1":{"1":"https://www.sciencemag.org/sites/default/files/styles/inline__450w__no_aspect/public/frog_16x9.jpg?itok=KqXPFU6-","3":450,"4":253},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRaSIlATqbnPq12oVBUV-FewL_jEHPUauSUvsYvya4JuM1LPxyjFg","3":200,"4":112},"3":{"1":"Science","2":"http://www.sciencemag.org/news/2017/07/can-you-tell-whether-frog-excited-just-listening-its-voice","3":"Can you tell whether this frog is excited just by listening ...","4":"Can you tell whether this frog is excited just by listening to its voice?","10":"RoUBvJcSfsQsEp"},"5":{"1":"wCdnAIPTKcdsehy"}},{"1":{"1":"http://www.backyardbuddies.org.au/_assets/images/buddy-hero-images/Green-Tree-Frog-Emily-Sephton.jpg","3":1600,"4":600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQBpqkRi_p8cw0r1zriKqubKg7I4407IYbBPCRcNAyLCzqCDiVo","3":200,"4":74},"3":{"1":"Backyard Buddies","2":"http://www.backyardbuddies.org.au/fact-sheets/frogs-1","3":"Frogs","4":"","10":"tCDKWOcIIqIleH"},"5":{"1":"kDcRCsbVfhmkpTF"}},{"1":{"1":"https://assets.bwbx.io/images/users/iqjWHBFdfxIU/imbdOzKpGFA8/v0/800x-1.jpg","3":800,"4":450},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSkuYRypL8YpOM3Vafl6mD1qeYIlPtdEuClardhV-0iqZR4_O3F","3":200,"4":112},"3":{"1":"Bloomberg","2":"https://www.bloomberg.com/news/articles/2018-09-12/biohacker-makes-diy-mutant-frogs-and-hopes-they-don-t-croak","3":"The Biohacker Who Experimented on Himself Is Making DIY ...","4":"Illustration: Alvin Fai","10":"RXSyqHDTadRjtW"},"5":{"1":"vkPBNnHYwsnVFvv"}},{"1":{"1":"http://www.pbs.org/wnet/nature/files/2014/05/08_46MB-1000x469.jpg","3":1000,"4":469},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTmCB9eU3X3ExdbLwzLwhHxKgbu1nng-4QoHh-JT-CzBKJggJTm","3":200,"4":93},"3":{"1":"PBS","2":"http://www.pbs.org/wnet/nature/group/amphibians-reptiles/frog/","3":"Frogs | Nature | PBS","4":"Frogs are a diverse and largely carnivorous group of short-bodied, tailless  amphibians composing the ...","10":"vuYFGyiAAfkGBk"},"5":{"1":"FrKpgBDXBgIYHNt"}},{"1":{"1":"https://kids.sandiegozoo.org/sites/default/files/2017-07/animal-hero-fantasticfrogs_0.jpg","3":1020,"4":580},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTBi_RE4pZgVrzGi0oOsFQ1upFnjroThpWTvvYtbIOg4WcsI1aY","3":200,"4":113},"3":{"1":"San Diego Zoo Kids","2":"https://kids.sandiegozoo.org/stories/fantastic-frogs","3":"Fantastic frogs | San Diego Zoo Kids","4":"Mossy frog","10":"WwCjiVEiYOYMUy"},"5":{"1":"CuWfmiUxmLvOvYN"}},{"1":{"1":"https://image.pennlive.com/home/penn-media/width620/img/wildaboutpa/photo/bullfrogjpg-e6472ceba9e0d463.jpg","3":504,"4":339},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRb48Qyf5Pyu7vj-WvC1637fW4gfxTu9Mj2MR-nWvHjxHHu-ZO3","3":200,"4":134},"3":{"1":"PennLive.com","2":"https://www.pennlive.com/wildaboutpa/2017/07/frogs_and_toads_of_pennsylvani.html","3":"Frogs and toads of Pennsylvania: Are there really 17 species ...","4":"bullfrog.jpg","10":"MsAdcYkHVqdUns"},"5":{"1":"avrqpgGUaxwIuwK"}},{"1":{"1":"https://www.enasco.com/medias/xenopus-frogs-categoryvideo-4.jpg?context=bWFzdGVyfGltYWdlc3w0MzgxMHxpbWFnZS9qcGVnfGltYWdlcy9oMDUvaGJkLzg3OTYyNDM0MjczNTguanBnfGUxZDEwODZhM2Y3MmE2NmU2YjQwM2FjOGE0OTMyNjEzMTZjNGZkZGYzYzI4NDI4NzQ0MDIxM2MzNzJkNWE1NjA","3":795,"4":384},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT5zCC-PVFgf7Qv21BIeSlYBvRJqkCg8ZTg9AwbDz7b4rmEClZk","3":200,"4":96},"3":{"1":"Nasco","2":"https://www.enasco.com/c/Education-Supplies/Xenopus-Frogs","3":"Xenopus Frogs | Education Supplies | Nasco","4":"Xenopus Tropicalis","10":"IaQBBwidFDPrCW"},"5":{"1":"wLjTrSuCIAbSvok"}},{"1":{"1":"https://cdn.britannica.com/s:700x450/57/22457-049-8F80A555.jpg","3":320,"4":240},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQRC2g7gY5I0hlcR6Z4QhvO3In2kVjfG7bRe9zPNTsgEpAHjHMv","3":200,"4":149},"3":{"1":"Encyclopedia Britannica","2":"https://www.britannica.com/animal/frog","3":"Frog | amphibian | Britannica.com","4":"tree frog","10":"NMHkeHYhlmacxd"},"5":{"1":"yrkGEFyXWiJttwW"}},{"1":{"1":"https://cdn-images-1.medium.com/max/595/0*F57sByVPzim7oA4w.jpg","3":595,"4":335},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRvKl7iN6SsOCeJ8Fll0Z02OxnR_x035trZiPcOOx5wZ-i_dhPofg","3":200,"4":112},"3":{"1":"The Economist - Medium","2":"https://medium.economist.com/hunting-for-frogs-in-the-western-ghats-270768e5bc7d","3":"Hunting for frogs in the Western Ghats – The Economist","4":"","10":"EVTOruFlqfrwql"},"5":{"1":"dCTcNXqnebIqpOA"}},{"1":{"1":"https://media.mnn.com/assets/images/2016/12/jaymi-heimbuch-_JH_1705-01.jpg","3":1500,"4":1000},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTqEEUZzO9SD97G3OK33jGBdkLiCVlRV8EhUH8uJ3SXncnQF0v0Jw","3":200,"4":133},"3":{"1":"Mother Nature Network","2":"https://www.mnn.com/earth-matters/animals/blogs/This-why-red-eyed-tree-frogs-have-red-eyes","3":"This is why red-eyed tree frogs have red eyes | MNN - Mother ...","4":"red-eyed tree frog","10":"tXEDrMjTLTVffk"},"5":{"1":"WHNDEeEFejqccyh"}},{"1":{"1":"https://www.wettropics.gov.au/site/user-assets/mcms_cb_resized/miketrenerryyellowgianttreefroglitoriainfrafrenata-1.jpg","3":428,"4":281},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTJ79-75lr0_bJHHMIlrua9-5VXZf65pz8z9hZcHW0QNDTHbN1c","3":200,"4":131},"3":{"1":"Wet Tropics Management Authority","2":"http://www.wettropics.gov.au/frogs","3":"Frogs | Wet Tropics Management Authority","4":"Frogs","10":"uRyKVOHxdXSsmk"},"5":{"1":"QbFEoXpYyrEGjJM"}},{"1":{"1":"https://www.davincisciencecenter.org/wp-content/uploads/2018/05/leaf-frogs-900x600.jpg","3":900,"4":600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRraAutITBAvNnDVw-ZMxGOdt13vfXj1aWWTi_dElmIkO0Vv4oUjg","3":200,"4":133},"3":{"1":"Da Vinci Science Center","2":"https://www.davincisciencecenter.org/frogs-and-friends/","3":"Frogs and Friends - Da Vinci Science Center - Da Vinci ...","4":"The Solomon Island leaf frog has a loud call and eats crickets. Its body  shape","10":"poKVJCxYdnKqqv"},"5":{"1":"ihBTVRWKYwlwLQD"}},{"1":{"1":"https://blog.nationalgeographic.org/wp-content/uploads/2013/11/poison-dart-frog-pumilio-defenses-s2048x1372-p.jpg","3":2048,"4":1372},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRHohSag9Y5M5cLULNwpN9CIuK3v1cXX63_cVi1lMUvMM4G8wMv","3":200,"4":134},"3":{"1":"National Geographic Blog - National Geographic Society","2":"https://blog.nationalgeographic.org/2013/11/21/poison-frogs-make-their-babies-toxic-too/","3":"Poison Frogs Make Their Babies Toxic, Too – National ...","4":"Photo of a strawberry poison dart frog in Costa Rica.","10":"JbVtKgCKdSCDpF"},"5":{"1":"HVtlNFOTShVHwPH"}},{"1":{"1":"https://australianmuseum.net.au/Uploads/Images/35550/P2060249_smll_big.jpg","3":526,"4":396},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQqu0UClFqLeww4-3Kl3DtKP4QOb0I93zzpekB4vzd9VJXvAt3j","3":200,"4":150},"3":{"1":"Australian Museum","2":"https://australianmuseum.net.au/blogpost/why-do-frogs-call","3":"Why do frogs call? - Australian Museum","4":"Graceful Tree Frog","10":"SKbgJUFUnTXUSG"},"5":{"1":"UgSWbgQLclfCCww"}},{"1":{"1":"https://static.independent.co.uk/s3fs-public/thumbnails/image/2018/06/14/12/frog-pond.jpg?w968h681","3":968,"4":681},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRcsVTOChE6B-9A6nmhsXu9rSwvz4PEy8nkrcC_8qfIHZWCypwJgw","3":200,"4":140},"3":{"1":"The Independent","2":"https://www.independent.co.uk/environment/frog-pesticides-female-fertility-chemicals-linuron-endangered-species-extinction-a8399401.html","3":"Pesticides could wipe out frogs by turning them female, study ...","4":"Amphibians such as this common frog could have their fertility impacted by  the widespread use of","10":"iyIAOSSBEjwOOh"},"5":{"1":"rxmnwHOufvxpBRu"}},{"1":{"1":"https://www.mashpilodge.com/wp-content/uploads/mashpi-frogs-hyloscirtus-mashpi.jpg","3":1600,"4":1067},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQQfZJvwaZ3EojQn1-eO7Mj-fLyaLONuP3lBJC3gJ_ale1CY09m3Q","3":200,"4":133},"3":{"1":"Mashpi Lodge","2":"https://www.mashpilodge.com/the-amphibians-of-mashpi-type-of-toads-and-frogs/","3":"The amphibians of Mashpi – types of toads and frogs - Mashpi ...","4":"This frog is associated with rivers and bodies water, where it can be  observed during night walks.","10":"yBLkOyCxDEKoae"},"5":{"1":"VLxvFyvAyDyKxBh"}},{"1":{"1":"http://cdn.sci-news.com/images/enlarge3/image_4673e-Red-Eyed-Tree-Frog.jpg","3":1920,"4":1407},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRV45DKX-3v_5slq83_DhC8HnJezhTby-xu984ywDIMeriPI2wj","3":200,"4":146},"3":{"1":"Sci-News.com","2":"http://www.sci-news.com/biology/frogs-see-color-extreme-darkness-04673.html","3":"Frogs Have Unique Ability to See Color in Extreme Darkness ...","4":"According to Yovanovich et al, frogs can see color in extreme darkness,  down to","10":"DGLLcwTUHTSEBJ"},"5":{"1":"YPDAQqibncYwdyG"}},{"1":{"1":"https://asset-manager.bbcchannels.com/i/2fdrc1c20e61000","3":1730,"4":510},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQRcnwCzJIetuwttMZoCBzhPYpWA3Y5U8LUiYfZbdBBZBPgPK_t8Q","3":200,"4":58},"3":{"1":"BBC Earth","2":"https://www.bbcearth.com/blog/?article=how-a-pregnancy-test-caused-a-catastrophe-for-frogs","3":"How a pregnancy test caused a catastrophe for frogs | BBC Earth","4":"","10":"qdgocElyxSTqkY"},"5":{"1":"yNbKaltLjiGApAU"}},{"1":{"1":"https://i.ytimg.com/vi/nyBZqRgbds4/maxresdefault.jpg","3":1688,"4":950},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRvgZ_rnKmy-LUO_bgqV09Xo7VtxrFklvrk_FR7zBsh2UaBdDX3","3":200,"4":112},"3":{"1":"YouTube","2":"https://www.youtube.com/watch?v=nyBZqRgbds4","3":"Deadly Poison Dart Frog?","4":"","10":"ywtsACBNNDlKbh"},"5":{"1":"hWLcNTvNTqEOHBg"},"7":{"1":{"11":{"1":"Deadly Poison Dart Frog?","2":"Please SUBSCRIBE NOW! http://bit.ly/BWchannel Watch More -  http://bit.ly/BTvinegaroon On this episode of Breaking Trail, Coyote  ventures deep into the rainfo...","3":"7:19","4":"5023010","5":"1465257600000","6":"Brave Wilderness","7":"53218","8":"6142"}}}},{"1":{"1":"https://www.popsci.com/sites/popsci.com/files/styles/1000_1x_/public/images/2017/09/beelzebufo_bw.jpg?itok=Bsceo4Tm&fc=50,50","3":1000,"4":749},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ53aSAARzQhZhCs3dXMzRax6IrlFQDBVtcUKkiwiOZGw2HwKj3PQ","3":200,"4":149},"3":{"1":"Popular Science","2":"https://www.popsci.com/beelzebufo-devil-frog-bite-force-dinosaur","3":"Giant ancient frogs might have snacked on baby dinosaurs ...","4":"beelzebufo illustration","10":"bAsGfhyeefhjIT"},"5":{"1":"hJEuyvjjMTpcYyh"}},{"1":{"1":"https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzA5NS81MjEvb3JpZ2luYWwvZnJvZy13aXRoLWJpdGUtMDEuanBn","3":660,"4":412},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRqapZ9iWr9W9Oe_YbibjwU6erpILlkUc6WnnRWMMKLCA0fYUH66A","3":200,"4":124},"3":{"1":"Live Science","2":"https://www.livescience.com/60474-frog-with-powerful-bite.html","3":"Extinct Big-Mouthed Frogs May Have Dined on Dinos","4":"","10":"XaVkXuxBOQtOYM"},"5":{"1":"tGrvIFxeXtnParj"}},{"1":{"1":"http://www.cellphonetaskforce.org/wp-content/uploads/2012/01/frog-left.jpg","3":400,"4":349},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS2wSIPot_nLb4yZwcoRXUiaxf0IZIiUnyQL_w21k0GOS7FvX4h6A","3":200,"4":175},"3":{"1":"Cellular Phone Task Force","2":"https://www.cellphonetaskforce.org/frogs/","3":"FROGS • Cellular Phone Task Force","4":"ALL ARTICLES BY ALFONSO BALMORI · Frog","10":"LBmFoLPUBwrHWV"},"5":{"1":"UTIlnIJacMSxMmw"}},{"1":{"1":"https://www.irishtimes.com/polopoly_fs/1.2197035.1430491144!/image/image.jpg_gen/derivatives/box_620_330/image.jpg","3":620,"4":330},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSlpk8viG1gD-hI0-Ibjct-tGd0wZwqyl_AHnL8kLDa0O1gFh0F","3":200,"4":106},"3":{"1":"The Irish Times","2":"https://www.irishtimes.com/news/science/toxic-frogs-how-do-they-make-their-poison-1.2197039","3":"Toxic frogs: how do they make their poison?","4":"A Sira poison frog (Ranitomeya sirensis)","10":"uuLugouUGykRXY"},"5":{"1":"enbGNsfFaLrpfDV"}},{"1":{"1":"https://www.environment.nsw.gov.au/-/media/OEH/Corporate-Site/Topics/Animals-and-plants/Native-animals/eastern-dwarf-tree-frog-litoria-fallax-109029.jpg","3":690,"4":580},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS8eSPAd8tNxrrC1QIH_M16-iew--LDC-62tRpFqYwRCM1gFFpdoA","3":200,"4":168},"3":{"1":"Office of Environment and Heritage - NSW Government","2":"https://www.environment.nsw.gov.au/topics/water/wetlands/plants-and-animals-in-wetlands/frogs","3":"Frogs in wetlands | NSW Environment & Heritage","4":"","10":"xgkwsnPjHadhee"},"5":{"1":"YloQyjvnXVxIxkp"}},{"1":{"1":"https://media.treehugger.com/assets/images/2018/05/golden_poison_dart_frog_photo.jpg.1200x0_q70_crop-smart.jpg","3":1200,"4":805},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSVzxce_y_9aBwPULkVsS581ldwa8toZ9uCPttXL-0Jhma2NKRm","3":200,"4":134},"3":{"1":"TreeHugger","2":"https://www.treehugger.com/slideshows/natural-sciences/16-beautiful-deadly-frogs/","3":"16 beautiful but deadly frogs | TreeHugger","4":"golden poison dart frog photo","10":"uwGepFKTYKyqLa"},"5":{"1":"SbDWopSVpGkxKFO"}},{"1":{"1":"https://www.mashpilodge.com/wp-content/uploads/mashpi-frogs-hyalinobatrachium-aureoguttatum.jpg","3":1600,"4":1273},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTfXZMfK9HGzYMUdGrrqmycQmI19-C_Dfsf_oYEkLSqx60K3UAG","3":200,"4":158},"3":{"1":"Mashpi Lodge","2":"https://www.mashpilodge.com/the-amphibians-of-mashpi-type-of-toads-and-frogs/","3":"The amphibians of Mashpi – types of toads and frogs - Mashpi ...","4":"Tree frogs (Hylidae)","10":"RmpLINVYskvAOi"},"5":{"1":"cUedHTGKOviDEvO"}},{"1":{"1":"https://www.crees-manu.org/wp-content/uploads/2017/05/cochranella-nola-glass-frog-eilidh-munro-peruvian-amazon-crees-foundation-research-sustainability5.jpg","3":1200,"4":800},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS2Ox9uBF6dmqIdJl96WhYixhJ4euA2Kdm15kqKSyDMQ1QU1BhG2A","3":200,"4":133},"3":{"1":"Crees Manu","2":"https://www.crees-manu.org/why-are-glass-frogs-transparent-cochranella-nola/","3":"Glass frogs: their weapon and weakness","4":"A glass frog with round, sticky toe pads blends into a leaf | Image ©  Eilidh Munro","10":"DnmtNUAAWptehN"},"5":{"1":"vwoBwiimxGbHhQq"}},{"1":{"1":"http://www.savethefrogs.com/d/day/images/icon-STF-Day-Last-Saturday-328.jpg","3":328,"4":246},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRoZ47SU0mt_tmoty9q6RwrdNkUHet4AofB4IM97KD1p1ORBuNC","3":200,"4":149},"3":{"1":"Save the Frogs","2":"http://www.savethefrogs.com/d/day/index.html","3":"Save The Frogs Day - April 29, 2017","4":"","10":"VQgobmBEaiwSSY"},"5":{"1":"sCWgepsdcGGKheQ"}},{"1":{"1":"https://smhttp-ssl-52271.nexcesscdn.net/media/catalog/product/w/h/white_s_tree_frogs_7.jpg","3":1797,"4":1789},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR3eXxwGn2yYty-WrFBnJF6Dfd4PBj9ykuWY5SgTthzATQ6PFZKgg","3":200,"4":199},"3":{"1":"Josh's Frogs","2":"http://www.joshsfrogs.com/white-s-tree-frog-captive-bred.html","3":"Blue Phase White's Tree Frog - Litoria caerulea (CBP)- $34.99 Only 5 left  Quantity Available: 5","4":"Blue Phase White's Tree Frog - Litoria caerulea (CBP) | Josh's Frogs","10":"rtPYdQKSKLIcIU"},"5":{"1":"AQxFvMDWWwwKMPL"},"7":{"1":{"10":{"3":"Blue Phase White's Tree Frog - Litoria caerulea (CBP)- $34.99 Only 5 left  Quantity Available: 5","5":"White's Tree Frog (Captive Bred) - Litoria caerulea","6":true,"7":34.9900016784668,"8":"USD"}}}},{"1":{"1":"https://www.futurity.org/wp/wp-content/uploads/2016/07/mating_frogs2_1600-770x440.jpg","3":770,"4":440},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTBtcy-7M_1t5dx5nDND5tHuc2f1Bzv7Xxx020ax10cOtifp1hK","3":200,"4":114},"3":{"1":"Futurity.org","2":"https://www.futurity.org/frogs-mating-land-1212492-2/","3":"Some frogs mate on land to avoid a 'breeding frenzy' - Futurity","4":"","10":"FsAorQNLSeMLwS"},"5":{"1":"YbmpWttSsocNiVp"}},{"1":{"1":"https://images.mentalfloss.com/sites/default/files/styles/mf_image_16x9/public/froghed.png?itok=Bi4CHog0&resize=1100x1100","3":1100,"4":739},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQmY0H3CbzQT8mOLU0YUllEo-UFmUxxcAFPYm6vjsT_4dQOyymJ","3":200,"4":134},"3":{"1":"Mental Floss","2":"http://mentalfloss.com/article/71568/hawaiis-big-island-overrun-loud-frogs-puerto-rico","3":"Hawaii's Big Island Is Overrun With Loud Frogs From Puerto ...","4":"Hawaii's Big Island Is Overrun With Loud Frogs From Puerto Rico","10":"xseKINCUlyrvvk"},"5":{"1":"EETLpMYcyuUJiNf"}},{"1":{"1":"https://defenders.org/sites/default/files/frog-kevin-clark-dpc.jpg","3":498,"4":272},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSdlp5WACg_U6DCIeigBfLXDLqop9Q9zgib8dM8phjv7P9jc4xywA","3":200,"4":109},"3":{"1":"Defenders of Wildlife","2":"https://defenders.org/frogs/basic-facts","3":"Frogs | Basic Facts About Frogs | Defenders of Wildlife","4":"","10":"sbpFxFBQDgGtnc"},"5":{"1":"skuSpTbIYMWIUMF"}},{"1":{"1":"https://pmdvod.nationalgeographic.com/NG_Video/66/327/170127-news-finding-frogs-original-edit-vin_640x360_866906691953.jpg","3":640,"4":360},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS5q2Gz_zZ4yGCE03P3_UwddQwRNY49y2CuKKlDvMG4j08DQvAqQw","3":200,"4":112},"3":{"1":"National Geographic","2":"https://video.nationalgeographic.com/video/news/170127-news-finding-frogs-original-edit-vin","3":"Tracking Frogs In the Amazon Rain Forest","4":"","10":"FuwxHswpnLfGeI"},"5":{"1":"uKfhwUXcIhoogNT"}},{"1":{"1":"http://www.aquariumofpacific.org/images/made/images/slideshow/frogs_slideshow_banner_940x260_940_260_85shar-70-.5-5.jpg","3":940,"4":260},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTvWwjH2RxiLhhzaYnK9ou-2d84Hx90uK4SvYfOQ5eMCF8cCcEK8g","3":200,"4":55},"3":{"1":"Aquarium of the Pacific","2":"http://www.aquariumofpacific.org/exhibits/frogs","3":"Aquarium of the Pacific | Frogs: Dazzling & Disappearing ...","4":"FROGS: Dazzling and Disappearing","10":"pkqLeJeLmKVNPF"},"5":{"1":"HTqRRDiwKRWWKBN"}},{"1":{"1":"https://media.npr.org/assets/img/2017/01/31/frog-promo-1d3cdbeae91022c34fc659ad35ec677db5fb477f-s800-c85.jpg","3":800,"4":600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRrh_0JT1Hmrrmk3TG2UQOs4tvHlayNaoSV_F6kCzWorG_Az374","3":200,"4":149},"3":{"1":"NPR","2":"https://www.npr.org/sections/thetwo-way/2017/01/31/512622260/to-catch-prey-frogs-turn-to-sticky-spit","3":"To Catch Prey, Frogs Turn To Sticky Spit : The Two-Way : NPR","4":"Enlarge this image","10":"pdqSoGRTEjggYa"},"5":{"1":"VsMstoapUTjNyhP"}},{"1":{"1":"https://www.thesprucepets.com/thmb/mBbnO3P3iy42LYw40qiqHrw7y6M=/450x0/filters:no_upscale():max_bytes(150000):strip_icc()/GettyImages-175174320-581251b65f9b58564ccaffe2.jpg","3":450,"4":338},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSgO-9VaUig5kL576jezP40Xe6p85j65n3RCkuY6y3Wzu7P7pBw","3":200,"4":149},"3":{"1":"The Spruce Pets","2":"https://www.thesprucepets.com/whites-tree-frog-1236816","3":"A Guide to Caring for Pet White's Tree Frogs","4":"White's Tree Frogs' Behavior and Temperament","10":"JMVRbqkbIIvjsk"},"5":{"1":"CouNEYfSeOArmVa"}},{"1":{"1":"http://ichef.bbci.co.uk/wwfeatures/wm/live/1280_640/images/live/p0/2d/z3/p02dz3cy.jpg","3":1280,"4":640},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR0-DmARCSCVbR2JmafaUUp2xKyuJbYqxkvUi5BYaCiCQ6Y3gBa","3":200,"4":100},"3":{"1":"BBC.com","2":"http://www.bbc.com/earth/story/20141210-gorgeous-new-frogs-found-in-india","3":"BBC - Earth - Nine beautiful new frogs found in India's ...","4":"Nine beautiful new frogs found in India's Western Ghats","10":"olXkoxuJEnONJo"},"5":{"1":"XwtKwbtqWryTOGk"}},{"1":{"1":"https://3c1703fe8d.site.internapcdn.net/newman/gfx/news/2018/woodfrogsno1.jpg","3":800,"4":600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQaXimX_N6UETTMd8m_L0fNt23keTeateEaRjOtZ5Jf4UyOTKxS","3":200,"4":149},"3":{"1":"Phys.org","2":"https://phys.org/news/2018-05-wood-frogs-option-pee-winter.html","3":"Wood frogs' No. 1 option: Hold in pee all winter to survive","4":"","10":"CEqxlvQHXVHXVa"},"5":{"1":"bVFQHcQuFFJXjXe"}},{"1":{"1":"https://www.radionz.co.nz/assets/news_crops/51939/eight_col_Green_and_golden_bell_frog_-_Paul_Schilov__DOC.jpg?1518755893","3":720,"4":450},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRArRLV-ZPjCLU1LlLyxwL2Qg_gq32A_qk1H6q2qZfHwyFFkCVoBw","3":200,"4":124},"3":{"1":"Radio NZ","2":"https://www.radionz.co.nz/news/national/350590/screeching-frogs-no-music-to-papamoa-s-ears","3":"Screeching frogs no music to Papamoa's ears | RNZ News","4":"Green and gold bell frogs: delightful to some; less so to others","10":"lmMkugWXrTFWkI"},"5":{"1":"vCKvENJeDtssMYw"}},{"1":{"1":"https://static1.squarespace.com/static/56648ab9e4b08333d1fdda0d/t/59d2de38a803bbf1d1a6c600/1506992166743/green_and_mink_CES.jpg?format=750w","3":750,"4":322},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRTDg-7IY9-O3b-eFzg5_UFgYlhu9ZZVGJk09Hbyjv9B2y3TffT","3":200,"4":85},"3":{"1":"Field Ecology","2":"https://www.fieldecology.com/blog/a-case-of-two-confusing-frogs","3":"Head to Head: A Case of Two Confusing Frogs — Field Ecology","4":"Left: Green frog ( Lithobates clamitans ). Right: Mink Frog ( Lithobates  septentrionalis","10":"pUVUOdaTRwOyjh"},"5":{"1":"yHjTdyQroDgCWdN"}},{"1":{"1":"http://www.ipcc.ie/wp/wp-content/uploads/2012/11/bogfrog1.jpg","3":432,"4":324},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTdh7xGlfYKIZZoIX39opV4q6g3zMhcrxSKXDxXKhJM8mdHukTvYw","3":200,"4":149},"3":{"1":"Irish Peatland Conservation Council","2":"http://www.ipcc.ie/a-to-z-peatlands/frogs/","3":"Frog Factsheet - Irish Peatland Conservation Council ...","4":"Common Frog (Rana temporaria) in Lodge Bog, Co. Kildare","10":"raWUPnKvHoPLse"},"5":{"1":"wcXpPtnYsGdoKJF"}},{"1":{"1":"https://www.sciencedaily.com/images/2017/11/171129090421_1_540x360.jpg","3":536,"4":360},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRvlee0GkpwWYEUJKQoGPFpk2EG5FhGdkJFgd2H-zeYSNERweOS9A","3":200,"4":134},"3":{"1":"ScienceDaily","2":"https://www.sciencedaily.com/releases/2017/11/171129090421.htm","3":"Invasive frogs give invasive birds a boost in Hawaii ...","4":"Coquis ...","10":"KqBADfyUpcYQqH"},"5":{"1":"rBVhEPdGgtpfabn"}},{"1":{"1":"https://thumbs-prod.si-cdn.com/_zguUogCQ0DkXMlu0ktSFESkTJI=/800x600/filters:no_upscale()/https://public-media.smithsonianmag.com/filer/66/45/6645520f-0f24-4eb7-a788-4ca9ec2f61ed/14-fun-facts-about-frogs-550-419.jpg","3":550,"4":419},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQX1FgR9O8odOodFbUAzW-aIA9CrePB8C3WUy472Xlyta32Z5VN","3":200,"4":152},"3":{"1":"Smithsonian Magazine","2":"https://www.smithsonianmag.com/science-nature/14-fun-facts-about-frogs-180947089/","3":"14 Fun Facts About Frogs | Science | Smithsonian","4":"#4: When Darwin's frog tadpoles hatch, a male frog swallows the tadpoles","10":"RjFrolyMuvCBYP"},"5":{"1":"wEciuiYICEKAObu"}},{"1":{"1":"https://www.savethefrogs.com/images/events/day/2018/icon-save-the-frogs-day-2018-official-550.jpg","3":550,"4":413},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRibUOmBWEy-Cr0uMqu0tZT6s9ORQC2xzbGIgMASssmk7I_5QfV","3":200,"4":149},"3":{"2":"https://www.savethefrogs.com/","3":"SAVE THE FROGS! - Home","4":"icon save the frogs day 2018 official 550","10":"tYUCavGVyiNQiH"},"5":{"1":"UpPaLeYDytuQxjc"}},{"1":{"1":"https://www.environment.nsw.gov.au/-/media/OEH/Corporate-Site/Topics/Water/Wetlands/alpine-tree-frog-litoria-verreauxii-alpina-109924.jpg?h=585&w=810&hash=89D07E2F6959476D1F9FA0F15848FBC38932D6B4","3":810,"4":585},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRl84qjRzDxuAWE5CW28jJmJHKst8vnd-WBF8jZhP-xrNLaj3FV","3":200,"4":144},"3":{"1":"Office of Environment and Heritage - NSW Government","2":"https://www.environment.nsw.gov.au/topics/water/wetlands/plants-and-animals-in-wetlands/frogs","3":"Frogs in wetlands | NSW Environment & Heritage","4":"Alpine tree frog (Litoria verreauxii alpina) Photo: / Dr Dave Hunter","10":"NjrkvJayacyTXP"},"5":{"1":"BQliixBjqTljksX"}},{"1":{"1":"https://advancedtissue.com/wp-content/uploads/wound-healing-with-frog-skin.jpg","3":357,"4":242},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRLyhCAwXxFitHayeYypMi2h03p7e0uAyUt7qVkb7HFXnjrVHnm","3":200,"4":135},"3":{"1":"Advanced Tissue","2":"https://advancedtissue.com/2015/07/frogs-and-wound-healing-whats-the-connection/","3":"Frogs and Wound Healing: What's the Connection?","4":"","10":"eQwjeANbJEgnpN"},"5":{"1":"JRXTEKjTTNmhMWe"}},{"1":{"1":"https://www.earthrangers.com/content/wildwire/green_frog_in_lake.jpg","3":640,"4":427},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSJKWWjU37-8POn1JDoz-F-YfCeTdS1K6CPB9XEzia2N3a9zt3O","3":200,"4":133},"3":{"1":"Earth Rangers","2":"https://www.earthrangers.com/wildwire/omg_animals/whats-so-great-about-frogs/","3":"What's So Great About Frogs? | Earth Rangers Wild Wire Blog","4":"What's So Great About Frogs?","10":"wLPhaSrclSwRIR"},"5":{"1":"fmuLWTTSNMbcpig"}},{"1":{"1":"http://www.pbs.org/wnet/nature/files/2014/06/frog-interactive.jpg","3":935,"4":526},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRcA8Iblt3ZgEQXiWQnGBqtiKMf8hZFf9CBYZQZSlztYk9-76bscA","3":200,"4":112},"3":{"1":"PBS","2":"http://www.pbs.org/wnet/nature/fabulous-frogs/8904/","3":"Fabulous Frogs | About | Nature | PBS","4":"Attenborough's Family of Fabulous Frogs","10":"BeRwlXHEGexsjP"},"5":{"1":"rIBinmesmIPwajF"}},{"1":{"1":"https://images.pexels.com/photos/104827/cat-pet-animal-domestic-104827.jpeg?auto=compress&cs=tinysrgb&h=350","3":527,"4":350},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTw8Du8Ux7DmwbCFXbOkl-jyZ31neHXZPFLFNmLwThLTfd52sRK7g","3":200,"4":132},"3":{"1":"Pexels","2":"https://www.pexels.com/search/cat/","3":"446 Adorable Cat Pictures · Pexels · Free Stock Photos","4":"Grey and White Short Fur Cat","10":"TREAroYWuwFPbe"},"5":{"1":"kUtiOrdImbWFUov"}},{"1":{"1":"https://images.pexels.com/photos/617278/pexels-photo-617278.jpeg?auto=compress&cs=tinysrgb&h=350","3":528,"4":350},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSyvCOVHlpY5k9zMZYVgTZ3UrMBZcwRgkOFnmUuo80Ik7epQb7OgQ","3":200,"4":132},"3":{"1":"Pexels","2":"https://www.pexels.com/search/cat/","3":"446 Adorable Cat Pictures · Pexels · Free Stock Photos","4":"","10":"TsqdXdqOmrGDFt"},"5":{"1":"xStLTJfYSAJEtuf"}},{"1":{"1":"http://www.catster.com/wp-content/uploads/2017/08/A-fluffy-cat-looking-funny-surprised-or-concerned.jpg","3":600,"4":400},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQYQo_3zC1FpgMmtbD0IDEVKiCMZ8H3SfbtBTOn42O8_fIj4fe8xQ","3":200,"4":133},"3":{"1":"Catster","2":"https://www.catster.com/cat-behavior/what-is-cat-flehmen-response","3":"What is a Cat Flehmen Response? - Catster","4":"","10":"PqnOEAEekXfkks"},"5":{"1":"KHGxdUcqYOSnNFb"}},{"1":{"1":"https://images.pexels.com/photos/20787/pexels-photo.jpg?auto=compress&cs=tinysrgb&h=350","3":525,"4":350},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTvSeOYRVExl062WjSramBG1P_LA-KUmQNFBD7s-Kqagn1XvJZn","3":200,"4":133},"3":{"1":"Pexels","2":"https://www.pexels.com/search/cat/","3":"446 Adorable Cat Pictures · Pexels · Free Stock Photos","4":"Free stock photo of animal, pet, cat, adorable","10":"NNeOBwdWCVthYB"},"5":{"1":"kigYrKahGHXFYqm"}},{"1":{"1":"https://www.cats.org.uk/uploads/images/featurebox_sidebar_kids/grief-and-loss.jpg","3":582,"4":328},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRkadsYJoVDlWZ6IbaBDHQBCr8xqf9tghiiGd1kUosjQfa87EwDxA","3":200,"4":112},"3":{"2":"https://www.cats.org.uk/","3":"Cats Protection - UK's Largest Feline Welfare Charity","4":"Ginger cat","10":"JTPLwlndmEDniN"},"5":{"1":"FNDtweTpuRKfAaw"}},{"1":{"1":"https://www.readersdigest.ca/wp-content/uploads/sites/14/2011/01/4-ways-cheer-up-depressed-cat.jpg","3":1000,"4":700},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRzydEUK5PkeCEMWd5_FBN6rPwGUZE5NpniXIJvFolxCxP0k_Ya","3":200,"4":140},"3":{"1":"Reader's Digest Canada","2":"https://www.readersdigest.ca/home-garden/pets/4-ways-cheer-depressed-cat/","3":"How to Cheer Up a Depressed Cat","4":"4 Ways to Cheer Up a Depressed Cat","10":"ANUMBTkkqibRAD"},"5":{"1":"dOqNJVdHiXMiRAx"}},{"1":{"1":"https://s.hswstatic.com/gif/whiskers-sam.jpg","3":400,"4":272},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTQkLe7r0U3Tw6QYb4r4nDvtysFrTFA6kfkByQ-NMk64VqgPqrE","3":200,"4":136},"3":{"1":"Animals | HowStuffWorks","2":"https://animals.howstuffworks.com/pets/question592.htm","3":"Why do cats have whiskers? | HowStuffWorks","4":"A cat's whiskers are so sensitive that they can detect the slightest  directional change in a","10":"lsrjwuKAaujOte"},"5":{"1":"HhtIvaifBWqrnAo"}},{"1":{"1":"https://i.ytimg.com/vi/I7jgu-8scIA/maxresdefault.jpg","3":1280,"4":720},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQEq5El8D9lupke-0HjTPkPdfpS-KP8r4ic4Hutkz0lU-9VyX1Dcw","3":200,"4":112},"3":{"1":"YouTube","2":"https://www.youtube.com/watch?v=I7jgu-8scIA","3":"Animal Funny Cat Images, Pics, Videos","4":"Animal Funny Cat Images, Pics, Videos","10":"GFeWDFVjovWHnS"},"5":{"1":"RnAdHAIxVJeRIkj"},"7":{"1":{"11":{"1":"Animal Funny Cat Images, Pics, Videos","2":"A Funny Cat Videos Compilation, Cats Pictures, Images & Photos, cat photos  free download, cat photos wallpaper, cat photos free, Cat Photos hd  wallpapers fre...","3":"1:31","4":"102595","5":"1468454400000","6":"Real Video","7":"195","8":"1"}}}},{"1":{"1":"https://pbs.twimg.com/profile_images/378800000532546226/dbe5f0727b69487016ffd67a6689e75a_400x400.jpeg","3":400,"4":400},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTbviSJcx2a4U01BRinV9aTIrdxUBzy9ZCHs2WdNG49aanJilZG","3":200,"4":200},"3":{"1":"Twitter","2":"https://twitter.com/cats","3":"Cats (@Cats) | Twitter","4":"Cats","10":"NdifjEknWFWSjU"},"5":{"1":"aTqngNpkitmabKn"}},{"1":{"1":"http://r.ddmcdn.com/s_f/o_1/cx_462/cy_245/cw_1349/ch_1349/w_720/APL/uploads/2015/06/caturday-shutterstock_149320799.jpg","3":720,"4":720},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQS1O0mrtqT01GaiopVuQ6xn9yxiBGX8Vq4GZgq1bTcAbddeDAP","3":200,"4":200},"3":{"1":"Animal Planet","2":"http://www.animalplanet.com/pets/cats/","3":"Cats | Animal Planet","4":"Enter Your Cat In the #SaturdayCaturday Photo Contest","10":"emYEBtlYQpiAbm"},"5":{"1":"ivgquuqMrsiRMqY"}},{"1":{"1":"http://catsatthestudios.com/wp-content/uploads/2017/12/12920541_1345368955489850_5587934409579916708_n-2-960x410.jpg","3":960,"4":410},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS2CCdsr45LaljC1fM0vx0IwzNWhFO4t6AlEmZlhsjrhmjbknh-","3":200,"4":85},"3":{"2":"http://catsatthestudios.com/","3":"Cats At The Studios","4":"","10":"CfMfbnycBdJMNW"},"5":{"1":"XxgiTeyyBktDYgI"}},{"1":{"1":"https://images.pexels.com/photos/326875/pexels-photo-326875.jpeg?auto=compress&cs=tinysrgb&h=350","3":525,"4":350},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSAeaY5lovSy3u9wAf2A-evp1YJow4XxrBY2N49sitZikCt3odshg","3":200,"4":133},"3":{"1":"Pexels","2":"https://www.pexels.com/search/cat/","3":"446 Adorable Cat Pictures · Pexels · Free Stock Photos","4":"Cat Outdoors","10":"gDtGgtJFNRBnKs"},"5":{"1":"fqQxxvMBbmHnoGf"}},{"1":{"1":"https://d17fnq9dkz9hgj.cloudfront.net/uploads/2012/11/101438745-cat-conjunctivitis-causes.jpg","3":2673,"4":1797},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR-RyKa-DFc31yM6YnVxmbpH-Wh-TGhvGs-EbC9mIBiOSk2i3fIyw","3":200,"4":134},"3":{"1":"Petfinder","2":"https://www.petfinder.com/animal-shelters-and-rescues/fostering-cats/eight-reasons-you-can-foster-a-pet/","3":"Eight Reasons You Can Foster a Pet -- Even If You Think You ...","4":"Photo Credit: Thinkstock","10":"oVsrTAfMjhstNX"},"5":{"1":"RjxVkBxrJfxAkFb"}},{"1":{"1":"https://ichef.bbci.co.uk/images/ic/720x405/p0517py6.jpg","3":720,"4":405},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTpvUB49_6VsNZeqiVuryzEbAgFrEFF-rz3xLc7KOtIA3rdtWmDzw","3":200,"4":112},"3":{"1":"BBC.com","2":"https://www.bbc.com/news/uk-scotland-39717634","3":"Should designer cats be banned?","4":"","10":"EVfyYqRfoeydmH"},"5":{"1":"tAjxscAqhLXqVDW"},"7":{"1":{"11":{"1":"Should designer cats be banned?","2":"The British Veterinary Association says irresponsible breeding of Scottish  Fold cats should be banned.","3":"0:51","5":"1493251200000"}}}},{"1":{"1":"https://www.rd.com/wp-content/uploads/2016/04/01-cat-wants-to-tell-you-laptop.jpg","3":2400,"4":1600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTg6mKUF2r_U-_Nz10Wnk4TB5NLniqvO3oUHJW3at3cJp5UzffsMg","3":200,"4":133},"3":{"1":"Reader's Digest","2":"https://www.rd.com/advice/pets/how-to-decode-your-cats-behavior/","3":"Cat Behavior: Things Your Cat Wants to Tell You | Reader's Digest","4":"Please do not disturb my nap on your laptop or keyboard","10":"hPwqXxbtgVUEng"},"5":{"1":"ogVpkBcTvnUHKQg"}},{"1":{"1":"http://www.petsworld.in/blog/wp-content/uploads/2014/09/adorable-cat.jpg","3":1920,"4":1080},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTKr6YlGNsqgJzvgBBkq1648_HsuDizVn_ZXC6iQp9kjXFzLvs1BA","3":200,"4":112},"3":{"1":"Petsworld","2":"https://www.petsworld.in/blog/cat-pictures-funny-cute-adorable-and-all-time-favorite-cat-images.html","3":"Cat Pictures - All Time Favorite Images of Cats | Pets World","4":"Lovely ...","10":"VWyqcdIifiPAsd"},"5":{"1":"yEBvoqdpBJAADwy"}},{"1":{"1":"https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Cat03.jpg/1200px-Cat03.jpg","3":1200,"4":1199},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSZCGyzQCpBWIboSErgUWkpGjp6NnHDRHNukRLST7JZ484gOrrN","3":200,"4":199},"3":{"1":"Wiktionary","2":"https://en.wiktionary.org/wiki/cat","3":"cat - Wiktionary","4":"","10":"qesKDTYqjNDBQr"},"5":{"1":"nFrmKJJBTxIDCyJ"}},{"1":{"1":"http://www.catster.com/wp-content/uploads/2017/10/A-kitten-meowing-with-his-mouth-open.jpg","3":600,"4":400},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSe8Jz9HWznGSe5UmiA7aTpyr4h0ZbU6kMaNVtLoe1bzXJePHXG","3":200,"4":133},"3":{"1":"Catster","2":"https://www.catster.com/lifestyle/cat-wont-stop-meowing-reasons-for-cat-meowing","3":"Cat Won't Stop Meowing? 7 Reasons For All That Cat Meowing ...","4":"Cat Won't Stop Meowing? 7 Reasons For All That Cat Meowing - Catster","10":"rOLKXbEemWMNIf"},"5":{"1":"HwATpmJvGCtpMFg"}},{"1":{"1":"https://cdn-images-1.medium.com/max/1600/1*mONNI1lG9VuiqovpnYqicA.jpeg","3":1600,"4":911},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTBSLktez1akzZE9ow_QqBWlJ0tKmIEwPdNcsa6b-e3smz0Y5z9","3":200,"4":113},"3":{"1":"Hacker Noon","2":"https://hackernoon.com/a-guide-to-giving-your-cats-their-annual-performance-review-fbf14610305","3":"A guide to giving your cats their annual performance review","4":"","10":"awJBeEDkWAhkkj"},"5":{"1":"kTEHqrRYxvSjFcs"}},{"1":{"1":"https://www.aspca.org/sites/default/files/cat-care_urine-marking_main-image.jpg","3":1040,"4":500},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRjlvHgqz9zSaliBXKKJRhynljd48S70CA-gQoVifLjXfFzXTex","3":200,"4":96},"3":{"1":"aspca","2":"https://www.aspca.org/pet-care/cat-care/common-cat-behavior-issues/urine-marking-cats","3":"Urine Marking in Cats | ASPCA","4":"Urine Marking in Cats","10":"BlkviGkEnuVojJ"},"5":{"1":"ecTTqLuGxKVUcJP"}},{"1":{"1":"https://media.istockphoto.com/photos/feline-picture-id512202044?k=6&m=512202044&s=612x612&w=0&h=VhTTUGX--kLckiNLgoEELarEJUgemigqLHkjo9-VVYE=","3":612,"4":408},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQRZemwo9_Ur3LX9ZP9rk-ZskbIHKDD4nniZAymFOC1F6ot0HYQnA","3":200,"4":133},"3":{"1":"iStock","2":"https://www.istockphoto.com/sg/photos/cats","3":"Royalty Free Cats Pictures, Images and Stock Photos - iStock","4":"Feline stock photo","10":"iMthlYTpJYgtdI"},"5":{"1":"vuXdIGjRcfjLJAO"}},{"1":{"1":"https://www.bluecross.org.uk/sites/default/files/assets/images/cat%20tick.jpg","3":3200,"4":2595},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRlq8UxNpI3sv4Ld-h2o83xxncY9URNPXVbWTL4ECfxmuG0th4Rag","3":200,"4":162},"3":{"1":"Blue Cross","2":"https://www.bluecross.org.uk/pet-advice/cats-and-ticks","3":"Cats and ticks | How to spot and remove ticks from cats ...","4":"Cats and ticks | How to spot and remove ticks from cats | Blue Cross","10":"ghAtIlveaDuvKG"},"5":{"1":"PWaSYHMWopSrgKf"}},{"1":{"1":"https://www.shelterluv.com/sites/default/files/animal_pics/464/2016/11/25/22/20161125220040.png","3":1024,"4":1024},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRlaceNooMylVTLcMPyXpgPqt033qbXFseV3BQnOdwoOF4yWL02","3":200,"4":200},"3":{"1":"Austin Pets Alive!","2":"https://www.austinpetsalive.org/adopt/cats/","3":"Austin Pets Alive! Available Cats - Austin Pets Alive!","4":"Winnie","10":"mbCVTqDjXUGOqI"},"5":{"1":"RPbuTitwcJrARju"}},{"1":{"1":"http://www.petsworld.in/blog/wp-content/uploads/2014/09/cute-kittens.jpg","3":460,"4":276},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR7gRqfGF8AOysFCbPj7FQEkvPD7EJxficJ3hG3jAnKHqk7OSnDww","3":200,"4":120},"3":{"1":"Petsworld","2":"https://www.petsworld.in/blog/cat-pictures-funny-cute-adorable-and-all-time-favorite-cat-images.html","3":"Cat Pictures - All Time Favorite Images of Cats | Pets World","4":"A healthy young cat sitting","10":"DJCvRXDEMFHWFC"},"5":{"1":"JSCCVENnJxkeJkS"}},{"1":{"1":"https://news.nationalgeographic.com/content/dam/news/2018/05/17/you-can-train-your-cat/02-cat-training-NationalGeographic_1484324.ngsversion.1526587209178.adapt.1900.1.jpg","3":1900,"4":1266},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSiuxf2WZEzJwoVCSC87LI4g-KBxBnmld-Y9t7YuRLo9-H8ifC-Vw","3":200,"4":133},"3":{"1":"Latest Stories - National Geographic","2":"https://news.nationalgeographic.com/2018/05/animals-cats-training-pets/","3":"Why You're Probably Training Your Cat All Wrong","4":"","10":"VigYrdlMvakobR"},"5":{"1":"eiQWTqEIvjVgrgE"}},{"1":{"1":"https://www.argospetinsurance.co.uk/assets/uploads/2017/10/pexels-photo-416160.jpeg","3":3888,"4":2592},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRPCS-aaaF7r3ypNGiFTi29miHqRFGgC7bnqTs7pw-71L0a-Mwnzw","3":200,"4":133},"3":{"1":"Argos® Pet Insurance","2":"https://www.argospetinsurance.co.uk/we-talk-pet/10-things-cats-do-to-show-they-love-you/","3":"10 Things Cats Do To Show They Love You | Argos Pet Insurance","4":"10 Things Cats Do To Show They Love You","10":"rYgIMLoQkrocaW"},"5":{"1":"kodUSpMtIyjumXF"}},{"1":{"1":"https://d17fnq9dkz9hgj.cloudfront.net/uploads/2012/11/112809642-fostering-cats-kittens-632x475.jpg","3":632,"4":475},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRFJ4TjzMvQCcqtVW8DjfRlgZRNhW0icO1WhlVJfaqr2jwjybd8","3":200,"4":150},"3":{"1":"Petfinder","2":"https://www.petfinder.com/animal-shelters-and-rescues/fostering-cats/fostering-cats-kittens/","3":"How to Be the Best Cat Foster Parent | Petfinder","4":"How to be the Best Cat Foster Parent","10":"RpYktfNNgFFUdM"},"5":{"1":"hVlXPYvfICAxvrP"}},{"1":{"1":"https://www.msah.com/sites/default/files/play-cats.jpg","3":632,"4":353},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtcDTBvP4A08AMSJl0Tk0_gLs_BjEnJ5-b1_2lvE3fSl_b0Yau","3":200,"4":111},"3":{"1":"Metairie Small Animal Hospital","2":"https://www.msah.com/services/cats/blog/playing-your-cats-%E2%80%93-every-day","3":"Playing with Your Cats – Every Day | MSAH - Metairie Small ...","4":"Playing with Your Cats – Every Day","10":"tsqryOecsuMihO"},"5":{"1":"BgVXTRcSCvUAcCp"}},{"1":{"1":"https://images.mentalfloss.com/sites/default/files/styles/mf_image_16x9/public/munchkinhed.png?itok=oeH4evcQ&resize=1100x1100","3":1100,"4":739},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQbjgFUFnqKqflsXhxpCLxR3RP5jl8OT0OVTCmr4zXIMpJEJ64","3":200,"4":134},"3":{"1":"Mental Floss","2":"http://mentalfloss.com/article/80011/7-short-facts-about-munchkin-cats","3":"7 Short Facts About Munchkin Cats | Mental Floss","4":"iStock","10":"oYOoVrtVhpULsR"},"5":{"1":"BwXdgvLEqHVuGgC"}},{"1":{"1":"https://cdn.pixabay.com/photo/2014/03/29/09/17/cat-300572_960_720.jpg","3":858,"4":720},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRiXhgkC523CD5DIdvfwFl3G_S1Hc3oHzh8NUTXPeRSfYv1i8rA","3":200,"4":168},"3":{"1":"Pixabay","2":"https://pixabay.com/en/cat-animal-pet-cats-close-up-300572/","3":"Cat Animal Pet · Free photo on Pixabay","4":"cat animal pet cats close up","10":"OHrigtPprUbqIt"},"5":{"1":"UVwBxWqQQJpELdq"}},{"1":{"1":"https://d17fnq9dkz9hgj.cloudfront.net/uploads/2012/11/152964589-welcome-home-new-cat-632x475.jpg","3":632,"4":475},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ1Ryrw8RcKm866nT-TcscKEKQUMvsrnhdNLT3y06nvxb-FhfDt","3":200,"4":150},"3":{"1":"Petfinder","2":"https://www.petfinder.com/cats/bringing-a-cat-home/welcome-home-new-cat/","3":"9 Ways to Welcome Home your New Cat | Petfinder","4":"9 Ways to Welcome Home your New Cat","10":"RbACJocuSEhqRa"},"5":{"1":"nJnuySiDYQJflde"}},{"1":{"1":"https://images.mentalfloss.com/sites/default/files/styles/mf_image_16x9/public/istock_000072600763_small.jpg?itok=LGQn4NSZ&resize=1100x1100","3":1100,"4":732},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR58HJCXknbahGz6Dc710zOivlLK6YAeGPkOsNWDo_k4RibzPJo","3":200,"4":133},"3":{"1":"Mental Floss","2":"http://mentalfloss.com/article/75833/celebrate-japans-cat-day-these-7-japanese-instagram-cats","3":"Celebrate Japan's Cat Day with These 7 Japanese Instagram ...","4":"iStock","10":"YUCVnPpvTavfJV"},"5":{"1":"qqAjxskMBsjupEQ"}},{"1":{"1":"https://thumbs-prod.si-cdn.com/3asSf7LmvyrY5m0-ggxJjrnd_DI=/800x600/filters:no_upscale()/https://public-media.smithsonianmag.com/filer/58/04/5804c840-3073-4ecf-a1d2-37808419fe93/gdahh5-wr.jpg","3":800,"4":600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQgwhDHRTam8t_vntCH3lU3vZ3A697TxZwdbMZwvMNuLSQ3TakM","3":200,"4":149},"3":{"1":"Smithsonian Magazine","2":"https://www.smithsonianmag.com/science-nature/theres-no-such-thing-hypoallergenic-cat-180968819/","3":"There's No Such Thing as a Hypoallergenic Cat | Science ...","4":"These unusual cats may have some advantages for allergic owners, but to  call them hypoallergenic ...","10":"dmLuuTyYAvgAOD"},"5":{"1":"UwxXbIqINHIIvuh"}},{"1":{"1":"https://d17fnq9dkz9hgj.cloudfront.net/uploads/2012/11/91615172-find-a-lump-on-cats-skin-632x475.jpg","3":632,"4":475},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTuxqqFdfLl9xgGpx0T4ErYHW7JQjhh2U5JDnTIm6lQQKuWlchb","3":200,"4":150},"3":{"1":"Petfinder","2":"https://www.petfinder.com/cats/","3":"Cats: Adoption, Bringing A Cat Home and Care","4":"","10":"uJOSoggYshTaUI"},"5":{"1":"waQpBnMWGyMBaQg"}},{"1":{"1":"https://ravishly-9ac9.kxcdn.com/cdn/farfuture/edYzCuowlJVcDos1RjXSa8_1o5tGDQBE4ebEFE6R1OE/mtime:1479930604/sites/default/files/maxresdefault_2.jpg","3":1600,"4":1200},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTOD7uc1bCe8jGOehxNSdsB3RewoVlWU-4EON8EXBLTIupS4YQS","3":200,"4":149},"3":{"1":"Ravishly","2":"https://ravishly.com/ravs-radar/your-cat-making-you-horny-what","3":"Is Your Cat Making You Horny? (What?) | Ravishly | Media Company","4":"Is Your Cat Making You Horny? (What?)","10":"rbYhAXkbgtNkAY"},"5":{"1":"SLwJxCswOkjIuxT"}},{"1":{"1":"http://www.animaltransportationassociation.org/Resources/Pictures/cat2.jpg","3":2560,"4":1600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRawXsBlHjuyVHNLuP5KWss9CfyB_LyXdOhy0lD1_aFl7w9fRO8","3":200,"4":124},"3":{"1":"Animal Transportation Association","2":"http://www.animaltransportationassociation.org/19Mar15_atawebcast","3":"Animal Transportation Association - Carrying Cats ...","4":"Carrying Cats: Considerations for Felines During Transit","10":"XhJwPxfLULYfXJ"},"5":{"1":"TbdLHqgvygvuRPl"}},{"1":{"1":"https://r.hswstatic.com/w_907/gif/tesla-cat.jpg","3":907,"4":510},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTXjhYG2c5myi8y_vziQOoCg_4WvcIHkAFKr9PpsJCUZSTKZtDD","3":200,"4":112},"3":{"1":"Animals | HowStuffWorks","2":"https://animals.howstuffworks.com/pets/teslas-cat-and-other-feline-fascinations.htm","3":"Nikola Tesla's Cat and Other Feline Fascinations | HowStuffWorks","4":"","10":"YPnSORjUREfjUP"},"5":{"1":"oUMXyuhFJqlfjTK"}},{"1":{"1":"https://i.ytimg.com/vi/zGcYabz3hYg/maxresdefault.jpg","3":1280,"4":720},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTn95ROGrOOGyx5B8KPjaooWMaGSzy0o-UGgPWSMhbyj438qZcRYA","3":200,"4":112},"3":{"1":"YouTube","2":"https://www.youtube.com/watch?v=zGcYabz3hYg","3":"Sushi for Cats","4":"Sushi for Cats","10":"YDCvnorpNepngG"},"5":{"1":"bdssmGwdEiDSYRu"},"7":{"1":{"11":{"1":"Sushi for Cats","2":"►Patreon: https://www.patreon.com/JunsKitchen ►EQUIPMENT I use on my  channel that you can buy online (Amazon affiliates links) ―Knife― Chef  Knife: Sekimagoro...","3":"4:04","4":"10220867","5":"1500854400000","6":"JunsKitchen","7":"246890","8":"17056"}}}},{"1":{"1":"https://imgix.bustle.com/rehost/2017/5/30/f9fc3698-7ca6-40e5-975b-a63878357657.jpg","3":4288,"4":3216},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQs07PEKjsUcCKXIEeLpIYG_um9W8Z_tAUym4laTeMEQqxrnu2e_g","3":200,"4":149},"3":{"1":"Bustle","2":"https://www.bustle.com/articles/144945-6-reasons-cats-are-not-just-like-women-because-the-stereotypes-have-got-to-go","3":"6 Reasons Cats Are Not \"Just Like\" Women, Because The ...","4":"6 Reasons Cats Are Not \"Just Like\" Women, Because The Stereotypes Have Got  To Go","10":"wUAIaceDiYwbQS"},"5":{"1":"bmGlSRwqgVAblRg"}},{"1":{"1":"https://www.shelterluv.com/sites/default/files/animal_pics/464/2016/11/25/21/20161125215406.png","3":1024,"4":1024},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSdoH6fd7-mpAM9EcN7wj2dmhgKcUBNrjPdLqruK--36bvJ6qr1xA","3":200,"4":200},"3":{"1":"Austin Pets Alive!","2":"https://www.austinpetsalive.org/adopt/cats/","3":"Austin Pets Alive! Available Cats - Austin Pets Alive!","4":"Ellsworth 5","10":"cjoDglsXHWwNUE"},"5":{"1":"yQFhabreXuYuacm"}},{"1":{"1":"http://r.ddmcdn.com/w_830/s_f/o_1/cx_0/cy_66/cw_288/ch_162/APL/uploads/2014/10/cat_5-1.jpg","3":830,"4":466},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQZr_w2kP8Wg9ESCJmgUCcsHj8zDgLM2cvpQbUTZt9LIdfHr0jF","3":200,"4":112},"3":{"1":"Animal Planet","2":"http://www.animalplanet.com/pets/cats/","3":"Cats | Animal Planet","4":"General Cat Care Tips","10":"DiVYMoamtOsUgN"},"5":{"1":"enxIppusXeDqqOC"}},{"1":{"1":"https://thumbs-prod.si-cdn.com/arpyrvhwaJWduhI6QhMe9Fo3858=/800x600/filters:no_upscale()/https://public-media.smithsonianmag.com/filer/20110913074012glowing_cat_web.jpg","3":470,"4":251},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSbVN3ZxmtUTLNkABAQstR_IcVm3nGK9FBZxwfhOWU5mjGjn0DN","3":200,"4":106},"3":{"1":"Smithsonian Magazine","2":"https://www.smithsonianmag.com/science-nature/the-glow-in-the-dark-kitty-77372763/","3":"The Glow-In-The-Dark Kitty | Science | Smithsonian","4":"A fluorescent green cat could help in the fight against AIDS","10":"uIAMvvVbSXvIUH"},"5":{"1":"yBiLdBepktKCObP"}},{"1":{"1":"https://icatcare.org/sites/default/files/kcfinder/images/images/aggressive-red-cat.jpg","3":490,"4":326},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRH8x6rsyQTeKuDhI4Y3q_xjU5PYPQljhfvxy_1BjkvQKGBp4PT","3":200,"4":133},"3":{"1":"International Cat Care","2":"https://icatcare.org/advice/problem-behaviour/aggression-between-cats","3":"Aggression between cats | International Cat Care","4":"Aggression between cats","10":"usEbeWdynUvWJO"},"5":{"1":"lGvbsGkSBdmGRuJ"}},{"1":{"1":"http://cdn0.wideopenpets.com/wp-content/uploads/2018/02/AdobeStock_181671521.jpeg","3":4272,"4":2848},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT2c7pm89h2GgdUOys6nBz1omEtspO1aguhl7DPUj5gR_aImYFm","3":200,"4":133},"3":{"1":"Wide Open Pets","2":"https://www.wideopenpets.com/8-affectionate-cat-breeds-that-actually-love-to-cuddle/","3":"9 Affectionate Cat Breeds That Actually Love to Cuddle","4":"Girl holds in his hands a beautiful Siamese cat","10":"MhRqTMHQiSQTSq"},"5":{"1":"oxLmbcibtEAPGRO"}},{"1":{"1":"https://www.thesprucepets.com/thmb/7kVrWdBf13osb9nYJ-4D2yPAwfQ=/425x326/filters:no_upscale():max_bytes(150000):strip_icc()/GettyImages-466792657-59cef0d6c412440010be728c.jpg","3":425,"4":326},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT9-jeA_VEFnUUwJzRS9dTC2FRcAiNZboqIhgAGCPI_Gd_G6b8e","3":200,"4":153},"3":{"1":"The Spruce Pets","2":"https://www.thesprucepets.com/cats-4162124","3":"How to Be a Responsible Cat Owner","4":"Cats","10":"rTaXFKEVvQoCxn"},"5":{"1":"UjCFlVxhlVPNwjF"}},{"1":{"1":"https://ichef.bbci.co.uk/news/624/cpsprodpb/305D/production/_103218321_gettyimages-134815902.jpg","3":624,"4":351},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSOL8rHQ04-vwxJqVlRqN-H0hK4kUwnmckDMP0zTvKXJy1iG3Nc","3":200,"4":112},"3":{"1":"BBC","2":"https://www.bbc.co.uk/news/world-asia-45347136","3":"Why a village in New Zealand is trying to ban all cats - BBC News","4":"Stock image of a cat outside in flower bed","10":"NrUvUBQTcTCSiL"},"5":{"1":"YHAqNrBWfXaEMVb"}},{"1":{"1":"https://atlantahumane.org/wp-content/uploads/2012/08/adopt-a-cat-1200x630.png","3":1200,"4":630},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR5TH43KjTPkOGsCqmw8hjBcrHO-erQelSZ0FWlA29r0zOoJW92hg","3":200,"4":105},"3":{"1":"Atlanta Humane Society","2":"https://atlantahumane.org/adopt/cats/","3":"Adopt a Cat or Kitten","4":"Adopt a Cat","10":"knAaYJckcivLmR"},"5":{"1":"TsjhVmbdmbVoHoD"}},{"1":{"1":"http://www.dreams.metroeve.com/wp-content/uploads/2017/04/dreams.metroeve_cats-dreams-meaning.jpg","3":592,"4":304},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTNet_foDzEqA51kZf7y8R5kOWFEUKK9F9ICsbZYr4bOTLhMeZ5","3":200,"4":102},"3":{"1":"Dream Dictionary","2":"http://www.dreams.metroeve.com/cats/","3":"Cats dreams meaning - Interpretation and Meaning","4":"Cats dreams meaning","10":"pYiiOfEsHvASoL"},"5":{"1":"yitDHIAaQOOdaRT"}},{"1":{"1":"https://www.petful.com/wp-content/uploads/2011/10/cats-cuddling-funny-850x539.jpg","3":850,"4":539},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQOMIoyg_pWYw3k1LS2ryBqbL8tjvfoqv9-OTFEXTplBM5yJx7l","3":200,"4":126},"3":{"1":"Petful","2":"https://www.petful.com/behaviors/how-do-cats-communicate-with-each-other/","3":"How Do Cats Communicate With Each Other? - Petful","4":"3 Ways of Communication Between Cats","10":"LQaqSqLhLnBUfW"},"5":{"1":"bUTftQCTbDFlsdb"}},{"1":{"1":"http://www.petsworld.in/blog/wp-content/uploads/2014/09/cat.jpg","3":400,"4":600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS2WhOti17crdhQ5YaH0tWnaPwy-EL7rVEWpyH_VABFAmjfA8mZKA","3":133,"4":200},"3":{"1":"Petsworld","2":"https://www.petsworld.in/blog/cat-pictures-funny-cute-adorable-and-all-time-favorite-cat-images.html","3":"Cat Pictures - All Time Favorite Images of Cats | Pets World","4":"A Cat lover's delight","10":"MIeOauNTFxruUL"},"5":{"1":"ynywhMRTGlWxicb"}},{"1":{"1":"http://sciencenordic.com/sites/default/files/imagecache/620x/kat_astma_videnskab.jpg","3":620,"4":412},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTKXdoXAT7VqIMXRBmjSFJDcgeP1cDrLo3O_bGAGSgSJ79PcRRo","3":200,"4":132},"3":{"1":"ScienceNordic","2":"http://sciencenordic.com/cats-protect-newborns-against-asthma","3":"Cats protect newborns against asthma | ScienceNordic","4":"","10":"ebtAfFAJkMedhO"},"5":{"1":"TbgPbTfAlYCrRsQ"}},{"1":{"1":"http://www.catcareofvinings.com/blog/wp-content/uploads/2017/05/CCV_iStock-619079366-2000x1331.jpg","3":2000,"4":1331},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT9KUm5nLqQKG0OAzhoQxzDccFO7C0MmTanEFr-DHp3mHqaQQpmow","3":200,"4":133},"3":{"1":"Cat Care of Vinings","2":"http://www.catcareofvinings.com/blog/cat-thinking/","3":"Deep Thoughts: What is Your Cat Thinking Throughout the Day ...","4":"cat care","10":"qQBClwCNpdCxEj"},"5":{"1":"lQNOMbAUqgcyqYD"}},{"1":{"1":"https://images.immediate.co.uk/volatile/sites/4/2018/08/iStock_000044061370_Medium-fa5f8aa.jpg?quality=45&crop=5px,17px,929px,400px&resize=960,413","3":960,"4":413},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSgIMohz552yuAneZIasvHIn5KJKN4L5IK7jc6rSluz48MIov2BvQ","3":200,"4":85},"3":{"1":"BBC Focus Magazine","2":"https://www.sciencefocus.com/nature/is-it-true-that-most-ginger-cats-are-male/","3":"Is it true that most ginger cats are male? - Science Focus ...","4":"Is it true that most ginger cats are male? © iStock","10":"IsSWOkewoBVoyN"},"5":{"1":"rvWVNrAfIXvtwcE"}},{"1":{"1":"https://cdn.theatlantic.com/assets/media/img/mt/2017/06/shutterstock_319985324/lead_720_405.jpg?mod=1533691890","3":720,"4":405},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQYRaFuQDancwY5rr0g1FR48S7rbXhI1cPh0UHMtjTNKpGRoH7WSw","3":200,"4":112},"3":{"1":"The Atlantic","2":"https://www.theatlantic.com/science/archive/2017/06/cat-domination/530685/","3":"How Cats Used Humans to Conquer the World - The Atlantic","4":"Cat jumps in air","10":"vUEGUDKayXFWYs"},"5":{"1":"ROWDGLyjMsbVgwt"}},{"1":{"1":"https://imagesvc.timeincapp.com/v3/mm/image?url=https%3A%2F%2Fpeopledotcom.files.wordpress.com%2F2018%2F08%2F34982856_913748398827212_5249963337373974528_n.jpg%3Fw%3D1800&w=700&c=sc&poi=face&q=85","3":700,"4":700},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTsKnyOc-9bYJXBDCVmG6xK9sBNmbi2myY2zFL8u8FaDkmajd8BAQ","3":200,"4":200},"3":{"1":"People Magazine","2":"https://people.com/pets/iambronsoncat-33-pound-cat-weight-loss-journey/","3":"iambronsoncat: Fat Cat on Instagram Losing Weight | PEOPLE.com","4":"Bronson the cat/Instagram","10":"uYuIUYkriwkfEs"},"5":{"1":"bcluKuWcQjWgSGD"}},{"1":{"1":"https://static.boredpanda.com/blog/wp-content/uploads/2017/07/funny-tiny-face-cats-photoshop-battle-11-596db6bf66c5b__605.jpg","3":605,"4":409},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR5eo0CbpzMdi0QofgC2v0k6G089ljeSEqjlTBdjVQ8AXas3dANIQ","3":200,"4":134},"3":{"1":"Bored Panda","2":"https://www.boredpanda.com/funny-tiny-face-cats-photoshop-battle/","3":"People Are 'Breeding' Cats With Tiny Faces, And We Can't ...","4":"Cats With Tiny Faces","10":"KhasNKHCjkpiOK"},"5":{"1":"BRXGRcorLPkYToy"}},{"1":{"1":"https://d17fnq9dkz9hgj.cloudfront.net/uploads/2013/09/cat-black-superstitious-fcs-cat-myths-162286659.jpg","3":632,"4":353},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRoAclhVC7gbhlRQOYDDcxQpjCH0_0aI0BIftb1X0JixabN0-KuSg","3":200,"4":111},"3":{"1":"Petfinder","2":"https://www.petfinder.com/cats/","3":"Cats: Adoption, Bringing A Cat Home and Care","4":"black cat","10":"jgvbapwuhVjMDF"},"5":{"1":"LIPTYfsRLcsdxef"}},{"1":{"1":"https://upload.wikimedia.org/wikipedia/commons/thumb/7/75/Cat_eating_a_rabbit.jpeg/220px-Cat_eating_a_rabbit.jpeg","3":220,"4":187},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTM2lD05jXtOZSV7AuO3hvNvDWkObMlWiC97BQtxlT0RGL_LH4zjQ","3":200,"4":170},"3":{"1":"Wikipedia","2":"https://en.wikipedia.org/wiki/Cat","3":"Cat - Wikipedia","4":"Impact on prey species","10":"MvcDWiVddakwSO"},"5":{"1":"DdiScMFQsSrAqKm"}},{"1":{"1":"https://assets3.thrillist.com/v1/image/2696152/size/tmg-article_tall;jpeg_quality=20.jpg","3":640,"4":853},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRuPeTpZbE5BZKB-5-exd6Ecv4fY1BlGVHZ1leqZN2Zu0vHdPhigw","3":149,"4":200},"3":{"1":"The Dodo","2":"https://www.thedodo.com/close-to-home/what-to-do-stray-cat","3":"What To Do If You Find A Stray Cat - The Dodo","4":"Share on Facebook ...","10":"gQcCvghMoTEaHn"},"5":{"1":"xHsHCsPpDjcLGUm"}},{"1":{"1":"https://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/video/wibbitz/wbz-when-cats-sneeze.jpg","3":1280,"4":720},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSoBO_x3BJPFuVLwm8fyi2dbu0KIAmw32oWZn8hyckaIzj4Ain9","3":200,"4":112},"3":{"1":"Pet WebMD","2":"https://pets.webmd.com/cats/why-cats-sneeze","3":"Why Cats Sneeze","4":"","10":"lIiLWrpodGqLbE"},"5":{"1":"tcsvWDVrmXKLuXN"},"7":{"1":{"11":{"1":"Why Cats Sneeze","2":"WebMD explains why cats sneeze.","3":"0:49"}}}},{"1":{"1":"https://imagesvc.timeincapp.com/v3/mm/image?url=https%3A%2F%2Fimages.hellogiggles.com%2Fuploads%2F2015%2F12%2F11083247%2Fcat.jpg&w=700&c=sc&poi=face&q=85","3":700,"4":467},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTyqlbEiXO_ve-xH0IupMWF_e06JxgJ1zW99lvaKeClbZopfbLt","3":200,"4":133},"3":{"1":"HelloGiggles","2":"https://hellogiggles.com/news/10-cat-puns-will-ever-need/","3":"The only 10 cat puns you will ever need - HelloGiggles","4":"","10":"FKYqmXrURSmLOp"},"5":{"1":"octogHMDQOutVmB"}},{"1":{"1":"https://lh3.googleusercontent.com/aR34MxRBretppyADbJcfqIZp-LraO1ELhk00lTZw0Q7MF1ebUKZeggeQkjBuZCCmYRSYNzr8=w640-h400-e365","3":640,"4":400},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ6uXSCu96cLwMFotwgSKSr5TWi3PGa-RoBaNJLp6CXb4UzJw-f","3":200,"4":124},"3":{"1":"Chrome - Google","2":"https://chrome.google.com/webstore/detail/tabby-cat/mefhakmgclhhfbdadeojlkbllmecialg","3":"Tabby Cat - Chrome Web Store","4":"","10":"oMpQUFDpPDlshm"},"5":{"1":"otuueNvgwlPdxEJ"}},{"1":{"1":"https://cdn.cnn.com/cnnnext/dam/assets/150324154028-16-internet-cats-restricted-super-169.jpg","3":1100,"4":619},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQqyAVnpTM5-KWPFFMnxMBPcmj-D8uuBwiY8TXf2odz72qQPGpx","3":200,"4":112},"3":{"1":"CNN.com","2":"https://www.cnn.com/2015/09/08/health/what-your-cat-is-trying-to-say/index.html","3":"This is what your cat is really trying to say - CNN","4":"<a href=\"https://www.facebook.com","10":"dLjonTcctpsPqG"},"5":{"1":"NsRfhrFRIgtGQCA"}},{"1":{"1":"http://media1.santabanta.com/full1/Animals/Cats/cats-149a.jpg","3":1024,"4":768},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS6Br_9c6YcOob_VRgBd0e3pRU4TIenPqGfy3_Mthi3Hrk2s0cO","3":200,"4":149},"3":{"1":"SantaBanta","2":"http://www.santabanta.com/photos/cats/2121149.htm","3":"Cats Wallpaper #150","4":"Cats","10":"ekdheuirMEGftK"},"5":{"1":"VRnuCjBVsnlKWgP"}},{"1":{"1":"https://ichef.bbci.co.uk/news/624/cpsprodpb/CC9D/production/_103218325_gettyimages-469927070.jpg","3":624,"4":351},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTRRLfK-jVNOChSkHJdIkdsHaO8dXY03z2yxcvMKhmG7a1OQ35x","3":200,"4":112},"3":{"1":"BBC","2":"https://www.bbc.co.uk/news/world-asia-45347136","3":"Why a village in New Zealand is trying to ban all cats - BBC News","4":"Stock image of a brown cat outfoors","10":"eRGrhfWPhjjycQ"},"5":{"1":"oWRQBUPOabUscQd"}},{"1":{"1":"https://i.ytimg.com/vi/bcENL_Vdoqw/maxresdefault.jpg","3":1920,"4":1080},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcROK723ru1FrNl8bV6pZuVJq4V5evxglOVkxHVyYFTElbSgm9Pw","3":200,"4":112},"3":{"1":"YouTube","2":"https://www.youtube.com/watch?v=bcENL_Vdoqw","3":"Cats vs Zombies","4":"","10":"VAdjUbmUiCJCFM"},"5":{"1":"VxjIxHRkQbIyfrJ"},"7":{"1":{"11":{"1":"Cats vs Zombies","2":"Cats declare war on Zombies to save the survivor kitten! SUBSCRIBE for more  videos ► http://bit.ly/IWantMORE In Syfy’s Z Nation, a group of survivors  must cr...","3":"2:19","4":"59834392","5":"1441843200000","6":"Mr.TVCow","7":"312398","8":"14803"}}}},{"1":{"1":"https://lookaside.fbsbx.com/lookaside/crawler/media/?media_id=1496110487353938","3":548,"4":548},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQzNjlUiXWA4sUaNvaTQ6HGkbJ4NpvPE5V8oSqxD_8fusAlmHRk","3":200,"4":200},"3":{"1":"Facebook","2":"https://www.facebook.com/CatsLoveCatnip/","3":"Cats on Catnip - Home | Facebook","4":"Post Your Cats","10":"hLuQEqDsfjIgrX"},"5":{"1":"jEkQhJpAOoRmYHg"}},{"1":{"1":"https://purrfectlove.net/wp-content/uploads/2015/06/catfamily.jpg","3":1920,"4":1080},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRA4hP9AZHDtW5ZnT3H21a7ma7gBf47CweoEjKthR4HQyvfRIG7","3":200,"4":112},"3":{"1":"Purrfect Love","2":"https://purrfectlove.net/cat-law-how-many-cats-is-too-many/","3":"How Many Cats Is Too Many? - Purrfect Love","4":"How Many Cats Is Too Many?","10":"ivxnqDKXbuUwSG"},"5":{"1":"OCYtoUuNlwggjDy"}},{"1":{"1":"https://www.popsci.com/sites/popsci.com/files/styles/1000_1x_/public/import/2014/5827857531_8962f29333_o.jpg?itok=b0be33M8","3":1000,"4":932},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRyoHtobTnEVMoaBL6pEjD3ZI8JBi0TUYaWWxJwiuzg3tVHMFap","3":200,"4":186},"3":{"1":"Popular Science","2":"https://www.popsci.com/article/science/sorry-cat-haters-science-isnt-your-side","3":"Sorry, Cat Haters, Science Isn't On Your Side | Popular Science","4":"\"Unfeeling\" Cats. \"","10":"GohBftUAojRsam"},"5":{"1":"QiShqprShJXePFT"}},{"1":{"1":"https://cdn.cliqueinc.com/cache/posts/256509/cutest-cat-breeds-256509-1525454554042-main.700x0c.jpg","3":700,"4":467},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQoweT_7x_-6xw2jD1svn8S5JIP7xaWzmQDp2x7d21Wo7CHlXv5","3":200,"4":133},"3":{"1":"MyDomaine","2":"https://www.mydomaine.com/cutest-cat-breeds","3":"Time to Procrastinate—Here Are the 9 Cutest Cat Breeds ...","4":"Norwegian Forest Cat","10":"DxlXHrbvPbRhRM"},"5":{"1":"WTgXnhEmHrmntVB"}},{"1":{"1":"https://www.factslides.com/imgs/black-cat.jpg","3":500,"4":644},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTY5ABlFn6BCa3HbeR35lZob_mc_PNIcqInrkKLsOQMCI68mH8qqA","3":155,"4":200},"3":{"1":"Factslides","2":"https://www.factslides.com/s-Cats","3":"Cat Facts: 67 Facts about Cats ←FACTSlides→","4":"Black cats are considered to bring good luck in Japan.","10":"yQaaLWLeScxINi"},"5":{"1":"alLwPdgtUAOpfaT"}},{"1":{"1":"https://steemitimages.com/DQmZ9QBgKETeQpVdvYF5jjG7YpNMvjTN9pSNTvZK3JfgjAx/This%20picture%20of%20a%20chubby%20ginger%20cat%20sat%20on%20his%20bum%20is%20one%20of%20the%20hilarious.jpg","3":660,"4":880},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTuAgPVocqHRVosZVfOxm_KWOrHcHGaRbU03lWxQnShpG1f9UDj","3":149,"4":200},"3":{"1":"Steemit","2":"https://steemit.com/photography/@kamrankami/how-was-it-cat-you-good-is-not-what-you-also-cats-to-hobby-is-this-cat","3":"How was it cat you good is not what you also cats to hobby is ...","4":"... This picture of a chubby ginger cat sat on his bum is one of the  hilarious","10":"bViAqgFCwwrfcj"},"5":{"1":"hXylHubafKgcrrO"}},{"1":{"1":"https://static.boredpanda.com/blog/wp-content/uploads/2016/10/worlds-most-beautiful-cats-44-57fc8f4e023ca__700.jpg","3":700,"4":700},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQZCF3NPqMlA7u4mEVY3v8hpfMGvL5p0PaOZO9o0aUUhe7ZxMSI","3":200,"4":200},"3":{"1":"Bored Panda","2":"https://www.boredpanda.com/worlds-most-beautiful-cats/","3":"10+ Of The Most Beautiful Cats In The World | Bored Panda","4":"#7 Venus The Chimera Cat","10":"aSdHCwrUghWycR"},"5":{"1":"vjPxBDUANFhClKA"}},{"1":{"1":"https://www.pspca.org/sites/default/files/styles/pspca_banner/public/2018-01/38795646774_9d83bbaaab_o_0.jpg?h=2cfee321&itok=_Llsh3dA","3":1400,"4":580},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRBGw3oS82bfnV5sV7-Uku1Ypnab84IKm1kcKmY6wzdtVMleayZqw","3":200,"4":82},"3":{"1":"pspca","2":"https://www.pspca.org/adoptcats","3":"Find Adoptable Cats | Pennsylvania Society for the Prevention ...","4":"Tabby cat","10":"JrmThTANNxNJUo"},"5":{"1":"SPSOOiyAYWREAol"}},{"1":{"1":"https://static01.nyt.com/images/2018/08/31/world/31nz-cats-print/31nz-cats-1-facebookJumbo.jpg","3":1050,"4":550},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQVkepqVFEZUGC6MZsm3oP6jZ9QTqoHm1veIfbXVOOy-G4-bYJU5w","3":200,"4":104},"3":{"1":"The New York Times","2":"https://www.nytimes.com/2018/08/30/world/australia/new-zealand-cat-ban-birds.html","3":"New Zealand Town May Ban Cats to Protect Other Species - The ...","4":"New Zealand Town May Ban Cats to Protect Other Species - The New York Times","10":"uAXMylHRqniqpp"},"5":{"1":"qRjVlYTlLnuMaJn"}},{"1":{"1":"https://images.pexels.com/photos/45201/kitty-cat-kitten-pet-45201.jpeg?auto=compress&cs=tinysrgb&h=350","3":335,"4":350},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ8E2tu2o8JBkbyQfvl6nQ7NifLnv_QyRCXJCw9t5GjUl99ODUF","3":192,"4":200},"3":{"1":"Pexels","2":"https://www.pexels.com/search/cat/","3":"446 Adorable Cat Pictures · Pexels · Free Stock Photos","4":"Free stock photo of animal, pet, cute, kitten","10":"ndmNLdYnvbrOas"},"5":{"1":"HgrJlEORaXxLNIF"}},{"1":{"1":"https://ichef.bbci.co.uk/news/660/cpsprodpb/AECE/production/_99805744_gettyimages-625757214.jpg","3":660,"4":371},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT5HpqXD4cwzpfY_ncvOjnVTUuOKgEP1KhtZek2UBmt-r3mn87L","3":200,"4":112},"3":{"1":"BBC","2":"https://www.bbc.co.uk/news/uk-42871851","3":"Black cats shunned for purr-fect selfies - BBC News","4":"black cat looking at phone camera","10":"DSUwnvAAdiVpUf"},"5":{"1":"urBDFTTGLWcefFD"}},{"1":{"1":"https://cf.ltkcdn.net/cats/images/std/219726-675x450-kittehshnuggles.jpg","3":675,"4":450},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSrFGgZpa-BeJ65O8X70lA6zVn1vFMWMvNBzy8NhYH7hJzCbG3v","3":200,"4":133},"3":{"1":"Cats - LoveToKnow","2":"https://cats.lovetoknow.com/Cats_Mating","3":"Stop Cats Mating","4":"According to the Cats ...","10":"sUCTegpsVdFOop"},"5":{"1":"xjnhKdXhpwlUgYM"}},{"1":{"1":"http://www.orphankittenrescue.com/~ASSETS/img/upload/Cauliflower.JPG","3":1280,"4":1278},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTa6M7jf9-TJ43GpiBfJZ1peF_8uGDJNyxg-OGpdyo4DE8eqPWEKw","3":200,"4":199},"3":{"2":"http://www.orphankittenrescue.com/","3":"Home - Vancouver Orphan Kitten Rescue Association (VOKRA)","4":"For ...","10":"uYtTmBTjjvMpvq"},"5":{"1":"iXDxdNRxEAIoOFn"}},{"1":{"1":"http://www.petmd.com/sites/default/files/multiple-cats-need-multiple-litter-boxes.jpg","3":590,"4":428},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSbJpN8IE4jcuTJqFlRmaodVEW2_Yw8GEEUdJoPwskX6kGI-tri","3":200,"4":144},"3":{"1":"PetMD","2":"https://www.petmd.com/cat/centers/litter/evr_why_multi_cat_households_need_multiple_litter_boxes","3":"Why Multiple Cats Need Multiple Litter Boxes | petMD","4":"Purrfect and Tigress have adapted to sharing things and people in their  multi-cat household.","10":"xsIhunJNqlbxyW"},"5":{"1":"NoDkCFOkmfIlErY"}},{"1":{"1":"https://res.cloudinary.com/jpress/image/fetch/w_700,f_auto,ar_3:2,q_auto:low,c_fill/if_h_lte_200,c_mfit,h_201/https://www.lep.co.uk/webimage/1.9366362.1537968620!/image/image.jpg","3":700,"4":467},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQI8VbyK01jJozDTLPjCxKv7J4uqHCJzU_E1IlEQrD7CSFoH3t1ng","3":200,"4":133},"3":{"1":"Lancashire Evening Post","2":"https://www.lep.co.uk/news/watch-woman-with-terminal-cancer-s-urgent-plea-to-rehome-40-cats-1-9366366","3":"WATCH: Woman with terminal cancer's urgent plea to rehome 40 ...","4":"One of Marlene's cats to rehome","10":"HgVYXYnQeEWNFQ"},"5":{"1":"OECaxpuUVkUSGKa"}},{"1":{"1":"https://s3.amazonaws.com/geniusvets/gv-cta/sidebar/cta-cat-lab-tests-sidebar.png","3":320,"4":300},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS3qZL1yS7DkEibVCeAFpS3IeTkWn5nUeZjF6jRclHe9DQItJYf","3":200,"4":187},"3":{"1":"Bakerstown Animal Hospital","2":"http://www.bakerstownah.com/services/cats/blood-tests-for-cats","3":"What Blood Tests Can Tell You About Your Cat's Health","4":"CTA - Cat Laboratory","10":"WYGLoSFkQkkOlU"},"5":{"1":"QIpENFLTqwFExTI"}},{"1":{"1":"https://imgix.bustle.com/uploads/image/2018/2/12/8a1cc530-2b29-436f-b780-70c5c7e8322e-fotolia_157293628_subscription_monthly_m.jpg?w=970&h=582&fit=crop&crop=faces&auto=format&q=70","3":970,"4":582},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTHQzWOL9X_qCnsDHYja_J1EJSQQI5awRS9GEIlqi4sOtozcXyrLw","3":200,"4":120},"3":{"1":"Bustle","2":"https://www.bustle.com/articles/124691-why-are-cats-afraid-of-cucumbers-it-may-seem-funny-but-heres-why-you-shouldnt-pull","3":"Why Are Cats Afraid Of Cucumbers? It May Seem Funny, But ...","4":"Why Are Cats Afraid Of Cucumbers? It May Seem Funny, But Here's Why You  Shouldn't Pull This Viral ...","10":"vXmiRmjooFgCsj"},"5":{"1":"KJdGBlHcfKCtPiq"}},{"1":{"1":"https://www.nationalgeographic.com/content/dam/animals/thumbs/rights-exempt/mammals/d/domestic-cat_thumb.ngsversion.1472140774957.adapt.1900.1.jpg","3":1900,"4":1900},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS4UX9nw98T3rBMvfzkMFJE9h2S6lpppox9iqvgHiM9t3jrEX5u","3":200,"4":200},"3":{"1":"National Geographic","2":"https://www.nationalgeographic.com/animals/mammals/d/domestic-cat/","3":"Cat | National Geographic","4":"","10":"FHvtOxoVXKKBNG"},"5":{"1":"IwmWDqshKHyErfm"}},{"1":{"1":"https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/A_completely_deaf%2C_pure_white_blue-eyed_cat.jpg/220px-A_completely_deaf%2C_pure_white_blue-eyed_cat.jpg","3":220,"4":330},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSfePLQh_QXB06o8zZm2w6RlMOK0_4z-Q9LqU3OWziuf7IlJ9Op","3":133,"4":200},"3":{"1":"Wikipedia","2":"https://en.wikipedia.org/wiki/Congenital_sensorineural_deafness_in_cats","3":"Congenital sensorineural deafness in cats - Wikipedia","4":"Congenital sensorineural deafness in cats","10":"kmgduSfYJOmlpK"},"5":{"1":"CVrmsAPQhtudphd"}},{"1":{"1":"https://d32xvgr96w2oxp.cloudfront.net/2013/07/cats-16140154-1920-1080.jpg","3":1920,"4":1080},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSelnL0s3W9PXwG0lPGhgM1xmvwhVHpX_m2eEM3jmYF0YpgVOiY","3":200,"4":112},"3":{"1":"Yummypets","2":"https://www.yummypets.com/mag/2013/08/02/11279/a-few-fun-facts-about-cats","3":"A few fun facts about cats! - Yummypets","4":"A few fun facts about cats!","10":"abfnJMfahgkwRm"},"5":{"1":"LgiWDdvJnjKfhEb"}},{"1":{"1":"https://static.independent.co.uk/s3fs-public/thumbnails/image/2016/02/25/13/cat-getty_0.jpg?w968h681","3":968,"4":681},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQsey-RjxxJtFRzTkCUUQp4em18r93OWP0tvIGf-W9jkq1R9-zd","3":200,"4":140},"3":{"1":"The Independent","2":"https://www.independent.co.uk/news/science/cat-experts-reveal-the-meaning-behind-different-meows-a6895251.html","3":"Cat experts reveal the meaning behind different meows | The ...","4":"Cat's typical meow sounds can be friend or – shocker – demanding","10":"jgcQCeHiOQIDbM"},"5":{"1":"MjXqsEobUlMmfLt"}},{"1":{"1":"https://66.media.tumblr.com/53f218922ce36eb3957c8b959056f1a9/tumblr_n93t8amQUU1s8za4to1_1280.jpg","3":1067,"4":1600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDmhgMW6xaIDtGTqv6VCQgdKIs04I70koEXRO-C2V-PkUU2I2y","3":133,"4":200},"3":{"1":"Tumblr","2":"http://dailycatistanbul.tumblr.com/","3":"Daily Cat Istanbul","4":"Dear followers, we got some great news. We decided to start a new cat","10":"IvDLbjNNOryhbS"},"5":{"1":"rYckeHyARYEbbeR"}},{"1":{"1":"https://www.abc.net.au/news/image/8633778-3x2-700x467.jpg","3":700,"4":467},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRKTb2ah9He3-Xo9Hme0yacwxLRQaF2NEypbBITEWVqLWjBCjxO","3":200,"4":133},"3":{"1":"ABC","2":"https://www.abc.net.au/news/2018-08-09/toxoplasmosis-killing-tasmanian-wildlife/10093038","3":"Cats blamed for spread of native wildlife-killing ...","4":"A close up of a feral cat snarling at the camera.","10":"KXxoHJqlfICMDU"},"5":{"1":"gUDcoTovICjNepP"}},{"1":{"1":"https://www.bluecross.org.uk/sites/default/files/assets/images/112970lpr.jpg","3":2000,"4":1331},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSdk_hAs_ErbyX2hIej7d8tFygdcqiFk-dhSqzDHLhs4dxCfQ3q8w","3":200,"4":133},"3":{"1":"Blue Cross","2":"https://www.bluecross.org.uk/pet-advice/cat-flu","3":"Cat Flu | Symptoms, Causes, and Treatment | Blue Cross","4":"","10":"tvreuIdeESOHnF"},"5":{"1":"RnLSXADdWcyXYpP"}},{"1":{"1":"https://i.guim.co.uk/img/media/0b974a22ecd3807e87b92a90f9f0aa43d61bb6a2/0_223_3425_2056/master/3425.jpg?width=300&quality=85&auto=format&fit=max&s=d198019642f0a69970aeabd0f3f1cca9","3":300,"4":180},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQVXkjXSAyfe6sOqBzO3Hs89SRE_HPo7Kzkz4OBrDyJm53_9u9B","3":200,"4":120},"3":{"1":"The Guardian","2":"https://www.theguardian.com/science/2018/jul/24/pets-at-home-do-cats-and-dogs-really-fight-like-cats-and-dogs","3":"Pets at home: do cats and dogs really fight like cats and ...","4":"Cat and dog sleeping together.","10":"esrjymQlNJECVQ"},"5":{"1":"rvPqIPGkumxGfAy"}},{"1":{"1":"http://bdfjade.com/data/out/81/5865451-images-of-cats.jpg","3":960,"4":640},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ6WnsQqx0e_YvExPhGnIJ7jDYjfHYPczkXfq7EVBnGFGDy1aRG0g","3":200,"4":133},"3":{"1":"BDFjade","2":"http://bdfjade.com/images-of-cats.html","3":"Images Of Cats - BDFjade","4":"Great HD Backgrounds Collection of Cats : 960x640 px, 31 March 2018","10":"sJVYDputioFjCH"},"5":{"1":"ALTNohaJtwEMeMU"}},{"1":{"1":"https://images.mentalfloss.com/sites/default/files/styles/mf_image_16x9/public/549585-istock-909106260.jpg?itok=ds7LqH1N&resize=1100x1100","3":1100,"4":619},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRNivVznOF2iMAOTxkbkGFlENUk0T3PupKcmuqnMHvr6ASROiXF3w","3":200,"4":112},"3":{"1":"Mental Floss","2":"http://mentalfloss.com/article/549585/science-backed-tips-for-getting-a-cat-to-like-you","3":"10 Science-Backed Tips for Getting a Cat to Like You | Mental ...","4":"iStock","10":"yMAcOJDdqOGiPX"},"5":{"1":"RgbiAhAWIGlcxot"}},{"1":{"1":"https://cf.ltkcdn.net/cats/images/std/214162-672x450-sickcat2.jpg","3":672,"4":450},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQArG5eajQAFbAnEW89M-JKMxvnWKGwvfkk3C6G7s_aEr4lSd_z0g","3":200,"4":134},"3":{"1":"Cats - LoveToKnow","2":"https://cats.lovetoknow.com/Symptoms_of_a_Dying_Cat","3":"6 Symptoms of a Dying Cat","4":"sick cat","10":"xhCRTUnAklObRo"},"5":{"1":"PaPmYFaioiXrPId"}},{"1":{"1":"https://www.telegraph.co.uk/content/dam/women/2018/01/30/TELEMMGLPICT000152840203_trans_NvBQzQNjv4BqqVzuuqpFlyLIwiB6NTmJwViJj1eTvcjzL4JkNP_PJEs.jpeg?imwidth=450","3":480,"4":300},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTIDDev27kU_mpiZieiFS2GLloZrjUJ9u4UIwN1VT-kgYng1rmi","3":200,"4":124},"3":{"1":"The Telegraph","2":"https://www.telegraph.co.uk/women/life/black-cats-life-not-just-selfies/","3":"Black cats are for life - not just for selfies","4":"Black cat","10":"gkOewILuUIvjXT"},"5":{"1":"lJurAURRDqWVCbg"}},{"1":{"1":"https://d3i6fh83elv35t.cloudfront.net/static/2018/04/cats-and-dogs_AdobeStock_84016419-1200x798.jpeg","3":1200,"4":798},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTifShE2NmndOYRU4Rx1EqTaW6s6Wil1HDjAD6zGxYB0Rw0MW3X","3":200,"4":133},"3":{"1":"PBS","2":"https://www.pbs.org/newshour/science/which-are-smarter-cats-or-dogs-we-asked-a-scientist","3":"Which are smarter, cats or dogs? We asked a scientist | PBS ...","4":"Which are smarter, cats or dogs? We asked a scientist | PBS NewsHour","10":"qegkjvsTYSvuHn"},"5":{"1":"rmSDrQGBgNmRutj"}},{"1":{"1":"https://cnet4.cbsistatic.com/img/Qqn2oPvTkSKUkTWImHSLYglPYSw=/970x0/2014/01/12/b3815b11-8533-11e3-bc97-14feb5ca9861/cats9.png","3":970,"4":495},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQOrnbAPdbxfR92s6_fhv2L7-iPdF1fp-hGDJ3EVAE0WiURylwYiQ","3":200,"4":101},"3":{"1":"CNet","2":"https://www.cnet.com/news/scientist-cats-think-you-are-just-a-big-stupid-cat/","3":"Scientist: Cats think you are just a big, stupid cat - CNET","4":"He thinks we're stupid. compilarizTVi/YouTube Screenshot by Chris  Matyszczyk/CNET","10":"AqoknMTexdNcKA"},"5":{"1":"BqwNiVVuhSkDFNc"}},{"1":{"1":"https://petplaceimages-embracepetinsura1.netdna-ssl.com/wp-content/uploads/2017/10/nano_nastasia-324812-1024x678.jpg?x35507","3":1024,"4":678},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQnjNGXLc5f9Gxz-kOa1rfnfThxvD24WE2IG3SN3ZeTTHnzjE9q","3":200,"4":132},"3":{"1":"PetPlace","2":"https://www.petplace.com/article/cats/pet-behavior-training/how-mother-cats-take-care-of-kittens/","3":"How Mother Cats Take Care of Kittens - PetPlace","4":"how mother cats take care of kittens","10":"fstbGCbnKklCWs"},"5":{"1":"YGRvshjgiPcnHfD"}},{"1":{"1":"https://news.nationalgeographic.com/content/dam/news/photos/000/755/75552.ngsversion.1422285553360.adapt.1900.1.jpg","3":1900,"4":1266},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTz_Sh7LYVHgP9ET4wwXoFSjYv-5A4P80-8ffTTluC4c3FnOVmj","3":200,"4":133},"3":{"1":"Latest Stories - National Geographic","2":"https://news.nationalgeographic.com/news/2014/01/140127-cats-pets-animals-nation-dogs-people-science/","3":"What Do Cats Think About Us? You May Be Surprised","4":"","10":"VphispWPumbBiE"},"5":{"1":"TVkNslFGDNKKIRM"}},{"1":{"1":"https://s.abcnews.com/images/Lifestyle/AL_scared_cat_jt_151225_16x9_1600.jpg","3":1600,"4":900},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSdu_tIfOlHoq3_A60curgxLzwIkcOWyK8uLa4R0rBwbDNfvkyFzQ","3":200,"4":112},"3":{"1":"ABC News - Go.com","2":"https://abcnews.go.com/Lifestyle/scaredy-cats-absolutely-terrified-cucumbers/story?id=35953032","3":"Why These Scaredy Cats Are Absolutely Terrified of Cucumbers ...","4":"Why These Scaredy Cats Are Absolutely Terrified of Cucumbers - ABC News","10":"cBroNeBtkONFKK"},"5":{"1":"qSJAkXaVsSBWYpO"}},{"1":{"1":"https://images-gmi-pmc.edge-generalmills.com/fe558022-4544-458f-aaa0-eda0de1bcf99.jpg","3":800,"4":450},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTQHlociyYPIGxVhWpLE6zq1Bpec1Db96iFfIx69a_3gR4NA43D","3":200,"4":112},"3":{"1":"Betty Crocker","2":"https://www.bettycrocker.com/recipes/chocolate-mousse/25446b27-770f-4d48-babd-5315521b0e7b","3":"Chocolate Mousse","4":"Chocolate Mousse","10":"ybuCFRCjuKtQQs"},"5":{"1":"xLDKoBGBGbKjeYL"},"7":{"1":{"9":{"1":4.5,"2":70,"3":"Chocolate Mousse","4":["4 large egg yolks Save $","1/4 cup sugar Save $","2 1/2 cups whipping (heavy) cream Save $","8 oz semisweet baking chocolate, chopped Save $"],"5":"Don’t be intimidated by the fancy French name. If you’ve ever heated milk  on the stove for hot ...","6":"2 hr 20 min","7":"8"}}}},{"1":{"1":"https://img.taste.com.au/I3x-cteh/taste/2010/01/chocolate_mousse_in_minutes_1980x1320-117905-1.jpg","3":1980,"4":1320},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSjxU2jUDK8GVZgZM5rAnnMvSYf_sYBLqtPMq5vjF9-euHoSC6qhA","3":200,"4":133},"3":{"1":"Taste","2":"https://www.taste.com.au/recipes/chocolate-mousse-minutes/e5b571f4-3a16-4f5d-ad95-89479e3763c1","3":"Chocolate mousse in minutes","4":"","10":"pbcxpwBJAJMHYv"},"5":{"1":"NNkYCBkxSTXdNnP"},"7":{"1":{"9":{"1":4.699999809265137,"2":190,"3":"Chocolate mousse in minutes","4":["300g good-quality dark chocolate, roughly chopped","3 eggs, at room temperature","1/4 cup (55g) CSR Caster Sugar","1 tablespoon good-quality cocoa powder, sifted","300ml thickened cream, plus extra whipped cream to serve"],"5":"The middle of the week is a very good time to try out this tasty treat.  It's the perfect pick-me-up, ...","6":"1 hr 35 min","7":"6"}}}},{"1":{"1":"https://bellyfull.net/wp-content/uploads/2018/02/Chocolate-blog-2.jpg","3":600,"4":900},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSJ7XuEBk6X58uxaghaiTqKBZgX7mE7ZfIeF5lKk-4KOICx7wZJNw","3":133,"4":200},"3":{"1":"Belly Full","2":"https://bellyfull.net/2018/02/03/simple-chocolate-mousse/","3":"Simple Chocolate Mousse","4":"","10":"LfmiAQAfQXpXHC"},"5":{"1":"QFxRiEmhawOSIxG"},"7":{"1":{"9":{"3":"Simple Chocolate Mousse","4":["1/2 cup ((4 ounces) Signature Kitchens semi-sweet chocolate chips)","1/8 teaspoon salt","1/4 teaspoon espresso powder ((optional))","1/2 cup Lucerne© whole milk","1 cup chilled Lucerne© heavy whipping cream"],"5":"This Simple Chocolate Mousse only requires 6 ingredients and 10 minutes of  prep. It’s so easy and ...","6":"3 hr 10 min","7":"4"}}}},{"1":{"1":"https://www.abeautifulplate.com/wp-content/uploads/2018/02/easy-chocolate-mousse-5-600x900.jpg","3":600,"4":900},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ2dAsuDHYcQac9pwFNVAwn-_f1s2mqBWR5t4Yw-H4eeG_9Rj0V2Q","3":133,"4":200},"3":{"1":"A Beautiful Plate","2":"https://www.abeautifulplate.com/easy-chocolate-mousse/","3":"Easy Chocolate Mousse","4":"Easy Chocolate Mousse","10":"BiTHkoAwtsNrVr"},"5":{"1":"cKgNDtTbgMtFbJt"},"7":{"1":{"9":{"3":"Easy Chocolate Mousse","4":["1 cup (125 grams) semisweet chocolate chips, divided*","1 cup (240 mL) heavy whipping cream","1/2 cup (70 grams) roasted salted almonds","1/2 teaspoon ground cinnamon","2 large egg whites"],"5":"This EASY Chocolate Mousse recipe is made with two ingredients (heavy cream  and chocolate chips) and ...","6":"1 hr 30 min","7":"4-6 Servings"}}}},{"1":{"1":"https://bromabakery.com/wp-content/uploads/2017/04/Secretly-Healthier-Chocolate-Mousse-2.jpg","3":1143,"4":1600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcStM5KBU-JE3CFkjJ3v5pIdc1M-AxyOphnMK-5JGmBrPG27g-f-Iw","3":142,"4":200},"3":{"1":"Broma Bakery","2":"https://bromabakery.com/2017/04/secretly-healthier-chocolate-mousse.html","3":"Secretly Healthier Chocolate Mousse - Broma Bakery","4":"A rich chocolate mousse made healthier with a secret ingredient! Best part?  You can","10":"BHymqaDWivlkyx"},"5":{"1":"fLxHmOAaRyapPXw"}},{"1":{"1":"https://assets.marthastewart.com/styles/video-preview-1280x720-highdpi/d32/ST0022%20-%20Chocolate%20Mousse%20vTHUMB/ST0022%20-%20Chocolate%20Mousse%20vTHUMB.jpg?itok=cbp5Ehuk","3":1280,"4":720},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQvtgWrMXfj6BxSzuFQ93R7-1uytxwtVzRHPzSlH4KhVMcnWAtC","3":200,"4":112},"3":{"1":"Martha Stewart","2":"https://www.marthastewart.com/336783/chocolate-mousse","3":"Chocolate Mousse","4":"ST0022 - Chocolate Mousse vTHUMB.jpg?itok=cbp5Ehuk","10":"NutFHbrFCImUim"},"5":{"1":"bycFEyvjoTPumhG"},"7":{"1":{"9":{"1":3.6500000953674316,"2":397,"3":"Chocolate Mousse","4":["4 large egg yolks","4 tablespoons sugar","2 cups heavy cream","8 ounces bittersweet chocolate, melted","1 teaspoon vanilla extract"],"5":"Because bittersweet chocolate is high in pure chocolate (at least 35  percent cocoa solids), it's ...","6":"1 hr","7":"6 servings"}}}},{"1":{"1":"https://s3.amazonaws.com/finecooking.s3.tauntonclud.com/app/uploads/2017/04/18133529/051097025-01-chocolate-mousse-main.jpg","3":600,"4":500},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSZDxQWfTZxel5L8IGA5kmuEhUf0at1gSY3mYa95nfuZsPu1GzpQA","3":200,"4":166},"3":{"1":"Fine Cooking","2":"https://www.finecooking.com/recipe/real-chocolate-mousse","3":"Real Chocolate Mousse","4":"Scott Phillips","10":"SuOsgrwyRsQCsU"},"5":{"1":"SGIexlfsTALIWVA"},"7":{"1":{"9":{"1":4.199999809265137,"2":17,"3":"Real Chocolate Mousse","4":["6 oz. semisweet or bittersweet chocolate, preferably 60% to 62% cacao,  chopped","2 Tbs. unsalted butter, cut into 8 pieces","3 large egg whites","Pinch of table salt","3 Tbs. granulated sugar"],"7":"four. servings"}}}},{"1":{"1":"https://www.tasteaholics.com/wp-content/uploads/2017/09/double-chocolate-mousse-cover-1.jpg","3":600,"4":900},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQh1ImOygeqktM6K35eQYxWZbRg6_uaLc_VriqCi1hgS5BLEdq6","3":133,"4":200},"3":{"1":"Tasteaholics","2":"https://www.tasteaholics.com/recipes/desserts/5-ingredient-double-chocolate-mousse/","3":"5 Ingredient Double Chocolate Mousse","4":"","10":"EPEhuvnfjwVDhN"},"5":{"1":"UXrmrAwWqlkymUy"},"7":{"1":{"9":{"1":5.0,"2":62,"3":"5 Ingredient Double Chocolate Mousse","4":["1 oz. Lily's Chocolate Chips","1 cup heavy cream","4 oz. cream cheese","1/4 cup powdered erythritol","2 tbsp cocoa powder"],"5":"Macros per serving:, • 469 Calories, • 45g of Fat, • 7g of Protein, • 5g of  Net Carbs","6":"25 min","7":"2"}}}},{"1":{"1":"https://ichef.bbci.co.uk/food/ic/food_16x9_832/recipes/basicchocolatemousse_93648_16x9.jpg","3":832,"4":468},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQRKrk3KulomPwWQnKu6t9MnylAF_DLFHmVrrBJf0IBsrW629-GLA","3":200,"4":112},"3":{"1":"BBC.com","2":"https://www.bbc.com/food/recipes/basicchocolatemousse_93648","3":"Raymond Blanc's chocolate mousse","4":"Raymond Blanc's chocolate mousse","10":"yxUNLYxInwbjDF"},"5":{"1":"OLQFjjusGwNwcOL"},"7":{"1":{"9":{"3":"Raymond Blanc's chocolate mousse","4":["170g/6oz good-quality dark chocolate, minimum 60 per cent cocoa solids,  roughly chopped (dairy free, if necessary)","7 free-range egg whites (use pasteurised egg white in a carton if you have  any concerns about raw egg)","¼ tsp lemon juice","40g/1½oz caster sugar"],"5":"Raymond Blanc shows you how to make an easy, 4-ingredient chocolate mousse  with his classic recipe.","6":"2 hr 10 min","7":"Serves 4"}}}},{"1":{"1":"https://hungryhappenings.com/wp-content/uploads/2018/02/best-chocolate-mousse-recipe-2.jpg","3":680,"4":680},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTtvhxHmITq5xO-0RTBo7hG4x-F_EomgloDEDqJBFN9IiliLhTj","3":200,"4":200},"3":{"1":"Hungry Happenings","2":"https://hungryhappenings.com/best-chocolate-mousse-recipe/","3":"The BEST Chocolate Mousse Recipe","4":"Best Chocolate Mousse Recipe","10":"LIjeWQhQdqrgNx"},"5":{"1":"cbkeWAaBITGNFCV"},"7":{"1":{"9":{"1":5.0,"2":3,"3":"The BEST Chocolate Mousse Recipe","4":["3 tablespoons water","3 tablespoons sugar","3 large egg yolks","1/2 cup heavy whipping cream","12 ounces melted semi-sweet chocolate"],"5":"The most luxuriously creamy and smooth chocolate mousse recipe you'll ever  try.","6":"25 min","7":"8"}}}},{"1":{"1":"https://d39ziaow49lrgk.cloudfront.net/wp-content/uploads/2016/10/Chocolate-Mousse-final-1.jpg","3":744,"4":631},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTgRx52xBN3wpTcEVufSuHKp3Hb8LGrbLBYIl6eXUJKYVhxQha4_g","3":200,"4":169},"3":{"1":"PaleoHacks","2":"https://blog.paleohacks.com/chocolate-mousse-recipe/","3":"Healthy Dark Chocolate Mousse Recipe","4":"Chocolate-Mousse-final-1.jpg","10":"bVpNOeqinghWQH"},"5":{"1":"DKAQSLoCFRxkRcR"},"7":{"1":{"9":{"3":"Healthy Dark Chocolate Mousse Recipe","4":["7 oz dark chocolate, roughly chopped","1 1/2 cans coconut milk, refrigerated overnight","1/4 cup raw honey","1/4 cup cocoa powder","Seeds from one fresh vanilla pod"],"5":"Meet the creamiest, richest mousse you’ve ever tasted. Dairy-free and  packed with antioxidant dark ...","6":"8 min"}}}},{"1":{"1":"https://www.seriouseats.com/recipes/images/2017/11/20171023-chocolate-mousse-vicky-wasik-20-1500x1125.jpg","3":1500,"4":1125},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTC5kDBJ5vNlrzibyZARnUvcjTkadfd3-LpLwnccHpgZv_kc3L7","3":200,"4":149},"3":{"1":"Serious Eats","2":"https://www.seriouseats.com/recipes/2017/12/eggless-chocolate-mousse.html","3":"Eggless Chocolate Mousse Recipe","4":"","10":"dmuXXylWkryNKF"},"5":{"1":"AugXlPfvEvKuJqI"},"7":{"1":{"9":{"3":"Eggless Chocolate Mousse Recipe","4":["For the Base:","7 ounces plain or toasted sugar (1 cup; 195g)","2 ounces Dutch cocoa powder, such as Cacao Barry Extra Brute (about 2/3  cup, spooned; 55g)","1/4 teaspoon (1g) Diamond Crystal kosher salt; for table salt, use about  half as much by volume or the same weight","32 ounces milk, any percentage will do (4 cups; 910g)"],"5":"The creamy toffee notes of homemade condensed milk set this recipe apart  from the custardy, ...","6":"2 hr 30 min","7":"Six 5 1/2 ounce portions"}}}},{"1":{"1":"https://www.wellplated.com/wp-content/uploads/2016/02/Avocado-Chocolate-Mousse-Vegan-and-Low-Carb.jpg","3":1200,"4":1461},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT93V5GbHolHUlNX-AGoHrgjlvdmij2uRImMX4kCAVZowUoJaFVqw","3":163,"4":200},"3":{"1":"Well Plated","2":"https://www.wellplated.com/avocado-chocolate-mousse/","3":"Avocado Chocolate Mousse","4":"2 Weck jars of Avocado Chocolate Mousse topped with whipped coconut cream  and a fresh raspberry","10":"RcTUITfLyekOnS"},"5":{"1":"QQNfVEMRTtCOPAN"},"7":{"1":{"9":{"1":4.5,"2":17,"3":"Avocado Chocolate Mousse","4":["4 ounces chopped semisweet chocolate or chocolate chips (at least 60%  dark), about 1/2 cup plus 2 tablespoons","2 large, ripe avocados (about 8 ounces each)","3 tablespoons unsweetened cocoa powder","1/4 cup Almond Breeze Unsweetened Almondmilk Cashewmilk Blend","1 teaspoon pure vanilla extract"],"5":"Creamy, rich healthy Avocado Chocolate Mousse made with avocado, dark  chocolate, and maple syrup. ...","6":"10 min","7":"4 generous servings"}}}},{"1":{"1":"https://lovingitvegan.com/wp-content/uploads/2015/09/Peppermint-Chocolate-Mousse-6.jpg","3":1500,"4":1000},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSIpRns-4PxKMwUy38BgcoFYma84kl5pV6EFgZGjHNdVhc1MmZrYA","3":200,"4":133},"3":{"1":"Loving It Vegan","2":"https://lovingitvegan.com/vegan-peppermint-chocolate-mousse/","3":"Vegan Peppermint Chocolate Mousse","4":"Vegan Peppermint Chocolate Mousse","10":"jGDHgBoyseXFeG"},"5":{"1":"jlPfQqTOlSGGXmw"},"7":{"1":{"9":{"1":5.0,"2":2,"3":"Vegan Peppermint Chocolate Mousse","4":["Liquid from 1 15oz (425g) can of Chickpeas","1/4 tsp Cream of Tartar","2 Tbsp Powdered Sugar","1/4 tsp Peppermint Extract","7 oz (200g) Vegan Dark Chocolate"],"5":"Amazing vegan peppermint chocolate mousse, the best texture vegan mousse  you've ever had! In just 5 ...","6":"20 min","7":"4"}}}},{"1":{"1":"http://media.foodnetwork.ca/recipetracker/dmm/C/L/Classic_Dark_Chocolate_Mousse_001.jpg","3":460,"4":230},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTn1P0lnbsEmbX1A87YDXQEf10PRs26K_llOYmlnhRvQcpKxHT0","3":200,"4":100},"3":{"1":"Food Network Canada","2":"http://www.foodnetwork.ca/recipe/classic-dark-chocolate-mousse/12736/","3":"Classic Dark Chocolate Mousse","4":"Classic Dark Chocolate Mousse","10":"SWSaYBdApXLyHI"},"5":{"1":"HIVxACCKxQLVDyJ"},"7":{"1":{"9":{"1":2.882352828979492,"2":357,"3":"Classic Dark Chocolate Mousse","4":["7 oz bittersweet chocolate, chopped","2 Tbsp unsalted butter","1 cup whipping cream","¼ cup brewed espresso, cooled","3 Tbsp brandy"],"5":"One taste and you won't be able to stop! Smooth, creamy chocolate mousse  topped with a garnish of ...","6":"1 min","7":"serves 6-8"}}}},{"1":{"1":"https://img.buzzfeed.com/thumbnailer-prod-us-east-1/f36600ff3f7b4c97aaf6760902758ca1/BFV16661_ShrimpAlfredoDinnerForTwoFINAL.jpg?output-quality=60&resize=1000:*","3":1000,"4":1000},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRc8Zp_qw2_0V3Tmlle37pBzezvwfl2f6IQdSkOldl9CUZs_sKNMg","3":200,"4":200},"3":{"1":"Tasty","2":"https://tasty.co/recipe/chocolate-mousse","3":"Chocolate Mousse Recipe by Tasty","4":"Chocolate Mousse","10":"BQWyXvChckhxEJ"},"5":{"1":"eLWfCmNpDypSbiE"},"7":{"1":{"9":{"1":92.0,"2":70,"3":"Chocolate Mousse Recipe by Tasty","4":["1 cup heavy cream","3 tablespoons sugar","2 ounces chocolate, broken into small pieces","¼ cup heavy cream, hot","6 raspberries, to garnish"],"5":"Here's what you need: heavy cream, sugar, chocolate, heavy cream,  raspberry, mint, tube cookie","7":"2 servings"}}}},{"1":{"1":"https://www.saveur.com/sites/saveur.com/files/styles/1000_1x_/public/import/2014/images/2012-09/7-SAV150-78.ChocolateMousse-750x750.jpg?itok=sdcDoBXA","3":1000,"4":1000},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ_WevA8nG-msc6riM-VMa_DFWbV0xcW7YIlAnNygK0ARRDLTke","3":200,"4":200},"3":{"1":"Saveur","2":"https://www.saveur.com/article/Recipes/Classic-Chocolate-Mousse","3":"Chocolate Mousse","4":"Chocolate Mousse","10":"kocxNNJLHKeOuC"},"5":{"1":"RvhyvBBheYBakAO"},"7":{"1":{"9":{"3":"Chocolate Mousse","4":["1 2⁄3 cups heavy cream","2 tsp. vanilla extract","1⁄2 tsp. kosher salt","4 egg whites","1⁄2 cup sugar"],"5":"Chocolate mousse, with its light texture and intense chocolate flavor, is a  totally crave-worthy ...","7":"serves 4"}}}},{"1":{"1":"https://food.fnr.sndimg.com/content/dam/images/food/fullset/2006/8/4/0/gl0605_mousse1.jpg.rend.hgtvcom.616.462.suffix/1382538446454.jpeg","3":616,"4":462},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTfsroJofYyl5Y5GlP4M2ODenY8wugz2hFK9RQtgPE1yTG9u3ny","3":200,"4":149},"3":{"1":"Food Network","2":"https://www.foodnetwork.com/recipes/bobby-flay/dark-chocolate-mousse-recipe-1917102","3":"Dark Chocolate Mousse","4":"Dark Chocolate Mousse","10":"ymDXqtyDHGnKex"},"5":{"1":"pPtCrYdSleBYsWu"},"7":{"1":{"9":{"1":4.5,"2":108,"3":"Dark Chocolate Mousse","4":["5 1/4 ounces bittersweet chocolate, coarsely chopped","14 ounces cold heavy cream","3 large egg whites","1-ounce sugar","Sweetened whipped cream, for garnish, optional"],"5":"Get Dark Chocolate Mousse Recipe from Food Network","6":"1 hr 20 min","7":"4 to 6 servings"}}}},{"1":{"1":"https://img.taste.com.au/3WAjhWtK/w720-h480-cfill-q80/taste/2016/11/chocolate-mousse-94477-1.jpeg","3":615,"4":410},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQhr-ebNpH6DCz8ruTFyPewWRhFb48vs-caSp4PcIIlU2I7RNxZ","3":200,"4":133},"3":{"1":"Taste","2":"https://www.taste.com.au/recipes/chocolate-mousse-3/94e5c801-c5dc-49cd-9448-c7fc8b342ea6","3":"Chocolate mousse","4":"","10":"EadWIdbGSiBvvy"},"5":{"1":"YXdVQXdgvHEROtk"},"7":{"1":{"9":{"1":4.800000190734863,"2":11,"3":"Chocolate mousse","4":["200g milk chocolate, or dark chocolate, broken","4 eggs, separated","1 tablespoon Kahlua, or other liqueur of choice","300ml carton thickened cream","Whipped cream, extra, to serve"],"5":"It's hard to beat the classics so keep it traditional with this decadent  chocolate mousse treat.","6":"15 min"}}}},{"1":{"1":"https://thetoughcookie.com/wp-content/uploads/2016/06/Salted-Caramel-Chocolate-Mousse-Featured.jpg","3":680,"4":680},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTWRfOMxBP868Tf8ElksLubFwkKxO72o6jGOvW2SfgAJb0oJ1pl","3":200,"4":200},"3":{"1":"The Tough Cookie","2":"https://thetoughcookie.com/2016/06/04/salted-caramel-chocolate-mousse/","3":"Salted Caramel Chocolate Mousse","4":"","10":"CeLWFekJwycRDm"},"5":{"1":"JPMQWbsGqBiKvtG"},"7":{"1":{"9":{"3":"Salted Caramel Chocolate Mousse","4":["100g (or ½ cup) granulated sugar","2 tablespoons of water","80g (or ⅓ cup + 1 teaspoon) unsalted butter, cubed","180ml (or ¾ cup) heavy cream","a pinch of table salt"],"5":"A thick layer of golden salted caramel topped with a delicious dark  chocolate mousse. The best!","6":"30 min","7":"6-8"}}}},{"1":{"1":"https://d3cizcpymoenau.cloudfront.net/images/26341/SFS_triple_chocolate_mousse_cake-15.jpg","3":2090,"4":2090},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRxByiQWbCWjcmc-JbrQ9VYr8CtY4ZkshQSg6F91sogjKeKhbkq6g","3":200,"4":200},"3":{"1":"Cook's Illustrated","2":"https://www.cooksillustrated.com/recipes/4958-triple-chocolate-mousse-cake","3":"Triple-Chocolate Mousse Cake","4":"","10":"vtSNnAVjUHgliG"},"5":{"1":"hqlCpdUtkiMSnxi"},"7":{"1":{"9":{"3":"Triple-Chocolate Mousse Cake","5":"To rate a perfect 10, this triple-decker confection would need to lighten  up and lose its one-note ...","7":"Serves 12 to 16"}}}},{"1":{"1":"https://www.thecookierookie.com/wp-content/uploads/2014/12/white-chocolate-mousse-8.jpeg","3":680,"4":859},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS96fuqccB37YN9XDwYbTYVoh5y9kKhq6WU2rfERutMWCKY14uI","3":158,"4":200},"3":{"1":"The Cookie Rookie","2":"https://www.thecookierookie.com/easy-white-chocolate-mousse/","3":"Super Easy White Chocolate Mousse","4":"White Chocolate Mousse layered into small glass jars","10":"cTpbSarnLdFYPE"},"5":{"1":"DInTFakOHyPQldd"},"7":{"1":{"9":{"1":4.599999904632568,"2":5,"3":"Super Easy White Chocolate Mousse","4":["12 ounces White Chocolate (chopped (you can also use dark or milk  chocolate))","1 1/2 cups heavy cream (divided)","Mini chocolate chips (optional (you can also use chopped fruit or other  garnishes you might like))"],"5":"White Chocolate Mousse is just so rich and creamy! There's nothing better  than a SUPER Easy White ...","6":"15 min","7":"6"}}}},{"1":{"1":"https://assets.epicurious.com/photos/54c94a9b1f13bb9b2edf4c3c/master/pass/51230220_olive-oil-dark-chocolate-mousse_6x4.jpg","3":1625,"4":1084},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRcMVVdshojOMfYOX7lMBM4GovM28xqkyyj2Gy0l5W5uLQgZdqR","3":200,"4":133},"3":{"1":"Epicurious","2":"https://www.epicurious.com/recipes/food/views/olive-oil-dark-chocolate-mousse-51230220","3":"Olive Oil Dark Chocolate Mousse","4":"","10":"dwOlpracQRKTAG"},"5":{"1":"XhpxHwGmQQlsOhN"},"7":{"1":{"9":{"1":4.0,"2":9,"3":"Olive Oil Dark Chocolate Mousse","4":["10 ounces high-quality 72% cacao bittersweet chocolate, finely chopped, or  chocolate chips","8 large eggs, separated, at room temperature","3/4 cup granulated sugar","1/2 cup extra virgin olive oil","1 teaspoon instant coffee granules dissolved in 2 tablespoons boiling water"],"5":"Kosher Status: Pareve I first learned about using fruity, high-quality  olive oil in ...","7":"6 servings"}}}},{"1":{"1":"http://www.ndtv.com/cooks/images/chocolate.mousse.jpg","3":620,"4":330},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSpzzGQYH5M9gmwVRkNDjGERaJyhUjLmxmCFuZYcMePG_97vyMD","3":200,"4":106},"3":{"1":"NDTV Food","2":"https://food.ndtv.com/recipe-eggless-chocolate-mousse-219658","3":"Eggless Chocolate Mousse Recipe","4":"Eggless Chocolate Mousse","10":"RRNhbBNmtNxLSg"},"5":{"1":"yBXDaMTanHBfkrA"},"7":{"1":{"9":{"1":5.0,"2":2,"3":"Eggless Chocolate Mousse Recipe","4":["2 cups hot milk","1 cup sugar","100 gm plain milk chocolate","1 cup cream-chilled","1 Tbsp gelatine"],"5":"Whip up a light and creamy chocolate mousse without eggs.","6":"1 hr 15 min","7":"4"}}}},{"1":{"1":"https://assets.marthastewart.com/styles/wmax-1500/d31/chocolate-mousse-0106-mla101821/chocolate-mousse-0106-mla101821_sq.jpg?itok=6_pcUxej","3":1500,"4":1500},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTK8e6IYmJkxBVn7akLOD6mI3T1r3uThbRu5rU7aBND0gh9N9AP6A","3":200,"4":200},"3":{"1":"Martha Stewart","2":"https://www.marthastewart.com/315307/individual-chocolate-mousse","3":"Individual Chocolate Mousse","4":"","10":"AGdFyQHJPdNaCy"},"5":{"1":"EeCnVxqGEXBvcYu"},"7":{"1":{"9":{"1":3.450000047683716,"2":95,"3":"Individual Chocolate Mousse","4":["3 1/3 cups heavy cream","8 large egg yolks, room temperature","1/2 cup sugar","1/4 cup light corn syrup","7 ounces bittersweet chocolate, melted"],"5":"This recipe makes two kinds of mousse: bittersweet chocolate and milk  chocolate.","6":"0 min","7":"Makes enough for 8 cakes"}}}},{"1":{"1":"https://cook.fnr.sndimg.com/content/dam/images/cook/fullset/2012/2/10/0/ek0109_mouse4.jpg.rend.hgtvcom.616.462.suffix/1391099484102.jpeg","3":616,"4":462},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRkHF2cBoiaNktwB_hF1d6oFUzz_FvmcICCsx3nI9rfyPEeH2KU","3":200,"4":149},"3":{"1":"Cooking Channel","2":"https://www.cookingchanneltv.com/recipes/ellie-krieger/dark-chocolate-mousse-1945893","3":"Dark Chocolate Mousse","4":"Dark Chocolate Mousse","10":"LJqbDRJGwUPsht"},"5":{"1":"kHhNwbUGEsncjCS"},"7":{"1":{"9":{"3":"Dark Chocolate Mousse","4":["1 (12.3-ounce) package silken tofu, drained","3 ounces high quality bittersweet chocolate, finely chopped","1/4 cup unsweetened cocoa powder, preferably Dutch-processed","1/4 cup water","1 tablespoon brandy"],"5":"Cooking Channel serves up this Dark Chocolate Mousse recipe from Ellie  Krieger plus many other ...","6":"1 hr 20 min","7":"5 servings"}}}},{"1":{"1":"https://www.deliaonline.com/sites/default/files/quick_media/chocolate-a-very-chocolatey-mousse.jpg","3":1348,"4":1542},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTEx0oq8mkc2n2EtHhIRzN5rAYJlhsSftegHcaRrZ0Rup8dn_xJSQ","3":175,"4":200},"3":{"1":"Delia Online","2":"https://www.deliaonline.com/recipes/international/european/french/a-very-chocolatey-mousse","3":"A Very Chocolatey Mousse","4":"","10":"UgfjqXPRIGcnJs"},"5":{"1":"QmtOOeQtnaucgGr"},"7":{"1":{"9":{"3":"A Very Chocolatey Mousse","4":["7 oz (200 g) dark chocolate (75 per cent cocoa solids), broken into pieces","4fl oz (120ml) warm water","3 large eggs, separated","1½ oz (40 g) golden caster sugar","a little whipped cream (optional)"],"5":"This was the chocolate recipe of the 1960s, but it has now, sadly, been  eclipsed by other eras and ...","7":"Serves 6"}}}},{"1":{"1":"https://www.healthymummy.com/wp-content/uploads/2016/07/Mousse.jpg","3":960,"4":705},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS0eNWtlljCNY2Rz1V3tYBFpmv-cAH6t1DRbl4gCyNU7zAxCLBm","3":200,"4":146},"3":{"1":"The Healthy Mummy","2":"https://www.healthymummy.com/recipe/coconut-chocolate-mousse/","3":"Coconut and Chocolate Mousse","4":"Chocolate Mousse","10":"sOLpVJIlJNwjMs"},"5":{"1":"rpCMjBTUjAxYQgM"},"7":{"1":{"9":{"3":"Coconut and Chocolate Mousse","4":["400 ml can of coconut cream","5 tbsp good quality cocoa or cacao","4 tbsp honey or rice malt syrup","1 tsp vanilla bean paste or vanilla essence","1 tsp cinnamon"],"5":"Read our delicious recipe for Healthy One Bowl Coconut and Chocolate  Mousse, a recipe from The ...","7":"6 people"}}}},{"1":{"1":"https://platedcravings.com/wp-content/uploads/2018/02/Easy-Chocolate-Mousse-Recipe-Plated-Cravings-8-500x375.jpg","3":500,"4":375},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS4cS4DoviXJBXThmsL3j4w_I27aYWW_tYU7-DaFeCCsvF1B4VUug","3":200,"4":149},"3":{"1":"Plated Cravings","2":"https://platedcravings.com/easy-chocolate-mousse-recipe/","3":"Easy Chocolate Mousse Recipe","4":"","10":"expJObPwmlJAkU"},"5":{"1":"TBHCrHANrOnGqPH"},"7":{"1":{"9":{"1":5.0,"2":3,"3":"Easy Chocolate Mousse Recipe","4":["8 oz. semisweet chocolate (chopped)","1 tsp vanilla extract","1 pinch salt","3 cups heavy cream (divided)","1/4 cup powdered sugar"],"5":"This easy Chocolate Mousse recipe is super simple to make from scratch and  deliciously light and ...","6":"16 min","7":"8"}}}},{"1":{"1":"https://assets.epicurious.com/photos/583f3202e5ba7cdd0eb88201/master/pass/chocolate-mousse-pie.jpg","3":1000,"4":664},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS7MZyR4OdCuZhRTKrQxwfPhYFXwNRNP2PTBsGDiPykDzyVG2EH","3":200,"4":132},"3":{"1":"Epicurious","2":"https://www.epicurious.com/recipes/food/views/chocolate-mousse-pie-2687","3":"Chocolate Mousse Pie","4":"","10":"luvhIBOrsyqWKK"},"5":{"1":"XXfxypeCTaISdwC"},"7":{"1":{"9":{"1":4.0,"2":204,"3":"Chocolate Mousse Pie","4":["21 chocolate sandwich cookies (such as Oreos)","1/4 cup (1/2 stick) unsalted butter, cut into pieces, room temperature","12 ounces semisweet chocolate, finely chopped","1 teaspoon vanilla extract","Pinch of salt"],"5":"A quick and easy Chocolate Mousse Pie recipe","7":"Serves 8"}}}},{"1":{"1":"https://tipbuzz.com/wp-content/uploads/Raspberry-and-Chocolate-Mousse.jpg","3":735,"4":1102},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSAAlQj6exF8tP1gKJk7jSkcXfK08AK3kpmGjXdEjN7NMa3ykS9","3":133,"4":200},"3":{"1":"TipBuzz","2":"https://tipbuzz.com/raspberry-chocolate-mousse/","3":"Easy Raspberry And Chocolate Mousse (with Video)","4":"Raspberry And Chocolate Mousse – looks so elegant with two layers and  tastes so delicious that","10":"dclspGcVrDXGBd"},"5":{"1":"dYwBNIssOSlaJEA"},"7":{"1":{"9":{"1":3.799999952316284,"2":94,"3":"Easy Raspberry And Chocolate Mousse (with Video)","4":["3 oz raspberry jello powder (1 small box)","1 cup boiling water","1/2 cup cold water","2 cups whipped cream (see note) (or Cool Whip)","1/2 cup half and half milk"],"5":"This Raspberry Chocolate Mousse is a delicious dessert with a stunning  presentation in stemless wine ...","6":"2 hr 35 min","7":"6 servings"}}}},{"1":{"1":"https://tastesbetterfromscratch.com/wp-content/uploads/2014/05/Chocolate-Cake-Chocolate-Mousse-8.jpg","3":683,"4":1024},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTUJwrzOlkPXRGMw2MPkh8T6-iHmD_CO4FmbmCYpnCVAxbrHzAV","3":133,"4":200},"3":{"1":"Tastes Better from Scratch","2":"https://tastesbetterfromscratch.com/chocolate-cake-with-chocolate-mousse/","3":"Chocolate Cake with Chocolate Mousse Filling","4":"A slice of homemade chocolate cake with layers of chocolate mousse filling,  on a white","10":"lWreJgKIYKdycU"},"5":{"1":"iIctMJsvSGSSOTp"},"7":{"1":{"9":{"1":4.630000114440918,"2":27,"3":"Chocolate Cake with Chocolate Mousse Filling","4":["2 cup granulated sugar","1 3/4 cup all-purpose flour","3/4 cup unsweetened cocoa powder","1 1/2 teaspoon baking powder","1 1/2 teaspoon baking soda"],"5":"A delicious, moist chocolate cake with layers of dark chocolate mousse  filling and a warm chocolate ...","6":"2 hr 5 min","7":"15"}}}},{"1":{"1":"http://kitchenconfidante.com/wp-content/uploads/2012/02/Triple-Chocolate-Mousse-Kitchen-Confidante1.jpg","3":520,"4":781},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSC3nD5-E47uUf93VYRZrJ-nBGqR6OVd8O1U1dtArebfVLEgfTEjQ","3":133,"4":200},"3":{"1":"Kitchen Confidante","2":"https://kitchenconfidante.com/triple-chocolate-mousse-recipe","3":"Triple Chocolate Mousse","4":"Triple Chocolate Mousse","10":"bKqDNOFFguSowI"},"5":{"1":"iMaNKBNgKYsQQTB"},"7":{"1":{"9":{"3":"Triple Chocolate Mousse","5":"Now you know me, I don’t need a holiday as an excuse to make anything  chocolate-y. But of course, ...","7":"4 (generous) servings."}}}},{"1":{"1":"https://img.taste.com.au/nGjAovK2/taste/2016/11/layered-chocolate-mousse-cakes-101268-1.jpeg","3":3000,"4":2000},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSAYC-6BAF1KIL71PDZATnMc8c5P07p7iII3sWPh6JNggu98YW8","3":200,"4":133},"3":{"1":"Taste","2":"https://www.taste.com.au/recipes/layered-chocolate-mousse-cakes/9be6bd0a-fcf6-42ba-8410-a6ba5603d4e8","3":"Layered chocolate mousse cakes","4":"","10":"mFvYouYCpgjdMs"},"5":{"1":"WhnonbUhsFfKCPL"},"7":{"1":{"9":{"1":2.700000047683716,"2":3,"3":"Layered chocolate mousse cakes","4":["200g dark chocolate, chopped","200g butter, chopped","1 1/4 cups (275g) brown sugar","3 Coles Brand Australian Free Range Eggs, lightly whisked","3/4 cup (110g) plain flour"],"5":"A brownie base, chocolate mousse filling and dark chocolate sauce on top.  Can you think of any ...","6":"2 hr 5 min"}}}},{"1":{"1":"https://www.amymyersmd.com/wp-content/uploads/2018/02/Coconut-Cream-Chocolate-Mousse2.jpg","3":1200,"4":630},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS2TAHGhBmzxrybZf7rljmVqeay8DwB5BIny97lcZL46tUoPBme","3":200,"4":105},"3":{"1":"Amy Myers MD","2":"https://www.amymyersmd.com/2018/02/coconut-cream-chocolate-mousse/","3":"Coconut Cream Chocolate Mousse","4":"Coconut Cream Chocolate Mousse","10":"CkKFxrlXnhUuhe"},"5":{"1":"lReGEEBDYtdWrEV"},"7":{"1":{"9":{"3":"Coconut Cream Chocolate Mousse","4":["1 can full fat coconut milk","1 Tbsp unsweetened cocoa powder","1/2 tsp vanilla extract","5-10 drops stevia","1 pinch cinnamon"],"5":"Looking for a sweet to enjoy without derailing your protocol? Try this  delicious homemade Coconut ...","7":"1"}}}},{"1":{"1":"https://imagesvc.timeincapp.com/v3/mm/image?url=https%3A%2F%2Fcdn-image.foodandwine.com%2Fsites%2Fdefault%2Ffiles%2F1532533774%2Fultimate-chocolate-mousse-XL-RECIPE0918.jpg&w=1000&q=70","3":1000,"4":1000},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS9YyVHT8dcRWtWpCH85bE8g-00TuL-X8f4BYunjFXEPxU7NadV0g","3":200,"4":200},"3":{"1":"Food & Wine Magazine","2":"https://www.foodandwine.com/recipes/ultimate-chocolate-mousse","3":"Ultimate Chocolate Mousse","4":"Ultimate Chocolate Mousse","10":"yiPtIRsyVupAaY"},"5":{"1":"XoMIQmyxIVUFNOM"},"7":{"1":{"9":{"3":"Ultimate Chocolate Mousse","4":["8 ounces semisweet dark chocolate, broken into 1/2-inch pieces","6 large eggs, separated","3 tablespoon water","1/4 cup sweet liqueur (such as Chartreuse, amaretto, mandarin, or Grand  Marnier)","2 cups heavy cream"],"5":"In 2018, Food & Wine named this recipe one of our 40 best: To celebrate  chocolate in its most ...","6":"4 hr 30 min","7":"Serves : 12"}}}},{"1":{"1":"https://www.cookingclassy.com/wp-content/uploads/2017/11/chocolate-mousse-pie-17.jpg","3":1080,"4":1620},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSUEQeQarCpynWIXm6YbXUWVdiUQ4PVCc0VNxgyh44mEP5jmXPL","3":133,"4":200},"3":{"1":"Cooking Classy","2":"https://www.cookingclassy.com/easy-chocolate-mousse-pie/","3":"Easy Chocolate Mousse Pie","4":"Chocolate Mousse Pie","10":"JyvaMdqWbwqtNE"},"5":{"1":"uYqqOxFFEkbMExh"},"7":{"1":{"9":{"1":4.75,"2":16,"3":"Easy Chocolate Mousse Pie","4":["2 Tbsp salted butter, (diced into 4 pieces)","1 cup semi-sweet chocolate chips*","1/2 cup bittersweet chocolate chips ((or another 1/2 cup semi-sweet if you  don't want it quite as rich))","2 cups mini marshmallows","1/3 cup milk ((whole or 2%))"],"5":"This pie is purely irresistable! It's so chocolatey, so fluffy, so rich, so  creamy. It's absolutely ...","6":"4 hr 20 min","7":"10"}}}},{"1":{"1":"https://www.lifeloveandsugar.com/wp-content/uploads/2017/10/Chocolate-Mousse-Cake4.jpg","3":600,"4":900},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQm8WGK0UxwFPDDa1t2qB9EQfMVAyBZsg6BYW2yPgOzIk2pKN60Ag","3":133,"4":200},"3":{"1":"Life Love and Sugar","2":"https://www.lifeloveandsugar.com/2017/10/23/chocolate-mousse-cake/","3":"Chocolate Mousse Cake","4":"Chocolate Mousse Cake","10":"LGoFCNeaeWpiwp"},"5":{"1":"qgBJJasKxSTLVEX"},"7":{"1":{"9":{"1":5.0,"2":1,"3":"Chocolate Mousse Cake","4":["1 3/4 cups (228g) all purpose flour","2 cups (414g) sugar","3/4 cup (85g) natural unsweetened cocoa powder","2 1/4 tsp baking soda","1/2 tsp baking powder"],"5":"This Chocolate Mousse Cake is a classic! With three layers of moist  chocolate cake and two layers of ...","7":"12-14 Slices"}}}},{"1":{"1":"https://www.sbs.com.au/food/sites/sbs.com.au.food/files/2_3.jpg","3":1872,"4":1248},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQQwUiKk9ItX8NHEVxSPWjDJPmn79D0Gc0osHxQakgcKZ4njP9Cpg","3":200,"4":133},"3":{"1":"SBS","2":"https://www.sbs.com.au/food/recipes/belgian-chocolate-mousse","3":"Belgian chocolate mousse","4":"Belgian chocolate mousse https://www.sbs.com.au/food/recipes/belgian- chocolate-mousse","10":"CckKwtPXnRyCRI"},"5":{"1":"BiMeABecAAqrNOy"},"7":{"1":{"9":{"1":3.695310115814209,"2":256,"3":"Belgian chocolate mousse","5":"You can't get more decadent that this delicious Belgian chocolate dessert  recipe. It's best to make ...","6":"30 min","7":"6"}}}},{"1":{"1":"https://www.willcookforsmiles.com/wp-content/uploads/2014/11/Chocolate-Mousse-3-from-willcookforsmiles.com_.jpg","3":905,"4":600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS1IOQlPBqG1_SDmh7qX95Moe5GQ_B_ebSYTQ9IVIxW-s4JBG9R","3":200,"4":132},"3":{"1":"Will Cook For Smiles","2":"https://www.willcookforsmiles.com/chocolate-mousse/","3":"Chocolate Mousse","4":"Chocolate Mousse | from willcookforsmiles.com","10":"tldKqDuSAbXtnQ"},"5":{"1":"EiFGSBRDtQyLvYF"},"7":{"1":{"9":{"1":5.0,"2":1,"3":"Chocolate Mousse","4":["8 oz bittersweet baking chocolate","1/2 cup of water (split in two)","2 Tbsp unsalted butter","1 tsp vanilla extract","3 egg yolks"],"5":"Delicate yet rich dessert that goes perfectly for any celebration. This  Chocolate Mousse is made ...","6":"30 min","7":"6 servings"}}}},{"1":{"1":"https://img.taste.com.au/GAoU8PP5/w720-h480-cfill-q80/taste/2012/07/classic-chocolate-mousse-136368-1.jpg","3":720,"4":480},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRKSHeb2idq49Hy3ZO1mL17JpQqNgpwZyskllnY8RbCCwQP6rTW8g","3":200,"4":133},"3":{"1":"Taste","2":"https://www.taste.com.au/recipes/classic-chocolate-mousse-2/9acca574-0e7b-4db9-8e75-9e36b02053ee","3":"Classic chocolate mousse","4":"","10":"QPOHNOVliBSibQ"},"5":{"1":"yqCdusrJeBAjAie"},"7":{"1":{"9":{"1":4.5,"2":29,"3":"Classic chocolate mousse","4":["200g dark cooking chocolate, finely chopped","25g butter","3 eggs, separated, at room temperature","1 teaspoon vanilla extract","250ml (1 cup) thickened cream"],"5":"Whip up perfectly smooth mousse in no time with this simple six-step recipe.","6":"25 min","7":"6"}}}},{"1":{"1":"http://www.bite.co.nz/images/recipes/three-ingredient-chocolate-mousse-recipe.jpg?width=1200&height=800","3":1200,"4":800},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQW7hnqPuX8_hcn-EPyE8OtghyTdfsltkgs-coaNZDgi_Uy7k8SlA","3":200,"4":133},"3":{"1":"Bite","2":"http://www.bite.co.nz/recipe/15181/Three-ingredient-chocolate-mousse/","3":"Three ingredient chocolate mousse ( SERVES 2 )","4":"","10":"PqUbHOJMJlYeno"},"5":{"1":"nIilfAbGTehhyXU"},"7":{"1":{"9":{"3":"Three ingredient chocolate mousse ( SERVES 2 )","4":["Dark chocolate, ideally at least 70% cocoa solids, coarsely chopped","Cream","Marshmallows, chopped"],"5":"This delicious silken chocolate mousse is very rich, so you'll need only a  small glass or bowl each. ..."}}}},{"1":{"1":"http://assets.kraftfoods.com/recipe_images/opendeploy/53395_640x428.jpg","3":642,"4":428},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS-keC9N7eStfilSNUrZU_fPxAJiaFSSro567cUOx0o2Tw1eBjTDw","3":200,"4":133},"3":{"1":"Kraft Recipes","2":"http://www.kraftrecipes.com/recipes/double-chocolate-mousse-recipe-53395.aspx","3":"Double-Chocolate Mousse Recipe","4":"Double-Chocolate Mousse Recipe","10":"OhJFCWUSWhdIlb"},"5":{"1":"yQnWRSTdtypKJiV"},"7":{"1":{"9":{"3":"Double-Chocolate Mousse Recipe","4":["2 oz. BAKER'S Semi-Sweet Chocolate","1-1/2 cups fat-free milk, divided","1 pkg. (1.4 oz.) JELL-O Chocolate Flavor Sugar Free Fat Free Instant Pudding","2 cups thawed COOL WHIP FREE Whipped Topping, divided","1/2 cup fresh raspberries"],"5":"Enjoy this Double-Chocolate Mousse Recipe. It's hard to believe this  luscious Double-Chocolate ...","6":"35 min","7":"6 servings"}}}},{"1":{"1":"https://img.delicious.com.au/sWSoXu5b/h506-w759-cfill/del/2018/05/double-chocolate-mousse-cake-79402-2.jpg","3":759,"4":506},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSdYzkyO8y9vDLut-n0pEa0cbZYOP1tgWTNWqhmmzrz65i6ZltNqg","3":200,"4":133},"3":{"1":"Delicious","2":"https://www.delicious.com.au/recipes/chocolate-mousse-fudge-brownie-cake/ju5kgajg","3":"Chocolate mousse fudge brownie cake","4":"Double-chocolate mousse cake","10":"chqrdknqidKMKM"},"5":{"1":"JMsAPWumpNlEiWY"},"7":{"1":{"9":{"3":"Chocolate mousse fudge brownie cake","4":["500g chocolate fudge brownie packet mix","400g dark (70%) chocolate, chopped","400g milk chocolate, chopped","6 eggs, separated","1 titanium-strength gelatine leaf"],"5":"Double the chocolate, double the deliciousness.","6":"50 min","7":"10"}}}},{"1":{"1":"https://www.creationsbykara.com/wp-content/uploads/2017/10/Easy-Chocolate-Mousse-011-2.jpg","3":800,"4":1055},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSQeY3ZLajJbKFus6n9z7MzFf-iGkRXm_sqLwF2zRBlq4u1QBuY","3":151,"4":200},"3":{"1":"Creations by Kara","2":"https://www.creationsbykara.com/easy-chocolate-mousse-3-ingredient/","3":"Easy Chocolate Mousse (3 Ingredient)","4":"Easy 3 ingredient chocolate mousse. A simple but decadent dessert recipe.","10":"yBErsOSUwLpCdn"},"5":{"1":"RydapwVUymANmsv"},"7":{"1":{"9":{"1":5.0,"2":2,"3":"Easy Chocolate Mousse (3 Ingredient)","4":["1 cup good quality chocolate chips","1 cup whipping cream","1 tsp vanilla"],"5":"Rich and creamy chocolate mousse make with just three ingredients.","6":"15 min"}}}},{"1":{"1":"https://glutenfreeonashoestring.com/_main_site/wp-content/uploads/2016/06/closeup.jpg","3":685,"4":937},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ5bzseFXF-3kFO6yc6lE3tIgihZSuj2GBFTFmFG-4uExVZZ1c3ig","3":146,"4":200},"3":{"1":"Gluten Free on a Shoestring","2":"https://glutenfreeonashoestring.com/paleo-chocolate-mousse/","3":"Paleo Chocolate Mousse","4":"Paleo Chocolate Mousse","10":"IlxiFEKvKWUOLA"},"5":{"1":"QkhCQJjwCLeRvOV"},"7":{"1":{"9":{"3":"Paleo Chocolate Mousse","5":"Smooth and creamy Paleo chocolate mousse, made with chocolate, coconut  cream, cocoa powder, honey ...","6":"5 min","7":"4 servings"}}}},{"1":{"1":"https://cdn77-s3.lazycatkitchen.com/wp-content/uploads/2016/07/vegan-black-cherry-chocolate-mousse.jpg","3":1280,"4":1920},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDdqbIpGTV48CT9YMCuxqbVnVOh_xd9oYffZFryk8Oli6E6OutXA","3":133,"4":200},"3":{"1":"Lazy Cat Kitchen","2":"https://www.lazycatkitchen.com/vegan-black-forest-chocolate-mousse/","3":"Vegan black forest chocolate mousse","4":"","10":"BqwvupophfNFSb"},"5":{"1":"aauwnpVSsGfHjwM"},"7":{"1":{"9":{"1":5.0,"2":2,"3":"Vegan black forest chocolate mousse","4":["170 g / 6 oz dark (70 % cacao) chocolate","135 ml / ½ cup + 1 tbsp gelatinous aquafaba* homemade or from a tin","135 ml / ½ cup + 1 tbsp coconut cream","2 tbsp caster sugar (optional)*","400 g / 14 oz sour or sweet cherries** halved and pitted"],"5":"... is a mean dessert! It's airy, effortlessly impressive and goes superbly  well with a strong ...","6":"30 min","7":"makes: 4"}}}},{"1":{"1":"https://www.annabel-langbein.com/images/blog/easter-made-easy/chocolate-mousse.jpg","3":1772,"4":1243},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ8hDwRc0WBZ6mqvqUfZMJ_U5NXzl_OpWGbBiiDzdtZq83l8xxksw","3":200,"4":140},"3":{"1":"Annabel Langbein","2":"https://www.annabel-langbein.com/recipes/velvet-chocolate-mousse/188/","3":"Velvet Chocolate Mousse - Annabel Langbein – Recipes","4":"","10":"aRUYADVBRKwyvJ"},"5":{"1":"unhFXeGrDhdHrMd"}},{"1":{"1":"https://assets.marthastewart.com/styles/wmax-1500/d37/triple-chocolate-mousse-cakes-a101821/triple-chocolate-mousse-cakes-a101821_horiz.jpg?itok=qjl3Tyyu","3":1324,"4":743},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRB6ZucfnwjjD9CxJ17KOVs6CwkP-tXx-BXWXYM9gL0Rm-NBvWK","3":200,"4":112},"3":{"1":"Martha Stewart","2":"https://www.marthastewart.com/317890/triple-chocolate-mousse-cake","3":"Triple-Chocolate Mousse Cakes","4":"","10":"fmyIGBEBfkAXNw"},"5":{"1":"AhgPpPywjIRbTkO"},"7":{"1":{"9":{"1":3.5,"2":643,"3":"Triple-Chocolate Mousse Cakes","4":["Vegetable-oil cooking spray","2/3 cup all-purpose flour","1/3 cup unsweetened Dutch-process cocoa powder","2/3 cup sugar","3/4 teaspoon baking soda"],"5":"With three shades of chocolate, these cakes are as pleasing to the eye as  they are to the sweet ...","6":"0 min","7":"Makes 8"}}}},{"1":{"1":"https://www.chowstatic.com/assets/models/promotions/photos/28768/original/chowhound_white_chocolate_mousse_1.jpg","3":3000,"4":1999},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRo4DyXkcnY-RnA7ZCM-HNSv0YRsZF0b3TNOcXXTHOw2vPcmW7C1A","3":200,"4":133},"3":{"1":"Chowhound","2":"https://www.chowhound.com/recipes/white-chocolate-mousse-blackberry-compote-31821","3":"White Chocolate Mousse with Blackberry Compote","4":"","10":"dvVqXCxdxEmAFx"},"5":{"1":"BrNQDgJTTEJTrPB"},"7":{"1":{"9":{"3":"White Chocolate Mousse with Blackberry Compote","4":["8 ounces white chocolate bars (not morsels or chips)","1½ cup heavy cream","2 egg yolks","6 tablespoons sugar","1 teaspoon cornstarch"],"5":"mousse with blackberry compote","6":"1 hr","7":"4 to 5 servings"}}}},{"1":{"1":"https://tipbuzz.com/wp-content/uploads/Strawberry-Chocolate-Mousse-.jpg","3":1000,"4":600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTPDe13slz50EIMYV1nBU-r3y0uatneBh-r-0lXpx6KhZyPLfLq","3":200,"4":120},"3":{"1":"TipBuzz","2":"https://tipbuzz.com/strawberry-chocolate-mousse/","3":"Strawberry Chocolate Mousse (with Video)","4":"Strawberry Chocolate Mousse","10":"BKokgkfaoNPyVL"},"5":{"1":"pwVkVPbEXrTqUSm"},"7":{"1":{"9":{"1":5.0,"2":1,"3":"Strawberry Chocolate Mousse (with Video)","4":["3 oz strawberry jello powder (1 small box)","1 cup boiling water","2 cups cold water","10 fresh strawberries (chopped)","1/2 cup half and half milk"],"5":"Strawberry Chocolate Mousse is a stunning make-ahead dessert that's perfect  for Valentine's Day, ...","6":"2 hr 35 min","7":"6 servings"}}}},{"1":{"1":"https://www.gnom-gnom.com/wp-content/uploads/2018/08/Low-Carb-Paleo-Keto-Chocolate-Mousse-by-Gnom-Gnom-1.jpg","3":700,"4":700},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS039cF8Xg2EhS8rKf_AX47EpRN8algumwFDSIiQf4Z5e6mmFZeCQ","3":200,"4":200},"3":{"1":"gnom-gnom","2":"https://www.gnom-gnom.com/paleo-keto-chocolate-mousse/","3":"Paleo, Low Carb & Keto Chocolate Mousse","4":"","10":"VINQGoLpoWYnoj"},"5":{"1":"JQQglyLIsPIgjmT"},"7":{"1":{"9":{"1":5.0,"2":6,"3":"Paleo, Low Carb & Keto Chocolate Mousse","4":["1/3 cup full fat coconut milk (*)","2-4 tablespoons xylitol (or sweetener of choice, to taste**)","1-3 tablespoons cocoa powder (use the smaller amount for milk chocolate and  the larger for dark (I use 3!))","pinch espresso powder (or instant coffee, optional)","pinch kosher salt (up to 1/8-1/4 tsp for a 'salted' version (my favorite!))"],"5":"Extra fluffy and easy-peasy to whip up, this paleo and keto chocolate  mousse is bound to satisfy any ...","6":"15 min","7":"2"}}}},{"1":{"1":"https://www.thatskinnychickcanbake.com/wp-content/uploads/2016/07/Chocolate-Peanut-Butter-Mousse-Cake-7-600x440.jpg","3":600,"4":440},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQyjKcnu0mQkTq_hu8vd5Gxynv8kOYlArQSamr6qKf2461QawQXpQ","3":200,"4":146},"3":{"1":"That Skinny Chick Can Bake","2":"https://www.thatskinnychickcanbake.com/peanut-butter-chocolate-mousse-cake/","3":"Peanut Butter Chocolate Mousse Cake","4":"Peanut Butter Chocolate Mousse Cake | A decadent brownie topped with  exquisite chocolate and peanut ...","10":"uSJFlwLvdiGbRS"},"5":{"1":"gxwuSQMtlsngXow"},"7":{"1":{"9":{"1":5.0,"2":5,"3":"Peanut Butter Chocolate Mousse Cake","4":["1 box brownie mix (I used my [url]One Bowl Fudgy  Brownies∞https://www.thatskinnychickcanbake.com/one-bowl-fudgy-brownies/[/url]  and baked for 35 minutes)","8 ounces Reese's minis (reserve extras from bag for garnishing)","1 1/8 teaspoon powdered gelatin","1 1/2 tablespoons water","9 ounces Reese's peanut butter chips"],"5":"A decadent chocolate and peanut butter dessert.","6":"1 hr 35 min","7":"16 servings"}}}},{"1":{"1":"https://images.food52.com/0vmCf5I5baS0CjzEASwEBP7FBYs=/753x502/2603cf44-4718-4ca5-ae35-6ccc9f208ab7--2018-0508_tricolor-chocolate-mousse_3x2_james-ransom-059.jpg","3":753,"4":502},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSFgmeLJESN6R3P9rPa7li83kt-itrIIVRNvCmobELVEq6ligZF","3":200,"4":133},"3":{"1":"Food52","2":"https://food52.com/recipes/76975-tricolor-chocolate-mousse","3":"Tricolor Chocolate Mousse","4":"Tricolor Chocolate Mousse","10":"kHfidHgjoKtRfJ"},"5":{"1":"xfBTnkNSKRXArNW"},"7":{"1":{"9":{"1":4.5714287757873535,"2":7,"3":"Tricolor Chocolate Mousse","4":["Base<\\/em>:","1 ounce (30 grams) dark chocolate","Dark Chocolate Mousse<\\/em>:","10 ounces (280 grams) semisweet or bittersweet chocolate (not to exceed 62%  cacao), coarsely chopped","10 tablespoons (140 grams) unsalted butter"],"5":"Named “Dessert of the Year” by San Francisco Focusmagazine in 1987, this  dessert was all the ...","7":"Serves 10-12"}}}},{"1":{"1":"https://www.curiouscuisiniere.com/wp-content/uploads/2018/02/Mousse-Au-Chocolate-French-Chocolate-Mousse-Image-4974.21.jpg","3":500,"4":742},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR3kiWXUN_7SlC9wX39ePh2JGlKgD2J2sS6ILh1ElE4qLVDmNPP","3":134,"4":200},"3":{"1":"Curious Cuisiniere","2":"https://www.curiouscuisiniere.com/french-chocolate-mousse/","3":"Mousse Au Chocolate (Easy French Chocolate Mousse)","4":"If you love creamy, rich, dark chocolate, then Mousse Au Chocolat is for","10":"FCADlrWhXEqKDa"},"5":{"1":"itIHFxSjrbREsRr"},"7":{"1":{"9":{"1":4.119999885559082,"2":17,"3":"Mousse Au Chocolate (Easy French Chocolate Mousse)","4":["6 oz bittersweet chocolate","4 eggs (divided, at room temp*)","1 Tbsp sugar","1 tsp pure vanilla extract","Pinch salt"],"5":"If you love creamy, rich, dark chocolate, then Mousse Au Chocolat is for  you. This classic French ...","6":"10 min","7":"4 people"}}}},{"1":{"1":"http://2.bp.blogspot.com/-s7Y4M28grcg/UeB2Uhr8PzI/AAAAAAAASu0/x_x4lNbGY_Y/s1600/Chocolate+Mousse+1.jpg","3":1600,"4":1359},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDBfF5H0pz1oKGMbq4_M0oEilrat37uEQluSYVL8jHv-AFO67T","3":200,"4":169},"3":{"1":"Kitchen Simmer","2":"http://www.kitchensimmer.com/2013/07/2-ingredient-chocolate-mousse-made-with.html","3":"Kitchen Simmer: 2 Ingredient Chocolate Mousse made with with Tofu","4":"2 Ingredient Chocolate Mousse made with with Tofu","10":"nEQPNkHkyYrqOo"},"5":{"1":"RHQXOaTULmPkXPy"}},{"1":{"1":"https://images-gmi-pmc.edge-generalmills.com/a3dab23d-e8ba-4c6a-91e8-d665f435b7b9.jpg","3":800,"4":450},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTL9fZkba8Rj5BLfKkLvNn-VH6nm_SAq_CZOc-ZqG0YSHECNxfh","3":200,"4":112},"3":{"1":"Betty Crocker","2":"https://www.bettycrocker.com/recipes/chocolate-mousse-torte/66b1d719-9130-466c-80e3-a43ba54957b3","3":"Chocolate Mousse Torte","4":"Chocolate Mousse Torte","10":"XXqhHhnhMHlkYc"},"5":{"1":"LjVOJVXvNqQnUMi"},"7":{"1":{"9":{"1":4.0,"2":122,"3":"Chocolate Mousse Torte","4":["1 pouch (10.25 oz) Betty Crocker™ fudge brownie mix Save $","1/4 cup vegetable oil Save $","1/4 cup water Save $","1 egg Save $","2 bags (11.5 oz each) semisweet chocolate chunks (3 1/2 cups) Save $"],"5":"You've gotta try this fudgy brownie with creamy mousse all wrapped up into  one deliciously decadent ...","6":"5 hr 10 min","7":"16"}}}},{"1":{"1":"https://www.recipetineats.com/wp-content/uploads/2018/09/Chocolate-Mousse_9.jpg","3":900,"4":1125},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSRTllyEUXSRStN0A_5HquR1O4e6RpolMgGA3vXMK2tzXjWIoWj","3":160,"4":200},"3":{"1":"RecipeTin Eats","2":"https://www.recipetineats.com/chocolate-mousse/","3":"Chocolate Mousse","4":"Chocolate Mousse in glasses topped with a dollop of cream and chocolate  shavings, ready to","10":"VbHnKQYaoxNJTA"},"5":{"1":"DCTUOiQAUcmrbAs"},"7":{"1":{"9":{"1":5.0,"2":18,"3":"Chocolate Mousse","4":["3 eggs ((~55g/2 oz each))","125 g / 4.5 oz dark chocolate (, bittersweet / 70% cocoa (Note 1))","10 g / 0.3 oz / 2 tsp unsalted butter","125 ml / 1/2 cup cream (, full fat (Note 2))","35 g / 3 tbsp caster sugar ((superfine white sugar))"],"5":"Recipe video above. Light and airy yet rich, the iconic Chocolate Mousse is  actually quite straight ...","6":"20 min","7":"4"}}}},{"1":{"1":"https://thebakermama.com/wp-content/uploads/2017/12/fullsizeoutput_b92f.jpg","3":800,"4":1200},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSBGlZFrrxhyoI7vVCRXpvPnSEFZd5QRtWLyVxO5gwhuVcmGNPY","3":133,"4":200},"3":{"1":"The BakerMama","2":"https://thebakermama.com/recipes/triple-chocolate-mousse-cheesecake/","3":"Triple Chocolate Mousse Cheesecake","4":"Triple Chocolate Mousse Cheesecake","10":"SnmceCuTRPAycF"},"5":{"1":"nKaKgkQmJyQDnYx"},"7":{"1":{"9":{"3":"Triple Chocolate Mousse Cheesecake","4":["20 Oreo cookies","4 tablespoons (1/2 stick) unsalted butter, melted","2 (8-ounce) packages cream cheese, at room temperature","⅔ cup sugar","⅔ cup sour cream"],"5":"Get your chocolate fix with this Triple Chocolate Mousse Cheesecake that  will wow the crowd for any ...","6":"1 hr 30 min","7":"One 9-inch Cheesecake (12 slices)"}}}},{"1":{"1":"https://www.ihearteating.com/wp-content/uploads/2016/06/chocolate-mousse-1000-wm.jpg","3":1000,"4":1545},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTkg6HRrZv_PdRsTXh7mQ1-sIu5sdTrsD47NOoaLPJh06-TJ1HMDA","3":129,"4":200},"3":{"1":"I Heart Eating","2":"https://www.ihearteating.com/chocolate-mousse-recipe/","3":"Chocolate Mousse","4":"Chocolate Mousse Recipe","10":"AmryhXhIwGlTTu"},"5":{"1":"bhcysqtAhQCxRBI"},"7":{"1":{"9":{"1":5.0,"2":3,"3":"Chocolate Mousse","4":["4 ounces bittersweet baking chocolate (60% cacao, chopped)","4 ounces semisweet baking chocolate (chopped)","1 1/2 cups mini marshmallows","1/2 cup milk","2 1/2 cups heavy cream"],"5":"Light and creamy chocolate mousse","6":"10 min","7":"10 servings"}}}},{"1":{"1":"https://media4.s-nbcnews.com/j/newscms/2018_17/1334122/chocolate-mousse-today-180423-tease_6844913865e80416b7725903c4c7cc1d.today-inline-large.jpg","3":700,"4":394},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRflwrv45xsumf5B5_bw0R9XQlW-zazCnn9Mhwf1BGUKN5yd0O5","3":200,"4":112},"3":{"1":"Today Show","2":"https://www.today.com/recipes/nigella-lawson-s-chocolate-olive-oil-mousse-recipe-t127449","3":"Nigella Lawson's Chocolate Olive Oil Mousse","4":"TODAY","10":"gghNMUXymYQvqp"},"5":{"1":"pAkxRTmVUHIwFVx"},"7":{"1":{"9":{"1":3.71875,"2":32,"3":"Nigella Lawson's Chocolate Olive Oil Mousse","4":["6 ounces bittersweet chocolate, preferably 70% cocoa solids, roughly chopped","7 tablespoons extra virgin olive oil","4 large eggs, at room temperature, separated","1 pinch, plus 1/4 teaspoon sea salt flakes","1/4 cup superfine sugar"],"5":"You don't need to turn on the oven to make this sweet, easy and deeply  chocolatey treat."}}}},{"1":{"1":"http://www.notenoughcinnamon.com/wp-content/uploads/2018/02/A-rich-and-silky-healthy-chocolate-mousse-made-with-a-22secret22-ingredient-%E2%80%93-avocado.-Super-easy-to-make-and-perfect-for-Valentines-Day-Vegan-refined-sugar-free-1.jpg","3":800,"4":1200},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRFF0p8GA87czK48anmffnMfkYWuaSnmkBIQGV2JANtC-Xol7V2fw","3":133,"4":200},"3":{"1":"Not Enough Cinnamon","2":"https://www.notenoughcinnamon.com/healthy-avocado-chocolate-mousse/","3":"Healthy Avocado Chocolate Mousse","4":"A rich and silky healthy chocolate mousse made with a secret ingredient –  avocado. Super","10":"ytDhNkolXKLxrT"},"5":{"1":"VyGFADafQvGeeOG"},"7":{"1":{"9":{"1":5.0,"2":6,"3":"Healthy Avocado Chocolate Mousse","4":["4 oz - 120 g dark or semisweet chocolate, roughly chopped (you can also use  dark chocolate chips)","2 large ripe avocados (about 8 oz - 225 g each), halved and pitted.","3 tbsp unsweetened cocoa powder","1/4 cup almond milk (or your favorite milk)","1 tsp pure vanilla extract"],"5":"A rich and silky healthy chocolate mousse made with a \"secret\" ingredient –  avocado. Super easy to ...","6":"2 hr","7":"4"}}}},{"1":{"1":"https://www.browneyedbaker.com/wp-content/uploads/2013/04/chocolate-mousse-34-600.jpg","3":600,"4":889},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSaWSLB9Ts2EbM91_3zSx8pgPzf_x9OL6kFP5X_ca3Ugt5vcBAy5A","3":134,"4":200},"3":{"1":"Brown Eyed Baker","2":"https://www.browneyedbaker.com/chocolate-mousse-recipe/","3":"Dark Chocolate Mousse","4":"Dark Chocolate Mousse Recipe","10":"nmptWAfCYnJDno"},"5":{"1":"JAntLcGdsxJmiqL"},"7":{"1":{"9":{"3":"Dark Chocolate Mousse","4":["8 ounces bittersweet chocolate (60% cacao), finely chopped","5 tablespoons water","2 tablespoons Dutch-process cocoa powder","1 tablespoon brandy","1 teaspoon instant espresso powder"],"5":"A fabulous recipe for classic chocolate mousse.","6":"3 hr 30 min","7":"6 to 8 servings"}}}},{"1":{"1":"https://www.runningtothekitchen.com/wp-content/uploads/2016/02/Paleo-Chocolate-Mousse-1.jpg","3":600,"4":900},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSfqPMOL-Lac3lKJI5YjgsS_DVLZOKqzQlKloR4VKClGPRjSqSu","3":133,"4":200},"3":{"1":"Running to the Kitchen","2":"https://www.runningtothekitchen.com/paleo-chocolate-mousse/","3":"Paleo Chocolate Mousse - Running to the Kitchen®","4":"This paleo chocolate mousse is decadent and creamy. It's topped with a  quick strawberry chia","10":"YeEQQIjcNBiSHI"},"5":{"1":"mAqvnPwpUuebaSd"}},{"1":{"1":"https://www.delscookingtwist.com/wp-content/uploads/2018/04/Dark-Chocolate-Mousse_1043b.jpg","3":1600,"4":2320},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRXp--t9ud0joIn-mnU8DeajJP8eCHiDEUpRhzho6wnM0vRXwyGHQ","3":137,"4":200},"3":{"1":"Del's cooking twist","2":"https://www.delscookingtwist.com/2018/04/17/dark-chocolate-mousse-the-one-and-only/","3":"Dark Chocolate Mousse (the one and only)","4":"Dark Chocolate Mousse","10":"CKhvAHDMsduJRj"},"5":{"1":"uEAVsXuOFtKbynA"},"7":{"1":{"9":{"3":"Dark Chocolate Mousse (the one and only)","4":["7 oz (200g) dark chocolate, at 60% cocoa","1 large Tablespoon (20g) salted butter","6 large eggs, whites and yolks apart","1 pinch of salt"],"5":"The one and only chocolate mousse I ever make. Just three ingredients, no  added sugar, and it's ...","6":"12 min","7":"4-6 servings"}}}},{"1":{"1":"https://hips.hearstapps.com/del.h-cdn.co/assets/18/10/1520286740-delish-strawberry-chocolate-mousse-cake-pinterest-still003.jpg?crop=0.999546485260771xw:1xh;center,top&resize=480:*","3":480,"4":719},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSqbPMc0kFlmM1Jt1exaJlR4xyXlorUszqLCRMNswhO500O8fHIrg","3":133,"4":200},"3":{"1":"Delish.com","2":"https://www.delish.com/cooking/recipe-ideas/recipes/a58500/strawberry-chocolate-mousse-cake-recipe/","3":"Strawberry Chocolate Mousse Cake","4":"Strawberry Chocolate Mousse Cake","10":"KvrLMxhNhLTjNu"},"5":{"1":"ptRLDVduVvnFFlW"},"7":{"1":{"9":{"3":"Strawberry Chocolate Mousse Cake","4":["Cooking spray, for pan","24 Oreos, crushed","6 tbsp. butter, melted","Pinch kosher salt","2 tsp. gelatin"],"5":"Impress everyone with this Strawberry Chocolate Mousse Cake from Delish.com.","6":"6 hr 30 min","7":"8-10"}}}},{"1":{"1":"https://www.simplyrecipes.com/wp-content/uploads/2005/10/chocolate-mousse-horiz-a-1800.jpg","3":1800,"4":1200},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQltJG3psfbGppJn0PErmPZohv2G8yav3UpThzPmjPpOzqBMuK0rQ","3":200,"4":133},"3":{"1":"Simply Recipes","2":"https://www.simplyrecipes.com/recipes/chocolate_mousse/","3":"Classic Chocolate Mousse","4":"Chocolate Mousse","10":"LNouTHKdMOycCp"},"5":{"1":"LRpylOyFmkAQMVv"},"7":{"1":{"9":{"1":5.0,"2":70,"3":"Classic Chocolate Mousse","4":["4 1/2 ounces bittersweet chocolate, finely chopped","2 Tbsp (1 ounce) unsalted butter, cubed","2 Tbsp espresso or very strong coffee (I used decaf espresso from a local  Starbucks)","1 cup cold heavy whipping cream","3 large eggs, separated*"],"5":"Chocolate mousse is a great dessert for entertaining because 1) it looks  pretty, 2) everyone gets ...","6":"8 hr 35 min","7":"Serves 5 to 8"}}}},{"1":{"1":"https://du7ybees82p4m.cloudfront.net/5954ce66d1cd02.64778504.jpg?width=910&height=512","3":910,"4":512},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQWCfvpEyu6fgnZVdGPOOL70Tuxoa8xk7b9yN5LO_QElmJOMJYc7Q","3":200,"4":112},"3":{"1":"Sorted Food","2":"https://sortedfood.com/recipe/chocolatemoussecakerecipe","3":"Triple Chocolate Mousse Cake","4":"","10":"myAAryDxieDtBP"},"5":{"1":"LNJudVEEKMwjVIR"},"7":{"1":{"9":{"3":"Triple Chocolate Mousse Cake","4":["100 ml water","1 tsp vanilla extract","70 g caster sugar","150 g unsalted butter","70 g soft brown sugar"],"5":"What's better than a chocolate mousse cake? A triple chocolate mousse cake!  Try this delicious ..."}}}},{"1":{"1":"https://www.barbarabakes.com/wp-content/uploads/2015/10/Chocolate-Mousse-Cups-Barbara-Bakes.jpg","3":640,"4":427},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRPJ0YD0gdjbG_RI-4XBf_oYs2nor4rOr6Nl1nCf0W2d-Xh2GXtiw","3":200,"4":133},"3":{"1":"Barbara Bakes","2":"https://www.barbarabakes.com/chocolate-mousse-cups-and-ubud-bali/","3":"Chocolate Mousse Cups and Ubud","4":"A pretty, ruffled chocolate cup filled with a rich, creamy milk chocolate  mousse topped","10":"cgoLLugSFUfoRv"},"5":{"1":"TNTlYSgeuvompMV"},"7":{"1":{"9":{"3":"Chocolate Mousse Cups and Ubud","5":"A pretty, ruffled chocolate cup filled with a rich, creamy milk chocolate  mousse topped with a sweet ...","7":"8 servings"}}}},{"1":{"1":"https://i1.wp.com/cafedelites.com/wp-content/uploads/2018/01/Low-Carb-Double-Chocoloate-Mousse-Coconut-IMAGE-22.jpg?resize=980%2C1470&ssl=1","3":980,"4":1470},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR4uZa1UWLSlYEd0JPPgBQP_h0SdFU65SzmdWufd1XpQrpqxz7zHQ","3":133,"4":200},"3":{"1":"Cafe Delites","2":"https://cafedelites.com/3-ingredient-double-chocolate-mousse-low-carb/","3":"3-Ingredient Double Chocolate Mousse (Low Carb) + VIDEO ...","4":"3-Ingredient Double Chocolate Mousse (Low Carb and Dairy Free) | http:","10":"iENUfhBLxcKFBT"},"5":{"1":"rvfaeHHmMinDFQn"}},{"1":{"1":"https://i1.wp.com/myvibrantkitchen.com/wp-content/uploads/2017/12/vegan-aquafaba-easy-fluffy-chocolate-mousse-1-1.jpg?resize=900%2C1350","3":900,"4":1350},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTQM6xf7BEk6-koJKGbwy9NFbgwbAVWQ0dyn6dSy7ngOoaNh_XAvQ","3":133,"4":200},"3":{"1":"My Vibrant Kitchen","2":"http://myvibrantkitchen.com/easy-vegan-aquafaba-chocolate-mousse/","3":"Easy Vegan Aquafaba Chocolate Mousse","4":"Easy Vegan Aquafaba Chocolate Mousse","10":"GQjqdpLHCxFfan"},"5":{"1":"BYOHYQHTrMWrfGK"},"7":{"1":{"9":{"1":4.5,"2":2,"3":"Easy Vegan Aquafaba Chocolate Mousse","4":["70 ml soy milk or coconut milk","185 g dairy-free dark chocolate","240 ml chickpea water (aka aquafaba)","½ tsp lemon juice (optional)","1 Tbsp white caster sugar"],"5":"This post has been along time coming… I’ve lost count of all the times I’ve…","6":"25 min","7":"4-5"}}}},{"1":{"1":"https://cdn.cpnscdn.com/static.coupons.com/ext/kitchme/images/recipes/800x1200/no-bake-death-by-chocolate-mousse-pie_44591.jpg","3":800,"4":1200},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQog0BDyBHjvza7PY32qBbhNfsldmZoM4m6VBfWVmuuJV2jToJKHw","3":133,"4":200},"3":{"1":"KitchMe","2":"http://www.kitchme.com/recipes/no-bake-death-by-chocolate-mousse-pie","3":"No Bake Death by Chocolate Mousse Pie","4":"","10":"UmAfDvWwIqwEuv"},"5":{"1":"UHplnYftdTJtbmk"},"7":{"1":{"9":{"3":"No Bake Death by Chocolate Mousse Pie","4":["21 cream filled chocolate sandwich cookies, such as Oreo","1⁄4 cup butter, melted","1 cup heavy cream,","1 package (12 oz) semi-sweet chocolate chips,","1 tsp vanilla extract,"],"5":"Recipe including course(s): Dessert; and ingredients: butter, chocolate  sandwich cookies, heavy ...","6":"30 min","7":"Serves 8"}}}},{"1":{"1":"https://www.daringgourmet.com/wp-content/uploads/2017/12/White-Chocolate-Mousse-6-cropped.jpg","3":1024,"4":736},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQSaOIXpH0XPJzc22BR6NEoEcb8IS8-akAT4nPmoODOgGpBtl5VTQ","3":200,"4":143},"3":{"1":"The Daring Gourmet","2":"https://www.daringgourmet.com/easy-white-chocolate-mousse/","3":"Easy White Chocolate Mousse","4":"... festive or special occasion, give this Easy White Chocolate Mousse a  try!","10":"xcyoPPhgKVJyHy"},"5":{"1":"xrhvLuXEKqVrkeM"},"7":{"1":{"9":{"1":5.0,"2":2,"3":"Easy White Chocolate Mousse","4":["2 cups heavy whipping cream","12 ounces white chocolate chips or bar broken into chunks","3 tablespoons powdered (confectioner's) sugar","Edible Glitter, optional ((for sprinkling))"],"5":"Easy, quick and classy, this deliciously rich and creamy White Chocolate  Mousse makes an elegant ...","7":"8 servings"}}}},{"1":{"1":"https://i1.wp.com/www.feastingonfruit.com/wp-content/uploads/2017/02/Chocolate-Mousse-Cake-8.jpg?resize=980%2C1470&ssl=1","3":980,"4":1470},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQMf6veD5XuruR71A-tJ3ySKIB1Cs10emN7IB42qDYz_MDwaGNM","3":133,"4":200},"3":{"1":"Feasting on Fruit","2":"https://www.feastingonfruit.com/chocolate-mousse-cake/","3":"Chocolate Mousse Cake","4":"Low-Fat Chocolate Mousse CakeSkip to Recipe","10":"lmMUDWOwAnEMvJ"},"5":{"1":"SnlTUklXjjOGHkx"},"7":{"1":{"9":{"1":4.800000190734863,"2":12,"3":"Chocolate Mousse Cake","4":["2 cups almonds","2 tbsp maple syrup","1 tbsp water (if needed)","1 cup baked and mashed sweet potato","1 cup Medjool dates"],"5":"This insanely decadent Chocolate Mousse Cake may taste like fudge frosting  but is made from just a ...","6":"1 hr 5 min","7":"6 \" round cake"}}}},{"1":{"1":"https://static01.nyt.com/images/2015/10/26/dining/26COOKING-FLOURLESSCHOCCAKE1/26COOKING-FLOURLESSCHOCCAKE1-articleLarge.jpg","3":600,"4":400},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQjBhgcxDj21rYQRKLe9Gg5evkd5jQOixJMy-VwlyHSj8KGa_KI","3":200,"4":133},"3":{"1":"NYT Cooking - The New York Times","2":"https://cooking.nytimes.com/recipes/11001-intense-chocolate-mousse-cake","3":"Intense Chocolate Mousse Cake","4":"Intense Chocolate Mousse Cake","10":"EbcrrHfipRSWqR"},"5":{"1":"fBQbuMkMKyLnDGP"},"7":{"1":{"9":{"1":5.0,"2":813,"3":"Intense Chocolate Mousse Cake","4":["10 ounces bittersweet chocolate","9 tablespoons unsalted butter","6 large eggs, room temperature and separated","Pinch of salt","¾ cup sugar"],"5":"There is very little that needs to be said about a chocolate mousse cake.  This one lives up to its ...","6":"1 hr 5 min","7":"One 9-inch cake"}}}},{"1":{"1":"https://www.tasteofhome.com/wp-content/uploads/2018/01/Triple-Chocolate-Mousse-Torte_EXPS_SDAM18_212092_C11_29_2b-696x696.jpg","3":696,"4":696},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcShzAmAXBRyn_Ha_oUg9dAvQ2mLbk6wdDAaOXA1AYdu8m_f3CeM","3":200,"4":200},"3":{"1":"Taste of Home","2":"https://www.tasteofhome.com/recipes/triple-chocolate-mousse-torte/","3":"Triple Chocolate Mousse Torte","4":"Triple Chocolate Mousse Torte","10":"lpqFjVlbVwUsmQ"},"5":{"1":"FXeXclSsYAkJYGJ"},"7":{"1":{"9":{"3":"Triple Chocolate Mousse Torte","4":["18 Oreo cookies","1/3 cup butter, melted","6 teaspoons unflavored gelatin, divided","3 tablespoons cold water, divided","5 ounces bittersweet chocolate, chopped"],"5":"When it's too hot to bake something sweet, but you're craving chocolate, my  triple chocolate mousse ...","6":"1 hr 55 min","7":"16 servings."}}}},{"1":{"1":"https://thelemonbowl.com/wp-content/uploads/2017/02/Vegan-Chocolate-Mousse-a-healthy-dessert-recipe.jpg","3":600,"4":900},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSFzpfvIEbn_mhVOAm9OjBWPF_H9NTJ1-vKJdUO3My1ZFFGbLhmAQ","3":133,"4":200},"3":{"1":"The Lemon Bowl","2":"https://thelemonbowl.com/vegan-chocolate-mousse/","3":"Vegan Chocolate Mousse","4":"Vegan Chocolate Mousse","10":"nexwCurfkLKRIu"},"5":{"1":"jlqYrUVtWGuHNgT"},"7":{"1":{"9":{"1":4.0,"2":3,"3":"Vegan Chocolate Mousse","4":["4 ounces bittersweet chocolate chips (60-70%) (or vegan chocolate chips)","3 ripe avocados (pitted)","1/2 cup full-fat coconut milk (or milk of choice)","1/4 cup cocoa powder","1 teaspoon vanilla"],"5":"This rich and creamy vegan chocolate mousse recipe is made with avocado and  topped with whipped ...","6":"10 min","7":"4"}}}},{"1":{"1":"https://4ebr313dmbeg4df5hm1uys8p-wpengine.netdna-ssl.com/wp-content/uploads/2014/03/chocolatemousse.jpg","3":570,"4":858},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTvzjlCDnc5wQiWcReLod0HYyWIHmZptf0xUR9G_d_kTHgBG59U","3":132,"4":200},"3":{"1":"Cookies & Cups","2":"https://cookiesandcups.com/easy-chocolate-mousse/","3":"Easy Chocolate Mousse","4":"Easy Chocolate Mousse in a jar","10":"phRcSUkOtBoamm"},"5":{"1":"YgYntDuGWruYycG"},"7":{"1":{"9":{"1":4.599999904632568,"2":19,"3":"Easy Chocolate Mousse","4":["2 eggs","1/4 cups granulated sugar","2 1/2 cups cold heavy whipping cream, divided","6 oz semi-sweet chocolate (about 1 cup semi-sweet chips)"],"5":"makes 8 servings","7":"serves 8"}}}},{"1":{"1":"https://www.chatelaine.com/wp-content/uploads/2017/12/chocolate-mousse-1.jpg","3":800,"4":800},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRN_vKJ6e5dD_T6QWbgKK9WcVGjmc90HcH-AQ5S4C_JGR9BRcTc","3":200,"4":200},"3":{"1":"Chatelaine","2":"https://www.chatelaine.com/recipe/desserts/chocolate-mousse-with-whipped-cream/","3":"Chocolate mousse with whipped cream","4":"IngredientsInstructionsNutrition","10":"nBaqtfTuCRvgTP"},"5":{"1":"auraBvchaAqAolJ"},"7":{"1":{"9":{"3":"Chocolate mousse with whipped cream","4":["100 g bittersweet chocolate, chopped (2/3 cup)","60 g semi-sweet chocolate, chopped (1/3 cup)","3 tbsp unsalted butter, cubed","1 tsp vanilla","1/4 tsp salt"],"6":"15 min","7":"8"}}}},{"1":{"1":"https://www.lifeloveandsugar.com/wp-content/uploads/2017/10/Baileys-Chocolate-Mousse-Brownie-Cake4.jpg","3":600,"4":900},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTosET9j-NPzteHftDDcr0sVQhS_bgH3tdUh1YK5UFwrV5OyGKT","3":133,"4":200},"3":{"1":"Life Love and Sugar","2":"https://www.lifeloveandsugar.com/2017/10/16/baileys-chocolate-mousse-brownie-cake/","3":"Baileys Chocolate Mousse Brownie Cake","4":"Baileys Chocolate Mousse Brownie Cake - a dense chocolate brownie topped  with Baileys chocolate ...","10":"MSYtxTYyAERGjI"},"5":{"1":"QdMTifpDBByVkpn"},"7":{"1":{"9":{"3":"Baileys Chocolate Mousse Brownie Cake","4":["1 1/2 cups (336g) unsalted butter, melted","2 cups (414g) sugar","2 tsp vanilla extract","6 tbsp Baileys Irish Cream","4 eggs"],"5":"This Baileys Chocolate Mousse Brownie Cake is our chocolate and Baileys  cake dreams come true! With ...","7":"12-15 Slices"}}}},{"1":{"1":"https://cookinglsl.com/wp-content/uploads/2017/02/baileys-mousse-1-1-660x925.jpg","3":660,"4":925},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQeV4NgUDvRBtYdRb_9EA5KjR95bQ2qg4osoxeDWhCBFMG-75h8","3":142,"4":200},"3":{"1":"Cooking LSL","2":"https://cookinglsl.com/easy-baileys-chocolate-mousse-recipe/","3":"Easy Baileys Chocolate Mousse Recipe","4":"Easy Baileys Chocolate Mousse Recipe","10":"epIkUtAcFpsbue"},"5":{"1":"iYUCCKccmaXMhHE"},"7":{"1":{"9":{"1":5.0,"2":1,"3":"Easy Baileys Chocolate Mousse Recipe","4":["3/4 cup Baileys (, divided)","2 cups heavy whipping cream (, divided)","200 grams / 1 1/4 cup semi-sweet chocolate ((or chocolate chips))","1 tbsp gelatin","1/4 cup cold water"],"5":"... - a boozy dessert for chocolate lovers. Made with Baileys Irish Cream.  Just in time for St ...","6":"25 min","7":"6"}}}},{"1":{"1":"https://beyondfrosting.com/wp-content/uploads/2017/03/Oreo-Chocolate-Mousse-Pie-029.jpg","3":600,"4":900},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR2IfvrAtLKO1wTECgB7eLcodLShil4OxELsIF0b8nW-KNji7AX","3":133,"4":200},"3":{"1":"Beyond Frosting","2":"https://beyondfrosting.com/2017/03/13/no-bake-oreo-chocolate-mousse-pie/","3":"No-Bake Oreo Chocolate Mousse Pie","4":"It's all about the layers with this No-Bake Oreo Chocolate Mousse Pie. The","10":"hDIMNfEVVEdIwl"},"5":{"1":"yKnwKkQbGCKVlfB"},"7":{"1":{"9":{"3":"No-Bake Oreo Chocolate Mousse Pie","4":["For the crust","2 pkgs Oreo Cookies (14.03 oz), divided","8 tablespoons unsalted butter","For the chocolate layer","1 tablespoons cold water"],"5":"It’s all about the layers with this No-Bake Oreo Chocolate Mousse Pie. The  thick Oreo crust is ...","6":"4 hr 30 min"}}}},{"1":{"1":"https://www.bbcgoodfood.com/sites/default/files/styles/recipe/public/recipe/recipe-image/2017/12/chocolate-mousse.jpg?itok=v4PsEZ95","3":500,"4":454},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRjqfdHQs0pRv0EAdRPIXtKXZSVydYrTaoC7sjoOlZxcrClTA60Ng","3":200,"4":181},"3":{"1":"BBC Good Food","2":"https://www.bbcgoodfood.com/recipes/easy-chocolate-mousse-","3":"Easy chocolate mousse","4":"Easy chocolate mousse","10":"tAvSFgdIXcWSdD"},"5":{"1":"RFFfGOUBWehRIwM"},"7":{"1":{"9":{"1":5.0,"2":1,"3":"Easy chocolate mousse","4":["150g 70% dark chocolate, plus extra to serve","6 egg whites","2 tbsp golden caster sugar","4 tbsp crème fraîcheand grated chocolate, to serve"],"5":"Make this classic chocolate dessert in minutes with just a few ingredients  – light yet delicious. ...","6":"7 min","7":"Serves 4"}}}},{"1":{"1":"https://static01.nyt.com/images/2018/05/08/dining/08COOKING-NOBAKEMOUSSE1/08COOKING-NOBAKEMOUSSE1-articleLarge-v2.jpg","3":600,"4":414},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR3_8y3xenuC37UJsbcl7eFzp4oNhvBM7n6pWeNH3FXCkmoKLVo","3":200,"4":137},"3":{"1":"NYT Cooking - The New York Times","2":"https://cooking.nytimes.com/recipes/1019316-no-bake-chocolate-mousse-bars","3":"No-Bake Chocolate Mousse Bars","4":"No-Bake Chocolate Mousse Bars","10":"jMfULOMAKMKyvc"},"5":{"1":"APAWdyGGVoPVGdK"},"7":{"1":{"9":{"1":4.0,"2":660,"3":"No-Bake Chocolate Mousse Bars","4":["18 whole graham crackers (about 9 1/2 ounces/269 grams)","8 tablespoons/113 grams unsalted butter (1 stick), melted","2 tablespoons granulated sugar","¼ teaspoon kosher salt","1 pound/454 grams semisweet chocolate, finely chopped"],"5":"Ethereal and ready to melt in your mouth, chocolate mousse bars are easy to  make and even easier to ...","6":"30 min","7":"24 servings"}}}},{"1":{"1":"https://www.simplystacie.net/wp-content/uploads/2015/09/Chocoholics-Chocolate-Mousse-Cake-wide.jpg","3":736,"4":552},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTc8X8ax7pAeyj8cUviUNQ0tGs1EHoM4ssApf6FCvCGZBb1VqdF","3":200,"4":149},"3":{"1":"Simply Stacie","2":"https://www.simplystacie.net/2015/11/chocoholics-chocolate-mousse-cake/","3":"Chocoholics Chocolate Mousse Cake","4":"Chocoholics Chocolate Mousse Cake - Luscious and rich, this dessert recipe  will satisfy your sweet","10":"qXNFdcwHLgSQcR"},"5":{"1":"PmBvFwnmYUMsLKV"},"7":{"1":{"9":{"3":"Chocoholics Chocolate Mousse Cake","5":"Luscious and rich, this Chocoholics Chocolate Mousse Cake will satisfy your  sweet tooth!","6":"45 min","7":"6"}}}},{"1":{"1":"https://food-images.files.bbci.co.uk/food/recipes/celebration_chocolate_26103_16x9.jpg","3":5760,"4":3240},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQEOqt14rbAy7SyDf5C8iZrqZu6nI8rYgUvQyI68tsGKb4nionf0Q","3":200,"4":112},"3":{"1":"BBC.com","2":"https://www.bbc.com/food/recipes/celebration_chocolate_26103","3":"Celebration chocolate mousse cake","4":"","10":"CWatRJQqmSvgYE"},"5":{"1":"kHcSSinPLWLfHpR"},"7":{"1":{"9":{"3":"Celebration chocolate mousse cake","4":["25g/1oz cocoa powder, plus extra for dusting","3 tbsp boiling water","100g/3½oz caster sugar","100g/3½oz self-raising flour","1 level tsp baking powder"],"5":"Mary Berry's rich, indulgent dessert is fit for a celebration and makes a  stunning centrepiece., ...","6":"12 hr 30 min","7":"Serves 8-10"}}}},{"1":{"1":"https://www.afarmgirlsdabbles.com/wp-content/uploads/2015/07/Dark-Chocolate-Mousse-Cups_AFarmgirlsDabbles_AFD-600x900.jpg","3":600,"4":900},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRgdqtv_Cj2AhDxF7cB2gOi1aEGwJWkFPraLwVhF0scdQbBZ32T","3":133,"4":200},"3":{"1":"A Farmgirl's Dabbles","2":"https://www.afarmgirlsdabbles.com/chocolate-mousse-cups-recipe/","3":"Chocolate Mousse Cups","4":"Chocolate Mousse Cups","10":"iEjeNoadQdnDKP"},"5":{"1":"MIMiGtNACwSGsPC"},"7":{"1":{"9":{"3":"Chocolate Mousse Cups","4":["1/2 c. cold heavy cream","1 tsp. pure vanilla extract","4 large egg yolks","1 T. butter, at room temperature","1/4 c. espresso or strong coffee, at room temperature"],"5":"With this recipe, anyone and everyone is able to make delicious,  savor-every-spoonful Chocolate ...","7":"6 servings"}}}},{"1":{"1":"https://www.spendwithpennies.com/wp-content/uploads/2013/01/Easy-Chocolate-Mousse-spendwithpennies-23.jpg","3":700,"4":1050},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR_CLPJ2xigxExPYAcr08k9EOf5vx_tpNB30RyhhqihMIHV_iQ5","3":133,"4":200},"3":{"1":"Spend with Pennies","2":"https://www.spendwithpennies.com/chocolate-mousse-in-1-minute/","3":"Easy Chocolate Mousse","4":"dessert cups filled with chocolate mousse, whipped cream and a raspberry on  top","10":"QTcuoXeToOLeBp"},"5":{"1":"sQhduDgpkeIFqJR"},"7":{"1":{"9":{"1":5.0,"2":1,"3":"Easy Chocolate Mousse","4":["1 box instant chocolate pudding mix (4 serving size)","2 tablespoons unsweetened cocoa powder","2 1/2 cups heavy cream (30-35% mf)","1 cup whipped topping (optional)"],"5":"A rich creamy chocolate dessert that takes just a couple of minutes to  prepare!","6":"2 min","7":"4 servings"}}}},{"1":{"1":"https://www.kunersfoods.com/wp-content/uploads/2017/10/ChocMousse2_720x478_72_RGB-515x342.jpg","3":515,"4":342},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS-y8NR-2I7fwSVMC0mQyM7dCTTK0H0JaxXTY_SXXneDd8AticffA","3":200,"4":132},"3":{"1":"Kuner's Foods","2":"https://www.kunersfoods.com/recipe/black-bean-chocolate-mousse/","3":"Black Bean Chocolate Mousse","4":"Black Bean Chocolate Mousse Servings: 5 (about 4oz each) Prep Time: 10  minutes Total Time: 1 hour 10 ...","10":"uKGicOGawSIaHx"},"5":{"1":"RQrBYmSDpOiEOnh"},"7":{"1":{"9":{"1":4.199999809265137,"2":5,"3":"Black Bean Chocolate Mousse","7":"5 (about 4oz each)"}}}},{"1":{"1":"https://www.halfbakedharvest.com/wp-content/uploads/2017/01/Chocolate-Lovers-Greek-Yogurt-Chocolate-Mousse-Cake-4.jpg","3":1200,"4":1800},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTVc47mXlT63i5lHx1nQ_OBA9aRTF7ITemEejQPK215gMzdI_xB","3":133,"4":200},"3":{"1":"Half Baked Harvest","2":"https://www.halfbakedharvest.com/chocolate-lovers-greek-yogurt-chocolate-mousse-cake/","3":"Chocolate Lovers Greek Yogurt Chocolate Mousse Cake.","4":"Chocolate Lovers Greek Yogurt Chocolate Mousse Cake | halfbakedharvest.com  @hbharvest","10":"iWycSGhrbDsnet"},"5":{"1":"oGRyjdfvlWJPpKW"},"7":{"1":{"9":{"1":3.7799999713897705,"2":18,"3":"Chocolate Lovers Greek Yogurt Chocolate Mousse Cake.","4":["1 cup raw walnuts","1/2 cup raw (unsweetened coconut flakes)","1 1/2 cups pitted (packed dates (about 10 ounces))","1/2 cup cacao powder or unsweetened cocoa powder","pinch of flaky sea salt"],"5":"Chocolate lovers...this one is for you.","6":"1 hr 43 min","7":"8 Servings"}}}},{"1":{"1":"https://images.food52.com/YFlDbJw8F8GFolGJepl1XXj5Un8=/753x502/eb5300fa-1862-4ec7-8e73-5da38c2a1638--IMG_8848_web.jpg","3":753,"4":502},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTMzy0H1PjQ7_6fYzOUPcVKIzwW4yc0ET3SzcF1pYH_0jZu7TaBmg","3":200,"4":133},"3":{"1":"Food52","2":"https://food52.com/recipes/73238-eggless-chocolate-mousse-cake","3":"Eggless chocolate mousse cake","4":"Eggless chocolate mousse cake","10":"OuRVdvQyJNFjIu"},"5":{"1":"FyvDAuHOSkXHVxg"},"7":{"1":{"9":{"3":"Eggless chocolate mousse cake","4":["CHOCOLATE CAKE","1 cup granulated sugar","3/4 cup all purpose flour","2 tablespoons all purpose flour","1/4 cup unsweetened cocoa powder"],"7":"Makes 6 mini cakes"}}}},{"1":{"1":"https://hungryhappenings.com/wp-content/uploads/2018/01/chocolate-mousse-cup-hearts-recipe-1.jpg","3":680,"4":680},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRQjD9OHvXLwUnN6Za9mGKLPTU8D0vUPIlNv5JcaU1XNIcw8ovRDw","3":200,"4":200},"3":{"1":"Hungry Happenings","2":"https://hungryhappenings.com/chocolate-mousse-cup-hearts/","3":"Chocolate Mousse Cup Hearts","4":"Chocolate Mousse Cup Hearts","10":"CTTGmjORhBeLnB"},"5":{"1":"CnaIBrYDIVYnYBP"},"7":{"1":{"9":{"3":"Chocolate Mousse Cup Hearts","4":["24 ounces melted and tempered pure dark chocolate or melted confectionery  coating/candy melts","3 tablespoons water","3 tablespoons sugar","3 large egg yolks","1/2 cup heavy whipping cream"],"5":"Chocolate heart shaped bowls filled with luxuriously smooth chocolate  mousse.","6":"35 min","7":"12"}}}},{"1":{"1":"https://flockler.com/thumbs/sites/192/jo_easy5_hero_cherries_chocolate_mousse_538_landscape_s600x600_c3467x2025_l0x190.jpg","3":600,"4":600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQA3S7YmPon_WNoASN_w3uVMr10QQjo_TAcYldF-5941POWlNXFag","3":200,"4":200},"3":{"1":"The Happy Foodie","2":"https://thehappyfoodie.co.uk/recipes/cherry-chocolate-mousse","3":"Cherry Chocolate Mousse","4":"Cherry Chocolate Mousse","10":"jXYXPYAtvXUoDt"},"5":{"1":"GHiNCjnUlImEjQr"},"7":{"1":{"9":{"3":"Cherry Chocolate Mousse","4":["200g dark chocolate (70%)","1 x 400g tin of black pitted cherries in syrup","200ml double cream","4 large eggs","2 tbsp golden caster sugar"],"5":"Jamie Oliver's recipe for Cherry Chocolate Mousse, from the book of his  Channel 4 series, Jamie's ...","6":"30 min"}}}},{"1":{"1":"https://www.cookingclassy.com/wp-content/uploads/2015/06/easy-chocolate-mousse9-srgb..jpg","3":575,"4":857},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRaxSGuYQTWN0IdkLiCm5bbCgB8yC-YSJBOgwmYrCWUl3lGV6II-A","3":134,"4":200},"3":{"1":"Cooking Classy","2":"https://www.cookingclassy.com/easy-chocolate-mousse/","3":"Easy Chocolate Mousse","4":"... Easy Chocolate Mousse | Cooking Classy ...","10":"cRfmXtkoQaNPij"},"5":{"1":"HKuHLnhAgfeTxUT"},"7":{"1":{"9":{"3":"Easy Chocolate Mousse","4":["3 1/2 cups mini marshmallows","1/4 cup salted butter (, diced into 1 tbsp pieces)","9 oz good quality semi-sweet chocolate (, chopped into small pieces)","1/4 cup hot water","1 cup heavy cream"],"5":"Yield: 6 servings","6":"50 min"}}}},{"1":{"1":"https://omgchocolatedesserts.com/wp-content/uploads/2017/07/Triple-Chocolate-Mouse-Cake-Minis-1.jpg","3":800,"4":1138},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT6kthHuIBjSaP2JLUjxI1Z1vlnK2P0g1RBkwwfY7DQetSR_YAE","3":140,"4":200},"3":{"1":"OMG Chocolate Desserts","2":"https://omgchocolatedesserts.com/triple-chocolate-mousse-cake-minis/","3":"Triple Chocolate Mousse Cake Minis","4":"Triple Chocolate Mousse Cake Minis are rich and decadent layered dessert  with brownie bottom, dark, ...","10":"OHvXlsLUnBRFyW"},"5":{"1":"gupsGQNOgSdbvFu"},"7":{"1":{"9":{"3":"Triple Chocolate Mousse Cake Minis","4":["1/2 cup unsalted butter","7 oz. quality semi-sweet chocolate-chopped","¾ cup granulated sugar","2 large eggs","1 teaspoon vanilla"],"5":"Chocolate lovers dream come true!!!Triple Chocolate Mousse Cake Minis are  rich and decadent layered ..."}}}},{"1":{"1":"https://truffle-assets.imgix.net/pxqrocxwsjcc_1ExNApZWGsM6EgqwoySYou_eggless-chocolate-mousse_landscapeThumbnail_en.jpeg","3":1920,"4":1080},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS5peaglYDX3baXp9UgU9SLARAbGBl_qHWcj1Ez_In2WrZ7l16erw","3":200,"4":112},"3":{"1":"Tastemade","2":"https://www.tastemade.com/videos/eggless-chocolate-mousse","3":"Eggless Chocolate Mousse","4":"","10":"aHQpAUdxysLqDE"},"5":{"1":"SFepbKWHigjGXwP"},"7":{"1":{"9":{"3":"Eggless Chocolate Mousse","4":["3 ounces dark chocolate (over 65 percent cacao content)","7 fluid ounces heavy cream, very cold","For plating:","Little Mason jars","One can coconut milk, frozen so cream separates to the top, for garnish"],"5":"Satisfy your chocolate addiction with this ridiculously easy mousse."}}}},{"1":{"1":"https://homecookingadventure.com/images/recipes/triple_chocolate_mousse_cake_main.jpg","3":635,"4":423},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR8sE2etmZ0WERxbuYUZmisFmy_QG5iPuDSSDL8HrzYWaJ549Jb","3":200,"4":133},"3":{"1":"Home Cooking Adventure","2":"https://www.homecookingadventure.com/recipes/no-bake-triple-chocolate-mousse-cake","3":"No-Bake Triple Chocolate Mousse Cake","4":"No-Bake Triple Chocolate Mousse Cake","10":"KbEUPKybruvwgj"},"5":{"1":"OvBJSbpjEucCXqd"},"7":{"1":{"9":{"3":"No-Bake Triple Chocolate Mousse Cake","4":["7 oz (200g) oreo cookies","4 tbsp (60g) butter, melted","5 oz (150g) semi-sweet chocolate","1/2 cup (120g) whipping cream","2/3 cup (160g) whipping cream (35% fat), chilled"]}}}},{"1":{"1":"https://cdn.apartmenttherapy.info/image/fetch/f_auto,q_45,w_600,h_750,c_fit,fl_strip_profile/https://s3.amazonaws.com/pixtruder/original_images/4292f1cd22e7a55c5c4b34e83dc164d78c62503d","3":500,"4":750},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRiy5TAVbUDNxzQZqFJcdSN3ni5mMS4PCN1Cm6UtXACsvKGtfaROA","3":133,"4":200},"3":{"1":"The Kitchn","2":"https://www.thekitchn.com/chrissy-teigen-chocolate-mousse-recipe-review-261645","3":"Chrissy Teigen's Three-Ingredient Chocolate Mousse with Salty Rice  Krispies–Hazelnut Crackle","4":"","10":"xTcuUtyOnbIiVX"},"5":{"1":"WgjVRQiSQDUBoJq"},"7":{"1":{"9":{"1":4.5,"2":17,"3":"Chrissy Teigen's Three-Ingredient Chocolate Mousse with Salty Rice  Krispies–Hazelnut Crackle","4":["1 cup good-quality chocolate chips or coarsely chopped chocolate (6 ounces)","1/3 cup whole milk","3/4 cup cold heavy cream","Oil, for the pan","2/3 cup granulated sugar"],"5":"You'll want to make this every night.","6":"15 min","7":"Serves 4"}}}},{"1":{"1":"https://www.tasteofhome.com/wp-content/uploads/2018/01/Orange-Chocolate-Mousse-Mirror-Cake_EXPS_THCOM17_210212_D09_12_2b-1-696x696.jpg","3":696,"4":696},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR6CYbfzoObEcoBYObETRy19c6O_FuZlIfT-eNs_vD8s-OqymCC7w","3":200,"4":200},"3":{"1":"Taste of Home","2":"https://www.tasteofhome.com/recipes/orange-chocolate-mousse-mirror-cake/","3":"Orange Chocolate Mousse Mirror Cake","4":"Orange Chocolate Mousse Mirror Cake","10":"bccutWebwVRlAR"},"5":{"1":"jHtuHqOpytcagyC"},"7":{"1":{"9":{"1":4.0,"2":1,"3":"Orange Chocolate Mousse Mirror Cake","4":["2 cups crushed Oreo cookies (about 20 cookies)","1 teaspoon grated orange zest","1/4 cup butter, melted","FILLING:","1 envelope unflavored gelatin"],"5":"A shiny, mirror-like orange glaze covers a chocolate mousse cake to create  a delicious show-stopping ...","6":"45 min","7":"16 servings."}}}},{"1":{"1":"https://thethingswellmake.com/wp-content/uploads/2013/07/15-two-ingredient-easy-chocolate-mousse-recipe-4.jpg","3":720,"4":1079},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTixzsisXR_ct7wced_BTTByvghActd5JzbabwBT6WETpC3wIrF","3":133,"4":200},"3":{"1":"Oh, The Things We'll Make!","2":"https://thethingswellmake.com/how-to-make-chocolate-mousse-two-types/","3":"Two Ingredient, Easy Chocolate Mousse Recipe","4":"This two ingredient, easy chocolate mousse can be whipped up in a matter of  minutes","10":"FdBXMwoEnGACQJ"},"5":{"1":"flsvDnvpdIFUYxE"},"7":{"1":{"9":{"1":3.75,"2":8,"3":"Two Ingredient, Easy Chocolate Mousse Recipe","4":["4 eggs","100 g chocolate"],"5":"This two ingredient, easy chocolate mousse can be whipped up in a matter of  minutes, and it's rich, ...","6":"25 min","7":"8 small servings"}}}},{"1":{"1":"https://cdn.thisiswhyimbroke.com/images/radioactive-uranium-ore-640x533.jpg","3":640,"4":533},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRlVDrWUi1LscguCB1Yj3yyVI_a1njoRRYb3IJ1DV7gP5cvS68Uow","3":200,"4":166},"3":{"1":"ThisIsWhyImBroke","2":"https://www.thisiswhyimbroke.com/radioactive-uranium-ore/","3":"Radioactive Uranium Ore","4":"","10":"tgCkyEelnhAMUx"},"5":{"1":"CGYCQOxeAVvJDdU"}},{"1":{"1":"https://i.ytimg.com/vi/3_7645Ep4Dg/maxresdefault.jpg","3":1920,"4":1080},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQA9FM_kk9sVeBrK649YPlhvBwnK-Tn5IHXrzJi_pUYsRQBqPpWpQ","3":200,"4":112},"3":{"1":"YouTube","2":"https://www.youtube.com/watch?v=3_7645Ep4Dg","3":"Radioactive Uranium ore, Rum jungle Northern Territory ...","4":"Radioactive Uranium ore, Rum jungle Northern Territory, Australia","10":"FuqIblHgNhtGnh"},"5":{"1":"hUMaBUtsTrmInKc"},"7":{"1":{"11":{"1":"Radioactive Uranium ore, Rum jungle Northern Territory, Australia","2":"Uranium ore specimen from Rum jungle country, Northern Territory. Tested  with a 3007a Dosimeter and Labgear fast Dekatron counter.","3":"2:42","4":"1374","5":"1420416000000","6":"rustymotor","7":"14","8":"7"}}}},{"1":{"1":"https://cdn.thisiswhyimbroke.com/images/fluorescent-uranium-ore-640x533.jpg","3":640,"4":533},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRKbqgNyMbbiki1a-c1dPOKvdBhH_M1GlbLZHjSAZcQKSgm3ALT","3":200,"4":166},"3":{"1":"ThisIsWhyImBroke","2":"https://www.thisiswhyimbroke.com/fluorescent-uranium-ore/","3":"Fluorescent Uranium Ore","4":"","10":"vDobLHxiyuxUJm"},"5":{"1":"ilUYbeQvEMSaiGq"}},{"1":{"1":"http://www.ansnuclearcafe.org/wp-content/uploads/2012/05/uranium-ore.png","3":374,"4":226},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRmU9YwfbSb3HA5fb6wEDVwLL4g7tFlg4kXkoSVmItr16PIDn45","3":200,"4":120},"3":{"1":"ANS Nuclear Cafe","2":"http://ansnuclearcafe.org/2012/05/19/105th-carnival-of-nuclear-energy-bloggers/uranium-ore-2/","3":"uranium ore | ANS Nuclear Cafe","4":"Uranium ore","10":"ucBMicCUggRoEY"},"5":{"1":"BdFrkpRGSIkHXya"}},{"1":{"1":"http://uraha.de/de/wp-content/uploads/2016/02/Uran_1_1_uraniumcircit.jpg","3":484,"4":350},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTYXbv-9XOvU7Be3K5-4KcMJbb_jWX88YgECOeR6kgbY1XUo1AlWA","3":200,"4":144},"3":{"1":"URAHA Foundation Germany eV","2":"http://uraha.de/de/?p=409&lang=en","3":"Uranium ore deposits – URAHA Foundation Germany e.V.","4":"Uraniumcircit (Photo: Lang)","10":"BSJPqVSgvBEbrQ"},"5":{"1":"MVxLPqbHMubLNSr"}},{"1":{"1":"https://cdn.thisiswhyimbroke.com/images/uranium-ore1-640x533.jpg","3":640,"4":533},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR1sJSAdreV-tpcQGvCDqxuJTzh9XYNRbqXtQsIyC-l4aBfyKHC","3":200,"4":166},"3":{"1":"ThisIsWhyImBroke","2":"https://www.thisiswhyimbroke.com/fluorescent-uranium-ore/","3":"Fluorescent Uranium Ore","4":"","10":"dqJIUarueXyCWj"},"5":{"1":"WVggkadJTcMCXgn"}},{"1":{"1":"https://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Torbernite_-_Cuneo%2C_Italia_01.jpg/220px-Torbernite_-_Cuneo%2C_Italia_01.jpg","3":220,"4":165},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTTgxEh0wD7ohE1CVBSCVwbHqFrCuGXpZYfaVNWaS_C6su6PoxEFA","3":200,"4":150},"3":{"1":"Wikipedia","2":"https://en.wikipedia.org/wiki/Uranium_ore","3":"Uranium ore - Wikipedia","4":"Torbernite, an important secondary uranium mineral","10":"iWOIIHWFYNlcfq"},"5":{"1":"vYhTmBdaSUrGAkL"}},{"1":{"1":"http://unitednuclear.com/images/oregenerica.jpg","3":500,"4":424},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRfr9T5f37v30ppVmlZD8YQozfb5WBC1GA5gHlrCkNxi24GgBlA","3":200,"4":169},"3":{"1":"United Nuclear","2":"http://unitednuclear.com/index.php?main_page=product_info&products_id=460","3":"Generic Uranium Ore, range 'A ' 1,000 to 3,000 CPM : United ...","4":"Generic Uranium Ore, range 'A ' 1,000 to 3,000 CPM","10":"AqIrNMrWQlnvWt"},"5":{"1":"VqdNlIqLFBgvaJP"}},{"1":{"1":"https://cna.ca/wp-content/uploads/2014/06/Uranium-ore-2.jpg","3":1444,"4":916},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQSoGKwXryzTIu5CLl-0KJgiJ-mJRBPTKNOJ_C6h12QuDPrATgOjQ","3":200,"4":126},"3":{"1":"Canadian Nuclear Association","2":"https://cna.ca/technology/energy/uranium-mining/","3":"Uranium mining - Canadian Nuclear Association","4":"Uranium ore","10":"IxNjLhyxSUqpUD"},"5":{"1":"mGuODpmVFesTMfq"}},{"1":{"1":"https://i.pinimg.com/originals/da/e7/31/dae731639771cc01af9baf342af42e5b.jpg","3":400,"4":315},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQJXZB6Uoa72FIyOu687kMmo8CBlk32eFN1ywlmN03VJrTrqtl10Q","3":200,"4":157},"3":{"1":"Pinterest","2":"https://www.pinterest.com/pin/397935317044389548/","3":"Uranium ore! | christmas list | Pinterest | Mushroom fungi","4":"Uranium ore!","10":"YClYGRtfYuKJak"},"5":{"1":"dSyPSaEeHVWDqfI"}},{"1":{"1":"http://www.sott.net/image/s13/269853/full/Uraniumore.jpg","3":640,"4":409},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSGNSiJrU5IjB9SD-lavkngAd7vYEVpFm7umnqTqQPkObwJ-2C0","3":200,"4":127},"3":{"1":"Sott","2":"https://www.sott.net/article/302699-Truck-carrying-uranium-ore-catches-fire-near-Illinois-nuclear-plant","3":"Truck carrying uranium ore catches fire near Illinois nuclear ...","4":"uranium ore","10":"WlVtKUAhLJNfhk"},"5":{"1":"QOEQBiRDmPrVWBF"}},{"1":{"1":"http://unitednuclear.com/images/oregenericc.jpg","3":500,"4":374},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQreIUjsDelu90Hrb-2tdtoxvNQoBd3xdADZ1b_ybbmFX547dTX","3":200,"4":149},"3":{"1":"United Nuclear","2":"http://unitednuclear.com/index.php?main_page=product_info&products_id=462","3":"Generic Uranium Ore, range 'C' 5,500 to 7,000 CPM : United ...","4":"Generic Uranium Ore, range 'C' 5,500 to 7,000 CPM","10":"njnvvBUVetEuQS"},"5":{"1":"bDBBAxsHfTAYina"}},{"1":{"1":"https://www.sciencelearn.org.nz/system/images/images/000/001/928/full/A-lump-of-uranium-ore20160913-2996-18tz440.jpg?1522304554","3":350,"4":233},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQxCEaTAsqIuSl67rkGv4MI8Ju45c73JGkOHJbQXTt-3AncL-JrVg","3":200,"4":133},"3":{"1":"Science Learning Hub","2":"https://www.sciencelearn.org.nz/images/1928-a-lump-of-uranium-ore","3":"A lump of uranium ore — Science Learning Hub","4":"A lump of uranium ore","10":"EiNQYOwJthGmeV"},"5":{"1":"bELJSUXdwPDGErp"}},{"1":{"1":"https://www.atomicheritage.org/sites/default/files/Shinkolobwe%20Uranophane.jpg","3":600,"4":542},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQnRaRstptBcxVfjvPstHfsAlobXzGAgOWHmKRy85UYnRw7h1CDzw","3":200,"4":180},"3":{"1":"Atomic Heritage Foundation","2":"http://www.atomicheritage.org/history/combined-development-trust","3":"Combined Development Trust | Atomic Heritage Foundation","4":"... was an effort spearheaded by General Leslie Groves to control the world  market of uranium ore.","10":"GXposUWyOYUjOA"},"5":{"1":"MLrJwcEqglWkjHP"}},{"1":{"1":"https://www.researchgate.net/profile/Harald_Dill/publication/225633139/figure/fig1/AS:302565414719493@1449148624739/Yellow-uranium-ore-minerals-a-Aggregates-of-slender-prisms-of-brown-b-uranophane.png","3":733,"4":547},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSEKjfsWqMGl4hFqfGy-lzXKWwBoYh6wOaNO3N0cRNBgr6QZUe4","3":200,"4":149},"3":{"1":"ResearchGate","2":"https://www.researchgate.net/figure/Yellow-uranium-ore-minerals-a-Aggregates-of-slender-prisms-of-brown-b-uranophane_fig1_225633139","3":"Fig. 5 Yellow uranium ore minerals. a Aggregates of slender ...","4":"5 Yellow uranium ore minerals. a Aggregates of slender prisms of brown β  -uranophane.","10":"rmDEmetocgXAKg"},"5":{"1":"dvPqyYaaipTTMAV"}},{"1":{"1":"https://images-na.ssl-images-amazon.com/images/I/51LrKbS8ajL._SX342_.jpg","3":342,"4":323},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR3RP2p3i33znUvJ6fbjNFc9-qYwYGO1tu1wu0CSeqQVabLJG6ZiA","3":200,"4":188},"3":{"1":"Amazon.com","2":"https://www.amazon.com/Images-SI-Uranium-Ore/dp/B000796XXM","3":"Amazon.com: Uranium Ore: Industrial & Scientific","4":"Uranium Ore","10":"bhYHaPCiSXkTvX"},"5":{"1":"onKaEPQLbBfVatM"},"7":{"1":{"10":{"1":3.5,"2":1293,"3":"Uranium Ore","4":"Images SI","5":"Radioactive sample of uranium ore. The ore sample material is Naturally  Occurring Radioactive Materials (NORM). Counts Per Minute (CPM) activity  rate ...","6":true,"7":39.95000076293945,"8":"USD"}}}},{"1":{"1":"https://c8.alamy.com/comp/BKJ16C/uranium-ore-rocks-west-cornwall-BKJ16C.jpg","3":1300,"4":956},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRYlZK2UaapmUqrLpDu70rVzqTT6NA61fAeyCo317iFFtPshmHW","3":200,"4":146},"3":{"1":"Alamy","2":"https://www.alamy.com/stock-photo-uranium-ore-rocks-west-cornwall-29284932.html","3":"Uranium ore; rocks; west Cornwall Stock Photo: 29284932 - Alamy","4":"Uranium ore; rocks; west Cornwall","10":"lJAXaGnSHpRfoU"},"5":{"1":"JBRendfBGTuTvxW"}},{"1":{"1":"https://i.ytimg.com/vi/DBXrr7N9kKs/maxresdefault.jpg","3":1304,"4":1032},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQBXs9nco7zuFLKLk-tNGc9ZuMLjsra9buptZfLoNGXNW113UEW","3":200,"4":158},"3":{"1":"YouTube","2":"https://www.youtube.com/watch?v=DBXrr7N9kKs","3":"HOW IT WORKS: Uranium Deposits - YouTube","4":"","10":"iBejAnpsixRNpa"},"5":{"1":"EIPCUcvIBEVlmhd"},"7":{"1":{"11":{"1":"HOW IT WORKS: Uranium Deposits","2":"The formation of uranium deposits in the earth is explained and where to  find them.","3":"24:01","4":"145842","5":"1404864000000","6":"DOCUMENTARY TUBE","7":"337","8":"96"}}}},{"1":{"1":"https://antinuclearinfo.files.wordpress.com/2013/05/uranium-ore.gif?w=300&h=229","3":300,"4":229},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ8T_qLbyYQkzuowvWo8HBjwL-HAwWXhc6Lloi8ubq7NxSAJPn9","3":200,"4":152},"3":{"1":"Nuclear-News.net","2":"https://nuclear-news.net/2015/07/10/investigation-at-last-into-radioactive-pollution-of-johannesburg-from-uranium-mining/","3":"Investigation at last into radioactive pollution of ...","4":"Investigation at last into radioactive pollution of Johannesburg, from uranium  mining","10":"HnrxEBILvQkpOy"},"5":{"1":"nRucRoeKfJXqFxP"}},{"1":{"1":"http://www.cca.org/blog/images/uranium-ore.jpg","3":1000,"4":665},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS_uexaGHzyyA8K0Qm2td_dIcrgvTmcOFPyLDcphsR4gpJoxeI-","3":200,"4":133},"3":{"1":"Dave Fischer Weblog","2":"http://www.cca.org/blog/20120305-Uranium-Ore.shtml","3":"Dave Fischer Weblog","4":"Uranium Ore.","10":"RkChWglXYuHiCm"},"5":{"1":"LforPPQgUJdQwtW"}},{"1":{"1":"https://www.miningafrica.net/wp-content/uploads/2016/08/Gummite-Uraninite-Zircon-62299.jpg","3":600,"4":493},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR8Em1d_798dXwXjgbatsQuQ56eeOmcKHmXeCu1cDObKXlJgwIqWA","3":200,"4":163},"3":{"1":"Mining Africa","2":"https://www.miningafrica.net/natural-resources-africa/mining-uranium-in-africa/","3":"Mining Uranium in Africa","4":"It only became known that Uranium is radioactive in the 1890s. The French  physicist Antoine Henri ...","10":"BEtTejSuTPBcBv"},"5":{"1":"fwMhNLexWVpLyHL"}},{"1":{"1":"http://uraha.de/de/wp-content/uploads/2016/02/Uran_1_1_torbernite.jpg","3":476,"4":331},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS079SrqlTpBo1n1dmw30F4aV154GvSSPPjm0f4lx2-ODMaw_lQ","3":199,"4":139},"3":{"1":"URAHA Foundation Germany eV","2":"http://uraha.de/de/?p=409&lang=en","3":"Uranium ore deposits – URAHA Foundation Germany e.V.","4":"Torbernite, an important secondary uranium mineral (Photo: Aangelo)","10":"QKcgvUhHbwCTrJ"},"5":{"1":"oxDhPBfwnEUdPAq"}},{"1":{"1":"http://unitednuclear.com/images/oregenericb.jpg","3":500,"4":412},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRouW9zQOLSAsQ7gTV6GskfzJRe0YE3xwtSmHRrNdORK7pSUNVi","3":200,"4":165},"3":{"1":"United Nuclear","2":"http://unitednuclear.com/index.php?main_page=product_info&products_id=461","3":"Generic Uranium Ore, range 'B' 3,500 to 5,000 CPM : United ...","4":"Generic Uranium Ore, range 'B' 3,500 to 5,000 CPM","10":"wngjWxwrNFdpfY"},"5":{"1":"suepfIIYjVLClCr"}},{"1":{"1":"http://nevada-outback-gems.com/mineral_information/carnotite02.jpg","3":481,"4":385},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRLm3Pc7sHZ97mDx8dVQeW0IO-_R5J75qt5ddm2zgQrTpaRox9r6w","3":200,"4":160},"3":{"1":"Nevada Outback Gems","2":"http://nevada-outback-gems.com/Base_ores/Vanadium_ore.htm","3":"Photos of Natural Vanadium Ore, Vanadium minerals and specimens","4":"","10":"hJwcXLvYUKeohc"},"5":{"1":"fXvuWbanhBKavSa"}},{"1":{"1":"https://image.slidesharecdn.com/topic5-uraniumoredeposits-151123233751-lva1-app6891/95/uranium-ore-deposits-1-638.jpg?cb=1515416471","3":638,"4":479},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRp9WyI3pu5dWpY7YwW-Ye9kSrE3ekVEytb6SAXpjwHhbX1ODrKFw","3":200,"4":149},"3":{"1":"SlideShare","2":"https://www.slideshare.net/hzharraz/uranium-ore-deposits","3":"Uranium Ore Deposits","4":"Topic 5: Uranium Ore Deposits Hassan Z. Harraz hharraz2006@yahoo.com 2012  ...","10":"sRmdBVvmonxEpy"},"5":{"1":"rIlPJsVLKNgkDAX"}},{"1":{"1":"https://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Pitchblende_schlema-alberoda.JPG/220px-Pitchblende_schlema-alberoda.JPG","3":220,"4":164},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS7EEEtGcfbvzMoNY8dn5zY5aO6HmrB12mbY8LuQI8Kd_VmgmTfMg","3":200,"4":149},"3":{"1":"Wikipedia","2":"https://en.wikipedia.org/wiki/Uranium_ore","3":"Uranium ore - Wikipedia","4":"Uranium minerals[edit]","10":"RSiPQByYGTChQJ"},"5":{"1":"BLCmBsMpofnWKno"}},{"1":{"1":"http://www.ioffer.com/img/item/643/193/629/uraninite-pitchblende-uranium-ore-410-309e.jpg","3":580,"4":326},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcScBLPgjcic6PoDFMVuNxcGz6fXcJfTYTnoia2NbqeLz2l-fUcfgQ","3":200,"4":112},"3":{"1":"iOffer","2":"http://www.ioffer.com/i/uraninite-pitchblende-uranium-ore-410-643193629","3":"URANINITE PITCHBLENDE URANIUM ORE 410 for sale","4":"URANINITE PITCHBLENDE URANIUM ORE 410. «","10":"fCAEhnojVGLbXe"},"5":{"1":"UopSkuqGDGHgqYI"},"7":{"1":{"10":{"1":5.0,"3":"URANINITE PITCHBLENDE URANIUM ORE 410","5":"botryoidal uraninite , from Shaft 4 /Pribram , Czech Rep. , 410 µsv/h with  SBM-20@ 1cm , in 6x4cm box, paypal or skrill only, , Shipping Included!!!!  ...","6":false,"7":69.0,"8":"USD"}}}},{"1":{"1":"https://wiki.factorio.com/images/Electric_mining_drill-Uranium_ore.png","3":300,"4":300},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQFhukFSWQx7eHxhvZcQdOUT7H5iozgUhW1LXULfNXMNy_0TSpINw","3":200,"4":200},"3":{"1":"Official Factorio Wiki - Factorio","2":"https://wiki.factorio.com/Uranium_ore","3":"Uranium ore - Factorio Wiki","4":"Electric mining drill placed on uranium ore, pipe input/output visible.","10":"rpsNWfGUeFhSFH"},"5":{"1":"xSbqhsPwkeNJJwj"}},{"1":{"1":"https://d32ogoqmya1dw8.cloudfront.net/images/research_education/nativelands/Navajo_mine.jpg","3":1536,"4":1024},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTrK3Fn7KNQLi-7ex_egj4jahjSGX8MDMSr9jV6fJk8qnKWiRO7","3":200,"4":133},"3":{"1":"SERC - Carleton","2":"https://serc.carleton.edu/research_education/nativelands/navajo/uraniumdeposits.html","3":"Uranium Deposits","4":"","10":"OPpSedewOjOjFm"},"5":{"1":"IwasypKdPbbkdbm"}},{"1":{"1":"https://vignette.wikia.nocookie.net/feed-the-beast/images/3/3f/Uranium_Ore_Block.png/revision/latest?cb=20130214161003","3":256,"4":256},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ0h1LlRX57eB5Seh1DZ7kRPEZBjmdO6Oi2L2vET1ZuAi2LTsyV","3":200,"4":200},"3":{"1":"Feed The Beast Wiki - Fandom","2":"http://feed-the-beast.wikia.com/wiki/Uranium_Ore_(Block)","3":"Uranium Ore (Block) | Feed The Beast Wiki | FANDOM powered by ...","4":"Uranium Ore","10":"cjtOgJKjdrbTlM"},"5":{"1":"FHxEnUGGXWIXGvM"}},{"1":{"1":"http://www.abc.net.au/news/image/189970-3x2-940x627.jpg","3":940,"4":627},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR26n4Kg9hDPNpZZfP9sKNtDgObRqfssUpAuqj2V-48xc0HJhK0KQ","3":200,"4":133},"3":{"1":"ABC","2":"http://www.abc.net.au/news/2017-07-18/a-haul-truck-carries-uranium-ore/8718504","3":"A haul truck carries uranium ore - ABC News (Australian ...","4":"A haul truck carries uranium ore","10":"mxShrEfddOaeoO"},"5":{"1":"RBmTMcuVHqUjext"}},{"1":{"1":"https://carlwillis.files.wordpress.com/2008/05/lv_forsale.jpg","3":1000,"4":608},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT-6KvJESWkqhrOnLp92rsyDglAWSo25nQ6XgS7Pz8vLbYangT07w","3":200,"4":121},"3":{"1":"Special Nuclear Material - WordPress.com","2":"https://carlwillis.wordpress.com/2008/05/05/for-sale-uranium-ore/","3":"For Sale: Uranium Ore | Special Nuclear Material","4":"","10":"emOhCdmtvWuqxy"},"5":{"1":"KaHBJwWvAnWHxWU"}},{"1":{"1":"https://3c1703fe8d.site.internapcdn.net/newman/gfx/news/hires/2015/1-scientistsse.jpg","3":3654,"4":1998},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSPtwII-3qnD47udpLTwGERykilZ63nZpdyFngPEX_NSu8XB2ONZQ","3":200,"4":109},"3":{"1":"Phys.org","2":"https://phys.org/news/2015-01-scientists-ways-uranium-ore-legacy.html","3":"Scientists search for new ways to deal with US uranium ore ...","4":"Scientists search for new ways to deal with US uranium ore processing legacy","10":"fxhnuqMXKASHgD"},"5":{"1":"NXKnOHjeFeBlMhU"}},{"1":{"1":"https://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Pitchblende371.JPG/220px-Pitchblende371.JPG","3":220,"4":165},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR55Fad8E_lL6V6bCKaBdTczoSYdZVbCDBHajNr0O65HLmBr5GV","3":200,"4":150},"3":{"1":"Wikipedia","2":"https://en.wikipedia.org/wiki/Uranium_ore","3":"Uranium ore - Wikipedia","4":"Uranium ore (pitchblende in dolomite) from the vein-type deposit  Niederschlema-Alberoda","10":"DRckVycLowVDNu"},"5":{"1":"VDlQeLSNRXHBbsC"}},{"1":{"1":"http://www.republicoflakotah.com/wp-content/uploads/2010/03/ISL-Diagram2.gif","3":420,"4":293},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQxBQbzOxWVYByDlrNOJS2meHl-effFoxlYbokZmSyCQlqKINUXLw","3":199,"4":139},"3":{"1":"TU Freiberg","2":"https://tu-freiberg.de/umh-vii-2014","3":"Uranium Mining and Hydrogeology 2014 International Conference ...","4":"Session I: Uranium mining","10":"PQiLQrvMaQoOHn"},"5":{"1":"YUuAOodADCEBjAi"}},{"1":{"1":"https://images-na.ssl-images-amazon.com/images/I/51sOTDswZ0L._SX425_.jpg","3":425,"4":319},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSi0-trSU79rMckw3x4ZOwC1lQpTQNTqnyrRrDeKd8-3CL4VlYZzQ","3":200,"4":149},"3":{"1":"Amazon.com","2":"https://www.amazon.com/uranium-unrefined-uraninite-radiation-detector/dp/B00CQ9LLR4","3":"Rare earth uranium oxide, high grade unrefined uranium ore ...","4":"Rare earth uranium oxide, high grade unrefined uranium ore uraninite, for  Geiger counter &","10":"fpeVKHGKMYkVvG"},"5":{"1":"hMJKYgbarWYolsf"},"7":{"1":{"10":{"1":4.0,"2":69,"3":"Rare earth uranium oxide, high grade unrefined uranium ore uraninite, for  Geiger counter & radiation detector test source!","4":"LifeTech","5":"The rare earth uranium oxide, naturally high grade uranium ore contains  high concentration of uraninite which can be used to test your Geiger  counter, ...","6":true,"7":79.9000015258789,"8":"USD"}}}},{"1":{"1":"https://thumbs.dreamstime.com/b/uranium-ore-7968842.jpg","3":800,"4":642},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRfDCPo3aFV1FsQ-Co0GUw8rjQwkrlKTnVsmmbSqJLKC-OuYzMfKw","3":200,"4":160},"3":{"1":"Dreamstime.com","2":"https://www.dreamstime.com/stock-photography-uranium-ore-image7968842","3":"Uranium ore stock photo. Image of rock, industry, activity ...","4":"Uranium ore - isolated object on white background","10":"lFgPMffOrsdglO"},"5":{"1":"GAGCRvPsInlrCVp"}},{"1":{"1":"https://www.dnddice.com/media/catalog/product/cache/1/image/650x/613132e0f270af58849e99a6dbb00be2/m/a/marbled_nick_yellow.jpg","3":650,"4":655},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTWFIWTzKbGt_-X5vW437tZv8qB2KM0WIPIonWHMox4yfraI85s","3":199,"4":200},"3":{"1":"DnD Dice","2":"https://www.dnddice.com/sets-of-dice/uranium-ore-dice-set-opaque.html","3":"Uranium Ore Dice Set (Marbled) - Sets of Dice","4":"Uranium Ore Dice Set (Marbled)","10":"lDtobcULsHuDEs"},"5":{"1":"CUfvqkkkYhexTmG"}},{"1":{"1":"https://i.ebayimg.com/images/g/ZUAAAOSw8jVapWYd/s-l300.jpg","3":300,"4":281},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSLL-gQGDHliqAAkwizhTCbydcVOftQGPQw3rRqIgN7635H4oSc","3":200,"4":187},"3":{"1":"eBay","2":"https://www.ebay.com/itm/URANIUM-ORE-ELEMENT-92-COLLECTORS-SAMPLE-IN-JAR-5-0-to-6-0-GM-/153034952406","3":"URANIUM ORE, ELEMENT #92, COLLECTOR'S SAMPLE IN JAR, 5.0 to ...","4":"Image is loading URANIUM-ORE-ELEMENT-92-COLLECTOR-039-S-SAMPLE-","10":"mNpopJVFxQrnya"},"5":{"1":"iVvPpnldBUCGNXi"},"7":{"1":{"10":{"3":"Details about URANIUM ORE, ELEMENT #92, COLLECTOR'S SAMPLE IN JAR, 5.0 to  6.0 GM +","5":"URANIUM ORE, ELEMENT #92, COLLECTOR'S SAMPLE IN JAR, 5.0 to 6.0 GM + |  Collectibles, Rocks, Fossils & Minerals, Crystals & Mineral Specimens |  eBay!","7":6.5,"8":"USD"}}}},{"1":{"1":"https://blogs.sap.com/wp-content/uploads/2013/08/uranium_ore_256462.jpg","3":274,"4":184},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT-B4iVhhSn-aSVkwhaNBxj-EVvYpXqAot_xaFQl8zFaqpdtvwENA","3":200,"4":134},"3":{"1":"SAP Blogs","2":"https://blogs.sap.com/2013/08/03/uranium-mining/","3":"Uranium Mining | SAP Blogs","4":"About Uranium Uranium Ore.jpg","10":"FMUDYvtjGcwkkY"},"5":{"1":"tKaSxPOctyupeuH"}},{"1":{"1":"https://greentumble.com/wp-content/uploads/2016/11/Environmental-impacts-of-uranium-mining.jpg","3":800,"4":500},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTaNnLOEdRMnLDqAb99SNc7wfxtk58huSsUi4vinIsNrf7-PHw4gg","3":200,"4":124},"3":{"1":"Greentumble","2":"https://greentumble.com/environmental-impacts-of-uranium-mining/","3":"Environmental Impacts of Uranium Mining | Greentumble","4":"Environmental impacts of uranium mining","10":"mrFxmtNXvpHlNt"},"5":{"1":"KuerxbEKttWuPLV"}},{"1":{"1":"https://c1.staticflickr.com/3/2566/4058064866_ce4a2b2c53_b.jpg","3":1024,"4":768},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQvky2ZpyEH6n11HPYAXDRzG6dV1ljdU5jr9CL6vJSF_T_6kwa02g","3":200,"4":149},"3":{"1":"Flickr","2":"https://www.flickr.com/photos/bionerd/4058064866/in/pool-10372360@N00/","3":"pitchblende uranium ore blisters | very beautiful, big black ...","4":"... pitchblende uranium ore blisters | by bionerd23 ☢","10":"VTmkPJKhTRRdsW"},"5":{"1":"KTPrWoVlIutiblb"}},{"1":{"1":"http://energyeducation.ca/wiki/images/thumb/8/82/Openpit.jpg/300px-Openpit.jpg","3":300,"4":200},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQv2IpxKcOVjZRoPvYLl2RPSCYdJYo23xr4QQvY2HKf7VT7HoRj","3":200,"4":133},"3":{"1":"Energy Education","2":"http://energyeducation.ca/encyclopedia/Uranium_mining","3":"Uranium mining - Energy Education","4":"Uranium mining","10":"PSSeQtHLcKjsyy"},"5":{"1":"pdbvTOCwHmiiCNm"}},{"1":{"1":"https://www.wnti.co.uk/media/3990/1.jpeg","3":750,"4":562},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQiA78QEyJ33i6F2Yj3KXy_JaaEnAAcAXcB42oNpYA1CYwlQ3E6","3":200,"4":149},"3":{"1":"World Nuclear Transport Institute","2":"https://www.wnti.co.uk/media-centre/nuclear-fuel-cycle/uranium-mining-and-refining.aspx","3":"Uranium Mining and Refining | World Nuclear Transport Institute","4":"Uranium Ore Concentrate, Courtesy of the Nuclear Decommissioning Authority 3","10":"IWjAlvHXuPBbmR"},"5":{"1":"XAxhsMHqiMGnxOO"}},{"1":{"1":"https://geoinfo.nmt.edu/resources/uranium/images/upitmine.jpg","3":363,"4":236},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR4H1t_VZ9t1VuHddmc7crKQypetQIwqrCigzUVmE1HzZHvxAYZ","3":200,"4":129},"3":{"1":"New Mexico Bureau of Geology & Mineral Resources","2":"https://geoinfo.nmt.edu/resources/uranium/mining.html","3":"Uranium: How is it Mined?","4":"Rabbit Lake Mine","10":"jiWduexAsVAXgW"},"5":{"1":"CLeQJcVQBoFIagE"}},{"1":{"1":"https://wiki.factorio.com/images/thumb/Glow.png/300px-Glow.png","3":300,"4":288},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT1MSj1u7c97J9C2EtjqGIWe2EKHJ8rJ5EdAw6SQ4fxe4FjgMyNtQ","3":200,"4":192},"3":{"1":"Official Factorio Wiki - Factorio","2":"https://wiki.factorio.com/Uranium_ore","3":"Uranium ore - Factorio Wiki","4":"Uranium ore","10":"PcQGCwoVlQSrIY"},"5":{"1":"FPqpErYdeYDiUGO"}},{"1":{"1":"https://ground-force-training.s3.amazonaws.com/upload/user/image/M&M-Commodities-Uranium20170924192443101.jpg","3":920,"4":520},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRPz1yX-sSLLaN3o0YdR68gr_YkcMccvWjMoumhmTL04h9zTjND","3":200,"4":113},"3":{"1":"Ausenco","2":"http://www.ausenco.com/en/commodity-uranium","3":"Uranium Ore Mining, Processing, Production; Ausenco","4":"Uranium","10":"hlctXrnNGrVTPx"},"5":{"1":"ARHLSTwSQUCvDVa"}},{"1":{"1":"https://d32ogoqmya1dw8.cloudfront.net/images/research_education/nativelands/UraniumDeposits.jpg","3":1069,"4":696},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTqi77ywwiUP56AbW7lpI-ephJN9JpUDZRwLXjeeFtcr0DMKFkA","3":200,"4":130},"3":{"1":"SERC - Carleton","2":"https://serc.carleton.edu/research_education/nativelands/navajo/uraniumdeposits.html","3":"UraniumDeposits.jpg","4":"Uranium Deposits on the Navajo Nation","10":"RqykeJkdrEJoox"},"5":{"1":"qyToUXsGyIkStsP"}},{"1":{"1":"https://i.ytimg.com/vi/bCYiBXolKLg/maxresdefault.jpg","3":1280,"4":720},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRr6MOvrW_Z_bzPWGrYowSudjGz8BBDA48LVqROH57ksR6dQBef","3":200,"4":112},"3":{"1":"YouTube","2":"https://www.youtube.com/watch?v=bCYiBXolKLg","3":"Uraninite hunting - finding Uranium ore at shaft 4 - YouTube","4":"","10":"DfjhwMoDvFmhjw"},"5":{"1":"xSLsTRSSAwJXOeU"},"7":{"1":{"11":{"1":"Uraninite hunting - finding Uranium ore at shaft 4","2":"this is at the shaft #4 dump near Pribram /Czech Rep., Tube is SI-15BG,  Geiger counter is Mygeiger V2.0 with SBM-20 from rhelectronics.net *new  video*: https...","3":"10:24","4":"7888","5":"1431648000000","6":"weirdmeister inc.","7":"86","8":"17"}}}},{"1":{"1":"http://www.mining.com/wp-content/uploads/2016/09/namibias-new-uranium-mine-to-triple-countrys-output-by-2017.jpg","3":900,"4":505},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRFG-Dff9s5BHT2F1F6K6UjYae_OLK-y2vLBIDOSmIJit7IAWnOYg","3":200,"4":112},"3":{"1":"MINING.com","2":"http://www.mining.com/namibias-new-uranium-mine-triple-countrys-output-2017/","3":"Namibia's new uranium mine to triple country's output by 2017 ...","4":"Namibia's new uranium mine to triple country's output by 2017","10":"jxnEOGqQAmQeID"},"5":{"1":"IOpOLAIRwJAWxKU"}},{"1":{"1":"https://www3.epa.gov/radtown/images/uranium-ore-small.jpg","3":209,"4":188},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTg_rtmpXq9c9BUYEXHb9Y7V0kw6B_xV0735UXESJhESvyiYHO5","3":200,"4":179},"3":{"1":"EPA","2":"https://www3.epa.gov/radtown/uranium-mines-mills.html","3":"Uranium Mines and Mills | RadTown USA | US EPA","4":"Uranium ore.","10":"EnbXhrObjPNjlK"},"5":{"1":"MlWPlauEsaDgTqc"}},{"1":{"1":"http://www.walletwrecker.com/wp-content/uploads/2017/02/uranium-ore-paperweight.jpg","3":780,"4":690},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSDwWe9IuEuH7JtF6l36LPGt84oX1M30KMIR3Rtb3XW-JMd0b4L","3":200,"4":176},"3":{"1":"Cool Stuff","2":"http://www.walletwrecker.com/uranium-ore-paperweight/","3":"Uranium Ore Paperweight - WalletWrecker","4":"Uranium Ore Paperweight","10":"VTykOlfiIMxIEj"},"5":{"1":"ChvBQDrmkJAWaoA"}},{"1":{"1":"https://bloximages.chicago2.vip.townnews.com/azdailysun.com/content/tncms/assets/v3/editorial/8/ae/8aedbad9-4c22-51f9-a5a4-c3ea8515d944/59e2c68821afb.image.jpg","3":228,"4":341},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRnVE4UYV0Qs53XdLGrePAjB6TbFkXI_d2AgiaZ-I7AW70d2U7O","3":133,"4":200},"3":{"1":"Arizona Daily Sun","2":"http://azdailysun.com/news/local/new-uranium-mines-no-simple-answers/article_20522e2c-98ed-58c4-a6cf-93ee27da9aa2.html","3":"New uranium mines: no simple answers | Local | azdailysun.com","4":"Pinenut Mine underground","10":"qkNfYeDKPPEKYU"},"5":{"1":"IutbavLAJOjFHen"}},{"1":{"1":"https://c8.alamy.com/comp/M14C80/fort-davis-texas-uranium-ore-in-the-chihuahuan-desert-mining-heritage-M14C80.jpg","3":1300,"4":956},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcST-CQ0gKpU0YteBEcSBmB8Ev-LBuw-HuMgXJXxD80hNJ-HlGLFHw","3":200,"4":146},"3":{"1":"Alamy","2":"https://www.alamy.com/stock-photo-fort-davis-texas-uranium-ore-in-the-chihuahuan-desert-mining-heritage-172815776.html","3":"Fort Davis, Texas - Uranium ore in the Chihuahuan Desert ...","4":"Fort Davis, Texas - Uranium ore in the Chihuahuan Desert Mining Heritage  Exhibit at the Chihuahuan ...","10":"UBxpddAFAwRjgw"},"5":{"1":"AGIGVWDfGiJCbtH"}},{"1":{"1":"https://image.slidesharecdn.com/uraniumoredepositsinegypt-161030181530/95/uranium-ore-deposits-in-egypt-5-638.jpg?cb=1515416002","3":638,"4":479},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTnp6u3T7uXrv_Yibxe3DR1agjgkXYg_EGhM1yPJ8ZIV0MI-8zS","3":200,"4":149},"3":{"1":"SlideShare","2":"https://www.slideshare.net/hzharraz/uranium-ore-deposits-in-egypt","3":"URANIUM ORE DEPOSITS IN EGYPT","4":"","10":"WEgTtqKJfVTjNc"},"5":{"1":"LenKYmayTuHJGvq"}},{"1":{"1":"https://vignette.wikia.nocookie.net/starboundgame/images/f/f3/Uranium-0.png/revision/latest?cb=20150430191627","3":278,"4":274},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTRd0RMVJF-9eJ2p2QKYGwneLGVCf7koVrhrdMP3F0fTmwynjLH","3":200,"4":197},"3":{"1":"Starbound Wiki - Fandom","2":"http://starbound.wikia.com/wiki/Uranium_Ore","3":"Uranium Ore | Starbound Wiki | FANDOM powered by Wikia","4":"Uranium-0","10":"NAUrpgvWASmJnt"},"5":{"1":"JWELSnTbteHvAJV"}},{"1":{"1":"https://file.ejatlas.org/docs/Rossing-uranium-mine-near-008.jpg","3":460,"4":276},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTZgMEJmhy8irJjPAZWmgbkoURXeAImcsUXN-W-SnWU0rz5Zlxmhg","3":199,"4":119},"3":{"1":"EJAtlas","2":"https://ejatlas.org/conflict/rio-tintos-rossing-uranium-mine-namibia","3":"Rio Tinto's Rössing Uranium Mine, Namibia | EJAtlas","4":"Rio Tinto's Rössing Uranium Mine, Namibia","10":"OhVbJHbOaxpJTm"},"5":{"1":"yhFGyEGORtvxyiT"}},{"1":{"1":"https://thumbs3.ebaystatic.com/d/l225/m/mKiNHUomL_2vUOfQwaPTtAQ.jpg","3":225,"4":169},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQKRhLsXJdCdro31Ub7eNF_LhDdM1jfMcJqF35fpIOLtvUrBQiL","3":200,"4":150},"3":{"1":"eBay","2":"https://www.ebay.com/bhp/uranium-ore","3":"Uranium Ore: Crystals & Mineral Specimens | eBay","4":"RARE URANIUM Ore HAYNESITE type locale Repete Mine Blanding Utah LARGE!","10":"BmEyAvaFQTxYHs"},"5":{"1":"PRRWIHqYNnbEhku"}},{"1":{"1":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/Uranium_production_world.PNG/300px-Uranium_production_world.PNG","3":300,"4":132},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQWPwZFkWSmelETZtm3W8ytFo3f8MAkVQGVv9xR6g2poaYN6tebDQ","3":200,"4":88},"3":{"1":"Wikipedia","2":"https://en.wikipedia.org/wiki/Uranium_mining","3":"Uranium mining - Wikipedia","4":"World Uranium production in 2005.","10":"lsykkyWvdhGkhI"},"5":{"1":"DiIqNhbruIGsROR"}},{"1":{"1":"https://www.researchgate.net/profile/Tyler_Spano/publication/320569651/figure/fig1/AS:560662205210624@1510683694153/Example-of-uranium-ore-samples-and-their-associated-alteration-rinds-Great-Bear-Lake-and.png","3":850,"4":232},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQGakvvuKcktkpJwUfcIEetuPkAFoyaFJamqY9nG8KwajgWL66cTA","3":200,"4":54},"3":{"1":"ResearchGate","2":"https://www.researchgate.net/figure/Example-of-uranium-ore-samples-and-their-associated-alteration-rinds-Great-Bear-Lake-and_fig1_320569651","3":"Example of uranium ore samples and their associated ...","4":"Example of uranium ore samples and their associated alteration rinds (Great  Bear Lake and Jefferson","10":"PjnvTFesdEKBRe"},"5":{"1":"VSDXIHQtDjEYvMK"}},{"1":{"1":"https://www.grandcanyontrust.org/sites/default/files/e_uranium_ore.jpg","3":600,"4":660},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRV2vkJir6j5M9GGj9Daws2_5mmfJLHHlMuYlvD-tFgFQq50LJa","3":182,"4":200},"3":{"1":"Grand Canyon Trust","2":"https://www.grandcanyontrust.org/colorado-plateau-uranium","3":"Uranium | Grand Canyon Trust","4":"Uranium - deposits","10":"tixmKKALwfPbAV"},"5":{"1":"gMjqkkdkgUNeyLy"}},{"1":{"1":"http://uranium.csis.org/wp-content/uploads/2014/09/uranium_mine.jpg","3":2318,"4":880},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSfTlqkUotU-2s86KZPoKTei68672JI0c3bTzX3Owc_I46nRApIUA","3":200,"4":75},"3":{"1":"Governing Uranium - Center for Strategic and International ...","2":"http://uranium.csis.org/production/","3":"1 - Governing Uranium","4":"01_minephoto_1of2","10":"rdtbvLcLoNbFWF"},"5":{"1":"LjeRklRSOmSTOBV"}},{"1":{"1":"https://vignette.wikia.nocookie.net/thetekkit/images/4/4e/Uranium_Ore_2.png/revision/latest?cb=20121011054332","3":1613,"4":1032},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS-2NIuZvYepV4lvhDpyZxosb6pf5BbQ3yke9xkWMnknU3MSriD","3":200,"4":127},"3":{"1":"The Tekkit Classic Wiki - Fandom","2":"http://tekkitclassic.wikia.com/wiki/File:Uranium_Ore_2.png","3":"Image - Uranium Ore 2.png | The Tekkit Classic Wiki | FANDOM ...","4":"Uranium Ore 2.png","10":"fVoMdmhrsqQnoA"},"5":{"1":"DfOlohDTbnVvKyp"}},{"1":{"1":"https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Uraninite-usa32abg.jpg/220px-Uraninite-usa32abg.jpg","3":220,"4":217},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ7Z_u2G5UCMhp9M5MEZVGO39z_Ek0FiZM7ffNguWI1YK56MtGshQ","3":200,"4":197},"3":{"1":"911 Metallurgist","2":"https://www.911metallurgist.com/blog/pitchblende-uraninite-ore","3":"Pitchblende Uranium Ore","4":"... in deposits of this type. pitchblende uraninite","10":"PxpNofJwxlbdey"},"5":{"1":"vmYLxMtxKDQFWxF"}},{"1":{"1":"https://vignette.wikia.nocookie.net/technicpack/images/8/88/Uranium_Ore.png/revision/latest?cb=20121230105240","3":1366,"4":706},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQkvZjnZRf1MTyPRxcA5_fUUC7v4ZfluKLN-NPuYBZTpqB_afEB","3":200,"4":103},"3":{"1":"Technic Pack Wiki - Fandom","2":"http://technicpack.wikia.com/wiki/File:Uranium_Ore.png","3":"Image - Uranium Ore.png | Technic Pack Wiki | FANDOM powered ...","4":"Uranium Ore.png","10":"eoRoWdBXHUsICT"},"5":{"1":"RGVYNJSonUGgGTn"}},{"1":{"1":"http://media.kenanaonline.com/photos/1238066/1238066871/large_1238066871.gif?1289334469","3":287,"4":350},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTGTmdR9WCI6pYTw4vspENHpWOi7BVS-K1s4lp2uiVsJ-80XTY5uw","3":163,"4":200},"3":{"1":"بوابات كنانة أونلاين","2":"https://kenanaonline.com/users/absalman/posts/187419","3":"THE URANIUM ORE MINERALS - عبدالعاطي سالمان- مشروع العصر ...","4":"THE URANIUM ORE MINERALS","10":"mNHAuArniWXJRj"},"5":{"1":"CVNwppputpGlJil"}},{"1":{"1":"https://ae01.alicdn.com/kf/HTB1Yg6DIpXXXXalXFXXq6xXFXXXE/Phosphorus-tin-mine-uranium-ore-chalcopyrite-crystal-gem-stone-raw-ore-samples-mathematics-Tian-Yu-mineral.jpg_640x640.jpg","3":640,"4":600},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSgmUKhyf7JDiE73fHSE4_cq6M4OLT7bBWQofzuvUCRKK8-a9ws","3":200,"4":187},"3":{"1":"AliExpress.com","2":"https://www.aliexpress.com/item/Phosphorus-tin-mine-uranium-ore-chalcopyrite-crystal-gem-stone-raw-ore-samples-mathematics-Tian-Yu-mineral/32379491924.html","3":"Phosphorus tin mine uranium ore chalcopyrite crystal gem ...","4":"Phosphorus tin mine uranium ore chalcopyrite crystal gem stone raw ore  samples mathematics Tian Yu ...","10":"VROMXGJiTLfNcm"},"5":{"1":"fOtJguCFMFFiTGM"},"7":{"1":{"10":{"3":"Phosphorus tin mine uranium ore chalcopyrite crystal gem stone raw ore  samples mathematics Tian Yu mineral stones-in Aerators from Home  Improvement on ...","6":false,"7":2719.0,"8":"USD"}}}},{"1":{"1":"https://thehightechsociety.com/wp-content/uploads/2017/12/uraniumorefacts-1000x720.jpg","3":1000,"4":720},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTTzm_aIsh8drvWBOgUN-fCco8pfiWe6D9ZdCZYdZ0MeKuipCmJ","3":199,"4":143},"3":{"1":"The High Tech Society","2":"https://thehightechsociety.com/is-uranium-dangerous-facts-about-uranium-you-may-not-know/","3":"Is Uranium Dangerous - Facts About Uranium You May Not Know ...","4":"Is Uranium Dangerous – Facts About Uranium You May Not Know","10":"XGijdDsAQoSvIl"},"5":{"1":"amATHrpPAUxWKDa"}},{"1":{"1":"https://media.nature.com/m685/nature-assets/ngeo/journal/v5/n2/images/ngeo1386-f1.jpg","3":685,"4":432},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQgjRj8o_JLV2wZN-swnguCcXuW9-Zx2AKuEELmIqiUa4VuULfudg","3":200,"4":125},"3":{"1":"Nature","2":"https://www.nature.com/articles/ngeo1386","3":"Uranium-ore giants | Nature Geoscience","4":"Richard et al. show that the giant high-grade uranium ore found in the  Athabasca Basin could have ...","10":"CKCkDIIYUrnDPb"},"5":{"1":"XbggxJvpqFKrTft"}},{"1":{"1":"http://www.abc.net.au/radionational/image/6593820-3x2-700x467.jpg","3":700,"4":467},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQU2lHa-Tht79z6V7T3AUOMhUz2uPtB8TRSCXcsixKWMHTPp2hX","3":200,"4":133},"3":{"1":"ABC","2":"http://www.abc.net.au/radionational/programs/rearvision/history-of-uranium-mining-in-australia/6607212","3":"The long and controversial history of uranium mining in ...","4":"Ranger uranium mine","10":"AYUiOOonsQcudS"},"5":{"1":"ysejMaDMnehJEVo"}},{"1":{"1":"http://www.ioffer.com/img/item/642/410/160/uraninite-pitchblende-uranium-ore-240-4ae7.jpg","3":580,"4":388},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS6ek08_PoH4HNHBj37nkhiLBztekkXmHHyVxxhfeXKLysCXL_lPg","3":200,"4":133},"3":{"1":"iOffer","2":"http://www.ioffer.com/i/uraninite-pitchblende-uranium-ore-240-642410160","3":"URANINITE PITCHBLENDE URANIUM ORE 240 for sale","4":"URANINITE PITCHBLENDE URANIUM ORE 240. «","10":"VsvtUbUcmgWOtd"},"5":{"1":"TaBEXnwLcVoSGRF"},"7":{"1":{"10":{"1":5.0,"3":"URANINITE PITCHBLENDE URANIUM ORE 240","5":"rare negative botryoidal pitchblende, from Shaft 4 ,Pribram , Czech Rep. ,  240 µsv/h with SBM-20@ 1cm, 4 cm x 3 cm x 2.3 cm , paypal or skrill only,  ...","6":false,"7":44.0,"8":"USD"}}}},{"1":{"1":"https://antinuclear.files.wordpress.com/2012/07/mary-kathleen-uranium-mine.gif","3":504,"4":511},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRbQ8QiG595QEeGQbszjBqy3NSD10vD6HpMDRBbYl-uWgnz_14PEg","3":197,"4":200},"3":{"1":"Antinuclear","2":"https://antinuclear.net/2013/06/12/mary-kathleen-uranium-mine-still-toxic-decades-after-closure/","3":"Mary Kathleen uranium mine – still toxic decades after ...","4":"Mary-Kathleen-Uranium-mine-","10":"fLxfEgPYxMQMvS"},"5":{"1":"SGYSjGfHCKKNkgE"}},{"1":{"1":"https://stationeers-wiki.com/images/2/27/Uranium_ore_dropped.jpg","3":450,"4":450},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSLJH30zkMiPth0cKLDb2Qlk2SN5BiTM_w_4LlZYthhktUasVRK","3":200,"4":200},"3":{"1":"Unofficial Stationeers Wiki","2":"https://stationeers-wiki.com/Uranium_Ore/en","3":"Uranium Ore - Unofficial Stationeers Wiki","4":"Uranium Ore","10":"XvrtvsArUYHKUS"},"5":{"1":"vKpjKTxbqkQXpom"}},{"1":{"1":"http://teachnuclear.ca/wp-content/uploads/2013/05/McClean-Lake-open-pit.jpg","3":640,"4":360},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT4RMtnL-xV_tEftv9YPNCde6Vo9HV_ZPeWz5wQ7h7l_KC3rnc4","3":200,"4":112},"3":{"1":"Teach Nuclear","2":"http://teachnuclear.ca/all-things-nuclear/nuclear-energy/uranium-mining/","3":"Uranium Mining | Teach Nuclear","4":"Open-pit mine at the McClean Lake facility","10":"scBFjbTjRhqPbE"},"5":{"1":"MjaBBUKfsXDRiUd"}},{"1":{"1":"https://media.istockphoto.com/photos/closeup-of-uranium-ore-on-white-background-picture-id183637629","3":1024,"4":1007},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR6H-joeozc8MoqQeO-qeGFLBp4M_2aUtIRkixABJY6Jye_Zu5d","3":200,"4":197},"3":{"1":"iStock","2":"https://www.istockphoto.com/photo/close-up-of-uranium-ore-on-white-background-gm183637629-27561251","3":"Closeup Of Uranium Ore On White Background Stock Photo & More ...","4":"Close-up of Uranium ore on white background royalty-free stock photo","10":"JjKfCVANlcxWUc"},"5":{"1":"KuRMAoXyPQEJKmd"}},{"1":{"1":"http://www.nsfwallet.com/wp-content/uploads/2013/09/41KH6M0LWJL._SL500_AA300_1.jpg","3":300,"4":300},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR00Ch9vyoO0x--dLLmB0io09RBtdpPBUn0rXF6_EEd4qwrnM6i","3":200,"4":200},"3":{"1":"Not Safe For Wallet","2":"http://www.nsfwallet.com/uranium-ore/","3":"Uranium Ore","4":"","10":"ROirCLHUnEFQbb"},"5":{"1":"bxMXuPXMbeiLMMR"}},{"1":{"1":"http://www.mirarr.net/media/W1siZiIsIjIwMTcvMDcvMDUvNWtocWNwZXp3eV9yYW5nZXIuanBnIl0sWyJwIiwidGh1bWIiLCIxMzIweDU4MSMiXV0/ranger.jpg","3":1320,"4":581},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ_57SBkrYkxBS8nDl83hytJAgPncjLdd9EltlBrhZuy20i1NUl","3":199,"4":87},"3":{"1":"The Gundjeihmi Aboriginal Corporation","2":"http://www.mirarr.net/uranium-mining","3":"Uranium Mining – The Gundjeihmi Aboriginal Corporation","4":"Ranger. `","10":"lGQWpalAtncdQk"},"5":{"1":"wFBEtCKIsXalNQq"}},{"1":{"1":"http://1boidr1j8wt01itylm7cszo5r8.wpengine.netdna-cdn.com/wp-content/uploads/AUMmap.jpg","3":480,"4":360},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTtC0T56zTdoq3_XYpKrDW0Ssf1EroyWwXmXG8wASNsk2Yk1rCr","3":200,"4":149},"3":{"1":"The Colorado Independent","2":"http://www.coloradoindependent.com/147740/feds-open-door-to-more-uranium-mining-in-southwest-colorado","3":"Feds open door to more uranium mining in Southwest Colorado ...","4":"AUMmap","10":"TTnEbOQmDQMaKs"},"5":{"1":"GBNPxaatFaXEPnN"}},{"1":{"1":"http://eraengineers.com/wp-content/uploads/2016/03/uranium-yellowcake.jpg","3":620,"4":368},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ4pLb2LZOXRVSOtufN0gaWFlxWAtgQ_F-4Z9b1rmuhmd_SIT2xXQ","3":200,"4":118},"3":{"1":"Environmental Resource Associates","2":"http://eraengineers.com/portfolio-view/design-air-pollution-control-ventilation/","3":"Design of Air Pollution Controls and Local Ventilation for ...","4":"Design of Air Pollution Controls and Local Ventilation for Uranium Ore  Processing Plant. «","10":"KOKKEMynLHcTBb"},"5":{"1":"WPQaqJyajPCkeqv"}},{"1":{"1":"http://unitednuclear.com/images/boxorocks.jpg","3":500,"4":535},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSkFRN9gmdSflSkBhW4q2lxTEq6qNFQnZ2hepJf0E7Xv1TcJFmrJA","3":187,"4":200},"3":{"1":"United Nuclear","2":"http://unitednuclear.com/index.php?main_page=product_info&products_id=863","3":"Bulk Uranium Ore Assortment - 5 Pounds : United Nuclear ...","4":"Bulk Uranium Ore Assortment - 5 Pounds","10":"yQyqhXaFvEoueR"},"5":{"1":"CQwbSsHmGnpLwXy"}},{"1":{"1":"https://i.pinimg.com/736x/9b/74/fa/9b74fa1a6c617880f3c027713b8ed0f0--uranium-nerdy.jpg","3":300,"4":232},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQgJUBQCVgGFCbVgsnD-uOQNuJ2lvpplHQYUQ7ce8lC54CiwVvJAg","3":200,"4":154},"3":{"1":"Pinterest","2":"https://www.pinterest.com/michaels0582/uranium-ore/","3":"31 best Uranium Ore images on Pinterest | Crystals, Petroleum ...","4":"Bulk Uranium Ore - 5 Pounds : United Nuclear , Scientific Equipment &  Supplies","10":"VmLBugwkJfYpdv"},"5":{"1":"bRwiTmKbMptmoFd"}},{"1":{"1":"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8f/Marienberg_ore.jpg/220px-Marienberg_ore.jpg","3":220,"4":165},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTVSeTQx_j1CbsN7N3OlSt3Y_ze7MRNPycZj_A07Dn24YEuLRYf","3":200,"4":150},"3":{"1":"Wikipedia","2":"https://en.wikipedia.org/wiki/Uranium_ore","3":"Uranium ore - Wikipedia","4":"Polymetallic uranium ore, Marienberg, Erzgebirge Mts, Germany","10":"oBhUVtBxxpQMct"},"5":{"1":"oGENeuUvxqvGwhY"}},{"1":{"1":"https://www.researchgate.net/profile/Dr_Yamuna_Singh/publication/316716402/figure/fig4/AS:491343119163393@1494156736236/Megascopic-view-of-uranium-ore-sample-used-for-study-Note-a-relict-core-of-black-mineral.png","3":626,"4":538},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ0B9_kwbnm5JXAw-YOZPCMB9sfJyyO9ady26FX7tbJWS-pPZyJ","3":199,"4":171},"3":{"1":"ResearchGate","2":"https://www.researchgate.net/figure/Megascopic-view-of-uranium-ore-sample-used-for-study-Note-a-relict-core-of-black-mineral_fig4_316716402","3":"Fig. 4. Megascopic view of uranium ore sample used for study ...","4":"Megascopic view of uranium ore sample used for study. Note a relict core of  black mineral (uraninite) ...","10":"duflncOKBLXPEx"},"5":{"1":"bwNLaAuVAWvOYxj"}},{"1":{"1":"http://cdn.iofferphoto.com/img3/item/640/729/747/uraninite-pyrite-pitchblende-uranium-ore-230-0ac1.jpg","3":580,"4":386},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTV9n1j2oibvPRX86LkJXrUwHuavrxaNZ41wi4gmV7jOEI-SGcbjg","3":200,"4":133},"3":{"1":"iOffer","2":"http://payments.ioffer.com/i/uraninite-pyrite-pitchblende-uranium-ore-230-640729747","3":"URANINITE + Pyrite PITCHBLENDE URANIUM ORE 230 for sale","4":"URANINITE + Pyrite PITCHBLENDE URANIUM ORE 230. «","10":"BXSwLQenDcTqYd"},"5":{"1":"llsvaTDqVOyMdSS"},"7":{"1":{"10":{"1":5.0,"3":"URANINITE + Pyrite PITCHBLENDE URANIUM ORE 230","5":"uraninite with pyrite (stable) on matrix from Dubenec, Pribram , Czech Rep.  , 230 µsv/h with SBM-20@ 1cm , 6.4 cm x 4.7 cm x 3.5 cm , boxed , 155g, ...","6":false,"7":65.0,"8":"USD"}}}},{"1":{"1":"https://thumbs.dreamstime.com/b/uranium-ore-9727818.jpg","3":800,"4":800},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSmOQiJLTEC8IUbP-J8cA1Lk04kgZBnfCs03hjz8XxFcUnULkVg","3":200,"4":200},"3":{"1":"Dreamstime.com","2":"https://www.dreamstime.com/royalty-free-stock-photos-uranium-ore-image9727818","3":"Uranium ore stock photo. Image of radium, rays, environmental ...","4":"Download Uranium ore stock photo. Image of radium, rays, environmental -  9727818","10":"PpKDilVVidtdAh"},"5":{"1":"BCPoeqSVHwLqKpu"}},{"1":{"1":"https://www.sciencephoto.com/image/78646/530wm","3":530,"4":364},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSzl6fxehVSwPTJDfNmmKM0e9GD6mKJ2TFvP-fhFUmE9G0xiGkJsA","3":200,"4":137},"3":{"1":"Science Photo Library","2":"https://www.sciencephoto.com/media/78646/view/-autunite-a-uranium-ore-","3":"Autunite, a Uranium Ore' - Stock Image C001/4244 - Science ...","4":"'Autunite, a Uranium Ore'","10":"EDmfQyiLaYeGiq"},"5":{"1":"cLFDrRSdxooTyfX"}},{"1":{"1":"https://i.kinja-img.com/gawker-media/image/upload/s--GJZHACFy--/c_scale,f_auto,fl_progressive,q_80,w_800/1444652809032333604.jpg","3":800,"4":450},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS7eJp8DHn5uknUUaBQM8FX1ZbrP6BFLG5Hcxgl1QN5k7nFf2sm","3":200,"4":112},"3":{"1":"io9 - Gizmodo","2":"https://io9.gizmodo.com/what-happens-when-you-put-acid-on-uranium-ore-find-out-1732733166","3":"What Happens When You Put Acid on Uranium Ore? Find Out!","4":"","10":"ivMcBfdMUrSuTq"},"5":{"1":"NmYiuMoOFDeXWFB"}},{"1":{"1":"https://quatr.us/wp-content/uploads/2017/06/uranium.jpg","3":250,"4":268},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcShlD81v12IPVrUwlby7X_gfp_lPKFcgjAlbZ8sfTjRoBp9p6ekCg","3":187,"4":200},"3":{"1":"Quatr.us","2":"https://quatr.us/chemistry/uranium-atoms-elements-chemistry.htm","3":"What is uranium? Atoms, elements, chemistry | Quatr.us Study ...","4":"A piece of uranium ore","10":"LggyIdLfTHPoUE"},"5":{"1":"PDBjsuOVuDrmnRH"}},{"1":{"1":"http://www.radioactivethings.com/_Media/full-size-2.jpeg","3":1537,"4":1920},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ03YLxtAgZB6haLu1HOHiWCqtFIxFH-y27WA-xJN9B0Fi7B3X5","3":160,"4":200},"3":{"2":"http://www.radioactivethings.com/","3":"RadioactiveThings.com","4":"As Major General Nichols of the Manhattan project put it: \"Our best source,  the Shinkolobwe mine, ...","10":"kcddveXePECqkk"},"5":{"1":"FsqBhrfUURQcKHI"}},{"1":{"1":"http://talknuclear.ca/wp-content/uploads/2014/08/radiation-from-bananas.jpg","3":599,"4":641},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSlhqhU7yHlFVuI5YFnhnudkAOouIrYTetWsAPQ8OSwYbz8AFr1","3":187,"4":200},"3":{"1":"TalkNuclear","2":"http://talknuclear.ca/2014/08/just-how-radioactive-is-uranium-ore/","3":"Just How Radioactive is Uranium Ore? | TalkNuclear","4":"radiation from bananas","10":"JeIVstWCOVqrYN"},"5":{"1":"JbifUMcnhPfcvxU"}},{"1":{"1":"https://previews.123rf.com/images/merial1/merial11205/merial1120500076/13672876-uranium-ore-uraninite-from-pribram-czech-republic.jpg","3":1300,"4":1038},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQCyxlmproQBZz6Vw97Xu0No5l7N8s0BTt_HrvRm7HI4jL7fNmb","3":200,"4":160},"3":{"1":"123RF.com","2":"https://www.123rf.com/photo_13672876_uranium-ore-uraninite-from-pribram-czech-republic.html","3":"Uranium Ore (uraninite) From Pribram, Czech Republic Stock ...","4":"Uranium ore (uraninite) from Pribram, Czech republic Stock Photo - 13672876","10":"jGfydBHejDNsUv"},"5":{"1":"spMNHbdmpmkhhPI"}},{"1":{"1":"https://images.enca.com/encadrupal/styles/600_383/s3/WEB_PHOTO_KAROO_RYSTKUIL_05032016.jpg","3":600,"4":383},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT9dFVWftqcZ4hgMriqLFGNOhcDPD9iiwWipfkxyFbYTgyG5N7u","3":200,"4":127},"3":{"1":"eNCA","2":"http://www.enca.com/south-africa/uranium-mining-karoo-south-africas-new-gold","3":"Uranium mining in the Karoo South Africa's new gold?","4":"The entrance to the Cameron shaft, an old uranium trial mine 40km from  Beaufort West.","10":"TuhPBLPjSHnFFr"},"5":{"1":"TfETPSaOJhXBxDu"}},{"1":{"1":"http://www.world-nuclear.org/getattachment/Nuclear-Basics/How-is-uranium-ore-made-into-nuclear-fuel/yellowcake-(Cameco).jpg.aspx?","3":709,"4":915},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQfCvtqHk8x539fQ_UFrgd5sKuAEKtHeVifrIrAnyqoLFfyijEKUQ","3":155,"4":200},"3":{"1":"World Nuclear Association","2":"http://www.world-nuclear.org/nuclear-basics/how-is-uranium-ore-made-into-nuclear-fuel.aspx","3":"How uranium ore is made into nuclear fuel - World Nuclear ...","4":"yellowcake-(Cameco).jpg","10":"EgOqgwGpPvWtNo"},"5":{"1":"deoFQVqsXRHBxDx"}},{"1":{"1":"https://media.gettyimages.com/photos/kilogram-of-uranium-ore-gives-merely-37-grams-of-yellow-cake-in-mine-picture-id844444270","3":1024,"4":683},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT8FrUCgyfEdOSaMt3n3diQQK_CofwQcGS85fOnJg07RMeM71ec","3":200,"4":133},"3":{"1":"Getty Images","2":"https://www.gettyimages.com/detail/news-photo/kilogram-of-uranium-ore-gives-merely-37-grams-of-yellow-news-photo/844444270","3":"Inside Indias secure uranium processing facility Pictures ...","4":"JADUGODA, JHARKAHND, INDIA - SEPTEMBER 03: A 100 kilogram of uranium ore  gives","10":"CBBCmdctDTjUYS"},"5":{"1":"wcimccDXRxrPPYo"}},{"1":{"1":"https://ae01.alicdn.com/kf/HTB1X_yaLpXXXXbtXXXXq6xXFXXXS/Domestic-rare-autunite-fluorescent-Mica-natural-uranium-ore-original-stone-mineral-specimens-H1024.jpg_640x640.jpg","3":639,"4":640},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRvFFjVksCk-mht4Bki6CGFuGeLDrzAn8RxL84tEauRoyuuuS1t","3":199,"4":200},"3":{"1":"AliExpress.com","2":"https://www.aliexpress.com/item/Domestic-rare-autunite-fluorescent-Mica-natural-uranium-ore-original-stone-mineral-specimens-H1024/32594437365.html","3":"Domestic rare autunite fluorescent Mica natural uranium ore ...","4":"Domestic rare autunite fluorescent Mica natural uranium ore original stone  mineral specimens H1024","10":"LGJotHvCumpisG"},"5":{"1":"PHYmmwVGNgxyWXQ"},"7":{"1":{"10":{"3":"Domestic rare autunite fluorescent Mica natural uranium ore original stone  mineral specimens H1024 on Aliexpress.com | Alibaba Group","6":false,"7":856.7999877929688,"8":"USD"}}}},{"1":{"1":"https://vignette.wikia.nocookie.net/thetekkit/images/8/88/Uranium_Ore.png/revision/latest?cb=20121011054131","3":256,"4":256},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQhqcbjnHtAH4CZb_F1qk6JU_T4vSYyE8PnZduQj3Wc8nBV1OUw","3":200,"4":200},"3":{"1":"The Tekkit Classic Wiki - Fandom","2":"http://tekkitclassic.wikia.com/wiki/Uranium_Ore","3":"Uranium Ore | The Tekkit Classic Wiki | FANDOM powered by Wikia","4":"Uranium Ore","10":"fbHJlnOSnoAlXg"},"5":{"1":"LKECMxeYlJQYQvx"}},{"1":{"1":"http://pcbheaven.com/opendir/images/thumbs/od_1281_4_1340220138.png","3":500,"4":334},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTfyHMiuy7oPGB1SaoPbdwAvG0u32Vc-nBmQX64YIqQvoP3vByYUg","3":200,"4":133},"3":{"1":"Hesed.info","2":"http://hesed.info/blog/yellowcake-uranium-ore.abp","3":"Yellowcake Uranium Ore","4":"","10":"bEvuSpOOWAaPlY"},"5":{"1":"CSCohElwJwuXNPc"}},{"1":{"1":"https://keanchancom.files.wordpress.com/2016/06/uranium-ore.jpg","3":1024,"4":768},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSZjU6qvNMW95223xEEvNN3XYlPx8R12QV3dbjh1-5vTpHLkDmCHw","3":200,"4":149},"3":{"1":"Hitman Game","2":"http://the.hitmangame.info/jpg/fluorescent-uranium-ore.php","3":"Fluorescent Uranium Ore - Hitman Game","4":"Fluorescent Uranium Ore","10":"KwgdiKaesnYMur"},"5":{"1":"XirjwbBuBUlIjJX"}},{"1":{"1":"https://i.ytimg.com/vi/vNbV4whWHsQ/maxresdefault.jpg","3":1280,"4":720},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRqKbVcx3LMW1wZ8aghfTW9JKDQPYXD0LqNrjPLPPwLE09ABedF9A","3":200,"4":112},"3":{"1":"YouTube","2":"https://www.youtube.com/watch?v=vNbV4whWHsQ","3":"Uranium Ores -The Better - YouTube","4":"Uranium Ores -The Better","10":"cmwKHdELShqVIL"},"5":{"1":"uLnJXqtjVcLJSBT"},"7":{"1":{"11":{"1":"Uranium Ores -The Better","2":"If you collect rocks, its a good idea to part the specimens in 3 groups:  good - better - best These specimens in the video are in my group \"better\"  The \"best...","3":"12:25","4":"737","5":"1484438400000","6":"weirdmeister inc.","7":"18","8":"15"}}}},{"1":{"1":"https://www.mining-technology.com/wp-content/uploads/sites/8/2017/10/1-image-Australia.jpg","3":600,"4":400},"2":{"1":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRDRzupy-lorOlAP0d-CEOFeHwOPm3o79KIYPpZ_yeQZvwIt3uB","3":200,"4":133},"3":{"1":"Mining Technology","2":"https://www.mining-technology.com/features/featureradioactive-riches-the-five-biggest-uranium-rich-countries-4274059/","3":"Radioactive riches – the five countries with the biggest ...","4":"Australia's Ranger mine is the world's third biggest uranium producing mine.","10":"YfKTBasdlWQntu"},"5":{"1":"DtGOUiEJFvqvbnO"}}],"2":3}
\ No newline at end of file
diff --git a/benchmarks/IsolateSpawn/dart2/IsolateSpawn.dart b/benchmarks/IsolateSpawn/dart2/IsolateSpawn.dart
new file mode 100644
index 0000000..e8ec25c
--- /dev/null
+++ b/benchmarks/IsolateSpawn/dart2/IsolateSpawn.dart
@@ -0,0 +1,165 @@
+// 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:async';
+import 'dart:isolate';
+import 'dart:math';
+
+import 'package:meta/meta.dart';
+
+import 'package:compiler/src/dart2js.dart' as dart2js_main;
+
+class SpawnLatency {
+  SpawnLatency(this.name);
+
+  Future<ResultMessageLatency> run() async {
+    final completerResult = Completer();
+    final receivePort = ReceivePort()..listen(completerResult.complete);
+    final Completer<DateTime> isolateExitedCompleter = Completer<DateTime>();
+    final onExitReceivePort = ReceivePort()
+      ..listen((_) {
+        isolateExitedCompleter.complete(DateTime.now());
+      });
+    final DateTime beforeSpawn = DateTime.now();
+    await Isolate.spawn(
+        isolateCompiler, StartMessageLatency(receivePort.sendPort, beforeSpawn),
+        onExit: onExitReceivePort.sendPort,
+        onError: onExitReceivePort.sendPort);
+    final DateTime afterSpawn = DateTime.now();
+
+    final ResultMessageLatency result = await completerResult.future;
+    receivePort.close();
+    final DateTime isolateExited = await isolateExitedCompleter.future;
+    result.timeToExitUs = isolateExited.difference(beforeSpawn).inMicroseconds;
+    result.timeToIsolateSpawnUs =
+        afterSpawn.difference(beforeSpawn).inMicroseconds;
+    onExitReceivePort.close();
+
+    return result;
+  }
+
+  Future<AggregatedResultMessageLatency> measureFor(int minimumMillis) async {
+    final minimumMicros = minimumMillis * 1000;
+    final watch = Stopwatch()..start();
+    final Metric toAfterIsolateSpawnUs = LatencyMetric("${name}ToAfterSpawn");
+    final Metric toStartRunningCodeUs = LatencyMetric("${name}ToStartRunning");
+    final Metric toFinishRunningCodeUs =
+        LatencyMetric("${name}ToFinishRunning");
+    final Metric toExitUs = LatencyMetric("${name}ToExit");
+    while (watch.elapsedMicroseconds < minimumMicros) {
+      final ResultMessageLatency result = await run();
+      toAfterIsolateSpawnUs.add(result.timeToIsolateSpawnUs);
+      toStartRunningCodeUs.add(result.timeToStartRunningCodeUs);
+      toFinishRunningCodeUs.add(result.timeToFinishRunningCodeUs);
+      toExitUs.add(result.timeToExitUs);
+    }
+    return AggregatedResultMessageLatency(toAfterIsolateSpawnUs,
+        toStartRunningCodeUs, toFinishRunningCodeUs, toExitUs);
+  }
+
+  Future<AggregatedResultMessageLatency> measure() async {
+    await measureFor(500); // warm-up
+    return measureFor(4000); // actual measurement
+  }
+
+  Future<void> report() async {
+    final AggregatedResultMessageLatency result = await measure();
+    print(result);
+  }
+
+  final String name;
+  RawReceivePort receivePort;
+}
+
+class Metric {
+  Metric({@required this.prefix, @required this.suffix});
+
+  void add(int value) {
+    if (value > max) {
+      max = value;
+    }
+    sum += value;
+    sumOfSquares += value * value;
+    count++;
+  }
+
+  double _average() => sum / count;
+  double _rms() => sqrt(sumOfSquares / count);
+
+  toString() => "$prefix): ${_average()}$suffix\n"
+      "${prefix}Max): $max$suffix\n"
+      "${prefix}RMS): ${_rms()}$suffix";
+
+  final String prefix;
+  final String suffix;
+  int max = 0;
+  double sum = 0;
+  double sumOfSquares = 0;
+  int count = 0;
+}
+
+class LatencyMetric extends Metric {
+  LatencyMetric(String name) : super(prefix: "$name(Latency", suffix: " us.");
+}
+
+class StartMessageLatency {
+  StartMessageLatency(this.sendPort, this.spawned);
+
+  final SendPort sendPort;
+  final DateTime spawned;
+}
+
+class ResultMessageLatency {
+  ResultMessageLatency(
+      {this.timeToStartRunningCodeUs,
+      this.timeToFinishRunningCodeUs,
+      this.deltaHeap});
+
+  final int timeToStartRunningCodeUs;
+  final int timeToFinishRunningCodeUs;
+  final int deltaHeap;
+
+  int timeToIsolateSpawnUs;
+  int timeToExitUs;
+}
+
+class AggregatedResultMessageLatency {
+  AggregatedResultMessageLatency(
+    this.toAfterIsolateSpawnUs,
+    this.toStartRunningCodeUs,
+    this.toFinishRunningCodeUs,
+    this.toExitUs,
+  );
+
+  String toString() => """$toAfterIsolateSpawnUs
+$toStartRunningCodeUs
+$toFinishRunningCodeUs
+$toExitUs""";
+
+  final Metric toAfterIsolateSpawnUs;
+  final Metric toStartRunningCodeUs;
+  final Metric toFinishRunningCodeUs;
+  final Metric toExitUs;
+}
+
+Future<void> isolateCompiler(StartMessageLatency start) async {
+  final DateTime timeRunningCodeUs = DateTime.now();
+  await runZoned(
+      () => dart2js_main.internalMain(<String>[
+            "benchmarks/IsolateSpawn/dart2/helloworld.dart",
+            '--libraries-spec=sdk/lib/libraries.json'
+          ]),
+      zoneSpecification: ZoneSpecification(
+          print: (Zone self, ZoneDelegate parent, Zone zone, String line) {}));
+  final DateTime timeFinishRunningCodeUs = DateTime.now();
+  start.sendPort.send(ResultMessageLatency(
+      timeToStartRunningCodeUs:
+          timeRunningCodeUs.difference(start.spawned).inMicroseconds,
+      timeToFinishRunningCodeUs:
+          timeFinishRunningCodeUs.difference(start.spawned).inMicroseconds));
+}
+
+Future<void> main() async {
+  await SpawnLatency("IsolateSpawn.Dart2JS").report();
+}
diff --git a/benchmarks/IsolateSpawn/dart2/helloworld.dart b/benchmarks/IsolateSpawn/dart2/helloworld.dart
new file mode 100644
index 0000000..8977e0f
--- /dev/null
+++ b/benchmarks/IsolateSpawn/dart2/helloworld.dart
@@ -0,0 +1,3 @@
+main() {
+  print('Hello, world!');
+}
diff --git a/benchmarks/IsolateSpawnMemory/dart2/IsolateSpawnMemory.dart b/benchmarks/IsolateSpawnMemory/dart2/IsolateSpawnMemory.dart
new file mode 100644
index 0000000..609a8c2
--- /dev/null
+++ b/benchmarks/IsolateSpawnMemory/dart2/IsolateSpawnMemory.dart
@@ -0,0 +1,191 @@
+// 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:async';
+import 'dart:developer';
+import 'dart:io';
+import 'dart:isolate';
+import 'dart:math' as math;
+
+import 'package:compiler/src/dart2js.dart' as dart2js_main;
+import 'package:vm_service/vm_service.dart' as vm_service;
+import 'package:vm_service/vm_service_io.dart' as vm_service_io;
+
+const String compilerIsolateName = 'isolate-compiler';
+
+class Result {
+  const Result(
+      this.rssOnStart, this.rssOnEnd, this.heapOnStart, this.heapOnEnd);
+
+  final int rssOnStart;
+  final int rssOnEnd;
+  final int heapOnStart;
+  final int heapOnEnd;
+}
+
+class StartMessage {
+  const StartMessage(this.wsUri, this.sendPort);
+
+  final String wsUri;
+  final SendPort sendPort;
+}
+
+class SpawnMemory {
+  SpawnMemory(this.name, this.wsUri);
+
+  Future<void> report() async {
+    int maxProcessRss = 0;
+    final timer = Timer.periodic(const Duration(microseconds: 100), (_) {
+      maxProcessRss = math.max(maxProcessRss, ProcessInfo.currentRss);
+    });
+
+    const numberOfBenchmarks = 3;
+
+    final beforeRss = ProcessInfo.currentRss;
+    final beforeHeap = await currentHeapUsage(wsUri);
+
+    final iterators = <StreamIterator>[];
+    final continuations = <SendPort>[];
+
+    // Start all isolates & make them wait.
+    for (int i = 0; i < numberOfBenchmarks; i++) {
+      final receivePort = ReceivePort();
+      final startMessage = StartMessage(wsUri, receivePort.sendPort);
+      await Isolate.spawn(isolateCompiler, startMessage,
+          debugName: compilerIsolateName);
+      final iterator = StreamIterator(receivePort);
+
+      if (!await iterator.moveNext()) throw 'failed';
+      continuations.add(iterator.current as SendPort);
+
+      iterators.add(iterator);
+    }
+
+    final readyRss = ProcessInfo.currentRss;
+    final readyHeap = await currentHeapUsage(wsUri);
+
+    // Let all isolates do the dart2js compilation.
+    for (int i = 0; i < numberOfBenchmarks; i++) {
+      final iterator = iterators[i];
+      final continuation = continuations[i];
+      continuation.send(null);
+      if (!await iterator.moveNext()) throw 'failed';
+      if (iterator.current != 'done') throw 'failed';
+    }
+
+    final doneRss = ProcessInfo.currentRss;
+    final doneHeap = await currentHeapUsage(wsUri);
+
+    // Shut down helper isolates
+    for (int i = 0; i < numberOfBenchmarks; i++) {
+      final iterator = iterators[i];
+      final continuation = continuations[i];
+      continuation.send(null);
+      if (!await iterator.moveNext()) throw 'failed';
+      if (iterator.current != 'shutdown') throw 'failed';
+      await iterator.cancel();
+    }
+    timer.cancel();
+
+    final readyDiffRss =
+        math.max(0, readyRss - beforeRss) ~/ numberOfBenchmarks;
+    final readyDiffHeap =
+        math.max(0, readyHeap - beforeHeap) ~/ numberOfBenchmarks;
+    final doneDiffRss = math.max(0, doneRss - beforeRss) ~/ numberOfBenchmarks;
+    final doneDiffHeap =
+        math.max(0, doneHeap - beforeHeap) ~/ numberOfBenchmarks;
+
+    print("${name}RssOnStart(MemoryUse): $readyDiffRss");
+    print("${name}RssOnEnd(MemoryUse): $doneDiffRss");
+    print("${name}HeapOnStart(MemoryUse): $readyDiffHeap");
+    print("${name}HeapOnEnd(MemoryUse): $doneDiffHeap");
+    print("${name}PeakProcessRss(MemoryUse): $maxProcessRss");
+  }
+
+  final String name;
+  final String wsUri;
+}
+
+Future<void> isolateCompiler(StartMessage startMessage) async {
+  final port = ReceivePort();
+  final iterator = StreamIterator(port);
+
+  // Let main isolate know we're ready.
+  startMessage.sendPort.send(port.sendPort);
+  await iterator.moveNext();
+
+  await runZoned(
+      () => dart2js_main.internalMain(<String>[
+            "benchmarks/IsolateSpawnMemory/dart2/helloworld.dart",
+            '--libraries-spec=sdk/lib/libraries.json'
+          ]),
+      zoneSpecification: ZoneSpecification(
+          print: (Zone self, ZoneDelegate parent, Zone zone, String line) {}));
+
+  // Let main isolate know we're done.
+  startMessage.sendPort.send('done');
+  await iterator.moveNext();
+
+  // Closes the port.
+  startMessage.sendPort.send('shutdown');
+  await iterator.cancel();
+}
+
+Future<int> currentHeapUsage(String wsUri) async {
+  final vm_service.VmService vmService =
+      await vm_service_io.vmServiceConnectUri(wsUri);
+  final groupIds = await getGroupIds(vmService);
+  int sum = 0;
+  for (final groupId in groupIds) {
+    final vm_service.MemoryUsage usage =
+        await vmService.getIsolateGroupMemoryUsage(groupId);
+    sum += usage.heapUsage + usage.externalUsage;
+  }
+  vmService.dispose();
+  return sum;
+}
+
+Future<void> main() async {
+  // Only if we successfully reach the end will we set 0 exit code.
+  exitCode = 255;
+
+  final ServiceProtocolInfo info = await Service.controlWebServer(enable: true);
+  final Uri observatoryUri = info.serverUri;
+  final String wsUri =
+      'ws://${observatoryUri.authority}${observatoryUri.path}ws';
+  await SpawnMemory("IsolateSpawnMemory.Dart2JSDelta", wsUri).report();
+
+  // Only if we successfully reach the end will we set 0 exit code.
+  exitCode = 0;
+}
+
+// Returns the set of isolate groups for which we should count the heap usage.
+//
+// We have two cases
+//
+//   a) --enable-isolate-groups: All isolates will be within the same isolate
+//   group.
+//
+//   b) --no-enable-isolate-groups: All isolates will be within their own,
+//   separate isolate group.
+//
+// In both cases we want to sum up the heap sizes of all isolate groups.
+Future<List<String>> getGroupIds(vm_service.VmService vmService) async {
+  final groupIds = <String>{};
+  final vm = await vmService.getVM();
+  for (vm_service.IsolateGroupRef groupRef in vm.isolateGroups) {
+    final vm_service.IsolateGroup group =
+        await vmService.getIsolateGroup(groupRef.id);
+    for (vm_service.IsolateRef isolateRef in group.isolates) {
+      final isolateOrSentinel = await vmService.getIsolate(isolateRef.id);
+      if (isolateOrSentinel is vm_service.Isolate) {
+        groupIds.add(groupRef.id);
+      }
+    }
+  }
+  if (groupIds.isEmpty) {
+    throw "Could not find main isolate";
+  }
+  return groupIds.toList();
+}
diff --git a/benchmarks/IsolateSpawnMemory/dart2/helloworld.dart b/benchmarks/IsolateSpawnMemory/dart2/helloworld.dart
new file mode 100644
index 0000000..8977e0f
--- /dev/null
+++ b/benchmarks/IsolateSpawnMemory/dart2/helloworld.dart
@@ -0,0 +1,3 @@
+main() {
+  print('Hello, world!');
+}
diff --git a/benchmarks/ListCopy/dart2/ListCopy.dart b/benchmarks/ListCopy/dart2/ListCopy.dart
new file mode 100644
index 0000000..cd16fc0
--- /dev/null
+++ b/benchmarks/ListCopy/dart2/ListCopy.dart
@@ -0,0 +1,152 @@
+// 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:collection';
+import 'dart:typed_data';
+import 'package:benchmark_harness/benchmark_harness.dart';
+
+// Benchmark for polymorphic list copying.
+//
+// Each benchmark creates a list from an Iterable. There are many slightly
+// different ways to do this.
+//
+// In each benchmark the call site is polymorphic in the input type to simulate
+// the behaviour of library methods in the context of a large application. The
+// input lists are skewed heavily to the default growable list. This attempts to
+// model 'real world' copying of 'ordinary' lists.
+//
+// The benchmarks are run for small lists (2 elements, names ending in
+// `.2`) and 'large' lists (100 elements or `.100`). The benchmarks are
+// normalized on the number of elements to make the input sizes comparable.
+//
+// Most inputs have type `Iterable<num>`, but contain only `int` values. This
+// allows is to compare the down-conversion versions of copying where each
+// element must be checked.
+
+class Benchmark extends BenchmarkBase {
+  final int length;
+  final Function() copy;
+
+  final List<Iterable<num>> inputs = [];
+
+  Benchmark(String name, this.length, this.copy)
+      : super('ListCopy.$name.$length');
+
+  void setup() {
+    // Ensure setup() is idempotent.
+    if (inputs.isNotEmpty) return;
+    List<num> base = List.generate(length, (i) => i + 1);
+    List<Iterable<num>> makeVariants() {
+      return [
+        // Weight ordinary lists more.
+        ...List.generate(19, (_) => List<num>.of(base)),
+
+        base.toList(growable: false),
+        List<num>.unmodifiable(base),
+        UnmodifiableListView(base),
+        base.reversed,
+        String.fromCharCodes(List<int>.from(base)).codeUnits,
+        Uint8List.fromList(List<int>.from(base)),
+      ];
+    }
+
+    const elements = 10000;
+    int totalLength = 0;
+    while (totalLength < elements) {
+      var variants = makeVariants();
+      inputs.addAll(variants);
+      totalLength +=
+          variants.fold<int>(0, (sum, iterable) => sum + iterable.length);
+    }
+
+    // Sanity checks.
+    for (var sample in inputs) {
+      if (sample.length != length) throw 'Wrong length: $length $sample';
+    }
+    if (totalLength != elements) {
+      throw 'totalLength $totalLength != expected $elements';
+    }
+  }
+
+  void run() {
+    for (var sample in inputs) {
+      input = sample;
+      // Unroll loop 10 times to reduce loop overhead, which is about 15% for
+      // the fastest short input benchmarks.
+      copy();
+      copy();
+      copy();
+      copy();
+      copy();
+      copy();
+      copy();
+      copy();
+      copy();
+      copy();
+    }
+    if (output.length != inputs.first.length) throw 'Bad result: $output';
+  }
+}
+
+// All the 'copy' methods use [input] and [output] rather than a parameter and
+// return value to avoid any possibility of type check in the call sequence.
+Iterable<num> input = const [];
+var output;
+
+List<Benchmark> makeBenchmarks(int length) => [
+      Benchmark('toList', length, () {
+        output = input.toList();
+      }),
+      Benchmark('toList.fixed', length, () {
+        output = input.toList(growable: false);
+      }),
+      Benchmark('List.of', length, () {
+        output = List<num>.of(input);
+      }),
+      Benchmark('List.of.fixed', length, () {
+        output = List<num>.of(input, growable: false);
+      }),
+      Benchmark('List.num.from', length, () {
+        output = List<num>.from(input);
+      }),
+      Benchmark('List.int.from', length, () {
+        output = List<int>.from(input);
+      }),
+      Benchmark('List.num.from.fixed', length, () {
+        output = List<num>.from(input, growable: false);
+      }),
+      Benchmark('List.int.from.fixed', length, () {
+        output = List<int>.from(input, growable: false);
+      }),
+      Benchmark('List.num.unmodifiable', length, () {
+        output = List<num>.unmodifiable(input);
+      }),
+      Benchmark('List.int.unmodifiable', length, () {
+        output = List<int>.unmodifiable(input);
+      }),
+      Benchmark('spread.num', length, () {
+        output = <num>[...input];
+      }),
+      Benchmark('spread.int', length, () {
+        output = <int>[...input];
+      }),
+    ];
+
+main() {
+  var benchmarks = [...makeBenchmarks(2), ...makeBenchmarks(100)];
+
+  // Warmup all benchmarks to ensure JIT compilers see full polymorphism.
+  for (var benchmark in benchmarks) {
+    benchmark.setup();
+  }
+
+  for (var benchmark in benchmarks) {
+    benchmark.warmup();
+  }
+
+  for (var benchmark in benchmarks) {
+    // `report` calls `setup`, but `setup` is idempotent.
+    benchmark.report();
+  }
+}
diff --git a/benchmarks/RuntimeType/dart2/RuntimeType.dart b/benchmarks/RuntimeType/dart2/RuntimeType.dart
new file mode 100644
index 0000000..fe21b30
--- /dev/null
+++ b/benchmarks/RuntimeType/dart2/RuntimeType.dart
@@ -0,0 +1,176 @@
+// 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.
+//
+// Benchmark for runtimeType patterns as used in Flutter.
+
+// ignore_for_file: prefer_const_constructors
+// ignore_for_file: avoid_function_literals_in_foreach_calls
+
+import 'dart:typed_data';
+
+import 'package:benchmark_harness/benchmark_harness.dart';
+
+abstract class Key {
+  const factory Key(String value) = ValueKey<String>;
+  const Key.empty();
+}
+
+abstract class LocalKey extends Key {
+  const LocalKey() : super.empty();
+}
+
+class ValueKey<T> extends LocalKey {
+  const ValueKey(this.value);
+  final T value;
+  @override
+  bool operator ==(Object other) {
+    if (other.runtimeType != runtimeType) return false;
+    return other is ValueKey<T> && other.value == value;
+  }
+
+  @override
+  int get hashCode => value.hashCode;
+}
+
+abstract class Widget {
+  const Widget({this.key});
+  final Key key;
+
+  @pragma('dart2js:noInline')
+  static bool canUpdate(Widget oldWidget, Widget newWidget) {
+    return oldWidget.runtimeType == newWidget.runtimeType &&
+        oldWidget.key == newWidget.key;
+  }
+}
+
+class AWidget extends Widget {
+  const AWidget({Key key}) : super(key: key);
+}
+
+class BWidget extends Widget {
+  const BWidget({Key key}) : super(key: key);
+}
+
+class CWidget extends Widget {
+  const CWidget({Key key}) : super(key: key);
+}
+
+class DWidget extends Widget {
+  const DWidget({Key key}) : super(key: key);
+}
+
+class EWidget extends Widget {
+  const EWidget({Key key}) : super(key: key);
+}
+
+class FWidget extends Widget {
+  const FWidget({Key key}) : super(key: key);
+}
+
+class WWidget<W extends Widget> extends Widget {
+  final W /*?*/ ref;
+  const WWidget({this.ref, Key key}) : super(key: key);
+}
+
+class WidgetCanUpdateBenchmark extends BenchmarkBase {
+  WidgetCanUpdateBenchmark() : super('RuntimeType.Widget.canUpdate.byType');
+
+  // All widgets have different types.
+  static List<Widget> _widgets() => [
+        AWidget(),
+        BWidget(),
+        CWidget(),
+        DWidget(),
+        EWidget(),
+        FWidget(),
+        WWidget<AWidget>(),
+        WWidget<BWidget>(ref: const BWidget()),
+        WWidget<CWidget>(ref: CWidget()),
+        const WWidget<DWidget>(ref: DWidget()),
+      ];
+  // Bulk up list to reduce loop overheads.
+  final List<Widget> widgets = _widgets() + _widgets() + _widgets();
+
+  @override
+  void exercise() => run();
+
+  @override
+  void run() {
+    for (var w1 in widgets) {
+      for (var w2 in widgets) {
+        if (Widget.canUpdate(w1, w2) != Widget.canUpdate(w2, w1)) {
+          throw 'Hmm $w1 $w2';
+        }
+      }
+    }
+  }
+
+  // Normalize by number of calls to [Widgets.canUpdate].
+  @override
+  double measure() => super.measure() / (widgets.length * widgets.length * 2);
+}
+
+class ValueKeyEqualBenchmark extends BenchmarkBase {
+  ValueKeyEqualBenchmark() : super('RuntimeType.Widget.canUpdate.byKey');
+
+  // All widgets the same class but distinguished on keys.
+  static List<Widget> _widgets() => [
+        AWidget(),
+        AWidget(key: ValueKey(1)),
+        AWidget(key: ValueKey(1)),
+        AWidget(key: ValueKey(2)),
+        AWidget(key: ValueKey(2)),
+        AWidget(key: ValueKey(3)),
+        AWidget(key: ValueKey('one')),
+        AWidget(key: ValueKey('two')),
+        AWidget(key: ValueKey('three')),
+        AWidget(key: ValueKey(Duration(seconds: 5))),
+      ];
+  // Bulk up list to reduce loop overheads.
+  final List<Widget> widgets = _widgets() + _widgets() + _widgets();
+
+  @override
+  void exercise() => run();
+
+  @override
+  void run() {
+    for (var w1 in widgets) {
+      for (var w2 in widgets) {
+        if (Widget.canUpdate(w1, w2) != Widget.canUpdate(w2, w1)) {
+          throw 'Hmm $w1 $w2';
+        }
+      }
+    }
+  }
+
+  // Normalize by number of calls to [Widgets.canUpdate].
+  @override
+  double measure() => super.measure() / (widgets.length * widgets.length * 2);
+}
+
+void pollute() {
+  // Various bits of code to make environment less unrealistic.
+  void check(dynamic a, dynamic b) {
+    if (a.runtimeType != b.runtimeType) throw 'mismatch $a $b';
+  }
+
+  check(Uint8List(1), Uint8List(2)); // dart2js needs native interceptors.
+  check(Int16List(1), Int16List(2));
+  check([], []);
+  check(<bool>{}, <bool>{});
+}
+
+void main() {
+  pollute();
+
+  final benchmarks = [
+    WidgetCanUpdateBenchmark(),
+    ValueKeyEqualBenchmark(),
+  ];
+
+  // Warm up all benchmarks before running any.
+  benchmarks.forEach((bm) => bm.run());
+
+  benchmarks.forEach((bm) => bm.report());
+}
diff --git a/benchmarks/SoundSplayTreeSieve/dart2/README.md b/benchmarks/SoundSplayTreeSieve/dart2/README.md
new file mode 100644
index 0000000..7a8baec
--- /dev/null
+++ b/benchmarks/SoundSplayTreeSieve/dart2/README.md
@@ -0,0 +1,31 @@
+# SoundSplayTreeSieve
+The SoundSplayTreeSieve benchmark reports the runtime of the `sieve9` Golem benchmark
+for a `SplayTreeSet` from `dart:collection` and a `SoundSplayTreeSet` that
+declares variance modifiers for its type parameters.
+
+## Running the benchmark
+These are instructions for running the benchmark, assuming you are in the `sdk`
+directory.
+
+These benchmarks print a result similar to this (with varying runtimes):
+```
+CollectionSieves-SplayTreeSet-removeLoop(RunTime): 4307.52688172043 us.
+CollectionSieves-SoundSplayTreeSet-removeLoop(RunTime): 4344.902386117137 us.
+```
+
+**Dart2JS**
+```
+$ sdk/bin/dart2js_developer benchmarks/SoundSplayTreeSieve/dart/SoundSplayTreeSieve.dart --enable-experiment=variance --experiment-new-rti --out=soundsplay_d2js.js
+$ third_party/d8/linux/d8 soundsplay_d2js.js
+```
+
+**Dart2JS (Omit implicit checks)**
+```
+$ sdk/bin/dart2js_developer benchmarks/SoundSplayTreeSieve/dart/SoundSplayTreeSieve.dart --enable-experiment=variance --experiment-new-rti --omit-implicit-checks --out=soundsplay_d2js_omit.js --lax-runtime-type-to-string
+$ third_party/d8/linux/d8 soundsplay_d2js_omit.js
+```
+
+**DDK**
+```
+$ pkg/dev_compiler/tool/ddb -d -r chrome --enable-experiment=variance -k benchmarks/SoundSplayTreeSieve/dart/SoundSplayTreeSieve.dart
+```
\ No newline at end of file
diff --git a/benchmarks/SoundSplayTreeSieve/dart2/SoundSplayTreeSieve.dart b/benchmarks/SoundSplayTreeSieve/dart2/SoundSplayTreeSieve.dart
new file mode 100644
index 0000000..dfed86c
--- /dev/null
+++ b/benchmarks/SoundSplayTreeSieve/dart2/SoundSplayTreeSieve.dart
@@ -0,0 +1,112 @@
+// 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:collection';
+import 'dart:typed_data';
+
+import 'package:benchmark_harness/benchmark_harness.dart';
+import 'sound_splay_tree.dart';
+
+List<int> sieve(List<int> initialCandidates) {
+  final candidates = SplayTreeSet<int>.from(initialCandidates);
+  final int last = candidates.last;
+  final primes = <int>[];
+  // ignore: literal_only_boolean_expressions
+  while (true) {
+    final int prime = candidates.first;
+    if (prime * prime > last) break;
+    primes.add(prime);
+    for (int i = prime; i <= last; i += prime) {
+      candidates.remove(i);
+    }
+  }
+  return primes..addAll(candidates);
+}
+
+List<int> sieveSound(List<int> initialCandidates) {
+  final candidates = SoundSplayTreeSet<int>.from(initialCandidates);
+  final int last = candidates.last;
+  final primes = <int>[];
+  // ignore: literal_only_boolean_expressions
+  while (true) {
+    final int prime = candidates.first;
+    if (prime * prime > last) break;
+    primes.add(prime);
+    for (int i = prime; i <= last; i += prime) {
+      candidates.remove(i);
+    }
+  }
+  return primes..addAll(candidates);
+}
+
+/// Returns a list of integers from [first] to [last], both inclusive.
+List<int> range(int first, int last) {
+  return List<int>.generate(last - first + 1, (int i) => i + first);
+}
+
+int id(int x) => x;
+int add1(int i) => 1 + i;
+bool isEven(int i) => i.isEven;
+void exercise(Iterable<int> hello) {
+  if (hello.toList().length != 5) throw 'x1';
+  if (List.from(hello).length != 5) throw 'x1';
+  if (Set.from(hello).length != 4) throw 'x1';
+  if (List<int>.from(hello).where(isEven).length != 3) throw 'x1';
+  if (hello.where(isEven).length != 3) throw 'x1';
+  if (hello.map(add1).where(isEven).length != 2) throw 'x1';
+  if (hello.where(isEven).map(add1).length != 3) throw 'x1';
+}
+
+void busyWork() {
+  // A lot of busy-work calling map/where/toList/List.from to ensure the core
+  // library is used with some degree of polymorphism.
+  final L1 = 'hello'.codeUnits;
+  final L2 = Uint16List(5)..setRange(0, 5, L1);
+  final L3 = Uint32List(5)..setRange(0, 5, L1);
+  exercise(L1);
+  exercise(L2);
+  exercise(L3);
+  exercise(UnmodifiableListView<int>(L1));
+  exercise(UnmodifiableListView<int>(L2));
+  exercise(UnmodifiableListView<int>(L3));
+  exercise(L1.asMap().values);
+  exercise(L1.toList().asMap().values);
+  final M1 =
+      Map<String, int>.fromIterables(<String>['a', 'b', 'c', 'd', 'e'], L1);
+  final M2 = const <String, int>{
+    'a': 104,
+    'b': 101,
+    'c': 108,
+    'd': 108,
+    'e': 111
+  };
+  exercise(M1.values);
+  exercise(M2.values);
+}
+
+main() {
+  final benchmarks = [
+    Base(sieve, 'CollectionSieves-SplayTreeSet-removeLoop'),
+    Base(sieveSound, 'CollectionSieves-SoundSplayTreeSet-removeLoop'),
+  ];
+  for (int i = 0; i < 10; i++) {
+    busyWork();
+    for (var bm in benchmarks) {
+      bm.run();
+    }
+  }
+  for (var bm in benchmarks) {
+    bm.report();
+  }
+}
+
+class Base extends BenchmarkBase {
+  final algorithm;
+  Base(this.algorithm, String name) : super(name);
+  static final input = range(2, 5000);
+  void run() {
+    final primes = algorithm(input);
+    if (primes.length != 669) throw 'Wrong result for $name: ${primes.length}';
+  }
+}
diff --git a/benchmarks/SoundSplayTreeSieve/dart2/iterable.dart b/benchmarks/SoundSplayTreeSieve/dart2/iterable.dart
new file mode 100644
index 0000000..6870a3b
--- /dev/null
+++ b/benchmarks/SoundSplayTreeSieve/dart2/iterable.dart
@@ -0,0 +1,23 @@
+/// Marker interface for [Iterable] subclasses that have an efficient
+/// [length] implementation.
+abstract class EfficientLengthIterable<T> extends Iterable<T> {
+  const EfficientLengthIterable();
+
+  /// Returns the number of elements in the iterable.
+  ///
+  /// This is an efficient operation that doesn't require iterating through
+  /// the elements.
+  int get length;
+}
+
+/// Creates errors throw by [Iterable] when the element count is wrong.
+abstract class IterableElementError {
+  /// Error thrown thrown by, e.g., [Iterable.first] when there is no result.
+  static StateError noElement() => StateError("No element");
+
+  /// Error thrown by, e.g., [Iterable.single] if there are too many results.
+  static StateError tooMany() => StateError("Too many elements");
+
+  /// Error thrown by, e.g., [List.setRange] if there are too few elements.
+  static StateError tooFew() => StateError("Too few elements");
+}
diff --git a/benchmarks/SoundSplayTreeSieve/dart2/sound_splay_tree.dart b/benchmarks/SoundSplayTreeSieve/dart2/sound_splay_tree.dart
new file mode 100644
index 0000000..dd952f3
--- /dev/null
+++ b/benchmarks/SoundSplayTreeSieve/dart2/sound_splay_tree.dart
@@ -0,0 +1,882 @@
+// 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:collection';
+import 'iterable.dart';
+
+typedef _Predicate<T> = bool Function(T value);
+
+/// A node in a splay tree. It holds the sorting key and the left
+/// and right children in the tree.
+class _SoundSplayTreeNode<inout K> {
+  final K key;
+  _SoundSplayTreeNode<K> left;
+  _SoundSplayTreeNode<K> right;
+
+  _SoundSplayTreeNode(this.key);
+}
+
+/// A node in a splay tree based map.
+///
+/// A [_SoundSplayTreeNode] that also contains a value
+class _SoundSplayTreeMapNode<inout K, inout V> extends _SoundSplayTreeNode<K> {
+  V value;
+  _SoundSplayTreeMapNode(K key, this.value) : super(key);
+}
+
+/// A splay tree is a self-balancing binary search tree.
+///
+/// It has the additional property that recently accessed elements
+/// are quick to access again.
+/// It performs basic operations such as insertion, look-up and
+/// removal, in O(log(n)) amortized time.
+/// TODO(kallentu): Add a variance modifier to the Node type parameter.
+abstract class _SoundSplayTree<inout K, Node extends _SoundSplayTreeNode<K>> {
+  // The root node of the splay tree. It will contain either the last
+  // element inserted or the last element looked up.
+  Node get _root;
+  set _root(Node newValue);
+
+  // The dummy node used when performing a splay on the tree. Reusing it
+  // avoids allocating a node each time a splay is performed.
+  Node get _dummy;
+
+  // Number of elements in the splay tree.
+  int _count = 0;
+
+  /// Counter incremented whenever the keys in the map changes.
+  ///
+  /// Used to detect concurrent modifications.
+  int _modificationCount = 0;
+
+  /// Counter incremented whenever the tree structure changes.
+  ///
+  /// Used to detect that an in-place traversal cannot use
+  /// cached information that relies on the tree structure.
+  int _splayCount = 0;
+
+  /// The comparator that is used for this splay tree.
+  Comparator<K> get _comparator;
+
+  /// The predicate to determine that a given object is a valid key.
+  _Predicate get _validKey;
+
+  /// Comparison used to compare keys.
+  int _compare(K key1, K key2);
+
+  /// Perform the splay operation for the given key. Moves the node with
+  /// the given key to the top of the tree.  If no node has the given
+  /// key, the last node on the search path is moved to the top of the
+  /// tree. This is the simplified top-down splaying algorithm from:
+  /// "Self-adjusting Binary Search Trees" by Sleator and Tarjan.
+  ///
+  /// Returns the result of comparing the new root of the tree to [key].
+  /// Returns -1 if the table is empty.
+  int _splay(K key) {
+    if (_root == null) return -1;
+
+    // The right child of the dummy node will hold
+    // the L tree of the algorithm.  The left child of the dummy node
+    // will hold the R tree of the algorithm.  Using a dummy node, left
+    // and right will always be nodes and we avoid special cases.
+    Node left = _dummy;
+    Node right = _dummy;
+    Node current = _root;
+    int comp;
+    while (true) {
+      comp = _compare(current.key, key);
+      if (comp > 0) {
+        if (current.left == null) break;
+        comp = _compare(current.left.key, key);
+        if (comp > 0) {
+          // Rotate right.
+          _SoundSplayTreeNode<K> tmp = current.left;
+          current.left = tmp.right;
+          tmp.right = current;
+          current = tmp;
+          if (current.left == null) break;
+        }
+        // Link right.
+        right.left = current;
+        right = current;
+        current = current.left;
+      } else if (comp < 0) {
+        if (current.right == null) break;
+        comp = _compare(current.right.key, key);
+        if (comp < 0) {
+          // Rotate left.
+          Node tmp = current.right;
+          current.right = tmp.left;
+          tmp.left = current;
+          current = tmp;
+          if (current.right == null) break;
+        }
+        // Link left.
+        left.right = current;
+        left = current;
+        current = current.right;
+      } else {
+        break;
+      }
+    }
+    // Assemble.
+    left.right = current.left;
+    right.left = current.right;
+    current.left = _dummy.right;
+    current.right = _dummy.left;
+    _root = current;
+
+    _dummy.right = null;
+    _dummy.left = null;
+    _splayCount++;
+    return comp;
+  }
+
+  // Emulates splaying with a key that is smaller than any in the subtree
+  // anchored at [node].
+  // and that node is returned. It should replace the reference to [node]
+  // in any parent tree or root pointer.
+  Node _splayMin(Node node) {
+    Node current = node;
+    while (current.left != null) {
+      Node left = current.left;
+      current.left = left.right;
+      left.right = current;
+      current = left;
+    }
+    return current;
+  }
+
+  // Emulates splaying with a key that is greater than any in the subtree
+  // anchored at [node].
+  // After this, the largest element in the tree is the root of the subtree,
+  // and that node is returned. It should replace the reference to [node]
+  // in any parent tree or root pointer.
+  Node _splayMax(Node node) {
+    Node current = node;
+    while (current.right != null) {
+      Node right = current.right;
+      current.right = right.left;
+      right.left = current;
+      current = right;
+    }
+    return current;
+  }
+
+  Node _remove(K key) {
+    if (_root == null) return null;
+    int comp = _splay(key);
+    if (comp != 0) return null;
+    Node result = _root;
+    _count--;
+    // assert(_count >= 0);
+    if (_root.left == null) {
+      _root = _root.right;
+    } else {
+      Node right = _root.right;
+      // Splay to make sure that the new root has an empty right child.
+      _root = _splayMax(_root.left);
+      // Insert the original right child as the right child of the new
+      // root.
+      _root.right = right;
+    }
+    _modificationCount++;
+    return result;
+  }
+
+  /// Adds a new root node with the given [key] or [value].
+  ///
+  /// The [comp] value is the result of comparing the existing root's key
+  /// with key.
+  void _addNewRoot(Node node, int comp) {
+    _count++;
+    _modificationCount++;
+    if (_root == null) {
+      _root = node;
+      return;
+    }
+    // assert(_count >= 0);
+    if (comp < 0) {
+      node.left = _root;
+      node.right = _root.right;
+      _root.right = null;
+    } else {
+      node.right = _root;
+      node.left = _root.left;
+      _root.left = null;
+    }
+    _root = node;
+  }
+
+  Node get _first {
+    if (_root == null) return null;
+    _root = _splayMin(_root);
+    return _root;
+  }
+
+  Node get _last {
+    if (_root == null) return null;
+    _root = _splayMax(_root);
+    return _root;
+  }
+
+  void _clear() {
+    _root = null;
+    _count = 0;
+    _modificationCount++;
+  }
+}
+
+class _TypeTest<T> {
+  bool test(v) => v is T;
+}
+
+int _dynamicCompare(dynamic a, dynamic b) => Comparable.compare(a, b);
+
+Comparator<K> _defaultCompare<K>() {
+  // If K <: Comparable, then we can just use Comparable.compare
+  // with no casts.
+  Object compare = Comparable.compare;
+  if (compare is Comparator<K>) {
+    return compare;
+  }
+  // Otherwise wrap and cast the arguments on each call.
+  return _dynamicCompare;
+}
+
+/// A [Map] of objects that can be ordered relative to each other.
+///
+/// The map is based on a self-balancing binary tree. It allows most operations
+/// in amortized logarithmic time.
+///
+/// Keys of the map are compared using the `compare` function passed in
+/// the constructor, both for ordering and for equality.
+/// If the map contains only the key `a`, then `map.containsKey(b)`
+/// will return `true` if and only if `compare(a, b) == 0`,
+/// and the value of `a == b` is not even checked.
+/// If the compare function is omitted, the objects are assumed to be
+/// [Comparable], and are compared using their [Comparable.compareTo] method.
+/// Non-comparable objects (including `null`) will not work as keys
+/// in that case.
+///
+/// To allow calling [operator []], [remove] or [containsKey] with objects
+/// that are not supported by the `compare` function, an extra `isValidKey`
+/// predicate function can be supplied. This function is tested before
+/// using the `compare` function on an argument value that may not be a [K]
+/// value. If omitted, the `isValidKey` function defaults to testing if the
+/// value is a [K].
+class SoundSplayTreeMap<inout K, inout V> extends _SoundSplayTree<K, _SoundSplayTreeMapNode<K, V>>
+    with MapMixin<K, V> {
+  _SoundSplayTreeMapNode<K, V> _root;
+  final _SoundSplayTreeMapNode<K, V> _dummy = _SoundSplayTreeMapNode<K, V>(null, null);
+
+  Comparator<K> _comparator;
+  _Predicate _validKey;
+
+  SoundSplayTreeMap([int compare(K key1, K key2), bool isValidKey(potentialKey)])
+      : _comparator = compare ?? _defaultCompare<K>(),
+        _validKey = isValidKey ?? ((v) => v is K);
+
+  /// Creates a [SoundSplayTreeMap] that contains all key/value pairs of [other].
+  ///
+  /// The keys must all be instances of [K] and the values of [V].
+  /// The [other] map itself can have any type.
+  factory SoundSplayTreeMap.from(Map other,
+      [int compare(K key1, K key2), bool isValidKey(potentialKey)]) {
+    SoundSplayTreeMap<K, V> result = SoundSplayTreeMap<K, V>(compare, isValidKey);
+    other.forEach((k, v) {
+      result[k] = v;
+    });
+    return result;
+  }
+
+  /// Creates a [SoundSplayTreeMap] that contains all key/value pairs of [other].
+  factory SoundSplayTreeMap.of(Map<K, V> other,
+          [int compare(K key1, K key2), bool isValidKey(potentialKey)]) =>
+      SoundSplayTreeMap<K, V>(compare, isValidKey)..addAll(other);
+
+  /// Creates a [SoundSplayTreeMap] where the keys and values are computed from the
+  /// [iterable].
+  ///
+  /// For each element of the [iterable] this constructor computes a key/value
+  /// pair, by applying [key] and [value] respectively.
+  ///
+  /// The keys of the key/value pairs do not need to be unique. The last
+  /// occurrence of a key will simply overwrite any previous value.
+  ///
+  /// If no functions are specified for [key] and [value] the default is to
+  /// use the iterable value itself.
+  factory SoundSplayTreeMap.fromIterable(Iterable iterable,
+      {K key(element),
+      V value(element),
+      int compare(K key1, K key2),
+      bool isValidKey(potentialKey)}) {
+    SoundSplayTreeMap<K, V> map = SoundSplayTreeMap<K, V>(compare, isValidKey);
+    fillMapWithMappedIterable(map, iterable, key, value);
+    return map;
+  }
+
+  static _id(x) => x;
+
+  static void fillMapWithMappedIterable(
+      Map map, Iterable iterable, key(element), value(element)) {
+    key ??= _id;
+    value ??= _id;
+
+    for (var element in iterable) {
+      map[key(element)] = value(element);
+    }
+  }
+
+  static void fillMapWithIterables(Map map, Iterable keys, Iterable values) {
+    Iterator keyIterator = keys.iterator;
+    Iterator valueIterator = values.iterator;
+
+    bool hasNextKey = keyIterator.moveNext();
+    bool hasNextValue = valueIterator.moveNext();
+
+    while (hasNextKey && hasNextValue) {
+      map[keyIterator.current] = valueIterator.current;
+      hasNextKey = keyIterator.moveNext();
+      hasNextValue = valueIterator.moveNext();
+    }
+
+    if (hasNextKey || hasNextValue) {
+      throw ArgumentError("Iterables do not have same length.");
+    }
+  }
+
+  /// Creates a [SoundSplayTreeMap] associating the given [keys] to [values].
+  ///
+  /// This constructor iterates over [keys] and [values] and maps each element
+  /// of [keys] to the corresponding element of [values].
+  ///
+  /// If [keys] contains the same object multiple times, the last occurrence
+  /// overwrites the previous value.
+  ///
+  /// It is an error if the two [Iterable]s don't have the same length.
+  factory SoundSplayTreeMap.fromIterables(Iterable<K> keys, Iterable<V> values,
+      [int compare(K key1, K key2), bool isValidKey(potentialKey)]) {
+    SoundSplayTreeMap<K, V> map = SoundSplayTreeMap<K, V>(compare, isValidKey);
+    fillMapWithIterables(map, keys, values);
+    return map;
+  }
+
+  int _compare(K key1, K key2) => _comparator(key1, key2);
+
+  SoundSplayTreeMap._internal();
+
+  V operator [](Object key) {
+    if (!_validKey(key)) return null;
+    if (_root != null) {
+      int comp = _splay(key);
+      if (comp == 0) {
+        return _root.value;
+      }
+    }
+    return null;
+  }
+
+  V remove(Object key) {
+    if (!_validKey(key)) return null;
+    _SoundSplayTreeMapNode<K, V> mapRoot = _remove(key);
+    if (mapRoot != null) return mapRoot.value;
+    return null;
+  }
+
+  void operator []=(K key, V value) {
+    if (key == null) throw ArgumentError(key);
+    // Splay on the key to move the last node on the search path for
+    // the key to the root of the tree.
+    int comp = _splay(key);
+    if (comp == 0) {
+      _root.value = value;
+      return;
+    }
+    _addNewRoot(_SoundSplayTreeMapNode(key, value), comp);
+  }
+
+  V putIfAbsent(K key, V ifAbsent()) {
+    if (key == null) throw ArgumentError(key);
+    int comp = _splay(key);
+    if (comp == 0) {
+      return _root.value;
+    }
+    int modificationCount = _modificationCount;
+    int splayCount = _splayCount;
+    V value = ifAbsent();
+    if (modificationCount != _modificationCount) {
+      throw ConcurrentModificationError(this);
+    }
+    if (splayCount != _splayCount) {
+      comp = _splay(key);
+      // Key is still not there, otherwise _modificationCount would be changed.
+      assert(comp != 0);
+    }
+    _addNewRoot(_SoundSplayTreeMapNode(key, value), comp);
+    return value;
+  }
+
+  void addAll(Map<K, V> other) {
+    other.forEach((K key, V value) {
+      this[key] = value;
+    });
+  }
+
+  bool get isEmpty {
+    return (_root == null);
+  }
+
+  bool get isNotEmpty => !isEmpty;
+
+  void forEach(void f(K key, V value)) {
+    Iterator<_SoundSplayTreeNode<K>> nodes = _SoundSplayTreeNodeIterator<K>(this);
+    while (nodes.moveNext()) {
+      _SoundSplayTreeMapNode<K, V> node = nodes.current;
+      f(node.key, node.value);
+    }
+  }
+
+  int get length {
+    return _count;
+  }
+
+  void clear() {
+    _clear();
+  }
+
+  bool containsKey(Object key) {
+    return _validKey(key) && _splay(key) == 0;
+  }
+
+  bool containsValue(Object value) {
+    int initialSplayCount = _splayCount;
+    bool visit(_SoundSplayTreeMapNode<K, V> node) {
+      while (node != null) {
+        if (node.value == value) return true;
+        if (initialSplayCount != _splayCount) {
+          throw ConcurrentModificationError(this);
+        }
+        if (node.right != null && visit(node.right)) return true;
+        node = node.left;
+      }
+      return false;
+    }
+
+    return visit(_root);
+  }
+
+  Iterable<K> get keys => _SoundSplayTreeKeyIterable<K>(this);
+
+  Iterable<V> get values => _SoundSplayTreeValueIterable<K, V>(this);
+
+  /// Get the first key in the map. Returns [:null:] if the map is empty.
+  K firstKey() {
+    if (_root == null) return null;
+    return _first.key;
+  }
+
+  /// Get the last key in the map. Returns [:null:] if the map is empty.
+  K lastKey() {
+    if (_root == null) return null;
+    return _last.key;
+  }
+
+  /// Get the last key in the map that is strictly smaller than [key]. Returns
+  /// [:null:] if no key was not found.
+  K lastKeyBefore(K key) {
+    if (key == null) throw ArgumentError(key);
+    if (_root == null) return null;
+    int comp = _splay(key);
+    if (comp < 0) return _root.key;
+    _SoundSplayTreeNode<K> node = _root.left;
+    if (node == null) return null;
+    while (node.right != null) {
+      node = node.right;
+    }
+    return node.key;
+  }
+
+  /// Get the first key in the map that is strictly larger than [key]. Returns
+  /// [:null:] if no key was not found.
+  K firstKeyAfter(K key) {
+    if (key == null) throw ArgumentError(key);
+    if (_root == null) return null;
+    int comp = _splay(key);
+    if (comp > 0) return _root.key;
+    _SoundSplayTreeNode<K> node = _root.right;
+    if (node == null) return null;
+    while (node.left != null) {
+      node = node.left;
+    }
+    return node.key;
+  }
+}
+
+
+abstract class _SoundSplayTreeIterator<inout K, inout T> implements Iterator<T> {
+  final _SoundSplayTree<K, _SoundSplayTreeNode<K>> _tree;
+
+  /// Worklist of nodes to visit.
+  ///
+  /// These nodes have been passed over on the way down in a
+  /// depth-first left-to-right traversal. Visiting each node,
+  /// and their right subtrees will visit the remainder of
+  /// the nodes of a full traversal.
+  ///
+  /// Only valid as long as the original tree isn't reordered.
+  final List<_SoundSplayTreeNode<K>> _workList = <_SoundSplayTreeNode<K>>[];
+
+  /// Original modification counter of [_tree].
+  ///
+  /// Incremented on [_tree] when a key is added or removed.
+  /// If it changes, iteration is aborted.
+  ///
+  /// Not final because some iterators may modify the tree knowingly,
+  /// and they update the modification count in that case.
+  int _modificationCount;
+
+  /// Count of splay operations on [_tree] when [_workList] was built.
+  ///
+  /// If the splay count on [_tree] increases, [_workList] becomes invalid.
+  int _splayCount;
+
+  /// Current node.
+  _SoundSplayTreeNode<K> _currentNode;
+
+  _SoundSplayTreeIterator(_SoundSplayTree<K, _SoundSplayTreeNode<K>> tree)
+      : _tree = tree,
+        _modificationCount = tree._modificationCount,
+        _splayCount = tree._splayCount {
+    _findLeftMostDescendent(tree._root);
+  }
+
+  _SoundSplayTreeIterator.startAt(_SoundSplayTree<K, _SoundSplayTreeNode<K>> tree, K startKey)
+      : _tree = tree,
+        _modificationCount = tree._modificationCount {
+    if (tree._root == null) return;
+    int compare = tree._splay(startKey);
+    _splayCount = tree._splayCount;
+    if (compare < 0) {
+      // Don't include the root, start at the next element after the root.
+      _findLeftMostDescendent(tree._root.right);
+    } else {
+      _workList.add(tree._root);
+    }
+  }
+
+  T get current {
+    if (_currentNode == null) return null;
+    return _getValue(_currentNode);
+  }
+
+  void _findLeftMostDescendent(_SoundSplayTreeNode<K> node) {
+    while (node != null) {
+      _workList.add(node);
+      node = node.left;
+    }
+  }
+
+  /// Called when the tree structure of the tree has changed.
+  ///
+  /// This can be caused by a splay operation.
+  /// If the key-set changes, iteration is aborted before getting
+  /// here, so we know that the keys are the same as before, it's
+  /// only the tree that has been reordered.
+  void _rebuildWorkList(_SoundSplayTreeNode<K> currentNode) {
+    assert(_workList.isNotEmpty);
+    _workList.clear();
+    if (currentNode == null) {
+      _findLeftMostDescendent(_tree._root);
+    } else {
+      _tree._splay(currentNode.key);
+      _findLeftMostDescendent(_tree._root.right);
+      assert(_workList.isNotEmpty);
+    }
+  }
+
+  bool moveNext() {
+    if (_modificationCount != _tree._modificationCount) {
+      throw ConcurrentModificationError(_tree);
+    }
+    // Picks the next element in the worklist as current.
+    // Updates the worklist with the left-most path of the current node's
+    // right-hand child.
+    // If the worklist is no longer valid (after a splay), it is rebuild
+    // from scratch.
+    if (_workList.isEmpty) {
+      _currentNode = null;
+      return false;
+    }
+    if (_tree._splayCount != _splayCount && _currentNode != null) {
+      _rebuildWorkList(_currentNode);
+    }
+    _currentNode = _workList.removeLast();
+    _findLeftMostDescendent(_currentNode.right);
+    return true;
+  }
+
+  T _getValue(_SoundSplayTreeNode<K> node);
+}
+
+class _SoundSplayTreeKeyIterable<inout K> extends EfficientLengthIterable<K> {
+  _SoundSplayTree<K, _SoundSplayTreeNode<K>> _tree;
+  _SoundSplayTreeKeyIterable(this._tree);
+  int get length => _tree._count;
+  bool get isEmpty => _tree._count == 0;
+  Iterator<K> get iterator => _SoundSplayTreeKeyIterator<K>(_tree);
+
+  Set<K> toSet() {
+    SoundSplayTreeSet<K> set = SoundSplayTreeSet<K>(_tree._comparator, _tree._validKey);
+    set._count = _tree._count;
+    set._root = set._copyNode(_tree._root);
+    return set;
+  }
+}
+
+class _SoundSplayTreeValueIterable<inout K, inout V> extends EfficientLengthIterable<V> {
+  SoundSplayTreeMap<K, V> _map;
+  _SoundSplayTreeValueIterable(this._map);
+  int get length => _map._count;
+  bool get isEmpty => _map._count == 0;
+  Iterator<V> get iterator => _SoundSplayTreeValueIterator<K, V>(_map);
+}
+
+class _SoundSplayTreeKeyIterator<inout K> extends _SoundSplayTreeIterator<K, K> {
+  _SoundSplayTreeKeyIterator(_SoundSplayTree<K, _SoundSplayTreeNode<K>> map) : super(map);
+  K _getValue(_SoundSplayTreeNode<K> node) => node.key;
+}
+
+class _SoundSplayTreeValueIterator<inout K, inout V> extends _SoundSplayTreeIterator<K, V> {
+  _SoundSplayTreeValueIterator(SoundSplayTreeMap<K, V> map) : super(map);
+  V _getValue(_SoundSplayTreeNode<K> node) {
+    _SoundSplayTreeMapNode<K, V> mapNode = node;
+    return mapNode.value;
+  }
+}
+
+class _SoundSplayTreeNodeIterator<inout K>
+    extends _SoundSplayTreeIterator<K, _SoundSplayTreeNode<K>> {
+  _SoundSplayTreeNodeIterator(_SoundSplayTree<K, _SoundSplayTreeNode<K>> tree) : super(tree);
+  _SoundSplayTreeNodeIterator.startAt(
+      _SoundSplayTree<K, _SoundSplayTreeNode<K>> tree, K startKey)
+      : super.startAt(tree, startKey);
+  _SoundSplayTreeNode<K> _getValue(_SoundSplayTreeNode<K> node) => node;
+}
+
+/// A [Set] of objects that can be ordered relative to each other.
+///
+/// The set is based on a self-balancing binary tree. It allows most operations
+/// in amortized logarithmic time.
+///
+/// Elements of the set are compared using the `compare` function passed in
+/// the constructor, both for ordering and for equality.
+/// If the set contains only an object `a`, then `set.contains(b)`
+/// will return `true` if and only if `compare(a, b) == 0`,
+/// and the value of `a == b` is not even checked.
+/// If the compare function is omitted, the objects are assumed to be
+/// [Comparable], and are compared using their [Comparable.compareTo] method.
+/// Non-comparable objects (including `null`) will not work as an element
+/// in that case.
+class SoundSplayTreeSet<inout E> extends _SoundSplayTree<E, _SoundSplayTreeNode<E>>
+    with IterableMixin<E>, SetMixin<E> {
+  _SoundSplayTreeNode<E> _root;
+  final _SoundSplayTreeNode<E> _dummy = _SoundSplayTreeNode<E>(null);
+
+  Comparator<E> _comparator;
+  _Predicate _validKey;
+
+  /// Create a new [SoundSplayTreeSet] with the given compare function.
+  ///
+  /// If the [compare] function is omitted, it defaults to [Comparable.compare],
+  /// and the elements must be comparable.
+  ///
+  /// A provided `compare` function may not work on all objects. It may not even
+  /// work on all `E` instances.
+  ///
+  /// For operations that add elements to the set, the user is supposed to not
+  /// pass in objects that doesn't work with the compare function.
+  ///
+  /// The methods [contains], [remove], [lookup], [removeAll] or [retainAll]
+  /// are typed to accept any object(s), and the [isValidKey] test can used to
+  /// filter those objects before handing them to the `compare` function.
+  ///
+  /// If [isValidKey] is provided, only values satisfying `isValidKey(other)`
+  /// are compared using the `compare` method in the methods mentioned above.
+  /// If the `isValidKey` function returns false for an object, it is assumed to
+  /// not be in the set.
+  ///
+  /// If omitted, the `isValidKey` function defaults to checking against the
+  /// type parameter: `other is E`.
+  SoundSplayTreeSet([int compare(E key1, E key2), bool isValidKey(potentialKey)])
+      : _comparator = compare ?? _defaultCompare<E>(),
+        _validKey = isValidKey ?? ((v) => v is E);
+
+  /// Creates a [SoundSplayTreeSet] that contains all [elements].
+  ///
+  /// The set works as if created by `new SplayTreeSet<E>(compare, isValidKey)`.
+  ///
+  /// All the [elements] should be instances of [E] and valid arguments to
+  /// [compare].
+  /// The `elements` iterable itself may have any element type, so this
+  /// constructor can be used to down-cast a `Set`, for example as:
+  /// ```dart
+  /// Set<SuperType> superSet = ...;
+  /// Set<SubType> subSet =
+  ///     new SplayTreeSet<SubType>.from(superSet.whereType<SubType>());
+  /// ```
+  factory SoundSplayTreeSet.from(Iterable elements,
+      [int compare(E key1, E key2), bool isValidKey(potentialKey)]) {
+    SoundSplayTreeSet<E> result = SoundSplayTreeSet<E>(compare, isValidKey);
+    for (final element in elements) {
+      E e = element;
+      result.add(e);
+    }
+    return result;
+  }
+
+  /// Creates a [SoundSplayTreeSet] from [elements].
+  ///
+  /// The set works as if created by `new SplayTreeSet<E>(compare, isValidKey)`.
+  ///
+  /// All the [elements] should be valid as arguments to the [compare] function.
+  factory SoundSplayTreeSet.of(Iterable<E> elements,
+          [int compare(E key1, E key2), bool isValidKey(potentialKey)]) =>
+      SoundSplayTreeSet(compare, isValidKey)..addAll(elements);
+
+  Set<T> _newSet<T>() =>
+      SoundSplayTreeSet<T>((T a, T b) => _comparator(a as E, b as E), _validKey);
+
+  Set<R> cast<R>() => Set.castFrom<E, R>(this, newSet: _newSet);
+  int _compare(E e1, E e2) => _comparator(e1, e2);
+
+  // From Iterable.
+
+  Iterator<E> get iterator => _SoundSplayTreeKeyIterator<E>(this);
+
+  int get length => _count;
+  bool get isEmpty => _root == null;
+  bool get isNotEmpty => _root != null;
+
+  E get first {
+    if (_count == 0) throw IterableElementError.noElement();
+    return _first.key;
+  }
+
+  E get last {
+    if (_count == 0) throw IterableElementError.noElement();
+    return _last.key;
+  }
+
+  E get single {
+    if (_count == 0) throw IterableElementError.noElement();
+    if (_count > 1) throw IterableElementError.tooMany();
+    return _root.key;
+  }
+
+  // From Set.
+  bool contains(Object element) {
+    return _validKey(element) && _splay(element) == 0;
+  }
+
+  bool add(E element) {
+    int compare = _splay(element);
+    if (compare == 0) return false;
+    _addNewRoot(_SoundSplayTreeNode(element), compare);
+    return true;
+  }
+
+  bool remove(Object object) {
+    if (!_validKey(object)) return false;
+    return _remove(object) != null;
+  }
+
+  void addAll(Iterable<E> elements) {
+    for (E element in elements) {
+      int compare = _splay(element);
+      if (compare != 0) {
+        _addNewRoot(_SoundSplayTreeNode(element), compare);
+      }
+    }
+  }
+
+  void removeAll(Iterable<Object> elements) {
+    for (Object element in elements) {
+      if (_validKey(element)) _remove(element);
+    }
+  }
+
+  void retainAll(Iterable<Object> elements) {
+    // Build a set with the same sense of equality as this set.
+    SoundSplayTreeSet<E> retainSet = SoundSplayTreeSet<E>(_comparator, _validKey);
+    int modificationCount = _modificationCount;
+    for (Object object in elements) {
+      if (modificationCount != _modificationCount) {
+        // The iterator should not have side effects.
+        throw ConcurrentModificationError(this);
+      }
+      // Equivalent to this.contains(object).
+      if (_validKey(object) && _splay(object) == 0) {
+        retainSet.add(_root.key);
+      }
+    }
+    // Take over the elements from the retained set, if it differs.
+    if (retainSet._count != _count) {
+      _root = retainSet._root;
+      _count = retainSet._count;
+      _modificationCount++;
+    }
+  }
+
+  E lookup(Object object) {
+    if (!_validKey(object)) return null;
+    int comp = _splay(object);
+    if (comp != 0) return null;
+    return _root.key;
+  }
+
+  Set<E> intersection(Set<Object> other) {
+    Set<E> result = SoundSplayTreeSet<E>(_comparator, _validKey);
+    for (E element in this) {
+      if (other.contains(element)) result.add(element);
+    }
+    return result;
+  }
+
+  Set<E> difference(Set<Object> other) {
+    Set<E> result = SoundSplayTreeSet<E>(_comparator, _validKey);
+    for (E element in this) {
+      if (!other.contains(element)) result.add(element);
+    }
+    return result;
+  }
+
+  Set<E> union(Set<E> other) {
+    return _clone()..addAll(other);
+  }
+
+  SoundSplayTreeSet<E> _clone() {
+    var set = SoundSplayTreeSet<E>(_comparator, _validKey);
+    set._count = _count;
+    set._root = _copyNode(_root);
+    return set;
+  }
+
+  // Copies the structure of a SplayTree into a new similar structure.
+  // Works on _SplayTreeMapNode as well, but only copies the keys,
+  _SoundSplayTreeNode<E> _copyNode(_SoundSplayTreeNode<E> node) {
+    if (node == null) return null;
+    return _SoundSplayTreeNode<E>(node.key)
+      ..left = _copyNode(node.left)
+      ..right = _copyNode(node.right);
+  }
+
+  void clear() {
+    _clear();
+  }
+
+  Set<E> toSet() => _clone();
+
+  String toString() => IterableBase.iterableToFullString(this, '{', '}');
+}
diff --git a/benchmarks/TypedDataDuplicate/dart2/TypedDataDuplicate.dart b/benchmarks/TypedDataDuplicate/dart2/TypedDataDuplicate.dart
new file mode 100644
index 0000000..afebf7a
--- /dev/null
+++ b/benchmarks/TypedDataDuplicate/dart2/TypedDataDuplicate.dart
@@ -0,0 +1,118 @@
+// 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.
+
+// Micro-benchmarks for copying typed data lists.
+
+import 'dart:typed_data';
+
+import 'package:benchmark_harness/benchmark_harness.dart';
+
+abstract class Uint8ListCopyBenchmark extends BenchmarkBase {
+  final int size;
+  Uint8List input;
+  Uint8List result;
+
+  Uint8ListCopyBenchmark(String method, this.size)
+      : super('TypedDataDuplicate.Uint8List.$size.$method');
+
+  void setup() {
+    input = Uint8List(size);
+    for (int i = 0; i < size; ++i) {
+      input[i] = (i + 3) & 0xff;
+    }
+  }
+
+  void warmup() {
+    for (int i = 0; i < 100; ++i) {
+      run();
+    }
+  }
+
+  void teardown() {
+    for (int i = 0; i < size; ++i) {
+      if (result[i] != ((i + 3) & 0xff)) {
+        throw 'Unexpected result';
+      }
+    }
+  }
+}
+
+class Uint8ListCopyViaFromListBenchmark extends Uint8ListCopyBenchmark {
+  Uint8ListCopyViaFromListBenchmark(int size) : super('fromList', size);
+
+  void run() {
+    result = Uint8List.fromList(input);
+  }
+}
+
+class Uint8ListCopyViaLoopBenchmark extends Uint8ListCopyBenchmark {
+  Uint8ListCopyViaLoopBenchmark(int size) : super('loop', size);
+
+  void run() {
+    result = Uint8List(input.length);
+    for (var i = 0; i < input.length; i++) {
+      result[i] = input[i];
+    }
+  }
+}
+
+abstract class Float64ListCopyBenchmark extends BenchmarkBase {
+  final int size;
+  Float64List input;
+  Float64List result;
+
+  Float64ListCopyBenchmark(String method, this.size)
+      : super('TypedDataDuplicate.Float64List.$size.$method');
+
+  void setup() {
+    input = Float64List(size);
+    for (int i = 0; i < size; ++i) {
+      input[i] = (i - 7).toDouble();
+    }
+  }
+
+  void teardown() {
+    for (int i = 0; i < size; ++i) {
+      if (result[i] != (i - 7).toDouble()) {
+        throw 'Unexpected result';
+      }
+    }
+  }
+}
+
+class Float64ListCopyViaFromListBenchmark extends Float64ListCopyBenchmark {
+  Float64ListCopyViaFromListBenchmark(int size) : super('fromList', size);
+
+  void run() {
+    result = Float64List.fromList(input);
+  }
+}
+
+class Float64ListCopyViaLoopBenchmark extends Float64ListCopyBenchmark {
+  Float64ListCopyViaLoopBenchmark(int size) : super('loop', size);
+
+  void run() {
+    result = Float64List(input.length);
+    for (var i = 0; i < input.length; i++) {
+      result[i] = input[i];
+    }
+  }
+}
+
+main() {
+  final sizes = [8, 32, 256, 16384];
+  final benchmarks = [
+    for (int size in sizes) ...[
+      Uint8ListCopyViaLoopBenchmark(size),
+      Uint8ListCopyViaFromListBenchmark(size)
+    ],
+    for (int size in sizes) ...[
+      Float64ListCopyViaLoopBenchmark(size),
+      Float64ListCopyViaFromListBenchmark(size)
+    ]
+  ];
+  for (var bench in benchmarks) {
+    bench.report();
+  }
+}
diff --git a/benchmarks/Utf8Decode/dart2/Utf8Decode.dart b/benchmarks/Utf8Decode/dart2/Utf8Decode.dart
new file mode 100644
index 0000000..a1b423d
--- /dev/null
+++ b/benchmarks/Utf8Decode/dart2/Utf8Decode.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.
+//
+// Benchmark for UTF-8 decoding
+
+import 'dart:convert';
+import 'dart:typed_data';
+
+import 'package:benchmark_harness/benchmark_harness.dart';
+
+import 'datext_latin1_10k.dart';
+import 'entext_ascii_10k.dart';
+import 'netext_3_10k.dart';
+import 'rutext_2_10k.dart';
+import 'sktext_10k.dart';
+import 'zhtext_10k.dart';
+
+class Utf8Decode extends BenchmarkBase {
+  final String language;
+  final String text;
+  final int size;
+  final bool allowMalformed;
+  List<Uint8List> chunks;
+  int totalInputSize;
+  int totalOutputSize;
+
+  static String _makeName(String language, int size, bool allowMalformed) {
+    String name = "Utf8Decode.$language.";
+    name += size >= 1000000
+        ? "${size ~/ 1000000}M"
+        : size >= 1000 ? "${size ~/ 1000}k" : "$size";
+    if (allowMalformed) name += ".malformed";
+    return name;
+  }
+
+  Utf8Decode(this.language, this.text, this.size, this.allowMalformed)
+      : super(_makeName(language, size, allowMalformed));
+
+  @override
+  void setup() {
+    Uint8List data = utf8.encode(text) as Uint8List;
+    if (data.length != 10000) {
+      throw "Expected input data of exactly 10000 bytes.";
+    }
+    if (size < data.length) {
+      // Split into chunks.
+      chunks = <Uint8List>[];
+      int startPos = 0;
+      for (int pos = size; pos < data.length; pos += size) {
+        int endPos = pos;
+        while ((data[endPos] & 0xc0) == 0x80) {
+          endPos--;
+        }
+        chunks.add(Uint8List.fromList(data.sublist(startPos, endPos)));
+        startPos = endPos;
+      }
+      chunks.add(Uint8List.fromList(data.sublist(startPos, data.length)));
+      totalInputSize = data.length;
+      totalOutputSize = text.length;
+    } else if (size > data.length) {
+      // Repeat data to the desired length.
+      final Uint8List expanded = Uint8List(size);
+      for (int i = 0; i < size; i++) {
+        expanded[i] = data[i % data.length];
+      }
+      chunks = <Uint8List>[expanded];
+      totalInputSize = size;
+      totalOutputSize = text.length * size ~/ data.length;
+    } else {
+      // Use data as is.
+      chunks = <Uint8List>[data];
+      totalInputSize = data.length;
+      totalOutputSize = text.length;
+    }
+  }
+
+  @override
+  void run() {
+    int lengthSum = 0;
+    for (int i = 0; i < chunks.length; i++) {
+      final String s = utf8.decode(chunks[i], allowMalformed: allowMalformed);
+      lengthSum += s.length;
+    }
+    if (lengthSum != totalOutputSize) {
+      throw "Output length doesn't match expected.";
+    }
+  }
+
+  @override
+  void exercise() {
+    // Only a single run per measurement.
+    run();
+  }
+
+  @override
+  void warmup() {
+    BenchmarkBase.measureFor(run, 1000);
+  }
+
+  @override
+  double measure() {
+    // Report time per input byte.
+    return super.measure() / totalInputSize;
+  }
+
+  @override
+  void report() {
+    // Report time in nanoseconds.
+    final double score = measure() * 1000.0;
+    print("$name(RunTime): $score ns.");
+  }
+}
+
+void main(List<String> args) {
+  const texts = {
+    "en": en,
+    "da": da,
+    "sk": sk,
+    "ru": ru,
+    "ne": ne,
+    "zh": zh,
+  };
+  final bool testMalformed =
+      args != null && args.isNotEmpty && args.first == "malformed";
+  final benchmarks = [
+    // Only benchmark with allowMalformed: false unless specified otherwise.
+    for (bool allowMalformed in [false, if (testMalformed) true])
+      for (int size in [10, 10000, 10000000])
+        for (String language in texts.keys)
+          () => Utf8Decode(language, texts[language], size, allowMalformed)
+  ];
+
+  benchmarks.forEach((bm) => bm().report());
+}
diff --git a/benchmarks/Utf8Decode/dart2/datext_latin1_10k.dart b/benchmarks/Utf8Decode/dart2/datext_latin1_10k.dart
new file mode 100644
index 0000000..866ff83
--- /dev/null
+++ b/benchmarks/Utf8Decode/dart2/datext_latin1_10k.dart
@@ -0,0 +1,62 @@
+// This text is an extract from the Danish Wikipedia article about Donald Duck
+// (Anders And): https://da.wikipedia.org/wiki/Anders_And
+//
+// The extract is based on the Wikipedia database dump. All markup has been
+// removed using WikiExtractor: https://github.com/attardi/wikiextractor
+//
+// The material is licensed under the Creative Commons Attribution-Share-Alike
+// License 3.0: https://creativecommons.org/licenses/by-sa/3.0/
+
+const String da = """
+Anders And
+
+Anders Fauntleroy And er en berømt figur i Disneys tegnefilm og tegneserier. Selv om han ikke er særligt populær i USA, optræder han i mange ugeblade i Europa: I Norge, Tyskland, Sverige, Danmark, Holland, Italien med flere. Hans første optræden var i tegnefilmen "The Wise Little Hen" (Den kloge lille høne) fra 9. juni 1934. Hans karakteristiske stemme blev indtalt af radiokomikeren Clarence Nash, der siden fast lagde stemme til.
+Efter Nash' død i 1985 overtog tegnefilmsdubberen Tony Anselmo. Det var i øvrigt Nash selv, der trænede Anselmo til at lyde som Anders And. I Danmark har tre lagt stemme til Anders And: Bjarne H. Hansen, Dick Kaysø og Peter Zhelder. Dick Kaysø og Peter Zhelder lægger stadigvæk stemme til ham.
+
+Anders And var en bifigur til filmen Den lille kloge Høne, han havde et langt spidst næb og en utrolig kort lunte; der skulle ikke meget til for at udløse et raserianfald hos ham. Klassikerne er fra 1930'erne, hvor Mickey, Fedtmule og Anders er et trekløver, der er film som "Mickeys Campingvogn," "Tårnuret" og "Ensomme Spøgelser." Fred Spencer og Dick Lundy var animatorer. Efterhånden opnåede anden større popularitet, hvad der ikke rigtig huede Disney, der ikke brød sig om den krakilske and. Men Anders blev forfremmet til hovedfigur i en serie film, der begyndte med "Anders And og Strudsen" i 1938. Med den var det "ande-teamet" hos Disney født: instruktøren Jack King og assistenterne Carl Barks (den senere serieskaber), Chuck Couch, Harry Reeves og Jack Hannah. Han var stadigvæk en hidsigprop, men han blev gjort mere nuanceret, og nye figurer blev tilføjet som nevøerne Rip, Rap og Rup, kæresten Andersine And og i en enkelt film Fætter Guf.
+
+Under 2. verdenskrig blev der lavet film om anden i militærtjeneste, som han selvfølgelig gør meget klodset. Mest kendt er "Der Fuehrers Face" fra 1943, hvor anden drømmer, at han er i diktaturstaten Nutziland. Den film blev arkiveret af Disney efter krigen, men er senere vist meget uofficielt. Desuden medvirkede han i to mindre kendte spillefilm "Saludos Amigos" 1943 og "The Three Caballeros" 1945, der gav et lystigt billede af livet i Latinamerika.
+
+Efter krigen blev omgivelserne mere hjemlige, men næppe mere fredfyldte. I 1947 overtog Jack Hannah pladsen som instruktør. Filmene handlede ofte om klammeri med andre, det kunne være en bi, Chip og Chap eller bare ting han ikke kunne få til at makke ret. Anders var her ofte plageånden, hvis egne drillerier kom tilbage som en boomerang.
+
+Fjernsynets fremmarch i 1950'erne satte snart stopper for de korte tegnefilm, og Jack Hannah blev sat til at redigere Disneys tv-shows og kæde de korte tegnefilm sammen i et længere forløb. Her blev Anders gjort mere sympatisk, men det var eksperten i alt, Raptus von And, der gjorde mest for tv-showet. I et andet tv-show Disney Sjov medvirkede Anders i tv-serierne Rip, Rap og Rup på eventyr, Bonkers, og Rap Sjak. I Rip, Rap og Rup på eventyr, var han sjældent med, men fik et nyt tøj. I Rap Sjak var hans matrostøj skiftet ud med en hawaii-skjorte med røde og hvide blomster. I Bonkers var han også med kort tid.
+
+Anders And gik til tegneserien allerede tidligt efter sin debut i 1934, hvor han i avisstriber optrådte med sin makker fra "The Wise Little Hen," Peter Gris. Fra den 10. februar 1935 blev han en del af Mickeys avisstribe som musens kujonagtige og drillesyge ven, men fra 1936 kaprede han hovedrollen i Silly Symphony-striben. Forfatteren Ted Osborne og tegneren Al Taliaferro, der stod bag serieudgaven af The Wise Little Hen, pressede på, og da det blev en succes kunne forfatteren Bob Karp i samarbejde med Taliaferro lave andens egen avisstribe.
+
+Det blev en populær serie. I de allertidligste serier var Anders en hidsig, ondskabsfuld og pueril and med langt spidst næb og hænder, der knap kunne skelnes fra vinger. Senere blev han mere voksen, da han fik ansvaret for sine tre nevøer Rip, Rap og Rup, og kæresten Andersine kom til sammen med Bedstemor And.
+
+Tegneseriefiguren Anders And blev senere udviklet yderligere af Carl Barks. I de tidlige tegnefilm var han for det meste doven og hidsig; men for at gøre hans figur brugbar til en tegneserie besluttede Barks at udvide hans personlighed. Anders' mest gennemgående karaktertræk er hans notoriske uheld, som desuden har den narrative funktion at give adgang til spændende eventyr, uden at serien udvikler sig for meget. På denne måde kan Anders eksempelvis blive involveret i alverdens skattejagter, og da han altid ender med at miste den fundne gevinst, kan alle historierne starte fra samme udgangspunkt. 
+
+For at give Anders en verden at bo i, skabte Barks byen Andeby i den amerikanske stat Calisota (som er en blanding af de to amerikanske stater Californien og Minnesota) med indbyggere som den rige onkel Joakim von And, den heldige Fætter Højben og den dygtige opfinder Georg Gearløs. 
+
+Anders lægger med sit engelske navn Donald Duck i øvrigt navn til donaldismen, fankulturen omkring Disney-tegneserier og -tegnefilm, som den norske forfatter Jon Gisle udviklede med sin bog af samme navn. 
+
+Anders bor i Andeby på Paradisæblevej 111 med sine tre nevøer Rip, Rap og Rup. De er stort set identiske, men de kan i nogle historier identificeres på, hvilken farve kasket de har på. 
+
+Ifølge Disneytegneserieforfatteren Don Rosa var Anders født et eller andet sted omkring 1920  men dette er "ikke" officielt. Ifølge Carl Barks' stamtræ (senere udviklet og genbygget af Don Rosa for den danske udgiver Egmont Serieforlaget) er Anders' forældre Hortensia von And og Rapmus And. Anders har en søster ved navn Della And, men hverken hun eller Anders' forældre optræder i tegnefilmene eller tegneserierne bortset fra særlige steder som eksempelvis i Her er dit liv, Joakim. Ifølge Don Rosa er Anders og Della tvillinger. 
+
+Fra tegnefilmen "Mr. Duck Steps Out" har Anders' kæreste været Andersine And, men han går i stadig fare for at miste hende til den heldige Fætter Højben. I nogle italienske historier er Anders også superhelt under dæknavnet "Stålanden".
+
+Anders' onkel, Joakim von And, er den rigeste and i verden.
+
+Sammen med onkelen og nevøerne Rip, Rap og Rup har Anders And rejst jorden rundt til mange forskellige lande og steder. Blandt disse er landet Langtbortistan, hvis navn blev opfundet af den danske oversætter Sonja Rindom og senere er gledet ind i almindeligt, dansk sprogbrug.
+
+I de tidlige historier af Carl Barks havde Anders en hale, der stak langt bagud. Han havde langt næb og lang hals, og hans matrostrøje havde fire knapper. Hans lange hals passede godt til egenskaben nysgerrighed og det lange næb til hans hidsighed, hvilket var to egenskaber, der prægede ham mest. Disse tidlige historier var også præget af en grov komik i stil med tegnefilmene.
+
+Siden fik han et mere strømlinet udseende og kortere næb (dog ikke så kort som visse tegnere i 1960'erne gjorde det!) og kun to knapper på trøjen, et udseende de øvrige andetegnere også tager til sig. Her blev hans natur også mere sammensat, og han ligner mest af alt en tragisk helt. Komikken kommer mere og mere til at ligge i replikkerne.
+
+Anders And optræder særligt i jumbobøgerne med en hemmelig identitet i form af superhelten Stålanden. Figuren er inspireret af Batman og er skabt af den italienske forfatter Guido Martina i samarbejde med kunstneren Giovan Battista Carpi i 1969 i hans italienske navn Paperinik. Ofte tegnet af Romano Scarpa.
+
+I lighed med inspirationskilden er han maskeret og har et hav af tekniske opfindelser, som han bruger i kamp mod forbryderne og  overvejende!  i kamp for at redde sit andet jeg, Anders And, ud af kniben. Den eneste, som kender hans hemmelige identitet, er opfinderen Georg Gearløs, som har udstyret gamle 313 med moderne udstyr og finurligheder. Det er ikke så tit at Stålanden optræder; næsten kun i Jumbobøger, men har dog også optrådt i Anders And-bladene med en gæstehistorie, hvor Stålanden kæmper mod en tidligere fjende, som nu havde kaldt sig Lord Hvalros.
+
+Efter at Stålanden i starten af 1990'erne ikke var benyttet så meget af historieskriverne, forsvandt han næsten ud af Disney-universet indtil 1996, hvor en ny serie, "Stålanden på nye eventyr", startede med Stålanden i hovedrollen (umiddelbart inspireret af Marvel universet). Denne relancering af Stålanden gav karakteren det ekstra, der skulle til for at få et godt comeback.
+
+I modsætning til størstedelen af Anders And-tegneserier har denne serie en sammenhængende forløb. I serien optræder kun sjældent de andre figurer fra de normale Anders And tegneserier; oftest er det kun en kort birolle eller en reference, men til gengæld er en mængde nye figurer kommet til. 
+
+Serien starter med, at Anders And er ansat som vicevært i Ducklair Tower, et højhus bygget af mangemilliardæren Everett Ducklair, en fremragende videnskabsmand og opfinder, som forlod Andeby og drog til et tibetansk kloster, Dhasam-Bul. Anders finder Globus, en kunstig intelligens skabt af Ducklair, samt Ducklair's arsenal af våben og opfindelser. Dette bliver starten på Anders' liv som Stålanden.
+En mængde temaer var ofte i centrum for historierne, bl.a. tidsrejser og Tidspolitiets kamp med tidspiraterne fra Organisationen, invasion fra rummet af de magtsyge evronianere, Stålandens samarbejde med FBI og meget mere.
+
+Serien fik en fornyelse i 2001, hvilket ændrede markant på historierne. Everett Ducklair vender tilbage, slukker Globus, smider Stålanden ud af Ducklair Tower og genopretter sit gamle imperium. Undervejs bliver Ducklair's to døtre afsløret. De hader begge Everett af grunde, der ikke bliver afsløret til fulde, selvom det bliver antydet, at Everett skilte sig af med deres mor på en eller anden måde.
+Denne fornyelse holdt 18 numre, før serien blev afsluttet, dog uden at historierne fik en slutning.
+
+Barks-historien "Anders And og den gyldne hjelm" fra 1954 kom i 2006 med i """;
diff --git a/benchmarks/Utf8Decode/dart2/entext_ascii_10k.dart b/benchmarks/Utf8Decode/dart2/entext_ascii_10k.dart
new file mode 100644
index 0000000..9353d6d
--- /dev/null
+++ b/benchmarks/Utf8Decode/dart2/entext_ascii_10k.dart
@@ -0,0 +1,35 @@
+// This text is an extract from the English Wikipedia article about Anarchism:
+// https://en.wikipedia.org/wiki/Anarchism
+//
+// The extract is based on the Wikipedia database dump. All markup has been
+// removed using WikiExtractor: https://github.com/attardi/wikiextractor
+//
+// The material is licensed under the Creative Commons Attribution-Share-Alike
+// License 3.0: https://creativecommons.org/licenses/by-sa/3.0/
+
+const String en = """
+Anarchism
+
+Anarchism is a radical political movement that is highly skeptical towards authority and rejects all forms of unjust hierarchy. It calls for the abolition of the state which it holds to be undesirable, unnecessary, and harmful. Anarchism advocates for the replacement of the state with stateless societies or other forms of free associations.
+
+Anarchism's timeline stretches back to prehistory when people lived in anarchistic societies long before the establishment of formal states, kingdoms or empires. With the rise of organised hierarchical bodies, skepticism towards authority also rose, but it was not until the 19th century a self-conscious political movement was formed. During the latest half of 19th and the first decades of 20th century, the anarchist movement flourished to most parts of the world, and had a significant role in worker's struggles for emancipation. Various branches of anarchism were espoused during those times. Anarchists took part in several revolutions, most notably in the Spanish Civil War, where they were crushed by the fascists forces in 1939, marking the end of the classical era of anarchism. In the latest decades of the 20th century, the anarchist movement nonetheless became relevant and vivid once more. 
+
+Anarchism employ various tactics in order to meet their ideal ends; these can be broadly separated in revolutionary and evolutionary tactics. There is significant overlap between the two legs which are merely descriptive. Revolutionary tactics aim to bring down authority and state, and have taken a violent turn in the past. Evolutionary tactics aim to prefigure what an anarchist society would be like. Anarchism's thought, criticism and praxis has played a part in diverse fields of human society.
+
+The etymological origin of the word "anarchism" is from the ancient Greek word "anarkhia", meaning "without a ruler", composed of the prefix "an-" (i.e. "without") and the word "arkhos" (i.e. "leader" or "ruler"). The suffix -ism denotes the ideological current that favours anarchy. The word "anarchism" appears in English from 1642 as "anarchisme" and the word "anarchy" from 1539. Various factions within the French Revolution labelled their opponents as "anarchists", although few such accused shared many views with later anarchists. Many revolutionaries of the 19th century such as William Godwin (17561836) and Wilhelm Weitling (18081871) would contribute to the anarchist doctrines of the next generation, but they did not use the word "anarchist" or "anarchism" in describing themselves or their beliefs.
+
+The first political philosopher to call himself an "anarchist" () was Pierre-Joseph Proudhon (18091865), marking the formal birth of anarchism in the mid-19th century. Since the 1890s and beginning in France, the term "libertarianism" has often been used as a synonym for anarchism and its use as a synonym is still common outside the United States. On the other hand, some use "libertarianism" to refer to individualistic free-market philosophy only, referring to free-market anarchism as libertarian anarchism.
+
+While opposition to the state is central to anarchist thought, defining anarchism is not an easy task as there is a lot of talk among scholars and anarchists on the matter and various currents perceive anarchism slightly differently. Hence, it might be true to say that anarchism is a cluster of political philosophies opposing authority and hierarchical organization (including the state, capitalism, nationalism and all associated institutions) in the conduct of all human relations in favour of a society based on voluntary association, on freedom and on decentralisation, but this definition has the same shortcomings as the definition based on etymology (which is simply a negation of a ruler), or based on anti-statism (anarchism is much more than that) or even the anti-authoritarian (which is an "a posteriori" conclusion). Nonetheless, major elements of the definition of anarchism include the following:
+
+During the prehistoric era of mankind, an established authority did not exist. It was after the creation of towns and cities that institutions of authority were established and anarchistic ideas espoused as a reaction. Most notable precursors to anarchism in the ancient world were in China and Greece. In China, philosophical anarchism (i.e the discussion on the legitimacy of the state) was delineated by Taoist philosophers Zhuangzi and Lao Tzu. Likewise, anarchic attitudes were articulated by tragedians and philosophers in Greece. Aeschylus and Sophocles used the myth of Antigone to illustrate the conflict between rules set by the state and personal autonomy. Socrates questioned Athenian authorities constantly and insisted to the right of individual freedom of consciousness. Cynics dismissed human law ("nomos") and associated authorities while trying to live according to nature ("physis"). Stoics were supportive of a society based on unofficial and friendly relations among its citizens without the presence of a state.
+
+During the Middle Ages, there was no anarchistic activity except some ascetic religious movements in the Islamic world or in Christian Europe. This kind of tradition later gave birth to religious anarchism. In Persia, Mazdak called for an egalitarian society and the abolition of monarchy, only to be soon executed by the king. In Basra, religious sects preached against the state. In Europe, various sects developed anti-state and libertarian tendencies. Libertarian ideas further emerged during the Renaissance with the spread of reasoning and humanism through Europe. Novelists fictionalised ideal societies that were based not on coercion but voluntarism. The Enlightenment further pushed towards anarchism with the optimism for social progress.
+
+During the French Revolution, the partisan groups of Enrags and saw a turning point in the fermentation of anti-state and federalist sentiments. The first anarchist currents developed throughout the 18th centuryWilliam Godwin espoused philosophical anarchism in England, morally delegitimizing the state, Max Stirner's thinking paved the way to individualism, and Pierre-Joseph Proudhon's theory of mutualism found fertile soil in France. This era of classical anarchism lasted until the end of the Spanish Civil War of 1936 and is considered the golden age of anarchism.
+Drawing from mutualism, Mikhail Bakunin founded collectivist anarchism and entered the International Workingmen's Association, a class worker union later known as the First International that formed in 1864 to unite diverse revolutionary currents. The International became a significant political force, and Karl Marx a leading figure and a member of its General Council. Bakunin's faction, the Jura Federation and Proudhon's followers, the mutualists, opposed Marxist state socialism, advocating political abstentionism and small property holdings. After bitter disputes the Bakuninists were expelled from the International by the Marxists at the 1872 Hague Congress. Bakunin famously predicted that if revolutionaries gained power by Marxist's terms, they would end up the new tyrants of workers. After being expelled, anarchists formed the St. Imier International. Under the influence of Peter Kropotkin, a Russian philosopher and scientist, anarcho-communism overlapped with collectivism. Anarcho-communists, who drew inspiration from the 1871 Paris Commune, advocated for free federation and distribution of goods according to one's needs.
+
+At the turning of the century, anarchism had spread all over the world. In China, small groups of students imported the humanistic pro-science version of anarcho-communism. Tokyo was a hotspot for rebellious youth from countries of the far east, pouring into the Japanese capital to study. In Latin America, So Paulo was a stronghold for anarcho-syndicalism where it became the most prominent left-wing ideology. During this time, a minority of anarchists adopted tactics of revolutionary political violence. This strategy became known as propaganda of the deed. The dismemberment of the French socialist movement into many groups and the execution and exile of many Communards to penal colonies following the suppression of the Paris Commune favoured individualist political expression and acts. Even though many anarchists distanced themselves from these terrorist acts, infamy came upon the movement. Illegalism was another strategy which some anarchists adopted these same years.
+Anarchists enthusiastically participated in the Russian Revolutiondespite concernsin opposition to the Whites. However, they met harsh suppression after the Bolshevik government was stabilized. Several anarchists from Petrograd and Moscow fled to Ukraine, notably leading to the Kronstadt rebellion and Nestor Makhno's struggle in the Free Territory. With the anarchists being crushed in Russia, two new antithetical currents emerged, namely platformism and synthesis anarchism. The former sought to create a coherent group that would push for the revolution while the latter were against anything that would resemble a political party. Seeing the victories of the Bolsheviks in the October Revolution and the resulting Russian Civil War, many workers and activists turned to communist parties which grew at the expense of anarchism and other socialist movements. In France and the United States, members of major syndicalist movements, the General Confederation of Labour and Industrial Workers of the World, left their organisations and joined the Communist International.
+
+In the Spanish Civil War, anarchists and syndicalists (CNT and FAI) once again allied themselves with various currents of leftists. A long tradition of Spanish anarchism led to anarchists playing a pivotal role in the war. In response to the army rebellion, an anarchist-inspired movement of peasants and workers, supported by armed militias, took control of Barcelona and of large areas of rural Spain where they collectivised """;
diff --git a/benchmarks/Utf8Decode/dart2/netext_3_10k.dart b/benchmarks/Utf8Decode/dart2/netext_3_10k.dart
new file mode 100644
index 0000000..be53bc3
--- /dev/null
+++ b/benchmarks/Utf8Decode/dart2/netext_3_10k.dart
@@ -0,0 +1,24 @@
+// This text is an extract from the Nepali Wikipedia article about Nepal
+// (नेपाल): https://ne.wikipedia.org/wiki/नेपाल
+//
+// The extract is based on the Wikipedia database dump. All markup has been
+// removed using WikiExtractor: https://github.com/attardi/wikiextractor
+//
+// The material is licensed under the Creative Commons Attribution-Share-Alike
+// License 3.0: https://creativecommons.org/licenses/by-sa/3.0/
+
+const String ne = """
+नेपाल
+
+नेपाल (आधिकारिक नाम: सङ्घीय लोकतान्त्रिक गणतन्त्र नेपाल) दक्षिण एसियाली भूपरिवेष्ठित हिमाली राष्ट्र हो । यसको भौगोलिक अक्षांश २६ डिग्री २२ मिनेटदेखि ३० डिग्री २७ मिनेट उत्तर र ८० डिग्री ४ मिनेटदेखि ८८ डिग्री १२ मिनेट पूर्वी देशान्तरसम्म फैलिएको छ । यसको कूल क्षेत्रफल १,४७,१८१ वर्ग कि.मि छ । यो क्षेत्रफल पृथ्वीको कूल क्षेत्रफलको ०.०३% र एसिया महादेशको ०.३% पर्दछ । लण्डन स्थित "ग्रीनवीच मिनटाइम" भन्दा पूर्वतर्फ रहेकोले गौरीशङ्कर हिमालको नजिक भएर जाने ८६ डिग्री १५ मिनेट पूर्वी देशान्तरलाई आधार मानी नेपालको प्रमाणिक समय ५ घण्टा ४५ मिनेट आगाडि मानिएको छ ।
+
+नेपालको पूर्वी सीमाना मेची नदीदेखि पश्चिमी सीमाना महाकाली नदीसम्मको औसत लम्वाई ८८५ कि.मि. छ । उत्तरदेखि दक्षिणको चौडाई भने एकनासको छैन । पूर्वी भागभन्दा पश्चिमी भाग केही चौडा छ । त्यस्तै मध्य भाग भने केही खुम्चिएको छ । यसमा अधिकतम चौडाई २४१ कि.मि. र न्यूनतम चौडाई १४५ कि.मि. रहेको छ । यसर्थ नेपालको औसत चौडाई १९३ कि.मि. रहेको छ । नेपालको उत्तरमा चीनको स्वशासित क्षेत्र तिब्बत पर्दछ भने दक्षिण, पूर्व र पश्चिममा भारत पर्दछ । नेपालका ८०% भन्दा बढी नागरिक हिन्दू धर्म मान्दछन् जुन विश्वकै सबैभन्दा बढी प्रतिशत हिन्दू धर्मावलम्बी हुने राष्ट्र पनि हो । यसबाहेक बौद्ध, इस्लाम, किराॅत आदि धर्म मान्ने मानिसहरू पनि यहाँ बसोबास गर्दछन् । एउटा सानो क्षेत्रको लागि नेपालको भौगोलिक विविधता निकै उल्लेखनीय छ । यहाँ तराईका उष्ण फाँटदेखि चिसा हिमालयका शृंखला अवस्थित छन् । संसारका सबैभन्दा उच्च १४ हिमश्रृंखलाहरु मध्ये ८ वटा नेपालमा पर्दछन्, जसमध्ये संसारको सर्वोच्च शिखर सगरमाथा (नेपाल र चीनको सीमानामा पर्ने) पनि एक हो । नेपालको प्रमुख सहर एवं राजधानी काठमाडौं हो । काठमाडौं, ललितपुर र भक्तपुर सहरहरूलाई काठमाडौं उपत्यका भनेर चिनिन्छ । अन्य प्रमुख सहरहरूमा भरतपुर, बिराटनगर, भैरहवा, वीरगञ्ज, जनकपुर, पोखरा, नेपालगञ्ज, धनगढी र महेन्द्रनगर पर्दछन् । 
+
+नेपाल शब्दको उत्त्पत्ति बारेमा ठोस प्रमाण त उपलब्ध छैन, तर एक प्रसिद्ध विश्वास अनुसार मरिची ॠषि पुत्र 'ने' मुनिले पालन गरेको ठाउँको रूपमा यहाँको नाम नेपाल रहन गएको हो । निरन्तर रूपमा राजा-रजौटाहरूको अधीनमा रहेर फुट्ने र जुट्ने लामो तथा सम्पन्न इतिहास बोकेको, अहिले नेपाल भनेर चिनिने यो खण्डले वि. सं. २०४६ सालको आन्दोलन पश्चात् संवैधानिक राजतन्त्रको नीति अवलम्बन गर्‍यो । तर यस पश्चात् पनि राजसंस्था एक महत्त्वपूर्ण तथा अस्पष्ट परिधि तथा शक्ति भएको संस्थाको रूपमा रहिरह्यो । यो व्यवस्थामा पहिले संसदीय अनिश्चितता तथा सन् १९९६ देखि ने.क.पा.(माओवादी)को जनयुद्धको कारणले राष्ट्रिय अनिश्चितता देखियो । 
+
+माओवादीहरूले राजनीतिको मूलाधारबाट अल्लगिएर भूमिगत रूपमा राजतन्त्र तथा मूलाधारका राजनीतिक दलहरूको विरुद्धमा गुरिल्ला युद्ध सञ्चालन गरे, जसको कारण १३,००० भन्दा बढी मानिसहरूको ज्यान जान पुग्यो । यही विद्रोहलाई दमन गर्ने पृष्ठभूमिमा राजाले सन् २००२ मा संसदको विघटन गरी निर्वाचित प्रधानमन्त्रीलाई अपदस्त गरेर प्रधानमन्त्री मनोनित गर्दै शासन चलाउन थाले । सन् २००५ मा उनले एकनासै संकटकालको घोषणा गरेर सबै कार्यकारी शक्ति ग्रहण गरे। सन् २००६को लोकतान्त्रिक आन्दोलन (जनाअन्दोलन-२) पश्चात् राजाले देशको सार्वभौमसत्ता जनतालाई हस्तान्तरण गरे तथा अप्रिल २४, २००६ मा भंग गरिएको संसद पूनर्स्थापित भयो । मे १८, २००६ मा आफूले पाएको सार्वभौमसत्ताको उपयोग गर्दै नयाँ प्रतिनिधि सभाले राजाको अधिकारमा कटौती गर्‍यो तथा नेपाललाई एक धर्मनिरपेक्ष राष्ट्र घोषणा गर्‍यो । अन्तरिम व्यवस्थापिका संसदले पहिले नै घोषणा गरिसकेको "सङ्घीय लोकतान्त्रिक गणराज्य, संविधानसभा" को पहिलो बैठकबाट मे २८, २००८ मा आधिकारिक रूपमा कार्यान्वयन भयो । नेपालको भूगोल सानो भए पनी नेपालीहरु को मन ठुलो छ ।
+
+हिमालय क्षेत्रमा मानिसहरू बस्न थालेको कम्तिमा पनि ९,००० वर्ष भएको कुरा काठमाडौं उपत्यकामा पाइएका प्राचीन औजारहरूबाट पुष्टि हुन्छ। सम्भवत: भोट-बर्मेली मूलका मानिसहरू नेपालमा २,५०० वर्ष अगाडि बसोबास गर्दथे। 
+
+ईशापूर्व १५०० तिर इन्डो-आर्यन जातिहरू उपत्यका प्रवेश गरे। ईशापूर्वको १००० तिर स-साना राज्यहरू र राज्यसङ्गठनहरू बने। सिद्धार्थ गौतम (ईशापूर्व ५६३–४८३) त्यस्तै एक वंश, शाक्यवंशका राजकुमार थिए, जसले आफ्नो राजकाज त्यागी तपस्वीको जीवन अँगाले र उनी बुद्ध भनेर विश्व प्रसिद्ध भए। 
+ईशापूर्वको २५० सम्ममा, यो क्षेत्र उत्तर""";
diff --git a/benchmarks/Utf8Decode/dart2/rutext_2_10k.dart b/benchmarks/Utf8Decode/dart2/rutext_2_10k.dart
new file mode 100644
index 0000000..50b0130
--- /dev/null
+++ b/benchmarks/Utf8Decode/dart2/rutext_2_10k.dart
@@ -0,0 +1,44 @@
+// This text is an extract from the Russian Wikipedia article about Lithuania
+// (Литва): https://ru.wikipedia.org/wiki/Литва
+//
+// The extract is based on the Wikipedia database dump. All markup has been
+// removed using WikiExtractor: https://github.com/attardi/wikiextractor
+//
+// The material is licensed under the Creative Commons Attribution-Share-Alike
+// License 3.0: https://creativecommons.org/licenses/by-sa/3.0/
+
+const String ru = """
+Литва
+
+Литва́ (), официальное название  Лито́вская Респу́блика ()  государство, расположенное в северной части Европы. Столица страны  Вильнюс.
+
+Площадь  км². Протяжённость с севера на юг  280 км, а с запада на восток  370 км. Население составляет человек (сентябрь, 2019). Занимает 140-е место место в мире по численности населения и 121-е по территории. Имеет выход к Балтийскому морю, расположена на его восточном побережье. Береговая линия составляет всего 99 км (наименьший показатель среди государств Балтии). На севере граничит с Латвией, на юго-востоке  с Белоруссией, на юго-западе  с Польшей и Калининградской областью России.
+
+Член ООН с 1991 года, ЕС и НАТО  с 2004 года, ОЭСР  с мая 2018 года. Входит в Шенгенскую зону и Еврозону.
+
+Независимость страны провозглашена 11 марта 1990 года, а юридически оформлена 6 сентября 1991 года. .
+
+Этимология слова «Литва» точно не известна, при этом существует множество версий, ни одна из которых не получила всеобщего признания. Корень «лит» и его варианты «лет»/«лют» допускают различные толкования как в балтских и славянских, так и в других индоевропейских языках. Так, например, существуют созвучные топонимы на территории Словакии «"Lytva"» и Румынии «"Litua"», известные с XIXII веков. По мнению Е. Поспелова, топоним образован от древнего названия реки Летава (Lietavà от «лить», русское «Летаука»). Феодальное княжество, по землям которого протекала эта река, со временем заняло ведущее положение и название было распространено на всё государство. В «Повести временных лет» (XII век) упоминается этноним «литва», полностью совпадающий с названием местности «Литва» и по смыслу (территория, где живёт литва), и по форме.
+
+Поверхность  равнинная со следами древнего оледенения. Поля и луга занимают 57 % территории, леса и кустарники  30 %, болота  6 %, внутренние воды  1 %.
+
+Высшая точка  293,84 м над уровнем моря  холм Аукштояс (или Аукштасис калнас) в юго-восточной части страны, в 23,5 км от Вильнюса.
+
+Крупнейшие реки  Неман и Вилия.
+Более 3 тыс. озёр (1,5 % территории): крупнейшее из них  Друкшяй на границе Латвии, Литвы и Белоруссии (площадь 44,8 км²), самое глубокое  Таурагнас, 61 м), самое длинное  Асвея длинной в 30 км у местечка Дубингяй.
+
+Климат переходный от морского к континентальному. Средняя температура зимой 5 °C, летом +17 °C. Выпадает 748 мм осадков в год.
+
+Полезные ископаемые: торф, минеральные материалы, строительные материалы.
+
+Территория современной Литвы была заселена людьми с конца XIX тысячелетия до н. э. Жители занимались охотой и рыболовством, использовали лук и стрелы с кремнёвыми наконечниками, скребки для обработки кожи, удочки и сети. В конце неолита (IIIII тысячелетия до н. э.) на территорию современной Литвы проникли индоевропейские племена. Они занимались земледелием и скотоводством, при этом охота и рыболовство оставались основными занятиями местных жителей вплоть до широкого распространения железных орудий труда. Индоевропейцы, заселившие земли между устьями Вислы и Западной Двины, выделились в отдельную группу, названную учёными балтами.
+
+Традиционно считается, что этническая основа Литвы сформирована носителями археологической культуры восточнолитовских курганов, сложившейся в V веке н. э. на территории современных Восточной Литвы и Северо-Западной Белоруссии. Около VII века литовский язык отделился от латышского.
+
+Становление государственности на территории современной Литвы относят к XIII веку, при этом само название «Литва» впервые упомянуто в Кведлинбургских анналах под 1009 годом в сообщении об убийстве язычниками миссионера Бруно на границе Руси и Литвы. По наиболее распространённой версии, топоним возник от названия небольшой реки Летаука, притока Няриса. Согласно более современной гипотезе, название страны могло произойти от этнонима «леты» или «лейти», которым жители окрестных земель называли дружинников литовских князей.
+
+В начале XIII века в земли балтов-язычников с запада началось вторжение немецких рыцарей-крестоносцев. Они покорили Пруссию и Ливонию. В это же время с юга началась экспансия Галицко-Волынского княжества. К середине XIII века многие литовские земли были объединены под властью князя Миндовга, принявшего в 1251 году католическое крещение и коронованного в 1253 году. Через несколько лет Миндовг отрёкся от христианства и до начала XIV века литовские земли оставались языческими. Несмотря на то, что уже в 1263 году Миндовг был свергнут, его правление положило начало более чем пятисотлетнему существованию Великого княжества Литовского.
+
+В XIV  начале XV веках территория Великого княжества Литовского стремительно росла, в основном за счёт присоединения земель Западной Руси. Включение в состав государства славянских земель, многократно превышающих по площади и количеству населения собственно литовские земли, привело к перениманию литовскими князьями, получившими во владение русские земли, православной культуры и западнорусского языка. Со временем западнорусский язык стал официальным языком канцелярии великих князей. Собственно литовский язык до XVI века оставался бесписьменным, хотя и продолжал использоваться на этнически литовских землях.
+
+В 1385 году великий князь литовский Ягайло заключил Кревскую унию с Королевством Польским. По условиям унии, Ягайло обязался присоединить Великое княжество Литовское к Королевству Польскому и крестить литовские земли по католическому обряду, а сам становился королём Польши и сохранял титул великого князя литовского. Однако вскоре он вынужден был уступить власть в Великом княжестве Литовском своему двоюродному брату Витовту.""";
diff --git a/benchmarks/Utf8Decode/dart2/sktext_10k.dart b/benchmarks/Utf8Decode/dart2/sktext_10k.dart
new file mode 100644
index 0000000..b1ce251
--- /dev/null
+++ b/benchmarks/Utf8Decode/dart2/sktext_10k.dart
@@ -0,0 +1,46 @@
+// This text is an extract from the Slovak Wikipedia article about Esperanto:
+// https://sk.wikipedia.org/wiki/Esperanto
+//
+// The extract is based on the Wikipedia database dump. All markup has been
+// removed using WikiExtractor: https://github.com/attardi/wikiextractor
+//
+// The material is licensed under the Creative Commons Attribution-Share-Alike
+// License 3.0: https://creativecommons.org/licenses/by-sa/3.0/
+
+const String sk = """
+Esperanto (pôvodne Lingvo Internacia – „medzinárodný jazyk“) je najrozšírenejší medzinárodný plánový jazyk. Názov je odvodený od pseudonymu, pod ktorým v roku 1887 zverejnil lekár L. L. Zamenhof základy tohto jazyka. Zámerom tvorcu bolo vytvoriť ľahko naučiteľný a použiteľný neutrálny jazyk, vhodný na použitie v medzinárodnej komunikácii. Cieľom nebolo nahradiť národné jazyky, čo bolo neskôr aj deklarované v Boulonskej deklarácii.
+
+Hoci žiaden štát neprijal esperanto ako úradný jazyk, používa ho komunita s odhadovaným počtom hovoriacich 100 000 až 2 000 000, z čoho približne 2 000 tvoria rodení hovoriaci. V Poľsku je na zozname nemateriálneho kultúrneho dedičstva. Získalo aj isté medzinárodné uznania, napríklad dve rezolúcie UNESCO či podporu známych osobností verejného života. V súčasnosti sa esperanto využíva pri cestovaní, korešpondencii, medzinárodných stretnutiach a kultúrnych výmenách, kongresoch, vedeckých diskusiách, v pôvodnej aj prekladovej literatúre, divadle a kine, hudbe, tlačenom aj internetovom spravodajstve, rozhlasovom a televíznom vysielaní.
+
+Slovná zásoba esperanta pochádza predovšetkým zo západoeurópskych jazykov, zatiaľ čo jeho skladba a tvaroslovie ukazujú na silný slovanský vplyv. Morfémy sú nemenné a je možné ich kombinovať takmer bez obmedzení do rozmanitých slov; esperanto má teda mnoho spoločného s analytickými jazykmi, ako je čínština, zatiaľ čo vnútorná stavba jeho slov pripomína jazyky aglutinačné, ako je japončina, swahilčina alebo turečtina.
+
+Pri zrode esperanta stál Ludwik Lejzer Zamenhof. Vyrastal v mnohojazyčnom, vtedy ruskom, teraz poľskom meste Białystok, kde bol svedkom častých sporov medzi jednotlivými národnosťami (Rusi, Poliaci, Nemci, Židia). Pretože za jednu z hlavných príčin týchto sporov považoval neexistenciu spoločného jazyka, začal už ako školák pracovať na projekte reči, ktorá by túto funkciu mohla plniť. Mala byť, na rozdiel od národných jazykov, neutrálna a ľahko naučiteľná, teda prijateľná ako druhý jazyk pre všetkých, jazyk vyučovaný spoločne s národnými jazykmi a používaný v situáciách vyžadujúcich dorozumenie medzi národmi.
+
+Zamenhof najskôr uvažoval o oživení latinčiny, ktorú sa učil v škole, ale usúdil, že je pre bežné dorozumievanie zbytočne zložitá. Keď študoval angličtinu, všimol si, že časovanie slovies podľa osoby a čísla nie je nutné; že gramatický systém jazyka môže byť oveľa jednoduchší, než sa dovtedy nazdával. Stále však zostávala prekážka v memorovaní sa veľkého množstva slov. Raz Zamenhofa zaujali dva ruské nápisy: "швейцарская" [švejcarskaja] (vrátnica, odvodené od "швейцар" [švejcar] – vrátnik) a "кондитерская" [konditerskaja] (cukráreň, odvodené od "кондитер" [konditér] – cukrár). Tieto slová rovnakého zakončenia mu vnukli myšlienku, že používanie pravidelných predpôn a prípon by mohlo významne znížiť množstvo slovných koreňov nutných na dorozumenie sa. Aby boli korene čo najmedzinárodnejšie, rozhodol sa prevziať slovnú zásobu predovšetkým z románskych a germánskych jazykov, teda tých, ktoré boli vtedy v školách po celom svete vyučované najčastejšie.
+Prvý Zamenhofov projekt, nazvaný "Lingwe uniwersala," bol viac-menej hotový už v roku 1878, ale autorov otec, učiteľ jazykov, považoval túto prácu za márnu a utopistickú, a zrejme preto rukopis, ktorý mu bol zverený, zničil. V rokoch 1879 – 1885 Zamenhof študoval medicínu v Moskve a vo Varšave. V tej dobe začal znova pracovať na medzinárodnom jazyku. Prvú obnovenú verziu vyučoval v roku 1879 pre svojich priateľov. Po niekoľkých rokoch už prekladal poéziu, aby jazyk čo najviac zdokonalil. V roku 1885 autor napísal: 
+
+Zamenhofovi prichádzalo veľa nadšených listov, ktoré často prinášali najrôznejšie návrhy úprav jazyka. Všetky podnety zaznamenával a neskoršie ich začal uverejňovať v časopise "Esperantisto", vychádzajúcom v Norimbergu. V tom istom časopise aj dal o úpravách dvakrát hlasovať, väčšina čitateľov však so zmenami nesúhlasila. Po týchto hlasovaniach na určitý čas utíchli hlasy volajúce po reforme a jazyk sa začal rozširovať. Najviac odberateľov mal časopis vo vtedajšom Rusku. Veľkou ranou preň bolo, keď ruská cenzúra jeho šírenie zakázala kvôli článku Leva Nikolajeviča Tolstého. Časopis kvôli tomu musel byť zrušený, krátko na to bol však vystriedaný novým, nazvaným "Lingvo Internacia." Najskôr ho redigovali vo švédskej Uppsale, neskôr v Maďarsku a nakoniec v Paríži, kde jeho vydávanie zastavila až prvá svetová vojna.
+
+Nový medzinárodný jazyk začali jeho používatelia skoro používať aj na organizáciu odbornej a záujmovej činnosti na medzinárodnej úrovni. V prvých desaťročiach prebiehala komunikácia v esperante takmer výhradne písomnou formou. Ale po nečakane úspešnom prvom Svetovom kongrese esperanta, usporiadanom v roku 1905 vo francúzskom meste Boulogne-sur-Mer, na ktorom sa overili možnosti používania tejto reči v hovorenej forme, začali naberať na intenzite aj osobné kontakty.
+
+Esperanto začali pre svoju činnosť používať aj rôzne organizácie a hnutia. Už na svetovom kongrese v Barcelone roku 1909 sa uskutočnilo niekoľko stretnutí prítomných katolíkov, ktorí sa nakoniec rozhodli usporiadať v nadchádzajúcom roku, 1910, samostatný kongres katolíckych esperantistov. Počas neho bolo založené Medzinárodné združenie katolíckych esperantistov (IKUE – Internacia Katolika Unuiĝo Esperantista). Časopis "Espero Katolika" ("Katolícka nádej") vychádzal už od roku 1903 a s viac ako 100 rokmi svojej existencie je dnes najdlhšie vychádzajúcim esperantským periodikom.
+
+V roku 1912 sa Zamenhof pri slávnostnom prejave ôsmeho Svetového kongresu esperanta v Krakove vzdal svojej oficiálnej úlohy v hnutí. Desiaty kongres sa mal konať v roku 1914 v Paríži, prihlásilo sa naň takmer 4 000 ľudí, ale nakoniec ho zrušili pre začínajúcu vojnu, Zamenhof sa vtedy musel vrátiť domov cez škandinávske štáty.
+
+Po vojne túžba po harmónii a mieri vzbudila nové nádeje, vďaka čomu sa esperanto veľmi rýchlo šírilo. Prvý povojnový kongres sa konal v roku 1920 v Haagu, 13. svetový kongres v 1921 v Prahe. V roku 1927 bolo vo viedenskom Hofburgu otvorené Medzinárodné esperantské múzeum, v roku 1929 bolo pripojené k Rakúskej národnej knižnici a dnes sídli v samostatnej budove.
+
+Snahy o presadenie esperanta ako univerzálneho jazyka sa stretávali s pozitívnou odozvou: Petíciu v jeho prospech adresovanú Organizácii Spojených národov podpísalo vyše 80 miliónov ľudí, v Česko-Slovensku napríklad prof. Jaroslav Heyrovský, nositeľ Nobelovej ceny.
+
+Valné zhromaždenie UNESCO prijalo podobné rezolúcie v Montevideu 10. decembra 1954 a v Sofii 8. novembra 1985. Vzalo v nich na vedomie "výsledky dosiahnuté esperantom na poli medzinárodnej duchovnej výmeny aj zblíženia národov sveta" a vyzvalo členské štáty, "aby sa chopili iniciatívy pri zavádzaní študijných programov o jazykovom probléme a esperante na svojich školách a inštitúciách vyššieho vzdelávania".
+
+K esperantu sa hlásila aj rada predsedov Poľskej akadémie vied. Jubilejného 72. Svetového kongresu esperanta roku 1987 (100. výročie uverejnenia prvej učebnice jazyka) sa vo Varšave zúčastnilo takmer 6 000 ľudí zo 60 národov.
+
+Pokroky dosiahli aj katolícki esperantisti – roku 1990 bol vydaný dokument "Norme per la celebrazione della Messa in esperanto", ktorým Svätá stolica povoľuje vysluhovať sväté omše v tomto jazyku bez zvláštneho povolenia. Esperanto sa tak stalo jediným schváleným umelým liturgickým jazykom katolíckej cirkvi.
+
+Skutočnosť, že mnohé z cieľov esperantského hnutia sa doteraz nepodarilo naplniť, je často prisudzovaná okrem iného technologickej a kultúrnej dominancii Spojeného kráľovstva a Spojených štátov amerických, predovšetkým v období po druhej svetovej vojne, vďaka čomu je v súčasnosti dorozumievacím jazykom väčšiny medzinárodných činností angličtina.
+
+Už na začiatku 20. storočia bolo na území dnešného Slovenska (vtedy severná časť Uhorska) činné esperantské hnutie. Esperantistov a kluby zastrešovala „Uhorská esperantská spoločnosť” a „Verda Standardo”. V Prahe boli činné spolky "Bohema Unio Esperantista", ktorý prijímal len organizácie a kluby, a "Bohema Asocio Esperantista", ktorý prijímal jednotlivcov. Oba spolky vydávali svoje časopisy. V roku 1907, 20 rokov po zverejnení jazyka Zamenhofom, vydal tolstojovec Albert Škarvan spolu s Rusom N. P. Evstifejevom prvú učebnicu esperanta v slovenčine, „Základy medzinárodnej reči ESPERANTO“.
+
+Po prvej svetovej vojne sa oba pražské spolky zlúčili do "Československej Esperantskej Asociácie". Tá bola v roku 1936 premenovaná na "Esperantskú Asociáciu v Československej republike". V tomto období bolo hnutie veľmi aktívne, fungovalo mnoho klubov, konalo sa veľa prednášok a kurzov. Esperanto bolo vyučované na školách rôznych stupňov, rádio Bratislava od 1930 vysielalo kurzy a od 1932 aj kultúrny program v esperante. Bola vydaná "Československá antológia" predstavujúca diela 20 slovenských autorov. V rámci protifašistickej aktivity vychádzali aj preklady protifašistických článkov z esperantských časopisov z obdobia Španielskej občianskej vojny.
+
+Druhá svetová vojna utlmila esperantské hnutie. Bratislavský esperantský klub požiadal o zmenu štatútu a rozšírenie poľa pôsobnosti na celú vtedajšiu Slovenskú republiku a následne sa stal strediskom esperantského hnutia na Slovensku.""";
diff --git a/benchmarks/Utf8Decode/dart2/zhtext_10k.dart b/benchmarks/Utf8Decode/dart2/zhtext_10k.dart
new file mode 100644
index 0000000..dc81c6d6
--- /dev/null
+++ b/benchmarks/Utf8Decode/dart2/zhtext_10k.dart
@@ -0,0 +1,73 @@
+// This text is an extract from the Chinese Wikipedia article about Kanji
+// (汉字): https://zh.wikipedia.org/wiki/汉字
+//
+// The extract is based on the Wikipedia database dump. All markup has been
+// removed using WikiExtractor: https://github.com/attardi/wikiextractor
+//
+// The material is licensed under the Creative Commons Attribution-Share-Alike
+// License 3.0: https://creativecommons.org/licenses/by-sa/3.0/
+
+const String zh = """
+最簡單的漢字只有一笔画,但卻不止一個字:除了「一」字以外,「乙」、「〇」、「丶」、「丨」、「亅」、「丿」、「乀」、「乁」、「𠄌」、「𠃋」、「𠃉」、「𠃊」、「乚」等都是漢字,而且都有各自的讀音。
+
+中文汉字中,笔画最多的汉字可能是“”,是一种面食的名称,此字至今习用,其不同写法的笔画数在54至71画之间不等。被传统辞典收录的笔画最多的汉字为《字汇补》、《汉语大字典》中由四个“-{龍}-”字组成的「」字,共64画;同樣屬於64劃的字由四個“-{興}-”字組成的“𠔻”字,收入自《中文大辭典》;之後的是由四個「雷」字組成的“䨻”字,有52劃,收錄於《說文解字》。
+
+另外,日本汉字「」收录于日本的TRON计划中,但此字无法提供有效证据表明其确有使用,因此状况存疑。该字由3個「-{龍}-」字和3個「-{雲}-」個組合而成,共有84劃。该字曾提交到当时的统一码扩展C区,编号为JMK66147,后因扩展C区的时间原因被安排到了扩展D区,之后因找不到合适证据被撤销。最后提交到扩展G区并被接受。
+
+現在,純漢字僅僅被用於記錄漢語。而漢字和假名一起被用於記錄日語。
+
+其他一些民族在早期會將漢字單純作為表音文字來記錄他們的語言。如蒙古語最早的文獻蒙古秘史即用純漢字當做表音文字進行記錄。日語最早的文獻也是把漢字當做表音文字來記錄日語,後來演變出萬葉假名。
+
+契丹文、女真文、西夏文的創製受到了漢字的影響,它們跟漢字一樣都是方塊型文字,筆畫形狀也極其類似,也採用類似六書的造字法。但這些文字除個別字與漢字外形相同外,絕大部分字形都跟漢字不同,因此在Unicode中它們都是獨立區塊編碼的。
+
+古壯字(方塊壯字)、古白字(方塊白字)、古布依字(方塊布依字)、字喃等文字可以說是漢字在其他語言中的擴充,因為它們很大一部分本身就是漢字(賦予新義),另一些則是用已有漢字偏旁組合構成新字,因此,這些文字的外觀上與漢字很相似,在Unicode中與漢字一道編入漢字區。
+
+女書是用於記錄漢語的另一種文字,它們的造字法與六書有部分相似之處,但字的外觀與漢字差異較大,Unicode中作為獨立區塊編碼。
+
+以上文字都因各種原因而消亡,如今除專家學者外無幾人能識。
+
+日語的假名()是由漢字的草體、簡筆演變而成的。諺文和日語假名一樣可以和漢字一同混寫。
+
+此外如蒙古文、滿文、錫伯文等也是在漢字書寫方式和書寫工具的影響下,將從右向左書寫的源自察合台文的書寫方式改為從上到下書寫,文字的結構也隨之有所變化。
+
+漢字是承載文化的重要工具,目前留有大量用漢字書寫的典籍。不同的方言、甚至語言都使用漢字作為共同書寫體系。在古代日本、朝鮮半島、越南、琉球群島,以及位於婆羅洲的蘭芳共和國,漢字都曾是該國正式文書的唯一系統,因而漢字在歷史上對文明的傳播分享有著重要作用。
+
+由於漢字和發聲的聯繫不是非常密切,比較容易被其他民族所借用,如日本、朝鮮半島和越南都曾經有過不會說漢語,單純用漢字書寫的歷史階段。漢字的這個特點對於維繫一個文化圈—一個充滿各種互相不能交流的方言群體的民族——發揮了主要的作用。
+
+漢字對周邊國家的文化產生過巨大的影響,形成了一個共同使用漢字的漢字文化圈,在日本、越南和朝鮮半島、琉球群島,漢字被融合成它們語言的文字「」、「」、「」。直到現在,日語中仍然把漢字認為是書寫體系的一部分。在北韓和越南,已經完全不再使用漢字;在韓國,漢字的使用在近幾十年來越來越少;但是由於朝鮮語/韓語中使用了大量的漢字詞彙,並且重音現象嚴重,所以在需要嚴謹表達的場合時仍然會使用漢字。雖然在通常情況下人名、公司機構名稱等均使用韓文書寫,不過大多數的人名、公司機構均有其對應的漢字名稱。
+
+漢字於公元3世紀經朝鮮半島輾轉傳入日本。二戰後日本開始限制漢字的數量和使用,頒布了《當用漢字表》及《人名用字表》等,其中簡化了部分漢字(日本新字體),不過文學創作使用的漢字,並不在限制之列。日本除從中文中傳入的漢字外,還創造和簡化了一些漢字,如「-{辻}-」(十字路口)、「-{栃}-」、「-{峠}-」(山道)和「-{広}-」(廣)、「-{転}-」(轉)、「-{働}-」(勞動)等。
+
+公元3世紀左右,漢字傳入了朝鮮半島,朝鮮語/韓語曾經完全使用漢字來書寫。相傳薛聰在當時發明了吏讀,把朝鮮語用同音或同義的漢字來表示。例如:「乙」字被用來表示韓語中的後綴「-l()」。由於有不少發音都沒有對應的漢字,所以朝鮮半島的人民又運用組字法,把兩個或多個漢字合組成為一個新的吏讀字。相傳後來的契丹文就是受到吏讀字的影響。此外尚有鄉札、口訣等以漢字表記朝鮮語的方法。
+
+1443年,朝鮮世宗大王頒布《訓民正音》,發明了諺文與漢字一起使用,但當中有不少部件仍然有昔日吏讀字的痕跡。現在的大韓民國雖禁止在正式場合下使用漢字,並停止了在中小學中教授漢字(但是從2011年開始,大韓民國的李明博政府已經決定將漢字重新納入中小學的課程裡),不過漢字在民間仍在繼續使用,且可以按照個人習慣書寫,但是現在能寫一筆漂亮漢字的韓國人越來越少。朝鮮民主主義人民共和國於1948年廢除了漢字,僅保留了十幾個漢字(參見廢除漢字)。
+
+公元1世紀漢字便傳入了越南,越南語也曾完全使用漢字做為書寫用文字,並在漢字的基礎上創造了喃字,但是由於書寫不便,漢字仍是主要的書寫方式。
+
+1945年越南民主共和國成立後廢除漢字,使用了稱為「國語字」的拼音文字。現在的越南文已經看不出漢字的痕跡了。
+
+中國許多民俗都與漢字有關,例如:
+
+漢字獨特優美的結構,書寫的主要工具——毛筆有多樣的表現力,因而產生了中文獨特的造型藝術——書法。而篆刻是和書法相關的藝術,用刀在石材上雕刻出篆字作為印章,尚有勒石、山壁題字等。
+同一个汉字,可以有不同的字体。當前漢字字體主要有篆書、隷書、草書、行書、楷書等。
+
+漢字歷史上是不斷在組新字的,目前的各種漢字並非同时定型于某一年代,而是應時代需要逐渐發展而来的。例如:“人”字在商朝就已出现,“凹”字和“凸”字則是在唐朝才出現的。
+
+此外不同的行業也会因用字需求而造字。例如:中国的傳統音乐在記譜上會使用減字譜、工尺譜。
+
+自十九世紀中葉後,亞洲和西方都發佈了很多漢字拉丁化方案,如:
+
+現在,漢語拼音方案是使用最廣且被聯合國接受的汉字拉丁化方案。而威妥瑪拼音歷史悠久,至今仍用於臺灣的人名、地名拼寫。
+汉字中存在许多异体字,它们的意义和读音完全相同,只是写法不同。异体字的产生部分是由于历史原因,有的则是人为造字,如「和、咊、-{龢}-」、「秋、-{秌}-、龝」等。
+
+臺灣也有使用所謂的異體字,例如“-{臺}-”與“-{台}-”、“-{體}-”與“-{体}-”以及“-{學}-”與“-{学}-”等等。
+
+中国大陆於1956年公布整理异体字表,废除了大量异体字,但後來因為各種原因恢復了部分異體字。如“-{於}-”曾被當作“-{于}-”的異體字廢除掉,但在1988年發表的《現代漢語通用字表》中又恢復成為規範字,因爲姓氏中「-{于}-」和「-{於}-」同時存在,不宜合併。另外,不同地區對異體字的取捨有所不同,例如:韓國就以漢字各種異體字中最早出現的樣式為標準寫法。所以,在韓語漢字的標準中,取“甛”而不取“甜”、取“-{幇}-”而不取“-{幫}-”、取“-{畵}-”而不取“-{畫}-”。
+
+由于英文文字是由26个字母排列组合而成的文字,因此可以简化输入步骤;相比较之下汉字则不能如此,从字形上汉字虽然可以拆解成不同的部分,但是被分成的部首或偏旁数量过多,这样不但不能达到简化输入的目的,反而显得更为繁琐。于是从汉字字音上去考虑,汉字输入被分成少量的语音元素组合排列,反而可以达到简化输入的步骤。因为是语音输入对汉字的读音必须清楚,某些生僻字或不知道汉字发音的则会很困难,这在一定程度上限制了汉字的输入。
+
+由于打字機鍵盤是為歐美文字設計的,在設計時本身沒有考慮汉字輸入的問題,輸入漢字往往比輸入拼音文字困難。汉字没有经过中文打字機的普及,直接进入了電腦中文信息处理阶段。在電腦發明初期曾引起漢字能否適應電腦時代的問題,支持漢字拉丁化的學者甚至以此為理據。
+
+随着各种中文输入法的出现,汉字的计算机输入、存储、输出技术得到了基本解决,大大提高了中文写作、出版、信息检索等的效率。目前中文输入法有上千种之多,主要包括表音输入和表形输入两类,也有两者兼之的。汉字的语音输入、手写识别和光学字符识别(OCR)技术也已得到广泛应用。
+
+如收录数千字的GB 2312(中國大陸)、B""";
diff --git a/docs/process/experimental-flags.md b/docs/process/experimental-flags.md
index 9d319b4..7512875 100644
--- a/docs/process/experimental-flags.md
+++ b/docs/process/experimental-flags.md
@@ -95,3 +95,7 @@
 - Experiments affecting launch/run behavior, can be enabled in the IDE specific
   run Configuration, by passing the same `--enable-experiment` flag as listed in
   the CLI section.
+
+The current set of experiment flags is defined in a YAML file which the various
+tools access:
+[experimental_features.yaml](../../tools/experimental_features.yaml).
diff --git a/pkg/_fe_analyzer_shared/pubspec.yaml b/pkg/_fe_analyzer_shared/pubspec.yaml
index 8870c1c..61bec90 100644
--- a/pkg/_fe_analyzer_shared/pubspec.yaml
+++ b/pkg/_fe_analyzer_shared/pubspec.yaml
@@ -1,5 +1,5 @@
 name: _fe_analyzer_shared
-version: 3.0.0
+version: 4.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/analysis_server/lib/lsp_protocol/protocol_generated.dart b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
index fdafe89..b347e96 100644
--- a/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
@@ -6675,7 +6675,7 @@
   /// The zero-based line number where the folded range ends.
   final num endLine;
 
-  /// Describes the kind of the folding range such as `comment' or 'region'. The
+  /// Describes the kind of the folding range such as `comment` or `region`. The
   /// kind is used to categorize folding ranges and used by commands like 'Fold
   /// all comments'. See [FoldingRangeKind] for an enumeration of standardized
   /// kinds.
@@ -8237,6 +8237,10 @@
   static const workspace_didChangeWorkspaceFolders =
       Method(r'workspace/didChangeWorkspaceFolders');
 
+  /// Constant for the 'workspace/didChangeConfiguration' method.
+  static const workspace_didChangeConfiguration =
+      Method(r'workspace/didChangeConfiguration');
+
   /// Constant for the 'workspace/configuration' method.
   static const workspace_configuration = Method(r'workspace/configuration');
 
@@ -8337,6 +8341,10 @@
   /// Constant for the 'textDocument/formatting' method.
   static const textDocument_formatting = Method(r'textDocument/formatting');
 
+  /// Constant for the 'textDocument/rangeFormatting' method.
+  static const textDocument_rangeFormatting =
+      Method(r'textDocument/rangeFormatting');
+
   /// Constant for the 'textDocument/onTypeFormatting' method.
   static const textDocument_onTypeFormatting =
       Method(r'textDocument/onTypeFormatting');
diff --git a/pkg/analysis_server/lib/src/analysis_server_abstract.dart b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
index 78b4b44..966baae 100644
--- a/pkg/analysis_server/lib/src/analysis_server_abstract.dart
+++ b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
@@ -68,7 +68,7 @@
   /// The object used to manage sending a subset of notifications to the client.
   /// The subset of notifications are those to which plugins may contribute.
   /// This field is `null` when the new plugin support is disabled.
-  NotificationManager notificationManager;
+  AbstractNotificationManager notificationManager;
 
   /// The object used to manage the execution of plugins.
   PluginManager pluginManager;
diff --git a/pkg/analysis_server/lib/src/cider/completion.dart b/pkg/analysis_server/lib/src/cider/completion.dart
index 068facc..b6e249d 100644
--- a/pkg/analysis_server/lib/src/cider/completion.dart
+++ b/pkg/analysis_server/lib/src/cider/completion.dart
@@ -26,7 +26,6 @@
 /// example types and elements.
 class CiderCompletionCache {
   final Map<String, _CiderImportedLibrarySuggestions> _importedLibraries = {};
-  _LastCompletionResult _lastResult;
 }
 
 class CiderCompletionComputer {
@@ -56,30 +55,23 @@
     @required int line,
     @required int column,
   }) async {
+    var getFileTimer = Stopwatch()..start();
     var fileContext = _logger.run('Get file $path', () {
-      return _fileResolver.getFileContext(path);
+      try {
+        return _fileResolver.getFileContext(path);
+      } finally {
+        getFileTimer.stop();
+      }
     });
 
     var file = fileContext.file;
 
-    var resolvedSignature = _logger.run('Get signature', () {
-      return file.resolvedSignature;
-    });
-
     var lineInfo = file.lineInfo;
     var offset = lineInfo.getOffsetOfLine(line) + column;
 
-    // If the same file, in the same state as the last time, reuse the result.
-    var lastResult = _cache._lastResult;
-    if (lastResult != null &&
-        lastResult.path == path &&
-        lastResult.signature == resolvedSignature &&
-        lastResult.offset == offset) {
-      _logger.writeln('Use the last completion result.');
-      return lastResult.result;
-    }
-
+    var resolutionTimer = Stopwatch()..start();
     var resolvedUnit = _fileResolver.resolve(path);
+    resolutionTimer.stop();
 
     var completionRequest = CompletionRequestImpl(
       resolvedUnit,
@@ -129,10 +121,13 @@
     });
 
     var result = CiderCompletionResult._(
-        suggestions, CiderPosition(line, column - filter._pattern.length));
-
-    _cache._lastResult =
-        _LastCompletionResult(path, resolvedSignature, offset, result);
+      suggestions: suggestions,
+      performance: CiderCompletionPerformance(
+        file: getFileTimer.elapsed,
+        resolution: resolutionTimer.elapsed,
+      ),
+      prefixStart: CiderPosition(line, column - filter._pattern.length),
+    );
 
     return result;
   }
@@ -196,15 +191,34 @@
   }
 }
 
+class CiderCompletionPerformance {
+  /// The elapsed time for file access.
+  final Duration file;
+
+  /// The elapsed time for resolution.
+  final Duration resolution;
+
+  CiderCompletionPerformance({
+    @required this.file,
+    @required this.resolution,
+  });
+}
+
 class CiderCompletionResult {
   final List<CompletionSuggestion> suggestions;
 
+  final CiderCompletionPerformance performance;
+
   /// The start of the range that should be replaced with the suggestion. This
   /// position always precedes or is the same as the cursor provided in the
   /// completion request.
   final CiderPosition prefixStart;
 
-  CiderCompletionResult._(this.suggestions, this.prefixStart);
+  CiderCompletionResult._({
+    @required this.suggestions,
+    @required this.performance,
+    @required this.prefixStart,
+  });
 }
 
 class CiderPosition {
@@ -289,12 +303,3 @@
 
   _FuzzyScoredSuggestion(this.suggestion, this.score);
 }
-
-class _LastCompletionResult {
-  final String path;
-  final String signature;
-  final int offset;
-  final CiderCompletionResult result;
-
-  _LastCompletionResult(this.path, this.signature, this.offset, this.result);
-}
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 62d235c..38b05d1 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -289,7 +289,7 @@
 /// modified.
 abstract class ContextManagerCallbacks {
   /// Return the notification manager associated with the server.
-  NotificationManager get notificationManager;
+  AbstractNotificationManager get notificationManager;
 
   /// Create and return a new analysis driver rooted at the given [folder], with
   /// the given analysis [options].
diff --git a/pkg/analysis_server/lib/src/edit/fix/dartfix_listener.dart b/pkg/analysis_server/lib/src/edit/fix/dartfix_listener.dart
index 5823ad7..bb4643f 100644
--- a/pkg/analysis_server/lib/src/edit/fix/dartfix_listener.dart
+++ b/pkg/analysis_server/lib/src/edit/fix/dartfix_listener.dart
@@ -26,14 +26,6 @@
 
   ResourceProvider get resourceProvider => server.resourceProvider;
 
-  /// Add the given [detail] to the list of details to be returned to the
-  /// client.
-  void addDetail(String detail) {
-    if (details.length < 200) {
-      details.add(detail);
-    }
-  }
-
   /// Record an edit to be sent to the client.
   ///
   /// The associated suggestion should be separately added by calling
diff --git a/pkg/analysis_server/lib/src/lsp/client_configuration.dart b/pkg/analysis_server/lib/src/lsp/client_configuration.dart
new file mode 100644
index 0000000..9b554c7
--- /dev/null
+++ b/pkg/analysis_server/lib/src/lsp/client_configuration.dart
@@ -0,0 +1,17 @@
+// 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.
+
+/// Wraps the client (editor) configuration to provide stronger typing and
+/// handling of default values where a setting has not been supplied.
+class LspClientConfiguration {
+  final Map<String, dynamic> _settings = <String, dynamic>{};
+
+  bool get enableSdkFormatter => _settings['enableSdkFormatter'] ?? true;
+
+  void replace(Map<String, dynamic> newConfig) {
+    _settings
+      ..clear()
+      ..addAll(newConfig);
+  }
+}
diff --git a/pkg/analysis_server/lib/src/lsp/constants.dart b/pkg/analysis_server/lib/src/lsp/constants.dart
index 2c318ce..b1c20df 100644
--- a/pkg/analysis_server/lib/src/lsp/constants.dart
+++ b/pkg/analysis_server/lib/src/lsp/constants.dart
@@ -90,6 +90,7 @@
   static const ClientFailedToApplyEdit = ErrorCodes(-32009);
   static const RenameNotValid = ErrorCodes(-32010);
   static const RefactorFailed = ErrorCodes(-32011);
+  static const FeatureDisabled = ErrorCodes(-32012);
 
   /// An error raised when the server detects that the server and client are out
   /// of sync and cannot recover. For example if a textDocument/didChange notification
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_format_on_type.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_format_on_type.dart
index 8600e2a..1ec00e8 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_format_on_type.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_format_on_type.dart
@@ -39,6 +39,11 @@
       return success(null);
     }
 
+    if (!server.clientConfiguration.enableSdkFormatter) {
+      return error(ServerErrorCodes.FeatureDisabled,
+          'Formatter was disabled by client settings');
+    }
+
     final path = pathOfDoc(params.textDocument);
     return path.mapResult((path) => formatFile(path));
   }
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_formatting.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_formatting.dart
index 99e4cfb..f159056 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_formatting.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_formatting.dart
@@ -39,6 +39,11 @@
       return success(null);
     }
 
+    if (!server.clientConfiguration.enableSdkFormatter) {
+      return error(ServerErrorCodes.FeatureDisabled,
+          'Formatter was disabled by client settings');
+    }
+
     final path = pathOfDoc(params.textDocument);
     return path.mapResult((path) => formatFile(path));
   }
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart
index f1cbeba..f8d0c66 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart
@@ -22,12 +22,13 @@
       InitializedParams.jsonHandler;
 
   @override
-  ErrorOr<void> handle(InitializedParams params, CancellationToken token) {
+  Future<ErrorOr<void>> handle(
+      InitializedParams params, CancellationToken token) async {
     server.messageHandler = InitializedStateMessageHandler(
       server,
     );
 
-    server.capabilitiesComputer.performDynamicRegistration();
+    await server.fetchClientConfigurationAndPerformDynamicRegistration();
 
     if (!server.initializationOptions.onlyAnalyzeProjectsWithOpenFiles) {
       server.setAnalysisRoots(openWorkspacePaths);
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart
index c50aff7..48c5ec010 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart
@@ -30,6 +30,7 @@
 import 'package:analysis_server/src/lsp/handlers/handler_shutdown.dart';
 import 'package:analysis_server/src/lsp/handlers/handler_signature_help.dart';
 import 'package:analysis_server/src/lsp/handlers/handler_text_document_changes.dart';
+import 'package:analysis_server/src/lsp/handlers/handler_workspace_configuration.dart';
 import 'package:analysis_server/src/lsp/handlers/handler_workspace_symbols.dart';
 import 'package:analysis_server/src/lsp/handlers/handlers.dart';
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
@@ -100,6 +101,7 @@
     registerHandler(FoldingHandler(server));
     registerHandler(DiagnosticServerHandler(server));
     registerHandler(WorkspaceSymbolHandler(server));
+    registerHandler(WorkspaceDidChangeConfigurationMessageHandler(server));
   }
 }
 
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_workspace_configuration.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_workspace_configuration.dart
new file mode 100644
index 0000000..8551a6d
--- /dev/null
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_workspace_configuration.dart
@@ -0,0 +1,33 @@
+// 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 'package:analysis_server/lsp_protocol/protocol_generated.dart';
+import 'package:analysis_server/lsp_protocol/protocol_special.dart';
+import 'package:analysis_server/src/lsp/handlers/handlers.dart';
+import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
+
+class WorkspaceDidChangeConfigurationMessageHandler
+    extends MessageHandler<DidChangeConfigurationParams, void> {
+  WorkspaceDidChangeConfigurationMessageHandler(LspAnalysisServer server)
+      : super(server);
+
+  @override
+  Method get handlesMessage => Method.workspace_didChangeConfiguration;
+
+  @override
+  LspJsonHandler<DidChangeConfigurationParams> get jsonHandler =>
+      DidChangeConfigurationParams.jsonHandler;
+
+  @override
+  Future<ErrorOr<void>> handle(
+      DidChangeConfigurationParams params, CancellationToken token) async {
+    // In LSP, the `settings` field no longer contains changed settings because
+    // they can be resource-scoped, so this is used only as a notification and
+    // to keep settings up-to-date we must re-request them from the client
+    // whenever we are told they may have changed.
+    await server.fetchClientConfigurationAndPerformDynamicRegistration();
+
+    return success();
+  }
+}
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 2d2e274..bcfdd0a 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -11,7 +11,6 @@
 import 'package:analysis_server/protocol/protocol_generated.dart' as protocol;
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/analysis_server_abstract.dart';
-import 'package:analysis_server/src/channel/channel.dart';
 import 'package:analysis_server/src/collections.dart';
 import 'package:analysis_server/src/computer/computer_closingLabels.dart';
 import 'package:analysis_server/src/computer/computer_outline.dart';
@@ -20,12 +19,13 @@
     show CompletionDomainHandler;
 import 'package:analysis_server/src/flutter/flutter_outline_computer.dart';
 import 'package:analysis_server/src/lsp/channel/lsp_channel.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/handler_states.dart';
 import 'package:analysis_server/src/lsp/handlers/handlers.dart';
 import 'package:analysis_server/src/lsp/mapping.dart';
+import 'package:analysis_server/src/lsp/notification_manager.dart';
 import 'package:analysis_server/src/lsp/server_capabilities_computer.dart';
-import 'package:analysis_server/src/plugin/notification_manager.dart';
 import 'package:analysis_server/src/plugin/plugin_manager.dart';
 import 'package:analysis_server/src/protocol_server.dart' as protocol;
 import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
@@ -61,6 +61,11 @@
   /// specific server functionality. Will be null prior to initialization.
   LspInitializationOptions _initializationOptions;
 
+  /// Configuration for the workspace from the client. This is similar to
+  /// initializationOptions but can be updated dynamically rather than set
+  /// only when the server starts.
+  final LspClientConfiguration clientConfiguration = LspClientConfiguration();
+
   /// The channel from which messages are received and to which responses should
   /// be sent.
   final LspServerCommunicationChannel channel;
@@ -114,11 +119,9 @@
           crashReportingAttachmentsBuilder,
           baseResourceProvider,
           instrumentationService,
-          NotificationManager(
-            const NoOpServerCommunicationChannel(),
-            baseResourceProvider.pathContext,
-          ),
+          LspNotificationManager(channel, baseResourceProvider.pathContext),
         ) {
+    notificationManager.server = this;
     messageHandler = UninitializedStateMessageHandler(this);
     capabilitiesComputer = ServerCapabilitiesComputer(this);
 
@@ -144,6 +147,9 @@
   LspInitializationOptions get initializationOptions => _initializationOptions;
 
   @override
+  LspNotificationManager get notificationManager => super.notificationManager;
+
+  @override
   set pluginManager(PluginManager value) {
     // we exchange the plugin manager in tests
     super.pluginManager = value;
@@ -167,6 +173,39 @@
   /// The socket from which messages are being read has been closed.
   void done() {}
 
+  /// Fetches configuration from the client (if supported) and then sends
+  /// register/unregister requests for any supported/enabled dynamic registrations.
+  Future<void> fetchClientConfigurationAndPerformDynamicRegistration() async {
+    if (clientCapabilities.workspace?.configuration ?? false) {
+      // Fetch all configuration we care about from the client. This is just
+      // "dart" for now, but in future this may be extended to include
+      // others (for example "flutter").
+      final response = await sendRequest(
+          Method.workspace_configuration,
+          ConfigurationParams([
+            ConfigurationItem(null, 'dart'),
+          ]));
+
+      final result = response.result;
+
+      // Expect the result to be a single list (to match the single
+      // ConfigurationItem we requested above) and that it should be
+      // a standard map of settings.
+      // If the above code is extended to support multiple sets of config
+      // this will need tweaking to handle each group appropriately.
+      if (result != null &&
+          result is List<dynamic> &&
+          result.length == 1 &&
+          result.first is Map<String, dynamic>) {
+        clientConfiguration.replace(result.first);
+      }
+    }
+
+    // Client config can affect capabilities, so this should only be done after
+    // we have the initial/updated config.
+    capabilitiesComputer.performDynamicRegistration();
+  }
+
   /// Return the LineInfo for the file with the given [path]. The file is
   /// analyzed in one of the analysis drivers to which the file was added,
   /// otherwise in the first driver, otherwise `null` is returned.
@@ -614,7 +653,7 @@
   LspServerContextManagerCallbacks(this.analysisServer, this.resourceProvider);
 
   @override
-  NotificationManager get notificationManager =>
+  LspNotificationManager get notificationManager =>
       analysisServer.notificationManager;
 
   @override
@@ -726,20 +765,3 @@
     driver.dispose();
   }
 }
-
-class NoOpServerCommunicationChannel implements ServerCommunicationChannel {
-  const NoOpServerCommunicationChannel();
-
-  @override
-  void close() {}
-
-  @override
-  void listen(void Function(protocol.Request request) onRequest,
-      {Function onError, void Function() onDone}) {}
-
-  @override
-  void sendNotification(protocol.Notification notification) {}
-
-  @override
-  void sendResponse(protocol.Response response) {}
-}
diff --git a/pkg/analysis_server/lib/src/lsp/mapping.dart b/pkg/analysis_server/lib/src/lsp/mapping.dart
index 2933638..198f463 100644
--- a/pkg/analysis_server/lib/src/lsp/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/mapping.dart
@@ -31,6 +31,7 @@
 import 'package:analyzer/src/generated/source.dart' as server;
 import 'package:analyzer/src/services/available_declarations.dart';
 import 'package:analyzer/src/services/available_declarations.dart' as dec;
+import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart' as server;
 
 const languageSourceName = 'dart';
@@ -548,6 +549,69 @@
   }
 }
 
+lsp.Diagnostic pluginToDiagnostic(
+  server.LineInfo Function(String) getLineInfo,
+  plugin.AnalysisError error,
+) {
+  List<DiagnosticRelatedInformation> relatedInformation;
+  if (error.contextMessages != null && error.contextMessages.isNotEmpty) {
+    relatedInformation = error.contextMessages
+        .map((message) =>
+            pluginToDiagnosticRelatedInformation(getLineInfo, message))
+        .toList();
+  }
+
+  var message = error.message;
+  if (error.correction != null) {
+    message = '$message\n${error.correction}';
+  }
+
+  var lineInfo = getLineInfo(error.location.file);
+  return lsp.Diagnostic(
+    toRange(lineInfo, error.location.offset, error.location.length),
+    pluginToDiagnosticSeverity(error.severity),
+    error.code,
+    languageSourceName,
+    message,
+    relatedInformation,
+  );
+}
+
+lsp.DiagnosticRelatedInformation pluginToDiagnosticRelatedInformation(
+    server.LineInfo Function(String) getLineInfo,
+    plugin.DiagnosticMessage message) {
+  var file = message.location.file;
+  var lineInfo = getLineInfo(file);
+  return lsp.DiagnosticRelatedInformation(
+      lsp.Location(
+        Uri.file(file).toString(),
+        toRange(
+          lineInfo,
+          message.location.offset,
+          message.location.length,
+        ),
+      ),
+      message.message);
+}
+
+lsp.DiagnosticSeverity pluginToDiagnosticSeverity(
+    plugin.AnalysisErrorSeverity severity) {
+  switch (severity) {
+    case plugin.AnalysisErrorSeverity.ERROR:
+      return lsp.DiagnosticSeverity.Error;
+    case plugin.AnalysisErrorSeverity.WARNING:
+      return lsp.DiagnosticSeverity.Warning;
+    case plugin.AnalysisErrorSeverity.INFO:
+      return lsp.DiagnosticSeverity.Information;
+    // Note: LSP also supports "Hint", but they won't render in things like the
+    // VS Code errors list as they're apparently intended to communicate
+    // non-visible diagnostics back (for example, if you wanted to grey out
+    // unreachable code without producing an item in the error list).
+    default:
+      throw 'Unknown AnalysisErrorSeverity: $severity';
+  }
+}
+
 lsp.Location searchResultToLocation(
     server.SearchResult result, server.LineInfo lineInfo) {
   final location = result.location;
diff --git a/pkg/analysis_server/lib/src/lsp/notification_manager.dart b/pkg/analysis_server/lib/src/lsp/notification_manager.dart
new file mode 100644
index 0000000..242cba5
--- /dev/null
+++ b/pkg/analysis_server/lib/src/lsp/notification_manager.dart
@@ -0,0 +1,90 @@
+// 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 'package:analysis_server/lsp_protocol/protocol_generated.dart';
+import 'package:analysis_server/lsp_protocol/protocol_special.dart';
+import 'package:analysis_server/src/lsp/channel/lsp_channel.dart';
+import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
+import 'package:analysis_server/src/lsp/mapping.dart';
+import 'package:analysis_server/src/plugin/notification_manager.dart';
+import 'package:analysis_server/src/protocol_server.dart' as protocol;
+import 'package:analyzer_plugin/protocol/protocol.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol;
+import 'package:path/path.dart';
+
+class LspNotificationManager extends AbstractNotificationManager {
+  /// The channel used to send notifications to the client.
+  final LspServerCommunicationChannel channel;
+
+  /// The analysis server, used to fetch LineInfo in order to map plugin
+  /// data structures to LSP structures.
+  LspAnalysisServer server;
+
+  LspNotificationManager(this.channel, Context pathContext)
+      : super(pathContext);
+
+  /// Sends errors for a file to the client.
+  @override
+  void sendAnalysisErrors(
+      String filePath, List<protocol.AnalysisError> errors) {
+    final diagnostics = errors
+        .map((error) => pluginToDiagnostic(server.getLineInfo, error))
+        .toList();
+
+    final params =
+        PublishDiagnosticsParams(Uri.file(filePath).toString(), diagnostics);
+    final message = NotificationMessage(
+      Method.textDocument_publishDiagnostics,
+      params,
+      jsonRpcVersion,
+    );
+
+    channel.sendNotification(message);
+  }
+
+  @override
+  void sendFoldingRegions(
+      String filePath, List<protocol.FoldingRegion> mergedFolding) {
+    // In LSP, folding regions are requested by the client with
+    // 'textDocument/foldingRange' rather than pushed so there's no need
+    // to do anything here. Results are merged by the base class and provided
+    // on-demand.
+  }
+
+  @override
+  void sendHighlightRegions(
+      String filePath, List<protocol.HighlightRegion> mergedHighlights) {
+    // TODO: implement sendHighlightRegions
+  }
+
+  @override
+  void sendNavigations(protocol.AnalysisNavigationParams mergedNavigations) {
+    // In LSP, occurrences are requested by the client with 'textDocument/definition'
+    // and 'textDocument/references' rather than pushed so there's no need
+    // to do anything here. Results are merged by the base class and provided
+    // on-demand.
+  }
+
+  @override
+  void sendOccurrences(
+      String filePath, List<protocol.Occurrences> mergedOccurrences) {
+    // In LSP, occurrences are requested by the client with
+    // 'textDocument/documentHighlight' rather than pushed so there's no need
+    // to do anything here. Results are merged by the base class and provided
+    // on-demand.
+  }
+
+  @override
+  void sendOutlines(String filePath, List<protocol.Outline> mergedOutlines) {
+    // In LSP, outlines are requested by the client with
+    // 'textDocument/documentSymbol' rather than pushed so there's no need
+    // to do anything here. Results are merged by the base class and provided
+    // on-demand.
+  }
+
+  @override
+  void sendPluginErrorNotification(Notification notification) {
+    // TODO: implement sendPluginErrorNotification
+  }
+}
diff --git a/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart b/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart
index 6180dbc..fd345d1 100644
--- a/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart
+++ b/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart
@@ -48,6 +48,10 @@
   bool get definition =>
       _capabilities.textDocument?.definition?.dynamicRegistration ?? false;
 
+  bool get didChangeConfiguration =>
+      _capabilities.workspace?.didChangeConfiguration?.dynamicRegistration ??
+      false;
+
   bool get documentHighlights =>
       _capabilities.textDocument?.documentHighlight?.dynamicRegistration ??
       false;
@@ -101,6 +105,8 @@
     final renameOptionsSupport =
         clientCapabilities.textDocument?.rename?.prepareSupport ?? false;
 
+    final enableFormatter = _server.clientConfiguration.enableSdkFormatter;
+
     final dynamicRegistrations = ClientDynamicRegistrations(clientCapabilities);
 
     // When adding new capabilities to the server that may apply to specific file
@@ -159,13 +165,15 @@
         null,
         dynamicRegistrations.formatting
             ? null
-            : true, // documentFormattingProvider
+            : enableFormatter, // documentFormattingProvider
         false, // documentRangeFormattingProvider
         dynamicRegistrations.typeFormatting
             ? null
-            : DocumentOnTypeFormattingOptions(
-                dartTypeFormattingCharacters.first,
-                dartTypeFormattingCharacters.skip(1).toList()),
+            : enableFormatter
+                ? DocumentOnTypeFormattingOptions(
+                    dartTypeFormattingCharacters.first,
+                    dartTypeFormattingCharacters.skip(1).toList())
+                : null,
         dynamicRegistrations.rename
             ? null
             : renameOptionsSupport
@@ -216,6 +224,8 @@
 
     final registrations = <Registration>[];
 
+    final enableFormatter = _server.clientConfiguration.enableSdkFormatter;
+
     /// Helper for creating registrations with IDs.
     void register(bool condition, Method method, [ToJsonable options]) {
       if (condition == true) {
@@ -224,26 +234,27 @@
       }
     }
 
-    final textCapabilities = _server.clientCapabilities?.textDocument;
+    final dynamicRegistrations =
+        ClientDynamicRegistrations(_server.clientCapabilities);
 
     register(
-      textCapabilities?.synchronization?.dynamicRegistration,
+      dynamicRegistrations.textSync,
       Method.textDocument_didOpen,
       TextDocumentRegistrationOptions(allSynchronisedTypes),
     );
     register(
-      textCapabilities?.synchronization?.dynamicRegistration,
+      dynamicRegistrations.textSync,
       Method.textDocument_didClose,
       TextDocumentRegistrationOptions(allSynchronisedTypes),
     );
     register(
-      textCapabilities?.synchronization?.dynamicRegistration,
+      dynamicRegistrations.textSync,
       Method.textDocument_didChange,
       TextDocumentChangeRegistrationOptions(
           TextDocumentSyncKind.Incremental, allSynchronisedTypes),
     );
     register(
-      _server.clientCapabilities?.textDocument?.completion?.dynamicRegistration,
+      dynamicRegistrations.completion,
       Method.textDocument_completion,
       CompletionRegistrationOptions(
         dartCompletionTriggerCharacters,
@@ -253,38 +264,38 @@
       ),
     );
     register(
-      textCapabilities?.hover?.dynamicRegistration,
+      dynamicRegistrations.hover,
       Method.textDocument_hover,
       TextDocumentRegistrationOptions(allTypes),
     );
     register(
-      textCapabilities?.signatureHelp?.dynamicRegistration,
+      dynamicRegistrations.signatureHelp,
       Method.textDocument_signatureHelp,
       SignatureHelpRegistrationOptions(
           dartSignatureHelpTriggerCharacters, allTypes),
     );
     register(
-      _server.clientCapabilities?.textDocument?.references?.dynamicRegistration,
+      dynamicRegistrations.references,
       Method.textDocument_references,
       TextDocumentRegistrationOptions(allTypes),
     );
     register(
-      textCapabilities?.documentHighlight?.dynamicRegistration,
+      dynamicRegistrations.documentHighlights,
       Method.textDocument_documentHighlight,
       TextDocumentRegistrationOptions(allTypes),
     );
     register(
-      textCapabilities?.documentSymbol?.dynamicRegistration,
+      dynamicRegistrations.documentSymbol,
       Method.textDocument_documentSymbol,
       TextDocumentRegistrationOptions(allTypes),
     );
     register(
-      _server.clientCapabilities?.textDocument?.formatting?.dynamicRegistration,
+      enableFormatter && dynamicRegistrations.formatting,
       Method.textDocument_formatting,
       TextDocumentRegistrationOptions(allTypes),
     );
     register(
-      textCapabilities?.onTypeFormatting?.dynamicRegistration,
+      enableFormatter && dynamicRegistrations.typeFormatting,
       Method.textDocument_onTypeFormatting,
       DocumentOnTypeFormattingRegistrationOptions(
         dartTypeFormattingCharacters.first,
@@ -293,31 +304,35 @@
       ),
     );
     register(
-      _server.clientCapabilities?.textDocument?.definition?.dynamicRegistration,
+      dynamicRegistrations.definition,
       Method.textDocument_definition,
       TextDocumentRegistrationOptions(allTypes),
     );
     register(
-      textCapabilities?.implementation?.dynamicRegistration,
+      dynamicRegistrations.implementation,
       Method.textDocument_implementation,
       TextDocumentRegistrationOptions(allTypes),
     );
     register(
-      _server.clientCapabilities?.textDocument?.codeAction?.dynamicRegistration,
+      dynamicRegistrations.codeActions,
       Method.textDocument_codeAction,
       CodeActionRegistrationOptions(
           allTypes, DartCodeActionKind.serverSupportedKinds),
     );
     register(
-      textCapabilities?.rename?.dynamicRegistration,
+      dynamicRegistrations.rename,
       Method.textDocument_rename,
       RenameRegistrationOptions(true, allTypes),
     );
     register(
-      textCapabilities?.foldingRange?.dynamicRegistration,
+      dynamicRegistrations.folding,
       Method.textDocument_foldingRange,
       TextDocumentRegistrationOptions(allTypes),
     );
+    register(
+      dynamicRegistrations.didChangeConfiguration,
+      Method.workspace_didChangeConfiguration,
+    );
 
     await _applyRegistrations(registrations);
   }
@@ -346,6 +361,10 @@
         removedRegistrations
             .add(Unregistration(registration.id, registration.method));
       } else {
+        // Replace the registration in our new set with the original registration
+        // so that we retain the original ID sent to the client (otherwise we
+        // will try to unregister using an ID the client was never sent).
+        newRegistrationsByMethod[method] = registration;
         additionalRegistrations.remove(newRegistrationForMethod);
       }
     }
diff --git a/pkg/analysis_server/lib/src/plugin/notification_manager.dart b/pkg/analysis_server/lib/src/plugin/notification_manager.dart
index c7987a2..5b3eef8 100644
--- a/pkg/analysis_server/lib/src/plugin/notification_manager.dart
+++ b/pkg/analysis_server/lib/src/plugin/notification_manager.dart
@@ -17,13 +17,10 @@
 
 /// The object used to coordinate the results of notifications from the analysis
 /// server and multiple plugins.
-class NotificationManager {
+abstract class AbstractNotificationManager {
   /// The identifier used to identify results from the server.
   static const String serverId = 'server';
 
-  /// The channel used to send notifications to the client.
-  final ServerCommunicationChannel channel;
-
   /// The path context.
   final Context pathContext;
 
@@ -66,7 +63,7 @@
   final ResultMerger merger = ResultMerger();
 
   /// Initialize a newly created notification manager.
-  NotificationManager(this.channel, this.pathContext) {
+  AbstractNotificationManager(this.pathContext) {
     errors =
         ResultCollector<List<AnalysisError>>(serverId, predicate: _isIncluded);
     folding = ResultCollector<List<FoldingRegion>>(serverId);
@@ -112,14 +109,7 @@
         recordOutlines(pluginId, params.file, params.outline);
         break;
       case plugin.PLUGIN_NOTIFICATION_ERROR:
-        var params = plugin.PluginErrorParams.fromNotification(notification);
-        // TODO(brianwilkerson) There is no indication for the client as to the
-        // fact that the error came from a plugin, let alone which plugin it
-        // came from. We should consider whether we really want to send them to
-        // the client.
-        channel.sendNotification(server.ServerErrorParams(
-                params.isFatal, params.message, params.stackTrace)
-            .toNotification());
+        sendPluginErrorNotification(notification);
         break;
     }
   }
@@ -132,8 +122,7 @@
       errors.putResults(filePath, pluginId, errorData);
       var unmergedErrors = errors.getResults(filePath);
       var mergedErrors = merger.mergeAnalysisErrors(unmergedErrors);
-      channel.sendNotification(
-          server.AnalysisErrorsParams(filePath, mergedErrors).toNotification());
+      sendAnalysisErrors(filePath, mergedErrors);
     }
   }
 
@@ -145,9 +134,7 @@
       folding.putResults(filePath, pluginId, foldingData);
       var unmergedFolding = folding.getResults(filePath);
       var mergedFolding = merger.mergeFoldingRegions(unmergedFolding);
-      channel.sendNotification(
-          server.AnalysisFoldingParams(filePath, mergedFolding)
-              .toNotification());
+      sendFoldingRegions(filePath, mergedFolding);
     }
   }
 
@@ -159,9 +146,7 @@
       highlights.putResults(filePath, pluginId, highlightData);
       var unmergedHighlights = highlights.getResults(filePath);
       var mergedHighlights = merger.mergeHighlightRegions(unmergedHighlights);
-      channel.sendNotification(
-          server.AnalysisHighlightsParams(filePath, mergedHighlights)
-              .toNotification());
+      sendHighlightRegions(filePath, mergedHighlights);
     }
   }
 
@@ -173,7 +158,7 @@
       navigation.putResults(filePath, pluginId, navigationData);
       var unmergedNavigations = navigation.getResults(filePath);
       var mergedNavigations = merger.mergeNavigation(unmergedNavigations);
-      channel.sendNotification(mergedNavigations.toNotification());
+      sendNavigations(mergedNavigations);
     }
   }
 
@@ -185,9 +170,7 @@
       occurrences.putResults(filePath, pluginId, occurrencesData);
       var unmergedOccurrences = occurrences.getResults(filePath);
       var mergedOccurrences = merger.mergeOccurrences(unmergedOccurrences);
-      channel.sendNotification(
-          server.AnalysisOccurrencesParams(filePath, mergedOccurrences)
-              .toNotification());
+      sendOccurrences(filePath, mergedOccurrences);
     }
   }
 
@@ -199,12 +182,32 @@
       outlines.putResults(filePath, pluginId, outlineData);
       var unmergedOutlines = outlines.getResults(filePath);
       var mergedOutlines = merger.mergeOutline(unmergedOutlines);
-      channel.sendNotification(server.AnalysisOutlineParams(
-              filePath, server.FileKind.LIBRARY, mergedOutlines[0])
-          .toNotification());
+      sendOutlines(filePath, mergedOutlines);
     }
   }
 
+  /// Sends errors for a file to the client.
+  void sendAnalysisErrors(String filePath, List<AnalysisError> mergedErrors);
+
+  /// Sends folding regions for a file to the client.
+  void sendFoldingRegions(String filePath, List<FoldingRegion> mergedFolding);
+
+  /// Sends highlight regions for a file to the client.
+  void sendHighlightRegions(
+      String filePath, List<HighlightRegion> mergedHighlights);
+
+  /// Sends navigation regions for a file to the client.
+  void sendNavigations(server.AnalysisNavigationParams mergedNavigations);
+
+  /// Sends occurrences for a file to the client.
+  void sendOccurrences(String filePath, List<Occurrences> mergedOccurrences);
+
+  /// Sends outlines for a file to the client.
+  void sendOutlines(String filePath, List<Outline> mergedOutlines);
+
+  /// Sends plugin errors to the client.
+  void sendPluginErrorNotification(plugin.Notification notification);
+
   /// Set the lists of [included] and [excluded] files.
   void setAnalysisRoots(List<String> included, List<String> excluded) {
     includedPaths = included;
@@ -299,3 +302,72 @@
     return isIncluded() && !isExcluded();
   }
 }
+
+class NotificationManager extends AbstractNotificationManager {
+  /// The identifier used to identify results from the server.
+  static const String serverId = AbstractNotificationManager.serverId;
+
+  /// The channel used to send notifications to the client.
+  final ServerCommunicationChannel channel;
+
+  /// Initialize a newly created notification manager.
+  NotificationManager(this.channel, Context pathContext) : super(pathContext);
+
+  /// Sends errors for a file to the client.
+  @override
+  void sendAnalysisErrors(String filePath, List<AnalysisError> mergedErrors) {
+    channel.sendNotification(
+        server.AnalysisErrorsParams(filePath, mergedErrors).toNotification());
+  }
+
+  /// Sends folding regions for a file to the client.
+  @override
+  void sendFoldingRegions(String filePath, List<FoldingRegion> mergedFolding) {
+    channel.sendNotification(
+        server.AnalysisFoldingParams(filePath, mergedFolding).toNotification());
+  }
+
+  /// Sends highlight regions for a file to the client.
+  @override
+  void sendHighlightRegions(
+      String filePath, List<HighlightRegion> mergedHighlights) {
+    channel.sendNotification(
+        server.AnalysisHighlightsParams(filePath, mergedHighlights)
+            .toNotification());
+  }
+
+  /// Sends navigation regions for a file to the client.
+  @override
+  void sendNavigations(server.AnalysisNavigationParams mergedNavigations) {
+    channel.sendNotification(mergedNavigations.toNotification());
+  }
+
+  /// Sends occurrences for a file to the client.
+  @override
+  void sendOccurrences(String filePath, List<Occurrences> mergedOccurrences) {
+    channel.sendNotification(
+        server.AnalysisOccurrencesParams(filePath, mergedOccurrences)
+            .toNotification());
+  }
+
+  /// Sends outlines for a file to the client.
+  @override
+  void sendOutlines(String filePath, List<Outline> mergedOutlines) {
+    channel.sendNotification(server.AnalysisOutlineParams(
+            filePath, server.FileKind.LIBRARY, mergedOutlines[0])
+        .toNotification());
+  }
+
+  /// Sends plugin errors to the client.
+  @override
+  void sendPluginErrorNotification(plugin.Notification notification) {
+    var params = plugin.PluginErrorParams.fromNotification(notification);
+    // TODO(brianwilkerson) There is no indication for the client as to the
+    // fact that the error came from a plugin, let alone which plugin it
+    // came from. We should consider whether we really want to send them to
+    // the client.
+    channel.sendNotification(server.ServerErrorParams(
+            params.isFatal, params.message, params.stackTrace)
+        .toNotification());
+  }
+}
diff --git a/pkg/analysis_server/lib/src/plugin/plugin_manager.dart b/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
index 785e77b..50456a7 100644
--- a/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
+++ b/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
@@ -44,7 +44,7 @@
   BuiltInPluginInfo(
       this.entryPoint,
       this.pluginId,
-      NotificationManager notificationManager,
+      AbstractNotificationManager notificationManager,
       InstrumentationService instrumentationService)
       : super(notificationManager, instrumentationService);
 
@@ -74,7 +74,7 @@
       this.path,
       this.executionPath,
       this.packagesPath,
-      NotificationManager notificationManager,
+      AbstractNotificationManager notificationManager,
       InstrumentationService instrumentationService)
       : super(notificationManager, instrumentationService);
 
@@ -109,7 +109,7 @@
 /// Information about a single plugin.
 abstract class PluginInfo {
   /// The object used to manage the receiving and sending of notifications.
-  final NotificationManager notificationManager;
+  final AbstractNotificationManager notificationManager;
 
   /// The instrumentation service that is being used by the analysis server.
   final InstrumentationService instrumentationService;
@@ -254,7 +254,7 @@
   final String sdkPath;
 
   /// The object used to manage the receiving and sending of notifications.
-  final NotificationManager notificationManager;
+  final AbstractNotificationManager notificationManager;
 
   /// The instrumentation service that is being used by the analysis server.
   final InstrumentationService instrumentationService;
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 ba10f46..2e99a15 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
@@ -280,17 +280,23 @@
         var element = type.element;
         var tag = '${element.librarySource.uri}::${element.name}';
         if (element.isEnum) {
+          var relevance = request.useNewRelevance
+              ? RelevanceBoost.availableEnumConstant
+              : DART_RELEVANCE_BOOST_AVAILABLE_ENUM;
           includedSuggestionRelevanceTags.add(
             IncludedSuggestionRelevanceTag(
               tag,
-              DART_RELEVANCE_BOOST_AVAILABLE_ENUM,
+              relevance,
             ),
           );
         } else {
+          var relevance = request.useNewRelevance
+              ? RelevanceBoost.availableDeclaration
+              : DART_RELEVANCE_BOOST_AVAILABLE_DECLARATION;
           includedSuggestionRelevanceTags.add(
             IncludedSuggestionRelevanceTag(
               tag,
-              DART_RELEVANCE_BOOST_AVAILABLE_DECLARATION,
+              relevance,
             ),
           );
         }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/label_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/label_contributor.dart
index 3c04098..097bfa7 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/label_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/label_contributor.dart
@@ -55,41 +55,6 @@
       : super(request.offset);
 
   @override
-  void declaredClass(ClassDeclaration declaration) {
-    // ignored
-  }
-
-  @override
-  void declaredClassTypeAlias(ClassTypeAlias declaration) {
-    // ignored
-  }
-
-  @override
-  void declaredExtension(ExtensionDeclaration declaration) {
-    // ignored
-  }
-
-  @override
-  void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl) {
-    // ignored
-  }
-
-  @override
-  void declaredFunction(FunctionDeclaration declaration) {
-    // ignored
-  }
-
-  @override
-  void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {
-    // ignored
-  }
-
-  @override
-  void declaredGenericTypeAlias(GenericTypeAlias declaration) {
-    // ignored
-  }
-
-  @override
   void declaredLabel(Label label, bool isCaseLabel) {
     if (isCaseLabel ? includeCaseLabels : includeStatementLabels) {
       builder.suggestLabel(label);
@@ -97,27 +62,6 @@
   }
 
   @override
-  void declaredLocalVar(SimpleIdentifier name, TypeAnnotation type) {
-    // ignored
-  }
-
-  @override
-  void declaredMethod(MethodDeclaration declaration) {
-    // ignored
-  }
-
-  @override
-  void declaredParam(SimpleIdentifier name, TypeAnnotation type) {
-    // ignored
-  }
-
-  @override
-  void declaredTopLevelVar(
-      VariableDeclarationList varList, VariableDeclaration varDecl) {
-    // ignored
-  }
-
-  @override
   void visitFunctionExpression(FunctionExpression node) {
     // Labels are only accessible within the local function, so stop visiting
     // once we reach a function boundary.
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
index c8f6f70..bb767ec 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
@@ -150,6 +150,13 @@
   }
 
   @override
+  void declaredConstructor(ConstructorDeclaration declaration) {
+    // TODO(jwren) ignored, currently handled by
+    //  local_constructor_contributor_test.dart, consider moving the
+    //  functionality into this file.
+  }
+
+  @override
   void declaredEnum(EnumDeclaration declaration) {
     if (opType.includeTypeNameSuggestions) {
       builder.suggestClass(declaration.declaredElement, kind: _defaultKind);
@@ -228,7 +235,7 @@
 
   @override
   void declaredLabel(Label label, bool isCaseLabel) {
-    // ignored
+    // ignored: handled by the label_contributor.dart
   }
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
index 09832e6..0afc33f 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
@@ -131,9 +131,6 @@
   }
 
   @override
-  void declaredExtension(ExtensionDeclaration declaration) {}
-
-  @override
   void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl) {
     if (varDecl.name.name == targetName) {
       // Type provided by the element in computeFull above
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 98c09a1..440f88d 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
@@ -13,6 +13,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
+import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/source/source_range.dart';
 import 'package:analyzer/src/dart/analysis/session_helper.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
@@ -77,6 +78,21 @@
 
   Future<void> compute(DartChangeBuilder builder);
 
+  /// Return the class element associated with the [target], or `null` if there
+  /// is no such class element.
+  ClassElement getTargetClassElement(Expression target) {
+    var type = target.staticType;
+    if (type is InterfaceType) {
+      return type.element;
+    } else if (target is Identifier) {
+      var element = target.staticElement;
+      if (element is ClassElement) {
+        return element;
+      }
+    }
+    return null;
+  }
+
   /// Returns an expected [DartType] of [expression], may be `null` if cannot be
   /// inferred.
   DartType inferUndefinedExpressionType(Expression expression) {
@@ -336,6 +352,10 @@
 
   ResolvedUnitResult get resolvedResult => _context.resolvedResult;
 
+  /// Return the resource provider used to access the file system.
+  ResourceProvider get resourceProvider =>
+      resolvedResult.session.resourceProvider;
+
   int get selectionLength => _context.selectionLength;
 
   int get selectionOffset => _context.selectionOffset;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart
new file mode 100644
index 0000000..f191214
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart
@@ -0,0 +1,113 @@
+// 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 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
+import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/correction/util.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer_plugin/src/utilities/string_utilities.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+
+class AddSuperConstructorInvocation extends MultiCorrectionProducer {
+  @override
+  Iterable<CorrectionProducer> get producers sync* {
+    if (node.parent is! ConstructorDeclaration ||
+        node.parent.parent is! ClassDeclaration) {
+      return;
+    }
+    var targetConstructor = node.parent as ConstructorDeclaration;
+    var targetClassNode = targetConstructor.parent as ClassDeclaration;
+    var targetClassElement = targetClassNode.declaredElement;
+    var superType = targetClassElement.supertype;
+    var initializers = targetConstructor.initializers;
+    int insertOffset;
+    String prefix;
+    if (initializers.isEmpty) {
+      insertOffset = targetConstructor.parameters.end;
+      prefix = ' : ';
+    } else {
+      var lastInitializer = initializers[initializers.length - 1];
+      insertOffset = lastInitializer.end;
+      prefix = ', ';
+    }
+    for (var constructor in superType.constructors) {
+      // Only propose public constructors.
+      if (!Identifier.isPrivateName(constructor.name)) {
+        yield _AddInvocation(constructor, insertOffset, prefix);
+      }
+    }
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static AddSuperConstructorInvocation newInstance() =>
+      AddSuperConstructorInvocation();
+}
+
+/// A correction processor that can make one of the possible change computed by
+/// the [AddSuperConstructorInvocation] producer.
+class _AddInvocation extends CorrectionProducer {
+  /// The constructor to be invoked.
+  final ConstructorElement _constructor;
+
+  /// The offset at which the initializer is to be inserted.
+  final int _insertOffset;
+
+  /// The prefix to be added before the actual invocation.
+  final String _prefix;
+
+  _AddInvocation(this._constructor, this._insertOffset, this._prefix);
+
+  @override
+  List<Object> get fixArguments {
+    var buffer = StringBuffer();
+    buffer.write('super');
+    var constructorName = _constructor.displayName;
+    if (constructorName.isNotEmpty) {
+      buffer.write('.');
+      buffer.write(constructorName);
+    }
+    buffer.write('(...)');
+    return [buffer.toString()];
+  }
+
+  @override
+  FixKind get fixKind => DartFixKind.ADD_SUPER_CONSTRUCTOR_INVOCATION;
+
+  @override
+  Future<void> compute(DartChangeBuilder builder) async {
+    var constructorName = _constructor.displayName;
+    await builder.addFileEdit(file, (DartFileEditBuilder builder) {
+      builder.addInsertion(_insertOffset, (DartEditBuilder builder) {
+        builder.write(_prefix);
+        // add super constructor name
+        builder.write('super');
+        if (!isEmpty(constructorName)) {
+          builder.write('.');
+          builder.addSimpleLinkedEdit('NAME', constructorName);
+        }
+        // add arguments
+        builder.write('(');
+        var firstParameter = true;
+        for (var parameter in _constructor.parameters) {
+          // skip non-required parameters
+          if (parameter.isOptional) {
+            break;
+          }
+          // comma
+          if (firstParameter) {
+            firstParameter = false;
+          } else {
+            builder.write(', ');
+          }
+          // default value
+          builder.addSimpleLinkedEdit(
+              parameter.name, getDefaultValueCode(parameter.type));
+        }
+        builder.write(')');
+      });
+    });
+  }
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/change_argument_name.dart b/pkg/analysis_server/lib/src/services/correction/dart/change_argument_name.dart
index fc6de6b..005278e 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/change_argument_name.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/change_argument_name.dart
@@ -68,15 +68,15 @@
 /// the [ChangeArgumentName] producer.
 class _ChangeName extends CorrectionProducer {
   /// The name of the argument being changed.
-  final SimpleIdentifier argumentName;
+  final SimpleIdentifier _argumentName;
 
   /// The name to which the argument name will be changed.
-  final String proposedName;
+  final String _proposedName;
 
-  _ChangeName(this.argumentName, this.proposedName);
+  _ChangeName(this._argumentName, this._proposedName);
 
   @override
-  List<Object> get fixArguments => [proposedName];
+  List<Object> get fixArguments => [_proposedName];
 
   @override
   FixKind get fixKind => DartFixKind.CHANGE_ARGUMENT_NAME;
@@ -84,7 +84,7 @@
   @override
   Future<void> compute(DartChangeBuilder builder) async {
     await builder.addFileEdit(file, (builder) {
-      builder.addSimpleReplacement(range.node(argumentName), proposedName);
+      builder.addSimpleReplacement(range.node(_argumentName), _proposedName);
     });
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
new file mode 100644
index 0000000..d40698f
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
@@ -0,0 +1,294 @@
+// 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 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
+import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/correction/fix_internal.dart';
+import 'package:analysis_server/src/services/correction/levenshtein.dart';
+import 'package:analysis_server/src/services/correction/util.dart';
+import 'package:analysis_server/src/services/search/hierarchy.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:analyzer_plugin/utilities/range_factory.dart';
+
+class ChangeTo extends CorrectionProducer {
+  /// The kind of elements that should be proposed.
+  final _ReplacementKind _kind;
+
+  /// The name to which the undefined name will be changed.
+  String _proposedName;
+
+  /// Initialize a newly created instance that will propose elements of the
+  /// given [_kind].
+  ChangeTo(this._kind);
+
+  @override
+  List<Object> get fixArguments => [_proposedName];
+
+  @override
+  FixKind get fixKind => DartFixKind.CHANGE_TO;
+
+  @override
+  Future<void> compute(DartChangeBuilder builder) async {
+    // TODO(brianwilkerson) Unify these separate methods as much as is
+    //  reasonably possible.
+    // TODO(brianwilkerson) Consider proposing all of the names within a
+    //  reasonable distance, rather than just the first near match we find.
+    if (_kind == _ReplacementKind.annotation) {
+      await _proposeAnnotation(builder);
+    } else if (_kind == _ReplacementKind.classOrMixin) {
+      await _proposeClassOrMixin(builder, node);
+    } else if (_kind == _ReplacementKind.function) {
+      await _proposeFunction(builder);
+    } else if (_kind == _ReplacementKind.getterOrSetter) {
+      await _proposeGetterOrSetter(builder);
+    } else if (_kind == _ReplacementKind.method) {
+      await _proposeMethod(builder);
+    }
+  }
+
+  Future<void> _proposeAnnotation(DartChangeBuilder builder) async {
+    var node = this.node;
+    if (node is Annotation) {
+      var name = node.name;
+      if (name != null && name.staticElement == null) {
+        if (node.arguments != null) {
+          await _proposeClassOrMixin(builder, name);
+        }
+      }
+    }
+  }
+
+  Future<void> _proposeClassOrMixin(
+      DartChangeBuilder builder, AstNode node) async {
+    // Prepare the optional import prefix name.
+    String prefixName;
+    if (node is PrefixedIdentifier &&
+        node.parent is TypeName &&
+        node.prefix.staticElement is PrefixElement) {
+      prefixName = (node as PrefixedIdentifier).prefix.name;
+      node = (node as PrefixedIdentifier).identifier;
+    }
+    // Process if looks like a type.
+    if (mightBeTypeIdentifier(node)) {
+      // Prepare for selecting the closest element.
+      var name = (node as SimpleIdentifier).name;
+      var finder = _ClosestElementFinder(
+          name, (Element element) => element is ClassElement);
+      // Check elements of this library.
+      if (prefixName == null) {
+        for (var unit in resolvedResult.libraryElement.units) {
+          finder._updateList(unit.types);
+        }
+      }
+      // Check elements from imports.
+      for (var importElement in resolvedResult.libraryElement.imports) {
+        if (importElement.prefix?.name == prefixName) {
+          var namespace = getImportNamespace(importElement);
+          finder._updateList(namespace.values);
+        }
+      }
+      // If we have a close enough element, suggest to use it.
+      if (finder._element != null) {
+        _proposedName = finder._element.name;
+        if (_proposedName != null) {
+          await builder.addFileEdit(file, (DartFileEditBuilder builder) {
+            builder.addSimpleReplacement(range.node(node), _proposedName);
+          });
+        }
+      }
+    }
+  }
+
+  Future<void> _proposeClassOrMixinMember(DartChangeBuilder builder,
+      Expression target, ElementPredicate predicate) async {
+    if (node is SimpleIdentifier) {
+      var name = (node as SimpleIdentifier).name;
+      var finder = _ClosestElementFinder(name, predicate);
+      // unqualified invocation
+      if (target == null) {
+        var clazz = node.thisOrAncestorOfType<ClassDeclaration>();
+        if (clazz != null) {
+          var classElement = clazz.declaredElement;
+          _updateFinderWithClassMembers(finder, classElement);
+        }
+      } else if (target is ExtensionOverride) {
+        _updateFinderWithExtensionMembers(finder, target.staticElement);
+      } else if (target is Identifier &&
+          target.staticElement is ExtensionElement) {
+        _updateFinderWithExtensionMembers(finder, target.staticElement);
+      } else {
+        var classElement = getTargetClassElement(target);
+        if (classElement != null) {
+          _updateFinderWithClassMembers(finder, classElement);
+        }
+      }
+      // if we have close enough element, suggest to use it
+      if (finder._element != null) {
+        _proposedName = finder._element.displayName;
+        await builder.addFileEdit(file, (DartFileEditBuilder builder) {
+          builder.addSimpleReplacement(range.node(node), _proposedName);
+        });
+      }
+    }
+  }
+
+  Future<void> _proposeFunction(DartChangeBuilder builder) async {
+    var node = this.node;
+    if (node is SimpleIdentifier) {
+      // Prepare the optional import prefix name.
+      String prefixName;
+      {
+        var invocation = node.parent;
+        if (invocation is MethodInvocation && invocation.methodName == node) {
+          var target = invocation.target;
+          if (target is SimpleIdentifier &&
+              target.staticElement is PrefixElement) {
+            prefixName = target.name;
+          }
+        }
+      }
+      // Prepare for selecting the closest element.
+      var finder = _ClosestElementFinder(
+          node.name, (Element element) => element is FunctionElement);
+      // Check to this library units.
+      if (prefixName == null) {
+        for (var unit in resolvedResult.libraryElement.units) {
+          finder._updateList(unit.functions);
+        }
+      }
+      // Check unprefixed imports.
+      for (var importElement in resolvedResult.libraryElement.imports) {
+        if (importElement.prefix?.name == prefixName) {
+          var namespace = getImportNamespace(importElement);
+          finder._updateList(namespace.values);
+        }
+      }
+      // If we have a close enough element, suggest to use it.
+      if (finder._element != null) {
+        _proposedName = finder._element.name;
+        await builder.addFileEdit(file, (DartFileEditBuilder builder) {
+          builder.addSimpleReplacement(range.node(node), _proposedName);
+        });
+      }
+    }
+  }
+
+  Future<void> _proposeGetterOrSetter(DartChangeBuilder builder) async {
+    var node = this.node;
+    if (node is SimpleIdentifier) {
+      // prepare target
+      Expression target;
+      if (node.parent is PrefixedIdentifier) {
+        target = (node.parent as PrefixedIdentifier).prefix;
+      } else if (node.parent is PropertyAccess) {
+        target = (node.parent as PropertyAccess).target;
+      }
+      // find getter
+      if (node.inGetterContext()) {
+        await _proposeClassOrMixinMember(builder, target, (Element element) {
+          return element is PropertyAccessorElement && element.isGetter ||
+              element is FieldElement && element.getter != null;
+        });
+      }
+      // find setter
+      if (node.inSetterContext()) {
+        await _proposeClassOrMixinMember(builder, target, (Element element) {
+          return element is PropertyAccessorElement && element.isSetter ||
+              element is FieldElement && element.setter != null;
+        });
+      }
+    }
+  }
+
+  Future<void> _proposeMethod(DartChangeBuilder builder) async {
+    if (node.parent is MethodInvocation) {
+      var invocation = node.parent as MethodInvocation;
+      await _proposeClassOrMixinMember(builder, invocation.realTarget,
+          (Element element) => element is MethodElement && !element.isOperator);
+    }
+  }
+
+  void _updateFinderWithClassMembers(
+      _ClosestElementFinder finder, ClassElement clazz) {
+    if (clazz != null) {
+      var members = getMembers(clazz);
+      finder._updateList(members);
+    }
+  }
+
+  void _updateFinderWithExtensionMembers(
+      _ClosestElementFinder finder, ExtensionElement element) {
+    if (element != null) {
+      finder._updateList(getExtensionMembers(element));
+    }
+  }
+
+  /// Return an instance of this class that will propose classes and mixins.
+  /// Used as a tear-off in `FixProcessor`.
+  static ChangeTo annotation() => ChangeTo(_ReplacementKind.annotation);
+
+  /// Return an instance of this class that will propose classes and mixins.
+  /// Used as a tear-off in `FixProcessor`.
+  static ChangeTo classOrMixin() => ChangeTo(_ReplacementKind.classOrMixin);
+
+  /// Return an instance of this class that will propose functions. Used as a
+  /// tear-off in `FixProcessor`.
+  static ChangeTo function() => ChangeTo(_ReplacementKind.function);
+
+  /// Return an instance of this class that will propose getters and setters.
+  /// Used as a tear-off in `FixProcessor`.
+  static ChangeTo getterOrSetter() => ChangeTo(_ReplacementKind.getterOrSetter);
+
+  /// Return an instance of this class that will propose methods. Used as a
+  /// tear-off in `FixProcessor`.
+  static ChangeTo method() => ChangeTo(_ReplacementKind.method);
+}
+
+/// Helper for finding [Element] with name closest to the given.
+class _ClosestElementFinder {
+  /// The maximum Levenshtein distance between the existing name and a possible
+  /// replacement before the replacement is deemed to not be worth offering.
+  static const _maxDistance = 3;
+
+  /// The name to be replaced.
+  final String _targetName;
+
+  /// A function used to filter the possible elements to those of the right
+  /// kind.
+  final ElementPredicate _predicate;
+
+  int _distance = _maxDistance;
+
+  Element _element;
+
+  _ClosestElementFinder(this._targetName, this._predicate);
+
+  void _update(Element element) {
+    if (_predicate(element)) {
+      var memberDistance = levenshtein(element.name, _targetName, _distance);
+      if (memberDistance < _distance) {
+        _element = element;
+        _distance = memberDistance;
+      }
+    }
+  }
+
+  void _updateList(Iterable<Element> elements) {
+    for (var element in elements) {
+      _update(element);
+    }
+  }
+}
+
+/// A representation of the kind of element that should be suggested.
+enum _ReplacementKind {
+  annotation,
+  classOrMixin,
+  function,
+  getterOrSetter,
+  method
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/change_to_nearest_precise_value.dart b/pkg/analysis_server/lib/src/services/correction/dart/change_to_nearest_precise_value.dart
index 89888e1..fc5559c 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/change_to_nearest_precise_value.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/change_to_nearest_precise_value.dart
@@ -12,10 +12,10 @@
 
 class ChangeToNearestPreciseValue extends CorrectionProducer {
   /// The value to which the code will be changed.
-  String correction = '';
+  String _correction = '';
 
   @override
-  List<Object> get fixArguments => [correction];
+  List<Object> get fixArguments => [_correction];
 
   @override
   FixKind get fixKind => DartFixKind.CHANGE_TO_NEAREST_PRECISE_VALUE;
@@ -25,11 +25,11 @@
     IntegerLiteral integer = node;
     var lexeme = integer.literal.lexeme;
     var precise = BigInt.from(IntegerLiteralImpl.nearestValidDouble(lexeme));
-    correction = lexeme.toLowerCase().contains('x')
+    _correction = lexeme.toLowerCase().contains('x')
         ? '0x${precise.toRadixString(16).toUpperCase()}'
         : precise.toString();
     await builder.addFileEdit(file, (DartFileEditBuilder builder) {
-      builder.addSimpleReplacement(range.node(integer), correction);
+      builder.addSimpleReplacement(range.node(integer), _correction);
     });
   }
 
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 0467c08..5f490be 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
@@ -11,12 +11,12 @@
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
 class ChangeTypeAnnotation extends CorrectionProducer {
-  String oldAnnotation = '';
+  String _oldAnnotation = '';
 
-  String newAnnotation = '';
+  String _newAnnotation = '';
 
   @override
-  List<Object> get fixArguments => [oldAnnotation, newAnnotation];
+  List<Object> get fixArguments => [_oldAnnotation, _newAnnotation];
 
   @override
   FixKind get fixKind => DartFixKind.CHANGE_TYPE_ANNOTATION;
@@ -34,9 +34,9 @@
           Expression initializer = coveredNode;
           var newType = initializer.staticType;
           if (newType is InterfaceType || newType is FunctionType) {
-            oldAnnotation =
+            _oldAnnotation =
                 typeNode.type.getDisplayString(withNullability: false);
-            newAnnotation = newType.getDisplayString(withNullability: false);
+            _newAnnotation = newType.getDisplayString(withNullability: false);
             await builder.addFileEdit(file, (DartFileEditBuilder builder) {
               builder.addReplacement(range.node(typeNode),
                   (DartEditBuilder builder) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_add_all_to_spread.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_add_all_to_spread.dart
index a6fc1e4..f123391 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_add_all_to_spread.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_add_all_to_spread.dart
@@ -14,25 +14,25 @@
 
 class ConvertAddAllToSpread extends CorrectionProducer {
   /// The arguments used to compose the message.
-  List<String> args;
+  List<String> _args;
 
   /// A flag indicating whether the change that was built is one that inlines
   /// the elements of another list into the target list.
-  bool isInlineInvocation = false;
+  bool _isInlineInvocation = false;
 
   @override
-  List<Object> get assistArguments => args;
+  List<Object> get assistArguments => _args;
 
   @override
-  AssistKind get assistKind => isInlineInvocation
+  AssistKind get assistKind => _isInlineInvocation
       ? DartAssistKind.INLINE_INVOCATION
       : DartAssistKind.CONVERT_TO_SPREAD;
 
   @override
-  List<Object> get fixArguments => args;
+  List<Object> get fixArguments => _args;
 
   @override
-  FixKind get fixKind => isInlineInvocation
+  FixKind get fixKind => _isInlineInvocation
       ? DartFixKind.INLINE_INVOCATION
       : DartFixKind.CONVERT_TO_SPREAD;
 
@@ -93,8 +93,8 @@
       var startOffset = elements.first.offset;
       var endOffset = elements.last.end;
       elementText = utils.getText(startOffset, endOffset - startOffset);
-      args = ['addAll'];
-      isInlineInvocation = true;
+      _args = ['addAll'];
+      _isInlineInvocation = true;
     }
     elementText ??= '...${utils.getNodeText(argument)}';
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_quotes.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_quotes.dart
index 52e7880..b9ee86a 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_quotes.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_quotes.dart
@@ -16,16 +16,16 @@
 
   /// Return `true` if this producer is converting from double quotes to single
   /// quotes, or `false` if it's converting from single quotes to double quotes.
-  bool get fromDouble;
+  bool get _fromDouble;
 
   @override
   Future<void> compute(DartChangeBuilder builder) async {
     if (node is SimpleStringLiteral) {
       SimpleStringLiteral literal = node;
-      if (fromDouble ? !literal.isSingleQuoted : literal.isSingleQuoted) {
+      if (_fromDouble ? !literal.isSingleQuoted : literal.isSingleQuoted) {
         var newQuote = literal.isMultiline
-            ? (fromDouble ? "'''" : '"""')
-            : (fromDouble ? "'" : '"');
+            ? (_fromDouble ? "'''" : '"""')
+            : (_fromDouble ? "'" : '"');
         var quoteLength = literal.isMultiline ? 3 : 1;
         var lexeme = literal.literal.lexeme;
         if (!lexeme.contains(newQuote)) {
@@ -41,10 +41,10 @@
       }
     } else if (node is InterpolationString) {
       StringInterpolation parent = node.parent;
-      if (fromDouble ? !parent.isSingleQuoted : parent.isSingleQuoted) {
+      if (_fromDouble ? !parent.isSingleQuoted : parent.isSingleQuoted) {
         var newQuote = parent.isMultiline
-            ? (fromDouble ? "'''" : '"""')
-            : (fromDouble ? "'" : '"');
+            ? (_fromDouble ? "'''" : '"""')
+            : (_fromDouble ? "'" : '"');
         var quoteLength = parent.isMultiline ? 3 : 1;
         var elements = parent.elements;
         for (var i = 0; i < elements.length; i++) {
@@ -75,7 +75,7 @@
   AssistKind get assistKind => DartAssistKind.CONVERT_TO_DOUBLE_QUOTED_STRING;
 
   @override
-  bool get fromDouble => false;
+  bool get _fromDouble => false;
 
   /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
   static ConvertToDoubleQuotes newInstance() => ConvertToDoubleQuotes();
@@ -91,7 +91,7 @@
   FixKind get fixKind => DartFixKind.CONVERT_TO_SINGLE_QUOTED_STRING;
 
   @override
-  bool get fromDouble => true;
+  bool get _fromDouble => true;
 
   /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
   static ConvertToSingleQuotes newInstance() => ConvertToSingleQuotes();
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_contains.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_contains.dart
index 8be4d1b..8f52fed 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_contains.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_contains.dart
@@ -22,12 +22,12 @@
     }
     var leftOperand = comparison.leftOperand;
     var rightOperand = comparison.rightOperand;
-    if (leftOperand is MethodInvocation && isInteger(rightOperand)) {
-      var value = integerValue(rightOperand);
+    if (leftOperand is MethodInvocation && _isInteger(rightOperand)) {
+      var value = _integerValue(rightOperand);
       var methodName = leftOperand.methodName;
       var deletionRange = range.endEnd(leftOperand, rightOperand);
       var notOffset = -1;
-      var style = negationStyle(comparison.operator.type, value);
+      var style = _negationStyle(comparison.operator.type, value);
       if (style == NegationStyle.none) {
         return;
       } else if (style == NegationStyle.negated) {
@@ -41,13 +41,13 @@
         builder.addSimpleReplacement(range.node(methodName), 'contains');
         builder.addDeletion(deletionRange);
       });
-    } else if (isInteger(leftOperand) && rightOperand is MethodInvocation) {
-      var value = integerValue(leftOperand);
+    } else if (_isInteger(leftOperand) && rightOperand is MethodInvocation) {
+      var value = _integerValue(leftOperand);
       var methodName = rightOperand.methodName;
       var deletionRange = range.startStart(leftOperand, rightOperand);
       var notOffset = -1;
       var style =
-          negationStyle(invertedTokenType(comparison.operator.type), value);
+          _negationStyle(_invertedTokenType(comparison.operator.type), value);
       if (style == NegationStyle.none) {
         return;
       } else if (style == NegationStyle.negated) {
@@ -64,9 +64,9 @@
     }
   }
 
-  /// Return the value of the given [expression], given that [isInteger]
+  /// Return the value of the given [expression], given that [_isInteger]
   /// returned `true`.
-  int integerValue(Expression expression) {
+  int _integerValue(Expression expression) {
     if (expression is IntegerLiteral) {
       return expression.value;
     } else if (expression is PrefixExpression &&
@@ -79,7 +79,7 @@
     throw StateError('invalid integer value');
   }
 
-  TokenType invertedTokenType(TokenType type) {
+  TokenType _invertedTokenType(TokenType type) {
     switch (type) {
       case TokenType.LT_EQ:
         return TokenType.GT_EQ;
@@ -96,14 +96,14 @@
 
   /// Return `true` if the given [expression] is a literal integer, possibly
   /// prefixed by a negation operator.
-  bool isInteger(Expression expression) {
+  bool _isInteger(Expression expression) {
     return (expression is IntegerLiteral) ||
         (expression is PrefixExpression &&
             expression.operator.type == TokenType.MINUS &&
             expression.operand is IntegerLiteral);
   }
 
-  NegationStyle negationStyle(TokenType type, int value) {
+  NegationStyle _negationStyle(TokenType type, int value) {
     if (value == -1) {
       if (type == TokenType.EQ_EQ || type == TokenType.LT_EQ) {
         // `indexOf == -1` is the same as `!contains`
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
new file mode 100644
index 0000000..95bd4ba
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
@@ -0,0 +1,134 @@
+// 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 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
+import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/correction/util.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:analyzer_plugin/utilities/range_factory.dart';
+
+class CreateConstructor extends CorrectionProducer {
+  /// The name of the constructor being created.
+  ConstructorName _constructorName;
+
+  @override
+  List<Object> get fixArguments => [_constructorName];
+
+  @override
+  FixKind get fixKind => DartFixKind.CREATE_CONSTRUCTOR;
+
+  @override
+  Future<void> compute(DartChangeBuilder builder) async {
+    if (node is ArgumentList && node.parent is InstanceCreationExpression) {
+      await _proposeFromInstanceCreation(builder);
+    } else {
+      await _proposeFromConstructorName(builder);
+    }
+  }
+
+  Future<void> _proposeFromConstructorName(DartChangeBuilder builder) async {
+    SimpleIdentifier name;
+    InstanceCreationExpression instanceCreation;
+    if (node is SimpleIdentifier) {
+      // name
+      name = node as SimpleIdentifier;
+      if (name.parent is ConstructorName) {
+        _constructorName = name.parent as ConstructorName;
+        if (_constructorName.name == name) {
+          // Type.name
+          if (_constructorName.parent is InstanceCreationExpression) {
+            instanceCreation =
+                _constructorName.parent as InstanceCreationExpression;
+            // new Type.name()
+            if (instanceCreation.constructorName != _constructorName) {
+              return;
+            }
+          }
+        }
+      }
+    }
+    // do we have enough information?
+    if (instanceCreation == null) {
+      return;
+    }
+    // prepare target interface type
+    var targetType = _constructorName.type.type;
+    if (targetType is! InterfaceType) {
+      return;
+    }
+
+    // prepare target ClassDeclaration
+    ClassElement targetElement = targetType.element;
+    var targetResult = await sessionHelper.getElementDeclaration(targetElement);
+    if (targetResult.node is! ClassOrMixinDeclaration) {
+      return;
+    }
+    ClassOrMixinDeclaration targetNode = targetResult.node;
+
+    // prepare location
+    var targetLocation = CorrectionUtils(targetResult.resolvedUnit)
+        .prepareNewConstructorLocation(targetNode);
+
+    var targetFile = targetElement.source.fullName;
+    await builder.addFileEdit(targetFile, (DartFileEditBuilder builder) {
+      builder.addInsertion(targetLocation.offset, (DartEditBuilder builder) {
+        builder.write(targetLocation.prefix);
+        builder.writeConstructorDeclaration(targetElement.name,
+            argumentList: instanceCreation.argumentList,
+            constructorName: name,
+            constructorNameGroupName: 'NAME');
+        builder.write(targetLocation.suffix);
+      });
+      if (targetFile == file) {
+        builder.addLinkedPosition(range.node(name), 'NAME');
+      }
+    });
+  }
+
+  Future<void> _proposeFromInstanceCreation(DartChangeBuilder builder) async {
+    InstanceCreationExpression instanceCreation = node.parent;
+    _constructorName = instanceCreation.constructorName;
+    // should be synthetic default constructor
+    var constructorElement = _constructorName.staticElement;
+    if (constructorElement == null ||
+        !constructorElement.isDefaultConstructor ||
+        !constructorElement.isSynthetic) {
+      return;
+    }
+    // prepare target
+    if (constructorElement.enclosingElement is! ClassElement) {
+      return;
+    }
+
+    // prepare target ClassDeclaration
+    var targetElement = constructorElement.enclosingElement;
+    var targetResult = await sessionHelper.getElementDeclaration(targetElement);
+    if (targetResult.node is! ClassOrMixinDeclaration) {
+      return;
+    }
+    ClassOrMixinDeclaration targetNode = targetResult.node;
+
+    // prepare location
+    var targetLocation = CorrectionUtils(targetResult.resolvedUnit)
+        .prepareNewConstructorLocation(targetNode);
+
+    var targetSource = targetElement.source;
+    var targetFile = targetSource.fullName;
+    await builder.addFileEdit(targetFile, (DartFileEditBuilder builder) {
+      builder.addInsertion(targetLocation.offset, (DartEditBuilder builder) {
+        builder.write(targetLocation.prefix);
+        builder.writeConstructorDeclaration(targetElement.name,
+            argumentList: instanceCreation.argumentList);
+        builder.write(targetLocation.suffix);
+      });
+    });
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static CreateConstructor newInstance() => CreateConstructor();
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_super.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_super.dart
new file mode 100644
index 0000000..53c642c
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_super.dart
@@ -0,0 +1,112 @@
+// 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 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
+import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/correction/util.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+
+class CreateConstructorSuper extends MultiCorrectionProducer {
+  @override
+  Iterable<CorrectionProducer> get producers sync* {
+    var targetClassNode = node.thisOrAncestorOfType<ClassDeclaration>();
+    var targetClassElement = targetClassNode.declaredElement;
+    var superType = targetClassElement.supertype;
+    // add proposals for all super constructors
+    for (var constructor in superType.constructors) {
+      // Only propose public constructors.
+      if (!Identifier.isPrivateName(constructor.name)) {
+        var targetLocation =
+            utils.prepareNewConstructorLocation(targetClassNode);
+        yield _CreateConstructor(
+            constructor, targetLocation, targetClassElement.name);
+      }
+    }
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static CreateConstructorSuper newInstance() => CreateConstructorSuper();
+}
+
+/// A correction processor that can make one of the possible change computed by
+/// the [CreateConstructorSuper] producer.
+class _CreateConstructor extends CorrectionProducer {
+  /// The constructor to be invoked.
+  final ConstructorElement _constructor;
+
+  /// An indication of where the new constructor should be added.
+  final ClassMemberLocation _targetLocation;
+
+  /// The name of the class in which the constructor will be added.
+  final String _targetClassName;
+
+  _CreateConstructor(
+      this._constructor, this._targetLocation, this._targetClassName);
+
+  @override
+  List<Object> get fixArguments {
+    var buffer = StringBuffer();
+    buffer.write('super');
+    var constructorName = _constructor.displayName;
+    if (constructorName.isNotEmpty) {
+      buffer.write('.');
+      buffer.write(constructorName);
+    }
+    buffer.write('(...)');
+    return [buffer.toString()];
+  }
+
+  @override
+  FixKind get fixKind => DartFixKind.CREATE_CONSTRUCTOR_SUPER;
+
+  @override
+  Future<void> compute(DartChangeBuilder builder) async {
+    var constructorName = _constructor.name;
+    var requiredParameters = _constructor.parameters
+        .where((parameter) => parameter.isRequiredPositional);
+    await builder.addFileEdit(file, (DartFileEditBuilder builder) {
+      builder.addInsertion(_targetLocation.offset, (DartEditBuilder builder) {
+        void writeParameters(bool includeType) {
+          var firstParameter = true;
+          for (var parameter in requiredParameters) {
+            if (firstParameter) {
+              firstParameter = false;
+            } else {
+              builder.write(', ');
+            }
+            var parameterName = parameter.displayName;
+            if (parameterName.length > 1 && parameterName.startsWith('_')) {
+              parameterName = parameterName.substring(1);
+            }
+            if (includeType && builder.writeType(parameter.type)) {
+              builder.write(' ');
+            }
+            builder.write(parameterName);
+          }
+        }
+
+        builder.write(_targetLocation.prefix);
+        builder.write(_targetClassName);
+        if (constructorName.isNotEmpty) {
+          builder.write('.');
+          builder.addSimpleLinkedEdit('NAME', constructorName);
+        }
+        builder.write('(');
+        writeParameters(true);
+        builder.write(') : super');
+        if (constructorName.isNotEmpty) {
+          builder.write('.');
+          builder.addSimpleLinkedEdit('NAME', constructorName);
+        }
+        builder.write('(');
+        writeParameters(false);
+        builder.write(');');
+        builder.write(_targetLocation.suffix);
+      });
+    });
+  }
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_field.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_field.dart
new file mode 100644
index 0000000..c9bee55
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_field.dart
@@ -0,0 +1,130 @@
+// 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 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
+import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/correction/util.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+
+class CreateField extends CorrectionProducer {
+  /// The name of the field to be created.
+  String _fieldName;
+
+  @override
+  List<Object> get fixArguments => [_fieldName];
+
+  @override
+  FixKind get fixKind => DartFixKind.CREATE_FIELD;
+
+  @override
+  Future<void> compute(DartChangeBuilder builder) async {
+    var parameter = node.thisOrAncestorOfType<FieldFormalParameter>();
+    if (parameter != null) {
+      await _proposeFromFieldFormalParameter(builder, parameter);
+    } else {
+      await _proposeFromIdentifier(builder);
+    }
+  }
+
+  Future<void> _proposeFromFieldFormalParameter(
+      DartChangeBuilder builder, FieldFormalParameter parameter) async {
+    var targetClassNode = parameter.thisOrAncestorOfType<ClassDeclaration>();
+    if (targetClassNode == null) {
+      return;
+    }
+    var nameNode = parameter.identifier;
+    _fieldName = nameNode.name;
+    var targetLocation = utils.prepareNewFieldLocation(targetClassNode);
+    //
+    // Add proposal.
+    //
+    await builder.addFileEdit(file, (DartFileEditBuilder builder) {
+      var fieldType = parameter.type?.type;
+      builder.addInsertion(targetLocation.offset, (DartEditBuilder builder) {
+        builder.write(targetLocation.prefix);
+        builder.writeFieldDeclaration(_fieldName,
+            nameGroupName: 'NAME', type: fieldType, typeGroupName: 'TYPE');
+        builder.write(targetLocation.suffix);
+      });
+    });
+  }
+
+  Future<void> _proposeFromIdentifier(DartChangeBuilder builder) async {
+    if (node is! SimpleIdentifier) {
+      return;
+    }
+    SimpleIdentifier nameNode = node;
+    _fieldName = nameNode.name;
+    // prepare target Expression
+    Expression target;
+    {
+      var nameParent = nameNode.parent;
+      if (nameParent is PrefixedIdentifier) {
+        target = nameParent.prefix;
+      } else if (nameParent is PropertyAccess) {
+        target = nameParent.realTarget;
+      }
+    }
+    // prepare target ClassElement
+    var staticModifier = false;
+    ClassElement targetClassElement;
+    if (target != null) {
+      targetClassElement = getTargetClassElement(target);
+      // maybe static
+      if (target is Identifier) {
+        var targetIdentifier = target;
+        var targetElement = targetIdentifier.staticElement;
+        if (targetElement == null) {
+          return;
+        }
+        staticModifier = targetElement.kind == ElementKind.CLASS;
+      }
+    } else {
+      targetClassElement = getEnclosingClassElement(node);
+      staticModifier = inStaticContext;
+    }
+    if (targetClassElement == null) {
+      return;
+    }
+    if (targetClassElement.librarySource.isInSystemLibrary) {
+      return;
+    }
+    utils.targetClassElement = targetClassElement;
+    // prepare target ClassDeclaration
+    var targetDeclarationResult =
+        await sessionHelper.getElementDeclaration(targetClassElement);
+    if (targetDeclarationResult == null) {
+      return;
+    }
+    if (targetDeclarationResult.node is! ClassOrMixinDeclaration) {
+      return;
+    }
+    ClassOrMixinDeclaration targetNode = targetDeclarationResult.node;
+    // prepare location
+    var targetLocation = CorrectionUtils(targetDeclarationResult.resolvedUnit)
+        .prepareNewFieldLocation(targetNode);
+    // build field source
+    var targetSource = targetClassElement.source;
+    var targetFile = targetSource.fullName;
+    await builder.addFileEdit(targetFile, (DartFileEditBuilder builder) {
+      var fieldTypeNode = climbPropertyAccess(nameNode);
+      var fieldType = inferUndefinedExpressionType(fieldTypeNode);
+      builder.addInsertion(targetLocation.offset, (DartEditBuilder builder) {
+        builder.write(targetLocation.prefix);
+        builder.writeFieldDeclaration(_fieldName,
+            isStatic: staticModifier,
+            nameGroupName: 'NAME',
+            type: fieldType,
+            typeGroupName: 'TYPE');
+        builder.write(targetLocation.suffix);
+      });
+    });
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static CreateField newInstance() => CreateField();
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_file.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_file.dart
new file mode 100644
index 0000000..5b5f3f4
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_file.dart
@@ -0,0 +1,57 @@
+// 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 '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/src/generated/engine.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+
+class CreateFile extends CorrectionProducer {
+  String _fileName;
+
+  @override
+  List<Object> get fixArguments => [_fileName];
+
+  @override
+  FixKind get fixKind => DartFixKind.CREATE_FILE;
+
+  @override
+  Future<void> compute(DartChangeBuilder builder) async {
+    // TODO(brianwilkerson) Generalize this to allow other valid string literals.
+    if (node is SimpleStringLiteral) {
+      var parent = node.parent;
+      if (parent is ImportDirective) {
+        // TODO(brianwilkerson) Support the case where the node's parent is a
+        //  Configuration.
+        var source = parent.uriSource;
+        if (source != null) {
+          var fullName = source.fullName;
+          if (resourceProvider.pathContext.isAbsolute(fullName) &&
+              AnalysisEngine.isDartFileName(fullName)) {
+            await builder.addFileEdit(fullName, (builder) {
+              builder.addSimpleInsertion(0, '// TODO Implement this library.');
+            });
+            _fileName = source.shortName;
+          }
+        }
+      } else if (parent is PartDirective) {
+        var source = parent.uriSource;
+        if (source != null) {
+          var libName = resolvedResult.libraryElement.name;
+          await builder.addFileEdit(source.fullName,
+              (DartFileEditBuilder builder) {
+            // TODO(brianwilkerson) Consider using the URI rather than name.
+            builder.addSimpleInsertion(0, 'part of $libName;$eol$eol');
+          });
+          _fileName = source.shortName;
+        }
+      }
+    }
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static CreateFile newInstance() => CreateFile();
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_getter.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_getter.dart
index d3365c6..8947281 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_getter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_getter.dart
@@ -12,10 +12,10 @@
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 
 class CreateGetter extends CorrectionProducer {
-  String getterName;
+  String _getterName;
 
   @override
-  List<Object> get fixArguments => [getterName];
+  List<Object> get fixArguments => [_getterName];
 
   @override
   FixKind get fixKind => DartFixKind.CREATE_GETTER;
@@ -26,7 +26,7 @@
       return;
     }
     SimpleIdentifier nameNode = node;
-    getterName = nameNode.name;
+    _getterName = nameNode.name;
     if (!nameNode.inGetterContext()) {
       return;
     }
@@ -95,7 +95,7 @@
         var fieldTypeNode = climbPropertyAccess(nameNode);
         var fieldType = inferUndefinedExpressionType(fieldTypeNode);
         builder.write(targetLocation.prefix);
-        builder.writeGetterDeclaration(getterName,
+        builder.writeGetterDeclaration(_getterName,
             isStatic: staticModifier,
             nameGroupName: 'NAME',
             returnType: fieldType,
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_local_variable.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_local_variable.dart
index 5528f79..8a809bf 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_local_variable.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_local_variable.dart
@@ -12,10 +12,10 @@
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
 class CreateLocalVariable extends CorrectionProducer {
-  String variableName;
+  String _variableName;
 
   @override
-  List<Object> get fixArguments => [variableName];
+  List<Object> get fixArguments => [_variableName];
 
   @override
   FixKind get fixKind => DartFixKind.CREATE_LOCAL_VARIABLE;
@@ -26,7 +26,7 @@
       return;
     }
     SimpleIdentifier nameNode = node;
-    variableName = nameNode.name;
+    _variableName = nameNode.name;
     // if variable is assigned, convert assignment into declaration
     if (node.parent is AssignmentExpression) {
       AssignmentExpression assignment = node.parent;
@@ -53,7 +53,7 @@
     // build variable declaration source
     await builder.addFileEdit(file, (DartFileEditBuilder builder) {
       builder.addInsertion(target.offset, (DartEditBuilder builder) {
-        builder.writeLocalVariableDeclaration(variableName,
+        builder.writeLocalVariableDeclaration(_variableName,
             nameGroupName: 'NAME', type: type, typeGroupName: 'TYPE');
         builder.write(eol);
         builder.write(prefix);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart
index 5e211d6..cf91806 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart
@@ -10,10 +10,10 @@
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 
 class CreateMethod extends CorrectionProducer {
-  String memberName;
+  String _memberName;
 
   @override
-  List<Object> get fixArguments => [memberName];
+  List<Object> get fixArguments => [_memberName];
 
   @override
   FixKind get fixKind => DartFixKind.CREATE_METHOD;
@@ -27,13 +27,13 @@
 
       var element;
       if (methodDecl.name.name == 'hashCode') {
-        memberName = '==';
+        _memberName = '==';
         element = classElement.lookUpInheritedMethod(
-            memberName, classElement.library);
+            _memberName, classElement.library);
       } else {
-        memberName = 'hashCode';
+        _memberName = 'hashCode';
         element = classElement.lookUpInheritedConcreteGetter(
-            memberName, classElement.library);
+            _memberName, classElement.library);
       }
 
       final location =
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 b5f45d2..c6d5e59 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
@@ -13,10 +13,10 @@
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 
 class CreateMissingOverrides extends CorrectionProducer {
-  int numElements;
+  int _numElements;
 
   @override
-  List<Object> get fixArguments => [numElements];
+  List<Object> get fixArguments => [_numElements];
 
   @override
   FixKind get fixKind => DartFixKind.CREATE_MISSING_OVERRIDES;
@@ -42,7 +42,7 @@
       }
       return 1;
     });
-    numElements = signatures.length;
+    _numElements = signatures.length;
 
     var location =
         utils.prepareNewClassMemberLocation(targetClass, (_) => true);
@@ -73,7 +73,7 @@
               signatures.removeAt(i + 1);
               signatures.removeAt(i);
               i--;
-              numElements--;
+              _numElements--;
               // separator
               addSeparatorBetweenDeclarations();
               // @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart
index 370e086..78d9e6a 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart
@@ -12,10 +12,10 @@
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
 class CreateMixin extends CorrectionProducer {
-  String mixinName;
+  String _mixinName;
 
   @override
-  List<Object> get fixArguments => [mixinName];
+  List<Object> get fixArguments => [_mixinName];
 
   @override
   FixKind get fixKind => DartFixKind.CREATE_MIXIN;
@@ -32,7 +32,7 @@
         return;
       } else {
         nameNode = node;
-        mixinName = nameNode.name;
+        _mixinName = nameNode.name;
       }
     } else if (node is PrefixedIdentifier) {
       if (node.parent is InstanceCreationExpression) {
@@ -44,7 +44,7 @@
         return;
       }
       nameNode = prefixedIdentifier.identifier;
-      mixinName = prefixedIdentifier.identifier.name;
+      _mixinName = prefixedIdentifier.identifier.name;
     } else {
       return;
     }
@@ -94,7 +94,7 @@
     await builder.addFileEdit(filePath, (DartFileEditBuilder builder) {
       builder.addInsertion(offset, (DartEditBuilder builder) {
         builder.write(prefix);
-        builder.writeMixinDeclaration(mixinName, nameGroupName: 'NAME');
+        builder.writeMixinDeclaration(_mixinName, nameGroupName: 'NAME');
         builder.write(suffix);
       });
       if (prefixElement == null) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_setter.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_setter.dart
index e7ddc3d..be6d0bf 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_setter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_setter.dart
@@ -12,10 +12,10 @@
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 
 class CreateSetter extends CorrectionProducer {
-  String setterName;
+  String _setterName;
 
   @override
-  List<Object> get fixArguments => [setterName];
+  List<Object> get fixArguments => [_setterName];
 
   @override
   FixKind get fixKind => DartFixKind.CREATE_SETTER;
@@ -89,13 +89,13 @@
     // build method source
     var targetSource = targetElement.source;
     var targetFile = targetSource.fullName;
-    setterName = nameNode.name;
+    _setterName = nameNode.name;
     await builder.addFileEdit(targetFile, (DartFileEditBuilder builder) {
       builder.addInsertion(targetLocation.offset, (DartEditBuilder builder) {
         var parameterTypeNode = climbPropertyAccess(nameNode);
         var parameterType = inferUndefinedExpressionType(parameterTypeNode);
         builder.write(targetLocation.prefix);
-        builder.writeSetterDeclaration(setterName,
+        builder.writeSetterDeclaration(_setterName,
             isStatic: staticModifier,
             nameGroupName: 'NAME',
             parameterType: parameterType,
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart b/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart
index cc3c82c..78a4869 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart
@@ -9,10 +9,10 @@
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 
 class ExtendClassForMixin extends CorrectionProducer {
-  String typeName;
+  String _typeName;
 
   @override
-  List<Object> get fixArguments => [typeName];
+  List<Object> get fixArguments => [_typeName];
 
   @override
   FixKind get fixKind => DartFixKind.EXTEND_CLASS_FOR_MIXIN;
@@ -26,11 +26,11 @@
       var message = diagnostic.problemMessage.message;
       var endIndex = message.lastIndexOf("'");
       var startIndex = message.lastIndexOf("'", endIndex - 1) + 1;
-      typeName = message.substring(startIndex, endIndex);
+      _typeName = message.substring(startIndex, endIndex);
       await builder.addFileEdit(file, (DartFileEditBuilder builder) {
         builder.addSimpleInsertion(
             declaration.typeParameters?.end ?? declaration.name.end,
-            ' extends $typeName');
+            ' extends $_typeName');
       });
     }
   }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/inline_typedef.dart b/pkg/analysis_server/lib/src/services/correction/dart/inline_typedef.dart
index 6235f74..5d83225 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/inline_typedef.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/inline_typedef.dart
@@ -12,10 +12,10 @@
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
 class InlineTypedef extends CorrectionProducer {
-  String name;
+  String _name;
 
   @override
-  List<Object> get fixArguments => [name];
+  List<Object> get fixArguments => [_name];
 
   @override
   FixKind get fixKind => DartFixKind.INLINE_TYPEDEF;
@@ -31,7 +31,7 @@
     var parent = node.parent;
     if (parent is FunctionTypeAlias) {
       returnType = parent.returnType;
-      name = parent.name.name;
+      _name = parent.name.name;
       typeParameters = parent.typeParameters;
       parameters = parent.parameters.parameters;
     } else if (parent is GenericTypeAlias) {
@@ -40,14 +40,14 @@
       }
       var functionType = parent.functionType;
       returnType = functionType.returnType;
-      name = parent.name.name;
+      _name = parent.name.name;
       typeParameters = functionType.typeParameters;
       parameters = functionType.parameters.parameters;
     } else {
       return;
     }
     // TODO(brianwilkerson) Handle parts.
-    var finder = _ReferenceFinder(name);
+    var finder = _ReferenceFinder(_name);
     resolvedResult.unit.accept(finder);
     if (finder.count != 1) {
       return;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_class_abstract.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_class_abstract.dart
index 21ef3b5..d94a50a 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_class_abstract.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_class_abstract.dart
@@ -9,10 +9,10 @@
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 
 class MakeClassAbstract extends CorrectionProducer {
-  String className;
+  String _className;
 
   @override
-  List<Object> get fixArguments => [className];
+  List<Object> get fixArguments => [_className];
 
   @override
   FixKind get fixKind => DartFixKind.MAKE_CLASS_ABSTRACT;
@@ -23,7 +23,7 @@
     if (enclosingClass == null) {
       return;
     }
-    className = enclosingClass.name.name;
+    _className = enclosingClass.name.name;
     await builder.addFileEdit(file, (DartFileEditBuilder builder) {
       builder.addSimpleInsertion(
           enclosingClass.classKeyword.offset, 'abstract ');
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart
index 7ea72f1..168e961 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart
@@ -12,10 +12,10 @@
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
 class MakeFieldNotFinal extends CorrectionProducer {
-  String fieldName;
+  String _fieldName;
 
   @override
-  List<Object> get fixArguments => [fieldName];
+  List<Object> get fixArguments => [_fieldName];
 
   @override
   FixKind get fixKind => DartFixKind.MAKE_FIELD_NOT_FINAL;
@@ -53,7 +53,7 @@
                 });
               }
             });
-            fieldName = getter.variable.displayName;
+            _fieldName = getter.variable.displayName;
           }
         }
       }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_var_with_dynamic.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_var_with_dynamic.dart
new file mode 100644
index 0000000..e29ca07
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_var_with_dynamic.dart
@@ -0,0 +1,24 @@
+// 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 '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_dart.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:analyzer_plugin/utilities/range_factory.dart';
+
+class ReplaceVarWithDynamic extends CorrectionProducer {
+  @override
+  FixKind get fixKind => DartFixKind.REPLACE_VAR_WITH_DYNAMIC;
+
+  @override
+  Future<void> compute(DartChangeBuilder builder) async {
+    await builder.addFileEdit(file, (DartFileEditBuilder builder) {
+      builder.addSimpleReplacement(range.error(diagnostic), 'dynamic');
+    });
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static ReplaceVarWithDynamic newInstance() => ReplaceVarWithDynamic();
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_eight_digit_hex.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_eight_digit_hex.dart
index ad91c45..171639b 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_eight_digit_hex.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_eight_digit_hex.dart
@@ -11,10 +11,10 @@
 
 class ReplaceWithEightDigitHex extends CorrectionProducer {
   /// The replacement text, used as an argument to the fix message.
-  String replacement;
+  String _replacement;
 
   @override
-  List<Object> get fixArguments => [replacement];
+  List<Object> get fixArguments => [_replacement];
 
   @override
   FixKind get fixKind => DartFixKind.REPLACE_WITH_EIGHT_DIGIT_HEX;
@@ -28,12 +28,12 @@
       return;
     }
     var value = (node as IntegerLiteral).value;
-    replacement = '0x' + value.toRadixString(16).padLeft(8, '0');
+    _replacement = '0x' + value.toRadixString(16).padLeft(8, '0');
     //
     // Build the edit.
     //
     await builder.addFileEdit(file, (DartFileEditBuilder builder) {
-      builder.addSimpleReplacement(range.node(node), replacement);
+      builder.addSimpleReplacement(range.node(node), _replacement);
     });
   }
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/shadow_field.dart b/pkg/analysis_server/lib/src/services/correction/dart/shadow_field.dart
index 31b6a19..21070b4 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/shadow_field.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/shadow_field.dart
@@ -29,7 +29,7 @@
       // TODO(brianwilkerson) Should we also require that the getter be synthetic?
       return;
     }
-    var statement = getStatement();
+    var statement = _getStatement();
     if (statement == null) {
       return;
     }
@@ -71,7 +71,7 @@
 
   /// Return the statement immediately enclosing the [node] that would promote
   /// the type of the field if it were replaced by a local variable.
-  Statement getStatement() {
+  Statement _getStatement() {
     var parent = node.parent;
 
     Statement enclosingIf(Expression expression) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/update_sdk_constraints.dart b/pkg/analysis_server/lib/src/services/correction/dart/update_sdk_constraints.dart
new file mode 100644
index 0000000..a5522c5
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/update_sdk_constraints.dart
@@ -0,0 +1,84 @@
+// 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 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
+import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/source/source_range.dart';
+import 'package:analyzer/src/hint/sdk_constraint_extractor.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+
+class UpdateSdkConstraints extends CorrectionProducer {
+  /// The minimum version to which the SDK constraints should be updated.
+  final String _minimumVersion;
+
+  /// Initialize a newly created instance that will update the SDK constraints
+  /// to the [minimumVersion].
+  UpdateSdkConstraints(this._minimumVersion);
+
+  @override
+  FixKind get fixKind => DartFixKind.UPDATE_SDK_CONSTRAINTS;
+
+  @override
+  Future<void> compute(DartChangeBuilder builder) async {
+    var context = resourceProvider.pathContext;
+    File pubspecFile;
+    var folder = resourceProvider.getFolder(context.dirname(file));
+    while (folder != null) {
+      pubspecFile = folder.getChildAssumingFile('pubspec.yaml');
+      if (pubspecFile.exists) {
+        break;
+      }
+      pubspecFile = null;
+      folder = folder.parent;
+    }
+    if (pubspecFile == null) {
+      return;
+    }
+    var extractor = SdkConstraintExtractor(pubspecFile);
+    var text = extractor.constraintText();
+    var offset = extractor.constraintOffset();
+    if (text == null || offset < 0) {
+      return;
+    }
+    var length = text.length;
+    String newText;
+    var spaceOffset = text.indexOf(' ');
+    if (spaceOffset >= 0) {
+      length = spaceOffset;
+    }
+    if (text == 'any') {
+      newText = '^$_minimumVersion';
+    } else if (text.startsWith('^')) {
+      newText = '^$_minimumVersion';
+    } else if (text.startsWith('>=')) {
+      newText = '>=$_minimumVersion';
+    } else if (text.startsWith('>')) {
+      newText = '>=$_minimumVersion';
+    }
+    if (newText == null) {
+      return;
+    }
+    await builder.addFileEdit(pubspecFile.path, (builder) {
+      builder.addSimpleReplacement(SourceRange(offset, length), newText);
+    });
+  }
+
+  /// Return an instance of this class that will update the SDK constraints to
+  /// '2.1.0'. Used as a tear-off in `FixProcessor`.
+  static UpdateSdkConstraints version_2_1_0() => UpdateSdkConstraints('2.1.0');
+
+  /// Return an instance of this class that will update the SDK constraints to
+  /// '2.2.0'. Used as a tear-off in `FixProcessor`.
+  static UpdateSdkConstraints version_2_2_0() => UpdateSdkConstraints('2.2.0');
+
+  /// Return an instance of this class that will update the SDK constraints to
+  /// '2.2.0'. Used as a tear-off in `FixProcessor`.
+  static UpdateSdkConstraints version_2_2_2() => UpdateSdkConstraints('2.2.2');
+
+  /// Return an instance of this class that will update the SDK constraints to
+  /// '2.2.0'. Used as a tear-off in `FixProcessor`.
+  static UpdateSdkConstraints version_2_6_0() => UpdateSdkConstraints('2.6.0');
+}
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 ee81b66..e7f0719 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -25,8 +25,10 @@
 import 'package:analysis_server/src/services/correction/dart/add_required_keyword.dart';
 import 'package:analysis_server/src/services/correction/dart/add_return_type.dart';
 import 'package:analysis_server/src/services/correction/dart/add_static.dart';
+import 'package:analysis_server/src/services/correction/dart/add_super_constructor_invocation.dart';
 import 'package:analysis_server/src/services/correction/dart/add_type_annotation.dart';
 import 'package:analysis_server/src/services/correction/dart/change_argument_name.dart';
+import 'package:analysis_server/src/services/correction/dart/change_to.dart';
 import 'package:analysis_server/src/services/correction/dart/change_to_nearest_precise_value.dart';
 import 'package:analysis_server/src/services/correction/dart/change_to_static_access.dart';
 import 'package:analysis_server/src/services/correction/dart/change_type_annotation.dart';
@@ -52,7 +54,11 @@
 import 'package:analysis_server/src/services/correction/dart/convert_to_set_literal.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_where_type.dart';
 import 'package:analysis_server/src/services/correction/dart/create_class.dart';
+import 'package:analysis_server/src/services/correction/dart/create_constructor.dart';
 import 'package:analysis_server/src/services/correction/dart/create_constructor_for_final_fields.dart';
+import 'package:analysis_server/src/services/correction/dart/create_constructor_super.dart';
+import 'package:analysis_server/src/services/correction/dart/create_field.dart';
+import 'package:analysis_server/src/services/correction/dart/create_file.dart';
 import 'package:analysis_server/src/services/correction/dart/create_getter.dart';
 import 'package:analysis_server/src/services/correction/dart/create_local_variable.dart';
 import 'package:analysis_server/src/services/correction/dart/create_method.dart';
@@ -109,6 +115,7 @@
 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_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';
 import 'package:analysis_server/src/services/correction/dart/replace_with_conditional_assignment.dart';
 import 'package:analysis_server/src/services/correction/dart/replace_with_eight_digit_hex.dart';
@@ -121,6 +128,7 @@
 import 'package:analysis_server/src/services/correction/dart/replace_with_var.dart';
 import 'package:analysis_server/src/services/correction/dart/sort_child_property_last.dart';
 import 'package:analysis_server/src/services/correction/dart/sort_directives.dart';
+import 'package:analysis_server/src/services/correction/dart/update_sdk_constraints.dart';
 import 'package:analysis_server/src/services/correction/dart/use_const.dart';
 import 'package:analysis_server/src/services/correction/dart/use_curly_braces.dart';
 import 'package:analysis_server/src/services/correction/dart/use_effective_integer_division.dart';
@@ -133,11 +141,9 @@
 import 'package:analysis_server/src/services/correction/executable_parameters.dart';
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analysis_server/src/services/correction/fix/dart/top_level_declarations.dart';
-import 'package:analysis_server/src/services/correction/levenshtein.dart';
 import 'package:analysis_server/src/services/correction/namespace.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
 import 'package:analysis_server/src/services/linter/lint_names.dart';
-import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -149,20 +155,16 @@
 import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/java_core.dart';
 import 'package:analyzer/src/generated/parser.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/hint/sdk_constraint_extractor.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart'
     hide AnalysisError, Element, ElementKind;
 import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_dart.dart';
-import 'package:analyzer_plugin/src/utilities/string_utilities.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart' hide FixContributor;
 import 'package:analyzer_plugin/utilities/range_factory.dart';
-import 'package:path/path.dart';
 
 /// A predicate is a one-argument function that returns a boolean value.
 typedef ElementPredicate = bool Function(Element argument);
@@ -494,8 +496,18 @@
   /// generators used for lint rules are in the [lintMultiProducerMap].
   static const Map<ErrorCode, List<MultiProducerGenerator>>
       nonLintMultiProducerMap = {
+    CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT: [
+      AddSuperConstructorInvocation.newInstance,
+    ],
+    CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT: [
+      AddSuperConstructorInvocation.newInstance,
+      CreateConstructorSuper.newInstance,
+    ],
+    CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT: [
+      AddSuperConstructorInvocation.newInstance,
+    ],
     CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER: [
-      ChangeArgumentName.newInstance
+      ChangeArgumentName.newInstance,
     ],
   };
 
@@ -518,18 +530,27 @@
     CompileTimeErrorCode.CONST_WITH_NON_CONST: [
       RemoveConst.newInstance,
     ],
+    CompileTimeErrorCode.CONST_WITH_NON_TYPE: [
+      ChangeTo.classOrMixin,
+    ],
     CompileTimeErrorCode.EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER: [
       ReplaceWithExtensionName.newInstance,
     ],
-//    CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS : [],
+    CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS: [
+      CreateConstructor.newInstance,
+    ],
     CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED: [
+      CreateConstructor.newInstance,
       ConvertToNamedArguments.newInstance,
     ],
-//    CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD : [],
+    CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD: [
+      CreateField.newInstance,
+    ],
     CompileTimeErrorCode.INTEGER_LITERAL_IMPRECISE_AS_DOUBLE: [
       ChangeToNearestPreciseValue.newInstance,
     ],
     CompileTimeErrorCode.INVALID_ANNOTATION: [
+      ChangeTo.annotation,
       CreateClass.newInstance,
     ],
     CompileTimeErrorCode.MISSING_DEFAULT_VALUE_FOR_PARAMETER: [
@@ -538,8 +559,10 @@
     CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE: [
       ExtendClassForMixin.newInstance,
     ],
+    CompileTimeErrorCode.MIXIN_OF_NON_CLASS: [
+      ChangeTo.classOrMixin,
+    ],
 //    CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT : [],
-//    CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT : [],
     CompileTimeErrorCode.NULLABLE_TYPE_IN_EXTENDS_CLAUSE: [
       RemoveQuestionMark.newInstance,
     ],
@@ -553,18 +576,23 @@
       RemoveQuestionMark.newInstance,
     ],
     CompileTimeErrorCode.UNDEFINED_ANNOTATION: [
+      ChangeTo.annotation,
       CreateClass.newInstance,
     ],
     CompileTimeErrorCode.UNDEFINED_CLASS: [
+      ChangeTo.classOrMixin,
       CreateClass.newInstance,
       CreateMixin.newInstance,
     ],
-//    CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT : [],
     CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER: [
+      ChangeTo.getterOrSetter,
       CreateGetter.newInstance,
     ],
-//    CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD : [],
+    CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD: [
+      ChangeTo.method,
+    ],
     CompileTimeErrorCode.UNDEFINED_EXTENSION_SETTER: [
+      ChangeTo.getterOrSetter,
       CreateSetter.newInstance,
     ],
     CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER: [
@@ -579,7 +607,9 @@
       //  updated so that only the appropriate subset is generated.
       QualifyReference.newInstance,
     ],
-//    CompileTimeErrorCode.URI_DOES_NOT_EXIST : [],
+    CompileTimeErrorCode.URI_DOES_NOT_EXIST: [
+      CreateFile.newInstance,
+    ],
 
     HintCode.CAN_BE_NULL_AFTER_NULL_AWARE: [
       ReplaceWithNullAware.newInstance,
@@ -651,15 +681,33 @@
     HintCode.OVERRIDE_ON_NON_OVERRIDING_SETTER: [
       RemoveAnnotation.newInstance,
     ],
-//    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_EQ_EQ_OPERATOR_IN_CONST_CONTEXT : [],
-//    HintCode.SDK_VERSION_EXTENSION_METHODS : [],
-//    HintCode.SDK_VERSION_GT_GT_GT_OPERATOR : [],
-//    HintCode.SDK_VERSION_IS_EXPRESSION_IN_CONST_CONTEXT : [],
-//    HintCode.SDK_VERSION_SET_LITERAL : [],
-//    HintCode.SDK_VERSION_UI_AS_CODE : [],
+    HintCode.SDK_VERSION_AS_EXPRESSION_IN_CONST_CONTEXT: [
+      UpdateSdkConstraints.version_2_2_2,
+    ],
+    HintCode.SDK_VERSION_ASYNC_EXPORTED_FROM_CORE: [
+      UpdateSdkConstraints.version_2_1_0,
+    ],
+    HintCode.SDK_VERSION_BOOL_OPERATOR_IN_CONST_CONTEXT: [
+      UpdateSdkConstraints.version_2_2_2,
+    ],
+    HintCode.SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT: [
+      UpdateSdkConstraints.version_2_2_2,
+    ],
+    HintCode.SDK_VERSION_EXTENSION_METHODS: [
+      UpdateSdkConstraints.version_2_6_0,
+    ],
+    HintCode.SDK_VERSION_GT_GT_GT_OPERATOR: [
+      UpdateSdkConstraints.version_2_2_2,
+    ],
+    HintCode.SDK_VERSION_IS_EXPRESSION_IN_CONST_CONTEXT: [
+      UpdateSdkConstraints.version_2_2_2,
+    ],
+    HintCode.SDK_VERSION_SET_LITERAL: [
+      UpdateSdkConstraints.version_2_2_0,
+    ],
+    HintCode.SDK_VERSION_UI_AS_CODE: [
+      UpdateSdkConstraints.version_2_2_2,
+    ],
     HintCode.TYPE_CHECK_IS_NOT_NULL: [
       UseNotEqNull.newInstance,
     ],
@@ -709,7 +757,9 @@
     ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE: [
       AddTypeAnnotation.newInstance,
     ],
-//    ParserErrorCode.VAR_AS_TYPE_NAME : [],
+    ParserErrorCode.VAR_AS_TYPE_NAME: [
+      ReplaceVarWithDynamic.newInstance,
+    ],
 
     StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE: [
       ReplaceReturnTypeFuture.newInstance,
@@ -732,18 +782,24 @@
       CreateMixin.newInstance,
     ],
     StaticTypeWarningCode.UNDEFINED_FUNCTION: [
+      ChangeTo.function,
       CreateClass.newInstance,
     ],
     StaticTypeWarningCode.UNDEFINED_GETTER: [
+      ChangeTo.getterOrSetter,
       CreateClass.newInstance,
+      CreateField.newInstance,
       CreateGetter.newInstance,
       CreateLocalVariable.newInstance,
       CreateMixin.newInstance,
     ],
     StaticTypeWarningCode.UNDEFINED_METHOD: [
+      ChangeTo.method,
       CreateClass.newInstance,
     ],
     StaticTypeWarningCode.UNDEFINED_SETTER: [
+      ChangeTo.getterOrSetter,
+      CreateField.newInstance,
       CreateSetter.newInstance,
     ],
     StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR: [
@@ -767,6 +823,7 @@
       WrapInText.newInstance,
     ],
     StaticWarningCode.CAST_TO_NON_TYPE: [
+      ChangeTo.classOrMixin,
       CreateClass.newInstance,
       CreateMixin.newInstance,
     ],
@@ -793,7 +850,12 @@
     StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH: [
       AddMissingEnumCaseClauses.newInstance,
     ],
-//    StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR : [],
+    StaticWarningCode.NEW_WITH_NON_TYPE: [
+      ChangeTo.classOrMixin,
+    ],
+    StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR: [
+      CreateConstructor.newInstance,
+    ],
     StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS: [
       CreateMissingOverrides.newInstance,
       CreateNoSuchMethod.newInstance,
@@ -821,10 +883,12 @@
     ],
 //    StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE : [],
     StaticWarningCode.NOT_A_TYPE: [
+      ChangeTo.classOrMixin,
       CreateClass.newInstance,
       CreateMixin.newInstance,
     ],
     StaticWarningCode.TYPE_TEST_WITH_UNDEFINED_NAME: [
+      ChangeTo.classOrMixin,
       CreateClass.newInstance,
       CreateMixin.newInstance,
     ],
@@ -832,7 +896,9 @@
       ReplaceBooleanWithBool.newInstance,
     ],
     StaticWarningCode.UNDEFINED_IDENTIFIER: [
+      ChangeTo.getterOrSetter,
       CreateClass.newInstance,
+      CreateField.newInstance,
       CreateGetter.newInstance,
       CreateLocalVariable.newInstance,
       CreateMixin.newInstance,
@@ -889,31 +955,10 @@
             await _addFix_importLibrary_withTopLevelVariable();
           } else {
             await _addFix_importLibrary_withType();
-            await _addFix_undefinedClass_useSimilar();
           }
         }
       }
     }
-    if (errorCode ==
-        CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT) {
-      await _addFix_createConstructorSuperExplicit();
-    }
-    if (errorCode ==
-        CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT) {
-      await _addFix_createConstructorSuperImplicit();
-      // TODO(brianwilkerson) The following was added because fasta produces
-      // NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT in places where analyzer produced
-      // NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT
-      await _addFix_createConstructorSuperExplicit();
-    }
-    if (errorCode ==
-        CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT) {
-      await _addFix_createConstructorSuperExplicit();
-    }
-    if (errorCode == CompileTimeErrorCode.URI_DOES_NOT_EXIST) {
-      await _addFix_createImportUri();
-      await _addFix_createPartUri();
-    }
     // TODO(brianwilkerson) Define a syntax for deprecated members to indicate
     //  how to update the code and implement a fix to apply the update.
 //    if (errorCode == HintCode.DEPRECATED_MEMBER_USE ||
@@ -930,21 +975,6 @@
 //    }
     if (errorCode == HintCode.SDK_VERSION_ASYNC_EXPORTED_FROM_CORE) {
       await _addFix_importAsync();
-      await _addFix_updateSdkConstraints('2.1.0');
-    }
-    if (errorCode == HintCode.SDK_VERSION_SET_LITERAL) {
-      await _addFix_updateSdkConstraints('2.2.0');
-    }
-    if (errorCode == HintCode.SDK_VERSION_AS_EXPRESSION_IN_CONST_CONTEXT ||
-        errorCode == HintCode.SDK_VERSION_BOOL_OPERATOR_IN_CONST_CONTEXT ||
-        errorCode == HintCode.SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT ||
-        errorCode == HintCode.SDK_VERSION_GT_GT_GT_OPERATOR ||
-        errorCode == HintCode.SDK_VERSION_IS_EXPRESSION_IN_CONST_CONTEXT ||
-        errorCode == HintCode.SDK_VERSION_UI_AS_CODE) {
-      await _addFix_updateSdkConstraints('2.2.2');
-    }
-    if (errorCode == HintCode.SDK_VERSION_EXTENSION_METHODS) {
-      await _addFix_updateSdkConstraints('2.6.0');
     }
     // TODO(brianwilkerson) Add a fix to remove the method.
 //    if (errorCode == HintCode.UNNECESSARY_NO_SUCH_METHOD) {
@@ -955,18 +985,11 @@
 //        errorCode == HintCode.UNNECESSARY_TYPE_CHECK_TRUE) {
 //      await _addFix_removeUnnecessaryTypeCheck();
 //    }
-    if (errorCode == ParserErrorCode.VAR_AS_TYPE_NAME) {
-      await _addFix_replaceVarWithDynamic();
-    }
     if (errorCode == CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS ||
         errorCode ==
             CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED) {
-      await _addFix_createConstructor_insteadOfSyntheticDefault();
       await _addFix_addMissingParameter();
     }
-    if (errorCode == StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR) {
-      await _addFix_createConstructor_named();
-    }
     if (errorCode == CompileTimeErrorCode.CONST_WITH_NON_TYPE ||
         errorCode == CompileTimeErrorCode.MIXIN_OF_NON_CLASS ||
         errorCode == CompileTimeErrorCode.UNDEFINED_CLASS ||
@@ -975,14 +998,11 @@
         errorCode == StaticWarningCode.NOT_A_TYPE ||
         errorCode == StaticWarningCode.TYPE_TEST_WITH_UNDEFINED_NAME) {
       await _addFix_importLibrary_withType();
-      await _addFix_undefinedClass_useSimilar();
     }
     if (errorCode == StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE) {
       await _addFix_importLibrary_withType();
     }
     if (errorCode == StaticWarningCode.UNDEFINED_IDENTIFIER) {
-      await _addFix_undefinedClassAccessor_useSimilar();
-      await _addFix_createField();
       await _addFix_createFunction_forFunctionType();
       await _addFix_importLibrary_withType();
       await _addFix_importLibrary_withExtension();
@@ -996,41 +1016,22 @@
       await _addFix_importLibrary_withExtension();
       await _addFix_importLibrary_withFunction();
       await _addFix_importLibrary_withType();
-      await _addFix_undefinedFunction_useSimilar();
       await _addFix_undefinedFunction_create();
     }
     if (errorCode == StaticTypeWarningCode.UNDEFINED_GETTER) {
-      await _addFix_undefinedClassAccessor_useSimilar();
-      await _addFix_createField();
       await _addFix_createFunction_forFunctionType();
       await _addFix_importLibrary_withTopLevelVariable();
       await _addFix_importLibrary_withType();
     }
-    if (errorCode == CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER) {
-      await _addFix_undefinedClassAccessor_useSimilar();
-    }
     if (errorCode == StaticTypeWarningCode.UNDEFINED_METHOD) {
       await _addFix_importLibrary_withFunction();
       await _addFix_importLibrary_withType();
-      await _addFix_undefinedMethod_useSimilar();
       await _addFix_createMethod();
       await _addFix_undefinedFunction_create();
     }
     if (errorCode == CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD) {
-      await _addFix_undefinedMethod_useSimilar();
       await _addFix_createMethod();
     }
-    if (errorCode == StaticTypeWarningCode.UNDEFINED_SETTER) {
-      await _addFix_undefinedClassAccessor_useSimilar();
-      await _addFix_createField();
-    }
-    if (errorCode == CompileTimeErrorCode.UNDEFINED_EXTENSION_SETTER) {
-      await _addFix_undefinedClassAccessor_useSimilar();
-    }
-    if (errorCode ==
-        CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD) {
-      await _addFix_createField_initializingFormal();
-    }
     await _addFromProducers();
 
     // done
@@ -1109,352 +1110,6 @@
     }
   }
 
-  Future<void> _addFix_createConstructor_insteadOfSyntheticDefault() async {
-    if (node is! ArgumentList) {
-      return;
-    }
-    if (node.parent is! InstanceCreationExpression) {
-      return;
-    }
-    InstanceCreationExpression instanceCreation = node.parent;
-    var constructorName = instanceCreation.constructorName;
-    // should be synthetic default constructor
-    var constructorElement = constructorName.staticElement;
-    if (constructorElement == null ||
-        !constructorElement.isDefaultConstructor ||
-        !constructorElement.isSynthetic) {
-      return;
-    }
-    // prepare target
-    if (constructorElement.enclosingElement is! ClassElement) {
-      return;
-    }
-
-    // prepare target ClassDeclaration
-    var targetElement = constructorElement.enclosingElement;
-    var targetResult = await sessionHelper.getElementDeclaration(targetElement);
-    if (targetResult.node is! ClassOrMixinDeclaration) {
-      return;
-    }
-    ClassOrMixinDeclaration targetNode = targetResult.node;
-
-    // prepare location
-    var targetLocation = CorrectionUtils(targetResult.resolvedUnit)
-        .prepareNewConstructorLocation(targetNode);
-
-    var targetSource = targetElement.source;
-    var targetFile = targetSource.fullName;
-    var changeBuilder = _newDartChangeBuilder();
-    await changeBuilder.addFileEdit(targetFile, (DartFileEditBuilder builder) {
-      builder.addInsertion(targetLocation.offset, (DartEditBuilder builder) {
-        builder.write(targetLocation.prefix);
-        builder.writeConstructorDeclaration(targetElement.name,
-            argumentList: instanceCreation.argumentList);
-        builder.write(targetLocation.suffix);
-      });
-    });
-    _addFixFromBuilder(changeBuilder, DartFixKind.CREATE_CONSTRUCTOR,
-        args: [constructorName]);
-  }
-
-  Future<void> _addFix_createConstructor_named() async {
-    SimpleIdentifier name;
-    ConstructorName constructorName;
-    InstanceCreationExpression instanceCreation;
-    if (node is SimpleIdentifier) {
-      // name
-      name = node as SimpleIdentifier;
-      if (name.parent is ConstructorName) {
-        constructorName = name.parent as ConstructorName;
-        if (constructorName.name == name) {
-          // Type.name
-          if (constructorName.parent is InstanceCreationExpression) {
-            instanceCreation =
-                constructorName.parent as InstanceCreationExpression;
-            // new Type.name()
-            if (instanceCreation.constructorName != constructorName) {
-              return;
-            }
-          }
-        }
-      }
-    }
-    // do we have enough information?
-    if (instanceCreation == null) {
-      return;
-    }
-    // prepare target interface type
-    var targetType = constructorName.type.type;
-    if (targetType is! InterfaceType) {
-      return;
-    }
-
-    // prepare target ClassDeclaration
-    ClassElement targetElement = targetType.element;
-    var targetResult = await sessionHelper.getElementDeclaration(targetElement);
-    if (targetResult.node is! ClassOrMixinDeclaration) {
-      return;
-    }
-    ClassOrMixinDeclaration targetNode = targetResult.node;
-
-    // prepare location
-    var targetLocation = CorrectionUtils(targetResult.resolvedUnit)
-        .prepareNewConstructorLocation(targetNode);
-
-    var targetFile = targetElement.source.fullName;
-    var changeBuilder = _newDartChangeBuilder();
-    await changeBuilder.addFileEdit(targetFile, (DartFileEditBuilder builder) {
-      builder.addInsertion(targetLocation.offset, (DartEditBuilder builder) {
-        builder.write(targetLocation.prefix);
-        builder.writeConstructorDeclaration(targetElement.name,
-            argumentList: instanceCreation.argumentList,
-            constructorName: name,
-            constructorNameGroupName: 'NAME');
-        builder.write(targetLocation.suffix);
-      });
-      if (targetFile == file) {
-        builder.addLinkedPosition(range.node(name), 'NAME');
-      }
-    });
-    _addFixFromBuilder(changeBuilder, DartFixKind.CREATE_CONSTRUCTOR,
-        args: [constructorName]);
-  }
-
-  Future<void> _addFix_createConstructorSuperExplicit() async {
-    if (node.parent is! ConstructorDeclaration ||
-        node.parent.parent is! ClassDeclaration) {
-      return;
-    }
-    var targetConstructor = node.parent as ConstructorDeclaration;
-    var targetClassNode = targetConstructor.parent as ClassDeclaration;
-    var targetClassElement = targetClassNode.declaredElement;
-    var superType = targetClassElement.supertype;
-    // add proposals for all super constructors
-    for (var superConstructor in superType.constructors) {
-      var constructorName = superConstructor.name;
-      // skip private
-      if (Identifier.isPrivateName(constructorName)) {
-        continue;
-      }
-      List<ConstructorInitializer> initializers =
-          targetConstructor.initializers;
-      int insertOffset;
-      String prefix;
-      if (initializers.isEmpty) {
-        insertOffset = targetConstructor.parameters.end;
-        prefix = ' : ';
-      } else {
-        var lastInitializer = initializers[initializers.length - 1];
-        insertOffset = lastInitializer.end;
-        prefix = ', ';
-      }
-      var proposalName = _getConstructorProposalName(superConstructor);
-      var changeBuilder = _newDartChangeBuilder();
-      await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
-        builder.addInsertion(insertOffset, (DartEditBuilder builder) {
-          builder.write(prefix);
-          // add super constructor name
-          builder.write('super');
-          if (!isEmpty(constructorName)) {
-            builder.write('.');
-            builder.addSimpleLinkedEdit('NAME', constructorName);
-          }
-          // add arguments
-          builder.write('(');
-          var firstParameter = true;
-          for (var parameter in superConstructor.parameters) {
-            // skip non-required parameters
-            if (parameter.isOptional) {
-              break;
-            }
-            // comma
-            if (firstParameter) {
-              firstParameter = false;
-            } else {
-              builder.write(', ');
-            }
-            // default value
-            builder.addSimpleLinkedEdit(
-                parameter.name, getDefaultValueCode(parameter.type));
-          }
-          builder.write(')');
-        });
-      });
-      _addFixFromBuilder(
-          changeBuilder, DartFixKind.ADD_SUPER_CONSTRUCTOR_INVOCATION,
-          args: [proposalName]);
-    }
-  }
-
-  Future<void> _addFix_createConstructorSuperImplicit() async {
-    var targetClassNode = node.thisOrAncestorOfType<ClassDeclaration>();
-    var targetClassElement = targetClassNode.declaredElement;
-    var superType = targetClassElement.supertype;
-    var targetClassName = targetClassElement.name;
-    // add proposals for all super constructors
-    for (var superConstructor in superType.constructors) {
-      var constructorName = superConstructor.name;
-      // skip private
-      if (Identifier.isPrivateName(constructorName)) {
-        continue;
-      }
-      // prepare parameters and arguments
-      var requiredParameters = superConstructor.parameters
-          .where((parameter) => parameter.isRequiredPositional);
-      // add proposal
-      var targetLocation = utils.prepareNewConstructorLocation(targetClassNode);
-      var proposalName = _getConstructorProposalName(superConstructor);
-      var changeBuilder = _newDartChangeBuilder();
-      await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
-        builder.addInsertion(targetLocation.offset, (DartEditBuilder builder) {
-          void writeParameters(bool includeType) {
-            var firstParameter = true;
-            for (var parameter in requiredParameters) {
-              if (firstParameter) {
-                firstParameter = false;
-              } else {
-                builder.write(', ');
-              }
-              var parameterName = parameter.displayName;
-              if (parameterName.length > 1 && parameterName.startsWith('_')) {
-                parameterName = parameterName.substring(1);
-              }
-              if (includeType && builder.writeType(parameter.type)) {
-                builder.write(' ');
-              }
-              builder.write(parameterName);
-            }
-          }
-
-          builder.write(targetLocation.prefix);
-          builder.write(targetClassName);
-          if (constructorName.isNotEmpty) {
-            builder.write('.');
-            builder.addSimpleLinkedEdit('NAME', constructorName);
-          }
-          builder.write('(');
-          writeParameters(true);
-          builder.write(') : super');
-          if (constructorName.isNotEmpty) {
-            builder.write('.');
-            builder.addSimpleLinkedEdit('NAME', constructorName);
-          }
-          builder.write('(');
-          writeParameters(false);
-          builder.write(');');
-          builder.write(targetLocation.suffix);
-        });
-      });
-      _addFixFromBuilder(changeBuilder, DartFixKind.CREATE_CONSTRUCTOR_SUPER,
-          args: [proposalName]);
-    }
-  }
-
-  Future<void> _addFix_createField() async {
-    if (node is! SimpleIdentifier) {
-      return;
-    }
-    SimpleIdentifier nameNode = node;
-    var name = nameNode.name;
-    // prepare target Expression
-    Expression target;
-    {
-      var nameParent = nameNode.parent;
-      if (nameParent is PrefixedIdentifier) {
-        target = nameParent.prefix;
-      } else if (nameParent is PropertyAccess) {
-        target = nameParent.realTarget;
-      }
-    }
-    // prepare target ClassElement
-    var staticModifier = false;
-    ClassElement targetClassElement;
-    if (target != null) {
-      targetClassElement = _getTargetClassElement(target);
-      // maybe static
-      if (target is Identifier) {
-        var targetIdentifier = target;
-        var targetElement = targetIdentifier.staticElement;
-        if (targetElement == null) {
-          return;
-        }
-        staticModifier = targetElement.kind == ElementKind.CLASS;
-      }
-    } else {
-      targetClassElement = getEnclosingClassElement(node);
-      staticModifier = _inStaticContext();
-    }
-    if (targetClassElement == null) {
-      return;
-    }
-    if (targetClassElement.librarySource.isInSystemLibrary) {
-      return;
-    }
-    utils.targetClassElement = targetClassElement;
-    // prepare target ClassDeclaration
-    var targetDeclarationResult =
-        await sessionHelper.getElementDeclaration(targetClassElement);
-    if (targetDeclarationResult == null) {
-      return;
-    }
-    if (targetDeclarationResult.node is! ClassOrMixinDeclaration) {
-      return;
-    }
-    ClassOrMixinDeclaration targetNode = targetDeclarationResult.node;
-    // prepare location
-    var targetLocation = CorrectionUtils(targetDeclarationResult.resolvedUnit)
-        .prepareNewFieldLocation(targetNode);
-    // build field source
-    var targetSource = targetClassElement.source;
-    var targetFile = targetSource.fullName;
-    var changeBuilder = _newDartChangeBuilder();
-    await changeBuilder.addFileEdit(targetFile, (DartFileEditBuilder builder) {
-      var fieldTypeNode = climbPropertyAccess(nameNode);
-      var fieldType = _inferUndefinedExpressionType(fieldTypeNode);
-      builder.addInsertion(targetLocation.offset, (DartEditBuilder builder) {
-        builder.write(targetLocation.prefix);
-        builder.writeFieldDeclaration(name,
-            isStatic: staticModifier,
-            nameGroupName: 'NAME',
-            type: fieldType,
-            typeGroupName: 'TYPE');
-        builder.write(targetLocation.suffix);
-      });
-    });
-    _addFixFromBuilder(changeBuilder, DartFixKind.CREATE_FIELD, args: [name]);
-  }
-
-  Future<void> _addFix_createField_initializingFormal() async {
-    //
-    // Ensure that we are in an initializing formal parameter.
-    //
-    var parameter = node.thisOrAncestorOfType<FieldFormalParameter>();
-    if (parameter == null) {
-      return;
-    }
-    var targetClassNode = parameter.thisOrAncestorOfType<ClassDeclaration>();
-    if (targetClassNode == null) {
-      return;
-    }
-    var nameNode = parameter.identifier;
-    var name = nameNode.name;
-    var targetLocation = utils.prepareNewFieldLocation(targetClassNode);
-    //
-    // Add proposal.
-    //
-    var changeBuilder = _newDartChangeBuilder();
-    await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
-      var fieldType = parameter.type?.type;
-      builder.addInsertion(targetLocation.offset, (DartEditBuilder builder) {
-        builder.write(targetLocation.prefix);
-        builder.writeFieldDeclaration(name,
-            nameGroupName: 'NAME', type: fieldType, typeGroupName: 'TYPE');
-        builder.write(targetLocation.suffix);
-      });
-    });
-    _addFixFromBuilder(changeBuilder, DartFixKind.CREATE_FIELD, args: [name]);
-  }
-
   Future<void> _addFix_createFunction_forFunctionType() async {
     if (node is SimpleIdentifier) {
       var nameNode = node as SimpleIdentifier;
@@ -1507,29 +1162,6 @@
     }
   }
 
-  Future<void> _addFix_createImportUri() async {
-    // TODO(brianwilkerson) Generalize this to allow other valid string literals.
-    // TODO(brianwilkerson) Support the case where the node's parent is a Configuration.
-    if (node is SimpleStringLiteral && node.parent is ImportDirective) {
-      ImportDirective importDirective = node.parent;
-      var source = importDirective.uriSource;
-      if (source != null) {
-        var file = source.fullName;
-        if (isAbsolute(file) && AnalysisEngine.isDartFileName(file)) {
-          var changeBuilder = _newDartChangeBuilder();
-          await changeBuilder.addFileEdit(source.fullName, (builder) {
-            builder.addSimpleInsertion(0, '// TODO Implement this library.');
-          });
-          _addFixFromBuilder(
-            changeBuilder,
-            DartFixKind.CREATE_FILE,
-            args: [source.shortName],
-          );
-        }
-      }
-    }
-  }
-
   Future<void> _addFix_createMethod() async {
     if (node is! SimpleIdentifier || node.parent is! MethodInvocation) {
       return;
@@ -1624,25 +1256,6 @@
     _addFixFromBuilder(changeBuilder, DartFixKind.CREATE_METHOD, args: [name]);
   }
 
-  Future<void> _addFix_createPartUri() async {
-    // TODO(brianwilkerson) Generalize this to allow other valid string literals.
-    if (node is SimpleStringLiteral && node.parent is PartDirective) {
-      PartDirective partDirective = node.parent;
-      var source = partDirective.uriSource;
-      if (source != null) {
-        var libName = unitLibraryElement.name;
-        var changeBuilder = _newDartChangeBuilder();
-        await changeBuilder.addFileEdit(source.fullName,
-            (DartFileEditBuilder builder) {
-          // TODO(brianwilkerson) Consider using the URI rather than name
-          builder.addSimpleInsertion(0, 'part of $libName;$eol$eol');
-        });
-        _addFixFromBuilder(changeBuilder, DartFixKind.CREATE_FILE,
-            args: [source.shortName]);
-      }
-    }
-  }
-
   Future<void> _addFix_importAsync() async {
     await _addFix_importLibrary(
         DartFixKind.IMPORT_ASYNC, Uri.parse('dart:async'));
@@ -1827,129 +1440,6 @@
     }
   }
 
-  Future<void> _addFix_replaceVarWithDynamic() async {
-    var changeBuilder = _newDartChangeBuilder();
-    await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
-      builder.addSimpleReplacement(range.error(error), 'dynamic');
-    });
-    _addFixFromBuilder(changeBuilder, DartFixKind.REPLACE_VAR_WITH_DYNAMIC);
-  }
-
-  Future<void> _addFix_undefinedClass_useSimilar() async {
-    var node = this.node;
-    // Prepare the optional import prefix name.
-    String prefixName;
-    if (node is SimpleIdentifier && node.staticElement is PrefixElement) {
-      var parent = node.parent;
-      if (parent is PrefixedIdentifier &&
-          parent.prefix == node &&
-          parent.parent is TypeName) {
-        prefixName = (node as SimpleIdentifier).name;
-        node = parent.identifier;
-      }
-    }
-    // Process if looks like a type.
-    if (_mayBeTypeIdentifier(node)) {
-      // Prepare for selecting the closest element.
-      var name = (node as SimpleIdentifier).name;
-      var finder = _ClosestElementFinder(
-          name,
-          (Element element) => element is ClassElement,
-          MAX_LEVENSHTEIN_DISTANCE);
-      // Check elements of this library.
-      if (prefixName == null) {
-        for (var unit in unitLibraryElement.units) {
-          finder._updateList(unit.types);
-        }
-      }
-      // Check elements from imports.
-      for (var importElement in unitLibraryElement.imports) {
-        if (importElement.prefix?.name == prefixName) {
-          var namespace = getImportNamespace(importElement);
-          finder._updateList(namespace.values);
-        }
-      }
-      // If we have a close enough element, suggest to use it.
-      if (finder._element != null) {
-        var closestName = finder._element.name;
-        if (closestName != null) {
-          var changeBuilder = _newDartChangeBuilder();
-          await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
-            builder.addSimpleReplacement(range.node(node), closestName);
-          });
-          _addFixFromBuilder(changeBuilder, DartFixKind.CHANGE_TO,
-              args: [closestName]);
-        }
-      }
-    }
-  }
-
-  Future<void> _addFix_undefinedClassAccessor_useSimilar() async {
-    var node = this.node;
-    if (node is SimpleIdentifier) {
-      // prepare target
-      Expression target;
-      if (node.parent is PrefixedIdentifier) {
-        target = (node.parent as PrefixedIdentifier).prefix;
-      } else if (node.parent is PropertyAccess) {
-        target = (node.parent as PropertyAccess).target;
-      }
-      // find getter
-      if (node.inGetterContext()) {
-        await _addFix_undefinedClassMember_useSimilar(target,
-            (Element element) {
-          return element is PropertyAccessorElement && element.isGetter ||
-              element is FieldElement && element.getter != null;
-        });
-      }
-      // find setter
-      if (node.inSetterContext()) {
-        await _addFix_undefinedClassMember_useSimilar(target,
-            (Element element) {
-          return element is PropertyAccessorElement && element.isSetter ||
-              element is FieldElement && element.setter != null;
-        });
-      }
-    }
-  }
-
-  Future<void> _addFix_undefinedClassMember_useSimilar(
-      Expression target, ElementPredicate predicate) async {
-    if (node is SimpleIdentifier) {
-      var name = (node as SimpleIdentifier).name;
-      var finder =
-          _ClosestElementFinder(name, predicate, MAX_LEVENSHTEIN_DISTANCE);
-      // unqualified invocation
-      if (target == null) {
-        var clazz = node.thisOrAncestorOfType<ClassDeclaration>();
-        if (clazz != null) {
-          var classElement = clazz.declaredElement;
-          _updateFinderWithClassMembers(finder, classElement);
-        }
-      } else if (target is ExtensionOverride) {
-        _updateFinderWithExtensionMembers(finder, target.staticElement);
-      } else if (target is Identifier &&
-          target.staticElement is ExtensionElement) {
-        _updateFinderWithExtensionMembers(finder, target.staticElement);
-      } else {
-        var classElement = _getTargetClassElement(target);
-        if (classElement != null) {
-          _updateFinderWithClassMembers(finder, classElement);
-        }
-      }
-      // if we have close enough element, suggest to use it
-      if (finder._element != null) {
-        var closestName = finder._element.displayName;
-        var changeBuilder = _newDartChangeBuilder();
-        await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
-          builder.addSimpleReplacement(range.node(node), closestName);
-        });
-        _addFixFromBuilder(changeBuilder, DartFixKind.CHANGE_TO,
-            args: [closestName]);
-      }
-    }
-  }
-
   Future<void> _addFix_undefinedFunction_create() async {
     // should be the name of the invocation
     if (node is SimpleIdentifier && node.parent is MethodInvocation) {
@@ -1997,106 +1487,6 @@
         args: [name]);
   }
 
-  Future<void> _addFix_undefinedFunction_useSimilar() async {
-    var node = this.node;
-    if (node is SimpleIdentifier) {
-      // Prepare the optional import prefix name.
-      String prefixName;
-      {
-        var invocation = node.parent;
-        if (invocation is MethodInvocation && invocation.methodName == node) {
-          var target = invocation.target;
-          if (target is SimpleIdentifier &&
-              target.staticElement is PrefixElement) {
-            prefixName = target.name;
-          }
-        }
-      }
-      // Prepare for selecting the closest element.
-      var finder = _ClosestElementFinder(
-          node.name,
-          (Element element) => element is FunctionElement,
-          MAX_LEVENSHTEIN_DISTANCE);
-      // Check to this library units.
-      if (prefixName == null) {
-        for (var unit in unitLibraryElement.units) {
-          finder._updateList(unit.functions);
-        }
-      }
-      // Check unprefixed imports.
-      for (var importElement in unitLibraryElement.imports) {
-        if (importElement.prefix?.name == prefixName) {
-          var namespace = getImportNamespace(importElement);
-          finder._updateList(namespace.values);
-        }
-      }
-      // If we have a close enough element, suggest to use it.
-      if (finder._element != null) {
-        var closestName = finder._element.name;
-        var changeBuilder = _newDartChangeBuilder();
-        await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
-          builder.addSimpleReplacement(range.node(node), closestName);
-        });
-        _addFixFromBuilder(changeBuilder, DartFixKind.CHANGE_TO,
-            args: [closestName]);
-      }
-    }
-  }
-
-  Future<void> _addFix_undefinedMethod_useSimilar() async {
-    if (node.parent is MethodInvocation) {
-      var invocation = node.parent as MethodInvocation;
-      await _addFix_undefinedClassMember_useSimilar(invocation.realTarget,
-          (Element element) => element is MethodElement && !element.isOperator);
-    }
-  }
-
-  Future<void> _addFix_updateSdkConstraints(String minimumVersion) async {
-    var context = resourceProvider.pathContext;
-    File pubspecFile;
-    var folder = resourceProvider.getFolder(context.dirname(file));
-    while (folder != null) {
-      pubspecFile = folder.getChildAssumingFile('pubspec.yaml');
-      if (pubspecFile.exists) {
-        break;
-      }
-      pubspecFile = null;
-      folder = folder.parent;
-    }
-    if (pubspecFile == null) {
-      return;
-    }
-    var extractor = SdkConstraintExtractor(pubspecFile);
-    var text = extractor.constraintText();
-    var offset = extractor.constraintOffset();
-    if (text == null || offset < 0) {
-      return;
-    }
-    var length = text.length;
-    String newText;
-    var spaceOffset = text.indexOf(' ');
-    if (spaceOffset >= 0) {
-      length = spaceOffset;
-    }
-    if (text == 'any') {
-      newText = '^$minimumVersion';
-    } else if (text.startsWith('^')) {
-      newText = '^$minimumVersion';
-    } else if (text.startsWith('>=')) {
-      newText = '>=$minimumVersion';
-    } else if (text.startsWith('>')) {
-      newText = '>=$minimumVersion';
-    }
-    if (newText == null) {
-      return;
-    }
-    var changeBuilder = ChangeBuilder();
-    await changeBuilder.addFileEdit(pubspecFile.path, (builder) {
-      builder.addSimpleReplacement(SourceRange(offset, length), newText);
-    });
-    _addFixFromBuilder(changeBuilder, DartFixKind.UPDATE_SDK_CONSTRAINTS);
-  }
-
   void _addFixFromBuilder(ChangeBuilder builder, FixKind kind,
       {List<Object> args, bool importsOnly = false}) {
     if (builder == null) return;
@@ -2273,20 +1663,6 @@
     return null;
   }
 
-  /// Return the string to display as the name of the given constructor in a
-  /// proposal name.
-  String _getConstructorProposalName(ConstructorElement constructor) {
-    var buffer = StringBuffer();
-    buffer.write('super');
-    var constructorName = constructor.displayName;
-    if (constructorName.isNotEmpty) {
-      buffer.write('.');
-      buffer.write(constructorName);
-    }
-    buffer.write('(...)');
-    return buffer.toString();
-  }
-
   /// Return the extension declaration for the given [element].
   Future<ExtensionDeclaration> _getExtensionDeclaration(
       ExtensionElement element) async {
@@ -2468,21 +1844,6 @@
     return DartChangeBuilderImpl.forWorkspace(context.workspace);
   }
 
-  void _updateFinderWithClassMembers(
-      _ClosestElementFinder finder, ClassElement clazz) {
-    if (clazz != null) {
-      var members = getMembers(clazz);
-      finder._updateList(members);
-    }
-  }
-
-  void _updateFinderWithExtensionMembers(
-      _ClosestElementFinder finder, ExtensionElement element) {
-    if (element != null) {
-      finder._updateList(getExtensionMembers(element));
-    }
-  }
-
   static ClassElement _getTargetClassElement(Expression target) {
     var type = target.staticType;
     if (type is InterfaceType) {
@@ -2531,30 +1892,3 @@
     return false;
   }
 }
-
-/// Helper for finding [Element] with name closest to the given.
-class _ClosestElementFinder {
-  final String _targetName;
-  final ElementPredicate _predicate;
-
-  Element _element;
-  int _distance;
-
-  _ClosestElementFinder(this._targetName, this._predicate, this._distance);
-
-  void _update(Element element) {
-    if (_predicate(element)) {
-      var memberDistance = levenshtein(element.name, _targetName, _distance);
-      if (memberDistance < _distance) {
-        _element = element;
-        _distance = memberDistance;
-      }
-    }
-  }
-
-  void _updateList(Iterable<Element> elements) {
-    for (var element in elements) {
-      _update(element);
-    }
-  }
-}
diff --git a/pkg/analysis_server/lib/src/utilities/mocks.dart b/pkg/analysis_server/lib/src/utilities/mocks.dart
index 1602ed4..786162f 100644
--- a/pkg/analysis_server/lib/src/utilities/mocks.dart
+++ b/pkg/analysis_server/lib/src/utilities/mocks.dart
@@ -164,7 +164,7 @@
   }
 
   @override
-  NotificationManager get notificationManager {
+  AbstractNotificationManager get notificationManager {
     fail('Unexpected invocation of notificationManager');
   }
 
diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart
index 7408c2e..b8e4a99 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -7,27 +7,23 @@
 import 'package:analysis_server/src/context_manager.dart';
 import 'package:analysis_server/src/plugin/notification_manager.dart';
 import 'package:analysis_server/src/utilities/null_string_sink.dart';
-import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
 import 'package:analyzer/source/error_processor.dart';
 import 'package:analyzer/src/context/builder.dart';
-import 'package:analyzer/src/context/context.dart';
 import 'package:analyzer/src/context/context_root.dart';
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
-import 'package:analyzer/src/dart/analysis/session.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/services/lint.dart';
-import 'package:analyzer/src/summary/summary_file_builder.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:analyzer/src/util/glob.dart';
@@ -1811,11 +1807,6 @@
     var sdkExtPath = '$projPath/sdk_ext';
     newFile('$projPath/test', content: 'test.dart');
     newFile('$sdkExtPath/entry.dart');
-    var synchronousSession = SynchronousSession(analysisOptions, null);
-    var bytes =
-        SummaryBuilder([], AnalysisContextImpl(synchronousSession, null))
-            .build(featureSet: FeatureSet.fromEnableFlags([]));
-    newFileWithBytes('$projPath/sdk.ds', bytes);
     // Setup _embedder.yaml.
     newFile('$libPath/_embedder.yaml', content: r'''
 embedded_libs:
@@ -2266,7 +2257,7 @@
   List<WatchEvent> watchEvents = <WatchEvent>[];
 
   @override
-  NotificationManager notificationManager = TestNotificationManager();
+  AbstractNotificationManager notificationManager = TestNotificationManager();
 
   TestContextManagerCallbacks(
       this.resourceProvider, this.sdkManager, this.logger, this.scheduler);
diff --git a/pkg/analysis_server/test/lsp/configuration_test.dart b/pkg/analysis_server/test/lsp/configuration_test.dart
new file mode 100644
index 0000000..e49d54e
--- /dev/null
+++ b/pkg/analysis_server/test/lsp/configuration_test.dart
@@ -0,0 +1,86 @@
+// 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 'package:analysis_server/lsp_protocol/protocol_generated.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'server_abstract.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ConfigurationTest);
+  });
+}
+
+@reflectiveTest
+class ConfigurationTest extends AbstractLspAnalysisServerTest {
+  /// When we tell the server config has changed, we expect it to immediately
+  /// ask for the updated config.
+  Future<void> test_configChange() async {
+    await provideConfig(
+      () => initialize(
+          workspaceCapabilities: withDidChangeConfigurationDynamicRegistration(
+              withConfigurationSupport(emptyWorkspaceClientCapabilities))),
+      {'dart.foo': false},
+    );
+
+    // The updateConfig helper will only complete after the server requests the config.
+    await updateConfig({'dart.foo': true});
+  }
+
+  Future<void> test_configurationDidChange_notSupported() async {
+    final registrations = <Registration>[];
+    await monitorDynamicRegistrations(
+      registrations,
+      () => initialize(
+          // Initialize with some other dynamic capabilities just to force
+          // a dynamic registration request to come through. Otherwise we'd have
+          // to test that the request never came, which means waiting around for
+          // some period and making the test slower.
+          textDocumentCapabilities: withTextSyncDynamicRegistration(
+              emptyTextDocumentClientCapabilities)),
+    );
+
+    final registration =
+        registrationFor(registrations, Method.workspace_didChangeConfiguration);
+    expect(registration, isNull);
+  }
+
+  Future<void> test_configurationDidChange_supported() async {
+    final registrations = <Registration>[];
+    await monitorDynamicRegistrations(
+      registrations,
+      () => initialize(
+          workspaceCapabilities: withDidChangeConfigurationDynamicRegistration(
+              emptyWorkspaceClientCapabilities)),
+    );
+
+    final registration =
+        registrationFor(registrations, Method.workspace_didChangeConfiguration);
+    expect(registration, isNotNull);
+  }
+
+  Future<void> test_configurationRequest_notSupported() async {
+    final configRequest = requestsFromServer
+        .firstWhere((n) => n.method == Method.workspace_configuration);
+    expect(configRequest, doesNotComplete);
+
+    await initialize();
+    pumpEventQueue();
+  }
+
+  Future<void> test_configurationRequest_supported() async {
+    final configRequest = requestsFromServer
+        .firstWhere((n) => n.method == Method.workspace_configuration);
+    expect(configRequest, completes);
+
+    await initialize(
+        workspaceCapabilities:
+            withConfigurationSupport(emptyWorkspaceClientCapabilities));
+    pumpEventQueue();
+  }
+}
diff --git a/pkg/analysis_server/test/lsp/diagnostic_test.dart b/pkg/analysis_server/test/lsp/diagnostic_test.dart
index 123a064..fac84a9 100644
--- a/pkg/analysis_server/test/lsp/diagnostic_test.dart
+++ b/pkg/analysis_server/test/lsp/diagnostic_test.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
+import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -16,6 +18,51 @@
 
 @reflectiveTest
 class DiagnosticTest extends AbstractLspAnalysisServerTest {
+  Future<void> checkPluginErrorsForFile(String pluginAnalyzedFilePath) async {
+    final pluginAnalyzedUri = Uri.file(pluginAnalyzedFilePath);
+
+    newFile(pluginAnalyzedFilePath, content: '''String a = "Test";
+String b = "Test";
+''');
+    await initialize();
+
+    final diagnosticsUpdate = waitForDiagnostics(pluginAnalyzedUri);
+    final pluginError = plugin.AnalysisError(
+      plugin.AnalysisErrorSeverity.ERROR,
+      plugin.AnalysisErrorType.STATIC_TYPE_WARNING,
+      plugin.Location(pluginAnalyzedFilePath, 0, 6, 0, 0),
+      'Test error from plugin',
+      'ERR1',
+      contextMessages: [
+        plugin.DiagnosticMessage('Related error',
+            plugin.Location(pluginAnalyzedFilePath, 31, 4, 1, 12))
+      ],
+    );
+    final pluginResult =
+        plugin.AnalysisErrorsParams(pluginAnalyzedFilePath, [pluginError]);
+    configureTestPlugin(notification: pluginResult.toNotification());
+
+    final diagnostics = await diagnosticsUpdate;
+    expect(diagnostics, hasLength(1));
+
+    final err = diagnostics.first;
+    expect(err.severity, DiagnosticSeverity.Error);
+    expect(err.message, equals('Test error from plugin'));
+    expect(err.code, equals('ERR1'));
+    expect(err.range.start.line, equals(0));
+    expect(err.range.start.character, equals(0));
+    expect(err.range.end.line, equals(0));
+    expect(err.range.end.character, equals(6));
+    expect(err.relatedInformation, hasLength(1));
+
+    final related = err.relatedInformation[0];
+    expect(related.message, equals('Related error'));
+    expect(related.location.range.start.line, equals(1));
+    expect(related.location.range.start.character, equals(12));
+    expect(related.location.range.end.line, equals(1));
+    expect(related.location.range.end.character, equals(16));
+  }
+
   Future<void> test_afterDocumentEdits() async {
     const initialContents = 'int a = 1;';
     newFile(mainFilePath, content: initialContents);
@@ -99,6 +146,14 @@
     expect(diagnostics, isNull);
   }
 
+  Future<void> test_fromPlugins_dartFile() async {
+    await checkPluginErrorsForFile(mainFilePath);
+  }
+
+  Future<void> test_fromPlugins_nonDartFile() async {
+    await checkPluginErrorsForFile(join(projectFolderPath, 'lib', 'foo.sql'));
+  }
+
   Future<void> test_initialAnalysis() async {
     newFile(mainFilePath, content: 'String a = 1;');
 
diff --git a/pkg/analysis_server/test/lsp/format_test.dart b/pkg/analysis_server/test/lsp/format_test.dart
index 7991558..8c72af5 100644
--- a/pkg/analysis_server/test/lsp/format_test.dart
+++ b/pkg/analysis_server/test/lsp/format_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/lsp_protocol/protocol_generated.dart';
 import 'package:analysis_server/src/lsp/constants.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -29,6 +30,91 @@
     expect(formatEdits, isNull);
   }
 
+  /// Ensures we use the same registration ID when unregistering even if the
+  /// server has regenerated registrations multiple times.
+  Future<void> test_dynamicRegistration_correctIdAfterMultipleChanges() async {
+    final registrations = <Registration>[];
+    // Provide empty config and collect dynamic registrations during
+    // initialization.
+    await provideConfig(
+      () => monitorDynamicRegistrations(
+        registrations,
+        () => initialize(
+            textDocumentCapabilities: withDocumentFormattingDynamicRegistration(
+                emptyTextDocumentClientCapabilities),
+            workspaceCapabilities:
+                withDidChangeConfigurationDynamicRegistration(
+                    withConfigurationSupport(
+                        emptyWorkspaceClientCapabilities))),
+      ),
+      {},
+    );
+
+    Registration registration(Method method) =>
+        registrationFor(registrations, method);
+
+    // By default, the formatters should have been registered.
+    expect(registration(Method.textDocument_formatting), isNotNull);
+    expect(registration(Method.textDocument_onTypeFormatting), isNotNull);
+
+    // Sending config updates causes the server to rebuild its list of registrations
+    // which exposes a previous bug where we'd retain newly-built registrations
+    // that may not have been sent to the client (because they had previously
+    // been sent), resulting in the wrong ID being used for unregistration.
+    await updateConfig({'foo1': true});
+    await updateConfig({'foo1': null});
+
+    // They should be unregistered if we change the config to disabled.
+    await monitorDynamicUnregistrations(
+      registrations,
+      () => updateConfig({'enableSdkFormatter': false}),
+    );
+    expect(registration(Method.textDocument_formatting), isNull);
+    expect(registration(Method.textDocument_onTypeFormatting), isNull);
+  }
+
+  Future<void> test_dynamicRegistration_forConfiguration() async {
+    final registrations = <Registration>[];
+    // Provide empty config and collect dynamic registrations during
+    // initialization.
+    await provideConfig(
+      () => monitorDynamicRegistrations(
+        registrations,
+        () => initialize(
+            textDocumentCapabilities: withDocumentFormattingDynamicRegistration(
+                emptyTextDocumentClientCapabilities),
+            workspaceCapabilities:
+                withDidChangeConfigurationDynamicRegistration(
+                    withConfigurationSupport(
+                        emptyWorkspaceClientCapabilities))),
+      ),
+      {},
+    );
+
+    Registration registration(Method method) =>
+        registrationFor(registrations, method);
+
+    // By default, the formatters should have been registered.
+    expect(registration(Method.textDocument_formatting), isNotNull);
+    expect(registration(Method.textDocument_onTypeFormatting), isNotNull);
+
+    // They should be unregistered if we change the config to disabled.
+    await monitorDynamicUnregistrations(
+      registrations,
+      () => updateConfig({'enableSdkFormatter': false}),
+    );
+    expect(registration(Method.textDocument_formatting), isNull);
+    expect(registration(Method.textDocument_onTypeFormatting), isNull);
+
+    // They should be reregistered if we change the config to enabled.
+    await monitorDynamicRegistrations(
+      registrations,
+      () => updateConfig({'enableSdkFormatter': true}),
+    );
+    expect(registration(Method.textDocument_formatting), isNotNull);
+    expect(registration(Method.textDocument_onTypeFormatting), isNotNull);
+  }
+
   Future<void> test_formatOnType_simple() async {
     const contents = '''
     main  ()
diff --git a/pkg/analysis_server/test/lsp/initialization_test.dart b/pkg/analysis_server/test/lsp/initialization_test.dart
index 0a54c4f..304ce32 100644
--- a/pkg/analysis_server/test/lsp/initialization_test.dart
+++ b/pkg/analysis_server/test/lsp/initialization_test.dart
@@ -24,26 +24,21 @@
     List<Registration> registrations,
     Method method,
   ) {
-    return registrations
-        .singleWhere((r) => r.method == method.toJson(), orElse: () => null)
-        ?.registerOptions;
+    return registrationFor(registrations, method)?.registerOptions;
   }
 
   Future<void> test_dynamicRegistration_containsAppropriateSettings() async {
     // Basic check that the server responds with the capabilities we'd expect,
     // for ex including analysis_options.yaml in text synchronization but not
     // for hovers.
-    List<Registration> registrations;
-    final initResponse =
-        await handleExpectedRequest<ResponseMessage, RegistrationParams, void>(
-      Method.client_registerCapability,
+    final registrations = <Registration>[];
+    final initResponse = await monitorDynamicRegistrations(
+      registrations,
       () => initialize(
           // Support dynamic registration for both text sync + hovers.
           textDocumentCapabilities: withTextSyncDynamicRegistration(
               withHoverDynamicRegistration(
                   emptyTextDocumentClientCapabilities))),
-      handler: (registrationParams) =>
-          registrations = registrationParams.registrations,
     );
 
     // Because we support dynamic registration for synchronisation, we won't send
@@ -128,14 +123,12 @@
   Future<void> test_dynamicRegistration_onlyForClientSupportedMethods() async {
     // Check that when the server calls client/registerCapability it only includes
     // the items we advertised dynamic registration support for.
-    List<Registration> registrations;
-    await handleExpectedRequest<void, RegistrationParams, void>(
-      Method.client_registerCapability,
+    final registrations = <Registration>[];
+    await monitorDynamicRegistrations(
+      registrations,
       () => initialize(
           textDocumentCapabilities: withHoverDynamicRegistration(
               emptyTextDocumentClientCapabilities)),
-      handler: (registrationParams) =>
-          registrations = registrationParams.registrations,
     );
 
     expect(registrations, hasLength(1));
@@ -146,17 +139,13 @@
   Future<void> test_dynamicRegistration_suppressesStaticRegistration() async {
     // If the client sends dynamicRegistration settings then there
     // should not be static registrations for the same capabilities.
-
-    List<Registration> registrations;
-    final initResponse =
-        await handleExpectedRequest<ResponseMessage, RegistrationParams, void>(
-      Method.client_registerCapability,
+    final registrations = <Registration>[];
+    final initResponse = await monitorDynamicRegistrations(
+      registrations,
       () => initialize(
           // Support dynamic registration for everything we support.
           textDocumentCapabilities: withAllSupportedDynamicRegistrations(
               emptyTextDocumentClientCapabilities)),
-      handler: (registrationParams) =>
-          registrations = registrationParams.registrations,
     );
 
     InitializeResult initResult = initResponse.result;
@@ -188,14 +177,12 @@
 
   Future<void> test_dynamicRegistration_unregistersOutdatedAfterChange() async {
     // Initialize by supporting dynamic registrations everywhere
-    List<Registration> registrations;
-    await handleExpectedRequest<ResponseMessage, RegistrationParams, void>(
-      Method.client_registerCapability,
+    final registrations = <Registration>[];
+    await monitorDynamicRegistrations(
+      registrations,
       () => initialize(
           textDocumentCapabilities: withAllSupportedDynamicRegistrations(
               emptyTextDocumentClientCapabilities)),
-      handler: (registrationParams) =>
-          registrations = registrationParams.registrations,
     );
 
     final unregisterRequest =
diff --git a/pkg/analysis_server/test/lsp/server_abstract.dart b/pkg/analysis_server/test/lsp/server_abstract.dart
index b009198..3498d9e 100644
--- a/pkg/analysis_server/test/lsp/server_abstract.dart
+++ b/pkg/analysis_server/test/lsp/server_abstract.dart
@@ -82,6 +82,15 @@
     }
   }
 
+  /// Finds the registration for a given LSP method.
+  Registration registrationFor(
+    List<Registration> registrations,
+    Method method,
+  ) {
+    return registrations.singleWhere((r) => r.method == method.toJson(),
+        orElse: () => null);
+  }
+
   @override
   Future sendNotificationToServer(NotificationMessage notification) async {
     channel.sendNotificationToServer(notification);
@@ -269,6 +278,20 @@
     });
   }
 
+  WorkspaceClientCapabilities withConfigurationSupport(
+    WorkspaceClientCapabilities source,
+  ) {
+    return extendWorkspaceCapabilities(source, {'configuration': true});
+  }
+
+  WorkspaceClientCapabilities withDidChangeConfigurationDynamicRegistration(
+    WorkspaceClientCapabilities source,
+  ) {
+    return extendWorkspaceCapabilities(source, {
+      'didChangeConfiguration': {'dynamicRegistration': true}
+    });
+  }
+
   WorkspaceClientCapabilities withDocumentChangesSupport(
     WorkspaceClientCapabilities source,
   ) {
@@ -277,6 +300,15 @@
     });
   }
 
+  TextDocumentClientCapabilities withDocumentFormattingDynamicRegistration(
+    TextDocumentClientCapabilities source,
+  ) {
+    return extendTextDocumentCapabilities(source, {
+      'formatting': {'dynamicRegistration': true},
+      'onTypeFormatting': {'dynamicRegistration': true},
+    });
+  }
+
   TextDocumentClientCapabilities withHierarchicalDocumentSymbolSupport(
     TextDocumentClientCapabilities source,
   ) {
@@ -898,6 +930,38 @@
     return RequestMessage(id, method, params, jsonRpcVersion);
   }
 
+  /// Watches for `client/registerCapability` requests and updates
+  /// `registrations`.
+  Future<ResponseMessage> monitorDynamicRegistrations(
+    List<Registration> registrations,
+    Future<ResponseMessage> Function() f,
+  ) {
+    return handleExpectedRequest<ResponseMessage, RegistrationParams, void>(
+      Method.client_registerCapability,
+      f,
+      handler: (registrationParams) {
+        registrations.addAll(registrationParams.registrations);
+      },
+    );
+  }
+
+  /// Watches for `client/unregisterCapability` requests and updates
+  /// `registrations`.
+  Future<ResponseMessage> monitorDynamicUnregistrations(
+    List<Registration> registrations,
+    Future<ResponseMessage> Function() f,
+  ) {
+    return handleExpectedRequest<ResponseMessage, UnregistrationParams, void>(
+      Method.client_unregisterCapability,
+      f,
+      handler: (unregistrationParams) {
+        registrations.removeWhere((element) => unregistrationParams
+            .unregisterations
+            .any((u) => u.id == element.id));
+      },
+    );
+  }
+
   Future openFile(Uri uri, String content, {num version = 1}) async {
     var notification = makeNotification(
       Method.textDocument_didOpen,
@@ -937,6 +1001,18 @@
     return expectSuccessfulResponseTo<RangeAndPlaceholder>(request);
   }
 
+  /// Calls the supplied function and responds to any `workspace/configuration`
+  /// request with the supplied config.
+  Future<ResponseMessage> provideConfig(
+      Future<ResponseMessage> Function() f, Map<String, dynamic> config) {
+    return handleExpectedRequest<ResponseMessage, ConfigurationParams,
+        List<Map<String, dynamic>>>(
+      Method.workspace_configuration,
+      f,
+      handler: (configurationParams) => [config],
+    );
+  }
+
   /// Returns the range surrounded by `[[markers]]` in the provided string,
   /// excluding the markers themselves (as well as position markers `^` from
   /// the offsets).
@@ -1031,6 +1107,14 @@
         ResponseMessage(request.id, responseParams, null, jsonRpcVersion));
   }
 
+  Future<ResponseMessage> sendDidChangeConfiguration() {
+    final request = makeRequest(
+      Method.workspace_didChangeConfiguration,
+      DidChangeConfigurationParams(null),
+    );
+    return sendRequestToServer(request);
+  }
+
   void sendExit() {
     final request = makeRequest(Method.exit, null);
     sendRequestToServer(request);
@@ -1051,6 +1135,15 @@
     return WorkspaceFolder(uri.toString(), path.basename(uri.toFilePath()));
   }
 
+  /// Tells the server the config has changed, and provides the supplied config
+  /// when it requests the updated config.
+  Future<ResponseMessage> updateConfig(Map<String, dynamic> config) {
+    return provideConfig(
+      sendDidChangeConfiguration,
+      config,
+    );
+  }
+
   Future<AnalyzerStatusParams> waitForAnalysisComplete() =>
       waitForAnalysisStatus(false);
 
diff --git a/pkg/analysis_server/test/lsp/test_all.dart b/pkg/analysis_server/test/lsp/test_all.dart
index 2e086d8..0870436 100644
--- a/pkg/analysis_server/test/lsp/test_all.dart
+++ b/pkg/analysis_server/test/lsp/test_all.dart
@@ -14,6 +14,7 @@
 import 'code_actions_refactor_test.dart' as code_actions_refactor;
 import 'code_actions_source_test.dart' as code_actions_source;
 import 'completion_test.dart' as completion;
+import 'configuration_test.dart' as configuration;
 import 'definition_test.dart' as definition;
 import 'diagnostic_test.dart' as diagnostic;
 import 'document_changes_test.dart' as document_changes;
@@ -47,6 +48,7 @@
     code_actions_source.main();
     code_actions_refactor.main();
     completion.main();
+    configuration.main();
     definition.main();
     diagnostic.main();
     document_changes.main();
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 7b28181..4837c81 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
@@ -461,6 +461,30 @@
     return cs;
   }
 
+  CompletionSuggestion assertSuggestLocalVariable(
+      String name, String returnType,
+      {int relevance = DART_RELEVANCE_LOCAL_VARIABLE,
+      bool hasTypeBoost = false,
+      bool hasSubtypeBoost = false}) {
+    if (hasTypeBoost) {
+      relevance += DART_RELEVANCE_BOOST_TYPE;
+    } else if (hasSubtypeBoost) {
+      relevance += DART_RELEVANCE_BOOST_SUBTYPE;
+    }
+    // Local variables should only be suggested by LocalReferenceContributor
+    var cs = assertSuggest(name,
+        csKind: CompletionSuggestionKind.INVOCATION, relevance: relevance);
+    expect(cs.returnType, returnType ?? 'dynamic');
+    var element = cs.element;
+    expect(element, isNotNull);
+    expect(element.kind, equals(ElementKind.LOCAL_VARIABLE));
+    expect(element.name, equals(name));
+    expect(element.parameters, isNull);
+    expect(element.returnType, returnType ?? 'dynamic');
+    assertHasNoParameterInfo(cs);
+    return cs;
+  }
+
   CompletionSuggestion assertSuggestMethod(
       String name, String declaringType, String returnType,
       {int relevance,
@@ -527,6 +551,20 @@
     return cs;
   }
 
+  CompletionSuggestion assertSuggestParameter(String name, String returnType,
+      {int relevance = DART_RELEVANCE_PARAMETER}) {
+    var cs = assertSuggest(name,
+        csKind: CompletionSuggestionKind.INVOCATION, relevance: relevance);
+    expect(cs.returnType, returnType ?? 'dynamic');
+    var element = cs.element;
+    expect(element, isNotNull);
+    expect(element.kind, equals(ElementKind.PARAMETER));
+    expect(element.name, equals(name));
+    expect(element.parameters, isNull);
+    expect(element.returnType, equals(returnType ?? 'dynamic'));
+    return cs;
+  }
+
   CompletionSuggestion assertSuggestSetter(String name,
       {int relevance,
       CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION}) {
@@ -572,6 +610,20 @@
     return cs;
   }
 
+  CompletionSuggestion assertSuggestTypeParameter(String name,
+      {int relevance = DART_RELEVANCE_TYPE_PARAMETER}) {
+    var cs = assertSuggest(name,
+        csKind: CompletionSuggestionKind.IDENTIFIER, relevance: relevance);
+    expect(cs.returnType, isNull);
+    var element = cs.element;
+    expect(element, isNotNull);
+    expect(element.kind, equals(ElementKind.TYPE_PARAMETER));
+    expect(element.name, equals(name));
+    expect(element.parameters, isNull);
+    expect(element.returnType, isNull);
+    return cs;
+  }
+
   Future<List<CompletionSuggestion>> computeContributedSuggestions(
       DartCompletionRequest request);
 
diff --git a/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
index b54d6d8..ce3c6be 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
@@ -18,37 +18,6 @@
 
 @reflectiveTest
 class LocalConstructorContributorTest extends DartCompletionContributorTest {
-  CompletionSuggestion assertSuggestLocalVariable(
-      String name, String returnType,
-      {int relevance = DART_RELEVANCE_LOCAL_VARIABLE}) {
-    // Local variables should only be suggested by LocalReferenceContributor
-    var cs = assertSuggest(name,
-        csKind: CompletionSuggestionKind.INVOCATION, relevance: relevance);
-    expect(cs.returnType, returnType ?? 'dynamic');
-    var element = cs.element;
-    expect(element, isNotNull);
-    expect(element.kind, equals(ElementKind.LOCAL_VARIABLE));
-    expect(element.name, equals(name));
-    expect(element.parameters, isNull);
-    expect(element.returnType, returnType ?? 'dynamic');
-    assertHasNoParameterInfo(cs);
-    return cs;
-  }
-
-  CompletionSuggestion assertSuggestParameter(String name, String returnType,
-      {int relevance = DART_RELEVANCE_PARAMETER}) {
-    var cs = assertSuggest(name,
-        csKind: CompletionSuggestionKind.INVOCATION, relevance: relevance);
-    expect(cs.returnType, returnType ?? 'dynamic');
-    var element = cs.element;
-    expect(element, isNotNull);
-    expect(element.kind, equals(ElementKind.PARAMETER));
-    expect(element.name, equals(name));
-    expect(element.parameters, isNull);
-    expect(element.returnType, equals(returnType ?? 'dynamic'));
-    return cs;
-  }
-
   @override
   DartCompletionContributor createContributor() {
     return LocalConstructorContributor();
diff --git a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
index 725e4bd..88f43e4 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
@@ -18,58 +18,6 @@
 
 @reflectiveTest
 class LocalReferenceContributorTest extends DartCompletionContributorTest {
-  CompletionSuggestion assertSuggestLocalVariable(
-      String name, String returnType,
-      {int relevance = DART_RELEVANCE_LOCAL_VARIABLE,
-      bool hasTypeBoost = false,
-      bool hasSubtypeBoost = false}) {
-    if (hasTypeBoost) {
-      relevance += DART_RELEVANCE_BOOST_TYPE;
-    } else if (hasSubtypeBoost) {
-      relevance += DART_RELEVANCE_BOOST_SUBTYPE;
-    }
-    // Local variables should only be suggested by LocalReferenceContributor
-    var cs = assertSuggest(name,
-        csKind: CompletionSuggestionKind.INVOCATION, relevance: relevance);
-    expect(cs.returnType, returnType ?? 'dynamic');
-    var element = cs.element;
-    expect(element, isNotNull);
-    expect(element.kind, equals(ElementKind.LOCAL_VARIABLE));
-    expect(element.name, equals(name));
-    expect(element.parameters, isNull);
-    expect(element.returnType, returnType ?? 'dynamic');
-    assertHasNoParameterInfo(cs);
-    return cs;
-  }
-
-  CompletionSuggestion assertSuggestParameter(String name, String returnType,
-      {int relevance = DART_RELEVANCE_PARAMETER}) {
-    var cs = assertSuggest(name,
-        csKind: CompletionSuggestionKind.INVOCATION, relevance: relevance);
-    expect(cs.returnType, returnType ?? 'dynamic');
-    var element = cs.element;
-    expect(element, isNotNull);
-    expect(element.kind, equals(ElementKind.PARAMETER));
-    expect(element.name, equals(name));
-    expect(element.parameters, isNull);
-    expect(element.returnType, equals(returnType ?? 'dynamic'));
-    return cs;
-  }
-
-  CompletionSuggestion assertSuggestTypeParameter(String name,
-      {int relevance = DART_RELEVANCE_TYPE_PARAMETER}) {
-    var cs = assertSuggest(name,
-        csKind: CompletionSuggestionKind.IDENTIFIER, relevance: relevance);
-    expect(cs.returnType, isNull);
-    var element = cs.element;
-    expect(element, isNotNull);
-    expect(element.kind, equals(ElementKind.TYPE_PARAMETER));
-    expect(element.name, equals(name));
-    expect(element.parameters, isNull);
-    expect(element.returnType, isNull);
-    return cs;
-  }
-
   @override
   DartCompletionContributor createContributor() {
     return LocalReferenceContributor();
diff --git a/pkg/analysis_server/test/src/cider/completion_test.dart b/pkg/analysis_server/test/src/cider/completion_test.dart
index c83ac3b..0ab4c89 100644
--- a/pkg/analysis_server/test/src/cider/completion_test.dart
+++ b/pkg/analysis_server/test/src/cider/completion_test.dart
@@ -75,21 +75,6 @@
     expect(_completionResult.prefixStart.column, 0);
   }
 
-  Future<void> test_compute_sameSignature_sameResult() async {
-    await _compute(r'''
-var a = ^;
-''');
-    var lastResult = _completionResult;
-
-    // Ask for completion using new resolver and computer.
-    // But the file signature is the same, so the same result.
-    _createFileResolver();
-    await _compute(r'''
-var a = ^;
-''');
-    expect(_completionResult, same(lastResult));
-  }
-
   Future<void> test_compute_updateImportedLibrary() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
     newFile(aPath, content: r'''
diff --git a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
index b53385c..72653d2 100644
--- a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
+++ b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
@@ -880,7 +880,7 @@
   }
 }
 
-class TestNotificationManager implements NotificationManager {
+class TestNotificationManager implements AbstractNotificationManager {
   List<Notification> notifications = <Notification>[];
 
   Map<String, Map<String, List<AnalysisError>>> recordedErrors =
diff --git a/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart b/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart
index 86fe994..3ca5251 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart
@@ -19,6 +19,41 @@
   @override
   FixKind get kind => DartFixKind.CHANGE_TO;
 
+  Future<void> test_annotation_constructor() async {
+    await resolveTestUnit('''
+@MyCalss()
+void f() {}
+
+class MyClass {
+  const MyClass();
+}
+''');
+    await assertHasFix('''
+@MyClass()
+void f() {}
+
+class MyClass {
+  const MyClass();
+}
+''');
+  }
+
+  @failingTest
+  Future<void> test_annotation_variable() async {
+    // TODO(brianwilkerson) Add support for suggesting similar top-level
+    //  variables.
+    await resolveTestUnit('''
+const annotation = '';
+@anontation
+void f() {}
+''');
+    await assertHasFix('''
+const annotation = '';
+@annotation
+void f() {}
+''');
+  }
+
   Future<void> test_class_fromImport() async {
     await resolveTestUnit('''
 main() {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_future_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_future_test.dart
index c6c1814..aa333d5 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_future_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_future_test.dart
@@ -142,8 +142,6 @@
 library main;
 Future<int> main() async {
 }
-''', errorFilter: (error) {
-      return error.errorCode == StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE;
-    });
+''');
   }
 }
diff --git a/pkg/analysis_server/test/verify_sorted_test.dart b/pkg/analysis_server/test/verify_sorted_test.dart
index 26acde2..d0efc72 100644
--- a/pkg/analysis_server/test/verify_sorted_test.dart
+++ b/pkg/analysis_server/test/verify_sorted_test.dart
@@ -10,75 +10,114 @@
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:meta/meta.dart';
 import 'package:test/test.dart';
 
 import 'utils/package_root.dart';
 
 void main() {
+  group('analysis_server', () {
+    buildTestsForAnalysisServer();
+  });
+
+  group('analyzer_cli', () {
+    buildTestsForAnalyzerCli();
+  });
+
+  group('analyzer_plugin', () {
+    buildTestsForAnalyzerPlugin();
+  });
+}
+
+void buildTests({
+  @required String packagePath,
+  @required List<String> excludedPaths,
+}) {
   var provider = PhysicalResourceProvider.INSTANCE;
-  var normalizedRoot = provider.pathContext.normalize(packageRoot);
-  var packagePath =
-      provider.pathContext.join(normalizedRoot, 'analysis_server');
-  var mockPackagesPath =
-      provider.pathContext.join(packagePath, 'test', 'mock_packages');
-  // TODO(brianwilkerson) Fix the generator to sort the generated files and
-  //  remove these exclusions.
-  var generatedFilePaths = <String>[
-    provider.pathContext.join(
-        packagePath, 'lib', 'lsp_protocol', 'protocol_custom_generated.dart'),
-    provider.pathContext
-        .join(packagePath, 'lib', 'lsp_protocol', 'protocol_generated.dart'),
-    provider.pathContext
-        .join(packagePath, 'lib', 'protocol', 'protocol_constants.dart'),
-    provider.pathContext
-        .join(packagePath, 'lib', 'protocol', 'protocol_generated.dart'),
-    provider.pathContext.join(packagePath, 'lib', 'src', 'edit',
-        'nnbd_migration', 'resources', 'resources.g.dart'),
-    provider.pathContext.join(packagePath, 'test', 'integration', 'support',
-        'integration_test_methods.dart'),
-    provider.pathContext.join(packagePath, 'test', 'integration', 'support',
-        'protocol_matchers.dart'),
-    // The following are not generated, but can't be sorted because the contain
-    // ignore comments in the directives, which sorting deletes.
-    provider.pathContext
-        .join(packagePath, 'lib', 'src', 'edit', 'edit_domain.dart'),
-    provider.pathContext
-        .join(packagePath, 'lib', 'src', 'services', 'kythe', 'schema.dart'),
-    provider.pathContext.join(
-        packagePath, 'test', 'services', 'completion', 'dart', 'test_all.dart'),
-  ];
+  var pkgRootPath = provider.pathContext.normalize(packageRoot);
+
+  packagePath = _toPlatformPath(pkgRootPath, packagePath);
+  excludedPaths = excludedPaths.map((e) {
+    return _toPlatformPath(packagePath, e);
+  }).toList();
 
   var collection = AnalysisContextCollection(
-      includedPaths: <String>[packagePath],
-      excludedPaths: [mockPackagesPath, ...generatedFilePaths],
-      resourceProvider: provider);
+    includedPaths: <String>[packagePath],
+    excludedPaths: excludedPaths,
+    resourceProvider: provider,
+  );
   var contexts = collection.contexts;
   if (contexts.length != 1) {
     fail('The directory $packagePath contains multiple analysis contexts.');
   }
 
-  buildTestsIn(contexts[0].currentSession, packagePath, generatedFilePaths,
-      mockPackagesPath, provider.getFolder(packagePath));
+  buildTestsIn(contexts[0].currentSession, packagePath, excludedPaths,
+      provider.getFolder(packagePath));
 }
 
-void buildTestsIn(
-    AnalysisSession session,
-    String testDirPath,
-    List<String> generatedFilePaths,
-    String mockPackagesPath,
-    Folder directory) {
+void buildTestsForAnalysisServer() {
+  var excludedPaths = <String>[
+    'test/mock_packages',
+    // TODO(brianwilkerson) Fix the generator to sort the generated files and
+    //  remove these exclusions.
+    'lib/lsp_protocol/protocol_custom_generated.dart',
+    'lib/lsp_protocol/protocol_generated.dart',
+    'lib/protocol/protocol_constants.dart',
+    'lib/protocol/protocol_generated.dart',
+    'lib/src/edit/nnbd_migration/resources/resources.g.dart',
+    'test/integration/support/integration_test_methods.dart',
+    'test/integration/support/protocol_matchers.dart',
+    // The following are not generated, but can't be sorted because the contain
+    // ignore comments in the directives, which sorting deletes.
+    'lib/src/edit/edit_domain.dart',
+    'lib/src/services/kythe/schema.dart',
+    'test/services/completion/dart/test_all.dart',
+  ];
+
+  buildTests(
+    packagePath: 'analysis_server',
+    excludedPaths: excludedPaths,
+  );
+}
+
+void buildTestsForAnalyzerCli() {
+  buildTests(
+    packagePath: 'analyzer_cli',
+    excludedPaths: [
+      'test/data',
+    ],
+  );
+}
+
+void buildTestsForAnalyzerPlugin() {
+  // TODO(brianwilkerson) Fix the generator to sort the generated files and
+  //  remove these exclusions.
+  var excludedPaths = <String>[
+    'lib/protocol/protocol_common.dart',
+    'lib/protocol/protocol_generated.dart',
+    'test/integration/support/integration_test_methods.dart',
+    'test/integration/support/protocol_matchers.dart',
+  ];
+
+  buildTests(
+    packagePath: 'analyzer_plugin',
+    excludedPaths: excludedPaths,
+  );
+}
+
+void buildTestsIn(AnalysisSession session, String testDirPath,
+    List<String> excludedPath, Folder directory) {
   var pathContext = session.resourceProvider.pathContext;
   var children = directory.getChildren();
   children.sort((first, second) => first.shortName.compareTo(second.shortName));
   for (var child in children) {
     if (child is Folder) {
-      if (child.path != mockPackagesPath) {
-        buildTestsIn(
-            session, testDirPath, generatedFilePaths, mockPackagesPath, child);
+      if (!excludedPath.contains(child.path)) {
+        buildTestsIn(session, testDirPath, excludedPath, child);
       }
     } else if (child is File && child.shortName.endsWith('.dart')) {
       var path = child.path;
-      if (generatedFilePaths.contains(path)) {
+      if (excludedPath.contains(path)) {
         continue;
       }
       var relativePath = pathContext.relative(path, from: testDirPath);
@@ -102,3 +141,11 @@
     }
   }
 }
+
+String _toPlatformPath(String pathPath, String relativePosixPath) {
+  var pathContext = PhysicalResourceProvider.INSTANCE.pathContext;
+  return pathContext.joinAll([
+    pathPath,
+    ...relativePosixPath.split('/'),
+  ]);
+}
diff --git a/pkg/analysis_server/tool/lsp_spec/README.md b/pkg/analysis_server/tool/lsp_spec/README.md
index 3208c04..55c2c6f 100644
--- a/pkg/analysis_server/tool/lsp_spec/README.md
+++ b/pkg/analysis_server/tool/lsp_spec/README.md
@@ -24,6 +24,12 @@
 - `outline`: When set to `true`, `dart/textDocument/publishOutline` notifications will be sent with outline information for open files.
 - `flutterOutline`: When set to `true`, `dart/textDocument/publishFlutterOutline` notifications will be sent with Flutter outline information for open files.
 
+## Client Workspace Configuration
+
+Client workspace settings are requested with `workspace/configuration` during initialization and re-requested whenever the client notifies the server with `workspace/didChangeConfiguration`. This allows the settings to take effect without restarting the server.
+
+- `dart.enableSdkFormatter`: When set to `false`, prevents registration (or unregisters) the SDK formatter. When set to `true` or not supplied, will register/reregister the SDK formatter.
+
 ## Method Status
 
 Below is a list of LSP methods and their implementation status.
@@ -46,10 +52,11 @@
 | window/logMessage | ✅ | | | |
 | telemetry/event | | | | |
 | client/registerCapability | ✅ | ✅ | ✅ | ✅ |
-| client/unregisterCapability | ✅ | ✅ | ✅ | | Capabilities only change when using analyzer plugins
+| client/unregisterCapability | ✅ | ✅ | ✅ | ✅ |
 | workspace/workspaceFolders | | | | |
 | workspace/didChangeWorkspaceFolders | ✅ | ✅ | ✅ | ✅ |
-| workspace/configuration | | | | |
+| workspace/didChangeConfiguration | ✅ | ✅ | ✅ | ✅ |
+| workspace/configuration | ✅ | ✅ | ✅ | ✅ |
 | workspace/didChangeWatchedFiles | | | | | unused, server does own watching |
 | workspace/symbol | ✅ | ✅ | ✅ | ✅ |
 | workspace/executeCommand | ✅ | ✅ | ✅ | ✅ |
diff --git a/pkg/analysis_server/tool/lsp_spec/lsp_specification.md b/pkg/analysis_server/tool/lsp_spec/lsp_specification.md
index 1e4e3ef..2d3a9c8 100644
--- a/pkg/analysis_server/tool/lsp_spec/lsp_specification.md
+++ b/pkg/analysis_server/tool/lsp_spec/lsp_specification.md
@@ -22,13 +22,11 @@
 
 ---
 title: Specification
-shortTitle: 3.14 - Current
+shortTitle: 3.14 - Previous
 layout: specifications
 sectionid: specification-3-14
 toc: specification-3-14-toc
 index: 1
-redirect_from:
-  - /specification
 ---
 # Language Server Protocol Specification - 3.14
 
@@ -3374,7 +3372,7 @@
 > *Since version 3.14.0*
 
 The go to definition request is sent from the client to the server to resolve the definition location of a symbol at a given text document position.
-`
+
 The result type [`LocationLink`](#locationlink)[] got introduce with version 3.14.0 and depends in the corresponding client capability `clientCapabilities.textDocument.definition.linkSupport`.
 
 _Request_:
@@ -4249,7 +4247,7 @@
 ```
 #### <a href="#textDocument_rename" name="textDocument_rename" class="anchor">Rename Request (:leftwards_arrow_with_hook:)</a>
 
-The rename request is sent from the client to the server to perform a workspace-wide rename of a symbol.
+The rename request is sent from the client to the server to ask the server to compute a workspace change so that the client can perform a workspace-wide rename of a symbol.
 
 _Request_:
 * method: 'textDocument/rename'
@@ -4374,7 +4372,7 @@
 	endCharacter?: number;
 
 	/**
-	 * Describes the kind of the folding range such as `comment' or 'region'. The kind
+	 * Describes the kind of the folding range such as `comment` or `region`. The kind
 	 * is used to categorize folding ranges and used by commands like 'Fold all comments'. See
 	 * [FoldingRangeKind](#FoldingRangeKind) for an enumeration of standardized kinds.
 	 */
diff --git a/pkg/analysis_server/tool/lsp_spec/markdown.dart b/pkg/analysis_server/tool/lsp_spec/markdown.dart
index 4ca28a2..5b222d9 100644
--- a/pkg/analysis_server/tool/lsp_spec/markdown.dart
+++ b/pkg/analysis_server/tool/lsp_spec/markdown.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 final _methodNamesPattern = RegExp(
-    r'''_(?:Notification|Request):?_:?(?:\r?\n)+\* method: '(.*?)'\r?\n''',
+    r'''_(?:Notification|Request):?_:?(?:\r?\n)+\* method: '(.*?)',?\r?\n''',
     multiLine: true);
 final _typeScriptBlockPattern =
     RegExp(r'\B```typescript([\S\s]*?)\n```', multiLine: true);
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 2de4989..be27aee 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,8 +1,17 @@
-## 0.39.9-dev
+## 0.39.10
+* Restored the default constructor in internal `SummaryBuilder`,
+  and the `featureSet` named parameter in `build`, for `build_resolvers`
+  compatibility.  See #42163.
+
+## 0.39.9
 * Deprecated `DartType.isObject`, use `DartType.isDartCoreObject` for
   consistency with other similar getters.
 * Deprecated `InstanceCreationExpression.staticElement`, use
   `constructorName.staticElement` instead, like for `MethodInvocation`.
+* Added new error code: REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR.
+* Bug fixes: #34370, #35710, #37552, #38676, #38799, #39644, #41151, #41592,
+  #41614, #41724, #41741, #41797, #41803, #41844, #41997, #42077, #42093,
+  and #42122.
 
 ## 0.39.8
 * Deprecated `VariableElement.constantValue`, it does not guarantee that
@@ -19,7 +28,7 @@
 * Added new error codes: ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING and
   THROW_OF_INVALID_TYPE.
 * Changed error code NULLABLE_TYPE_IN_CATCH_CLAUSE to a hint.
-* Bug fixes: #40554, #41378, #41399, #41412, and, #41470.
+* Bug fixes: #40554, #41378, #41399, #41412, and #41470.
 
 ## 0.39.6
 * Added Window and DocumentFragment to analyzer's mock SDK.  These are required
diff --git a/pkg/analyzer/analysis_options.yaml b/pkg/analyzer/analysis_options.yaml
index 77ecc7d..e6d3a7c 100644
--- a/pkg/analyzer/analysis_options.yaml
+++ b/pkg/analyzer/analysis_options.yaml
@@ -1,4 +1,4 @@
-include: package:pedantic/analysis_options.1.8.0.yaml
+include: package:pedantic/analysis_options.1.9.0.yaml
 
 analyzer:
   # This currently finds ~4,500 implicit-casts issues when enabled.
@@ -29,5 +29,3 @@
     - avoid_unused_constructor_parameters
     - empty_statements
     - unnecessary_brace_in_string_interps
-    - # TODO(scheglov) Remove these when pedantic is updated to include them
-    - annotate_overrides
diff --git a/pkg/analyzer/lib/dart/element/null_safety_understanding_flag.dart b/pkg/analyzer/lib/dart/element/null_safety_understanding_flag.dart
index 9ddfd9c..5406994 100644
--- a/pkg/analyzer/lib/dart/element/null_safety_understanding_flag.dart
+++ b/pkg/analyzer/lib/dart/element/null_safety_understanding_flag.dart
@@ -38,7 +38,7 @@
 
   /// Code that understands nullability should be run using this method,
   /// otherwise all type operations will treat all nullabilities as star.
-  static R enableNullSafetyTypes<R>(R body()) {
+  static R enableNullSafetyTypes<R>(R Function() body) {
     return runZoned<R>(body, zoneValues: {_zoneKey: true});
   }
 }
diff --git a/pkg/analyzer/lib/source/embedder.dart b/pkg/analyzer/lib/source/embedder.dart
index 4d57d49..f55cc5d 100644
--- a/pkg/analyzer/lib/source/embedder.dart
+++ b/pkg/analyzer/lib/source/embedder.dart
@@ -40,15 +40,17 @@
 
   // TODO(danrubel) Determine SDK version
   @override
+  String get allowedExperimentsJson {
+    return null;
+  }
+
+  @override
   String get sdkVersion => '0';
 
   /// The url mappings for this SDK.
   Map<String, String> get urlMappings => _urlMappings;
 
   @override
-  PackageBundle getLinkedBundle() => null;
-
-  @override
   String getRelativePathFromFile(JavaFile file) => file.getAbsolutePath();
 
   @deprecated
diff --git a/pkg/analyzer/lib/src/command_line/arguments.dart b/pkg/analyzer/lib/src/command_line/arguments.dart
index 006e5f3..6678491 100644
--- a/pkg/analyzer/lib/src/command_line/arguments.dart
+++ b/pkg/analyzer/lib/src/command_line/arguments.dart
@@ -159,8 +159,9 @@
   //
   parser.addMultiOption(defineVariableOption,
       abbr: 'D',
-      help: 'Define environment variables. For example, "-Dfoo=bar" defines an '
-          'environment variable named "foo" whose value is "bar".',
+      help:
+          'Define an environment declaration. For example, "-Dfoo=bar" defines an '
+          'environment declaration named "foo" whose value is "bar".',
       hide: hide);
   parser.addOption(packagesOption,
       help: 'The path to the package resolution configuration file, which '
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 23ba36c..3248eb8 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -100,11 +100,6 @@
   /// zero, we stop writing any new exception contexts in this process.
   static int allowedNumberOfContextsToWrite = 10;
 
-  /// Whether summary2 should be used to resynthesize elements.
-  @Deprecated('Clients should assume summary2 is used.  '
-      'Summary1 support has been removed.')
-  static bool get useSummary2 => true;
-
   /// The scheduler that schedules analysis work in this, and possibly other
   /// analysis drivers.
   final AnalysisDriverScheduler _scheduler;
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 a46645f..0048c0b 100644
--- a/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart
@@ -4,13 +4,10 @@
 
 import 'package:_fe_analyzer_shared/src/sdk/allowed_experiments.dart';
 import 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/context/packages.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
-import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:meta/meta.dart';
 import 'package:pub_semver/pub_semver.dart';
 
@@ -97,20 +94,9 @@
   }
 
   static AllowedExperiments _experimentsForSdk(DartSdk sdk) {
-    Folder sdkFolder;
-    if (sdk is FolderBasedDartSdk) {
-      sdkFolder = sdk.directory;
-    } else if (sdk is MockSdk) {
-      sdkFolder = sdk.directory;
-    }
-
-    if (sdkFolder != null) {
+    var experimentsContent = sdk.allowedExperimentsJson;
+    if (experimentsContent != null) {
       try {
-        var experimentsContent = sdkFolder
-            .getChildAssumingFolder('lib')
-            .getChildAssumingFolder('_internal')
-            .getChildAssumingFile('allowed_experiments.json')
-            .readAsStringSync();
         return parseAllowedExperiments(experimentsContent);
       } catch (_) {}
     }
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index b398086..48fd360 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -232,10 +232,15 @@
     ErrorReporter errorReporter = _getErrorReporter(file);
 
     if (!_libraryElement.isNonNullableByDefault) {
-      unit.accept(DeadCodeVerifier(errorReporter, typeSystem: _typeSystem));
+      unit.accept(
+        LegacyDeadCodeVerifier(
+          errorReporter,
+          typeSystem: _typeSystem,
+        ),
+      );
     }
 
-    unit.accept(UnusedLabelVerifier(errorReporter));
+    unit.accept(DeadCodeVerifier(errorReporter));
 
     // Dart2js analysis.
     if (_analysisOptions.dart2jsHint) {
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 0f26e2f..a8c69a1 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -7132,7 +7132,21 @@
   }
 
   @override
-  DartType get returnTypeInternal => variable.type;
+  DartType get returnTypeInternal {
+    var returnType = variable.type;
+
+    // While performing inference during linking, the first step is to collect
+    // dependencies. During this step we resolve the expression, but we might
+    // reference elements that don't have their types inferred yet. So, here
+    // we give some type. A better solution would be to infer recursively, but
+    // we are not doing this yet.
+    if (returnType == null) {
+      assert(linkedContext.isLinking);
+      return DynamicTypeImpl.instance;
+    }
+
+    return returnType;
+  }
 
   @override
   FunctionType get type => ElementTypeProvider.current.getExecutableType(this);
diff --git a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
index 4335e79..29c35f2 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
@@ -260,10 +260,15 @@
     ErrorReporter errorReporter = _getErrorReporter(file);
 
     if (!_libraryElement.isNonNullableByDefault) {
-      unit.accept(DeadCodeVerifier(errorReporter, typeSystem: _typeSystem));
+      unit.accept(
+        LegacyDeadCodeVerifier(
+          errorReporter,
+          typeSystem: _typeSystem,
+        ),
+      );
     }
 
-    unit.accept(UnusedLabelVerifier(errorReporter));
+    unit.accept(DeadCodeVerifier(errorReporter));
 
     // Dart2js analysis.
     if (_analysisOptions.dart2jsHint) {
diff --git a/pkg/analyzer/lib/src/dart/resolver/body_inference_context.dart b/pkg/analyzer/lib/src/dart/resolver/body_inference_context.dart
index 2709a4d..db924a3 100644
--- a/pkg/analyzer/lib/src/dart/resolver/body_inference_context.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/body_inference_context.dart
@@ -188,10 +188,10 @@
       }
     }
 
-    // Otherwise the context type is `FutureOr<flatten(T)>` where `T` is the
-    // imposed return type.
+    // Otherwise the context type is `FutureOr<futureValueTypeSchema(S)>`,
+    // where `S` is the imposed return type.
     return typeSystem.typeProvider.futureOrType2(
-      typeSystem.flatten(imposedType),
+      typeSystem.futureValueType(imposedType),
     );
   }
 }
diff --git a/pkg/analyzer/lib/src/dart/resolver/type_name_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/type_name_resolver.dart
index e6b0ac6..928504f 100644
--- a/pkg/analyzer/lib/src/dart/resolver/type_name_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/type_name_resolver.dart
@@ -207,9 +207,7 @@
         return type;
       } else if (element is NeverElementImpl) {
         _buildTypeArguments(node, 0);
-        return element.instantiate(
-          nullabilitySuffix: nullability,
-        );
+        return _instantiateElementNever(nullability);
       } else if (element is TypeParameterElement) {
         _buildTypeArguments(node, 0);
         return element.instantiate(
@@ -249,9 +247,7 @@
         nullabilitySuffix: nullability,
       );
     } else if (element is NeverElementImpl) {
-      return element.instantiate(
-        nullabilitySuffix: nullability,
-      );
+      return _instantiateElementNever(nullability);
     } else if (element is TypeParameterElement) {
       return element.instantiate(
         nullabilitySuffix: nullability,
@@ -262,6 +258,14 @@
     }
   }
 
+  DartType _instantiateElementNever(NullabilitySuffix nullability) {
+    if (isNonNullableByDefault) {
+      return NeverTypeImpl.instance.withNullability(nullability);
+    } else {
+      return typeSystem.typeProvider.nullType;
+    }
+  }
+
   /// Given a [typeName] that has a question mark, report an error and return
   /// `true` if it appears in a location where a nullable type is not allowed.
   void _reportInvalidNullableType(TypeName typeName) {
diff --git a/pkg/analyzer/lib/src/dart/sdk/sdk.dart b/pkg/analyzer/lib/src/dart/sdk/sdk.dart
index 69b3722..f72c2a9 100644
--- a/pkg/analyzer/lib/src/dart/sdk/sdk.dart
+++ b/pkg/analyzer/lib/src/dart/sdk/sdk.dart
@@ -15,7 +15,6 @@
 import 'package:analyzer/src/generated/java_engine_io.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source_io.dart';
-import 'package:analyzer/src/summary/idl.dart' show PackageBundle;
 import 'package:path/path.dart' as pathos;
 import 'package:yaml/yaml.dart';
 
@@ -56,8 +55,6 @@
    */
   final Map<String, Source> _uriToSourceMap = HashMap<String, Source>();
 
-  PackageBundle _sdkBundle;
-
   /**
    * Return the analysis options for this SDK analysis context.
    */
@@ -152,27 +149,11 @@
     return null;
   }
 
-  @override
-  PackageBundle getLinkedBundle() {
-    if (_useSummary) {
-      _sdkBundle ??= getSummarySdkBundle();
-      return _sdkBundle;
-    }
-    return null;
-  }
-
   String getRelativePathFromFile(File file);
 
   @override
   SdkLibrary getSdkLibrary(String dartUri) => libraryMap.getLibrary(dartUri);
 
-  /**
-   * Return the [PackageBundle] for this SDK, if it exists, or `null` otherwise.
-   * This method should not be used outside of `analyzer` and `analyzer_cli`
-   * packages.
-   */
-  PackageBundle getSummarySdkBundle();
-
   Source internalMapDartUri(String dartUri) {
     // TODO(brianwilkerson) Figure out how to unify the implementations in the
     // two subclasses.
@@ -266,15 +247,15 @@
   static const String _EMBEDDED_LIB_MAP_KEY = 'embedded_libs';
   final Map<String, String> _urlMappings = HashMap<String, String>();
 
-  Folder _embedderYamlLibFolder;
-
   EmbedderSdk(
       ResourceProvider resourceProvider, Map<Folder, YamlMap> embedderYamls) {
     this.resourceProvider = resourceProvider;
     embedderYamls?.forEach(_processEmbedderYaml);
-    if (embedderYamls?.length == 1) {
-      _embedderYamlLibFolder = embedderYamls.keys.first;
-    }
+  }
+
+  @override
+  String get allowedExperimentsJson {
+    return null;
   }
 
   @override
@@ -290,25 +271,6 @@
   String getRelativePathFromFile(File file) => file.path;
 
   @override
-  PackageBundle getSummarySdkBundle() {
-    String name = 'strong.sum';
-    File file = _embedderYamlLibFolder.parent.getChildAssumingFile(name);
-    try {
-      if (file.exists) {
-        List<int> bytes = file.readAsBytesSync();
-        return PackageBundle.fromBuffer(bytes);
-      }
-    } catch (exception, stackTrace) {
-      AnalysisEngine.instance.instrumentationService.logException(
-          CaughtException.withMessage(
-              'Failed to load SDK analysis summary from $file',
-              exception,
-              stackTrace));
-    }
-    return null;
-  }
-
-  @override
   Source internalMapDartUri(String dartUri) {
     String libraryName;
     String relativePath;
@@ -464,6 +426,19 @@
     libraryMap = initialLibraryMap();
   }
 
+  @override
+  String get allowedExperimentsJson {
+    try {
+      return _sdkDirectory
+          .getChildAssumingFolder('lib')
+          .getChildAssumingFolder('_internal')
+          .getChildAssumingFile('allowed_experiments.json')
+          .readAsStringSync();
+    } catch (_) {
+      return null;
+    }
+  }
+
   /**
    * Return the directory containing the SDK.
    */
@@ -551,33 +526,6 @@
   }
 
   /**
-   * Return the [PackageBundle] for this SDK, if it exists, or `null` otherwise.
-   * This method should not be used outside of `analyzer` and `analyzer_cli`
-   * packages.
-   */
-  @override
-  PackageBundle getSummarySdkBundle() {
-    String rootPath = directory.path;
-    String name = 'strong.sum';
-    String path =
-        resourceProvider.pathContext.join(rootPath, 'lib', '_internal', name);
-    try {
-      File file = resourceProvider.getFile(path);
-      if (file.exists) {
-        List<int> bytes = file.readAsBytesSync();
-        return PackageBundle.fromBuffer(bytes);
-      }
-    } catch (exception, stackTrace) {
-      AnalysisEngine.instance.instrumentationService.logException(
-          CaughtException.withMessage(
-              'Failed to load SDK analysis summary from $path',
-              exception,
-              stackTrace));
-    }
-    return null;
-  }
-
-  /**
    * Read all of the configuration files to initialize the library maps.
    * Return the initialized library map.
    */
diff --git a/pkg/analyzer/lib/src/error/dead_code_verifier.dart b/pkg/analyzer/lib/src/error/dead_code_verifier.dart
index 0046452..fea47dc 100644
--- a/pkg/analyzer/lib/src/error/dead_code_verifier.dart
+++ b/pkg/analyzer/lib/src/error/dead_code_verifier.dart
@@ -25,18 +25,135 @@
   List<Object> arguments,
 );
 
-/// A visitor that finds dead code.
+/// A visitor that finds dead code, other than unreachable code that is
+/// handled in [NullSafetyDeadCodeVerifier] or [LegacyDeadCodeVerifier].
 class DeadCodeVerifier extends RecursiveAstVisitor<void> {
   /// The error reporter by which errors will be reported.
   final ErrorReporter _errorReporter;
 
+  /// The object used to track the usage of labels within a given label scope.
+  _LabelTracker labelTracker;
+
+  DeadCodeVerifier(this._errorReporter);
+
+  @override
+  void visitBreakStatement(BreakStatement node) {
+    labelTracker?.recordUsage(node.label?.name);
+  }
+
+  @override
+  void visitContinueStatement(ContinueStatement node) {
+    labelTracker?.recordUsage(node.label?.name);
+  }
+
+  @override
+  void visitExportDirective(ExportDirective node) {
+    ExportElement exportElement = node.element;
+    if (exportElement != null) {
+      // The element is null when the URI is invalid.
+      LibraryElement library = exportElement.exportedLibrary;
+      if (library != null && !library.isSynthetic) {
+        for (Combinator combinator in node.combinators) {
+          _checkCombinator(library, combinator);
+        }
+      }
+    }
+    super.visitExportDirective(node);
+  }
+
+  @override
+  void visitImportDirective(ImportDirective node) {
+    ImportElement importElement = node.element;
+    if (importElement != null) {
+      // The element is null when the URI is invalid, but not when the URI is
+      // valid but refers to a non-existent file.
+      LibraryElement library = importElement.importedLibrary;
+      if (library != null && !library.isSynthetic) {
+        for (Combinator combinator in node.combinators) {
+          _checkCombinator(library, combinator);
+        }
+      }
+    }
+    super.visitImportDirective(node);
+  }
+
+  @override
+  void visitLabeledStatement(LabeledStatement node) {
+    _pushLabels(node.labels);
+    try {
+      super.visitLabeledStatement(node);
+    } finally {
+      _popLabels();
+    }
+  }
+
+  @override
+  void visitSwitchStatement(SwitchStatement node) {
+    List<Label> labels = <Label>[];
+    for (SwitchMember member in node.members) {
+      labels.addAll(member.labels);
+    }
+    _pushLabels(labels);
+    try {
+      super.visitSwitchStatement(node);
+    } finally {
+      _popLabels();
+    }
+  }
+
+  /// Resolve the names in the given [combinator] in the scope of the given
+  /// [library].
+  void _checkCombinator(LibraryElement library, Combinator combinator) {
+    Namespace namespace =
+        NamespaceBuilder().createExportNamespaceForLibrary(library);
+    NodeList<SimpleIdentifier> names;
+    ErrorCode hintCode;
+    if (combinator is HideCombinator) {
+      names = combinator.hiddenNames;
+      hintCode = HintCode.UNDEFINED_HIDDEN_NAME;
+    } else {
+      names = (combinator as ShowCombinator).shownNames;
+      hintCode = HintCode.UNDEFINED_SHOWN_NAME;
+    }
+    for (SimpleIdentifier name in names) {
+      String nameStr = name.name;
+      Element element = namespace.get(nameStr);
+      element ??= namespace.get("$nameStr=");
+      if (element == null) {
+        _errorReporter
+            .reportErrorForNode(hintCode, name, [library.identifier, nameStr]);
+      }
+    }
+  }
+
+  /// Exit the most recently entered label scope after reporting any labels that
+  /// were not referenced within that scope.
+  void _popLabels() {
+    for (Label label in labelTracker.unusedLabels()) {
+      _errorReporter
+          .reportErrorForNode(HintCode.UNUSED_LABEL, label, [label.label.name]);
+    }
+    labelTracker = labelTracker.outerTracker;
+  }
+
+  /// Enter a new label scope in which the given [labels] are defined.
+  void _pushLabels(List<Label> labels) {
+    labelTracker = _LabelTracker(labelTracker, labels);
+  }
+}
+
+/// A visitor that finds dead code.
+class LegacyDeadCodeVerifier extends RecursiveAstVisitor<void> {
+  /// The error reporter by which errors will be reported.
+  final ErrorReporter _errorReporter;
+
   ///  The type system for this visitor
   final TypeSystemImpl _typeSystem;
 
   /// Initialize a newly created dead code verifier that will report dead code
   /// to the given [errorReporter] and will use the given [typeSystem] if one is
   /// provided.
-  DeadCodeVerifier(this._errorReporter, {TypeSystemImpl typeSystem})
+  LegacyDeadCodeVerifier(this._errorReporter, {TypeSystemImpl typeSystem})
       : this._typeSystem = typeSystem ??
             TypeSystemImpl(
               implicitCasts: true,
@@ -132,21 +249,6 @@
   }
 
   @override
-  void visitExportDirective(ExportDirective node) {
-    ExportElement exportElement = node.element;
-    if (exportElement != null) {
-      // The element is null when the URI is invalid.
-      LibraryElement library = exportElement.exportedLibrary;
-      if (library != null && !library.isSynthetic) {
-        for (Combinator combinator in node.combinators) {
-          _checkCombinator(library, combinator);
-        }
-      }
-    }
-    super.visitExportDirective(node);
-  }
-
-  @override
   void visitIfElement(IfElement node) {
     Expression conditionExpression = node.condition;
     conditionExpression?.accept(this);
@@ -204,22 +306,6 @@
   }
 
   @override
-  void visitImportDirective(ImportDirective node) {
-    ImportElement importElement = node.element;
-    if (importElement != null) {
-      // The element is null when the URI is invalid, but not when the URI is
-      // valid but refers to a non-existent file.
-      LibraryElement library = importElement.importedLibrary;
-      if (library != null && !library.isSynthetic) {
-        for (Combinator combinator in node.combinators) {
-          _checkCombinator(library, combinator);
-        }
-      }
-    }
-    super.visitImportDirective(node);
-  }
-
-  @override
   void visitSwitchCase(SwitchCase node) {
     _checkForDeadStatementsInNodeList(node.statements, allowMandated: true);
     super.visitSwitchCase(node);
@@ -277,31 +363,6 @@
     node.body?.accept(this);
   }
 
-  /// Resolve the names in the given [combinator] in the scope of the given
-  /// [library].
-  void _checkCombinator(LibraryElement library, Combinator combinator) {
-    Namespace namespace =
-        NamespaceBuilder().createExportNamespaceForLibrary(library);
-    NodeList<SimpleIdentifier> names;
-    ErrorCode hintCode;
-    if (combinator is HideCombinator) {
-      names = combinator.hiddenNames;
-      hintCode = HintCode.UNDEFINED_HIDDEN_NAME;
-    } else {
-      names = (combinator as ShowCombinator).shownNames;
-      hintCode = HintCode.UNDEFINED_SHOWN_NAME;
-    }
-    for (SimpleIdentifier name in names) {
-      String nameStr = name.name;
-      Element element = namespace.get(nameStr);
-      element ??= namespace.get("$nameStr=");
-      if (element == null) {
-        _errorReporter
-            .reportErrorForNode(hintCode, name, [library.identifier, nameStr]);
-      }
-    }
-  }
-
   /// Given some list of [statements], loop through the list searching for dead
   /// statements. If [allowMandated] is true, then allow dead statements that
   /// are mandated by the language spec. This allows for a final break,
@@ -522,66 +583,6 @@
   }
 }
 
-/// A visitor that finds unused labels.
-class UnusedLabelVerifier extends RecursiveAstVisitor<void> {
-  /// The error reporter by which errors will be reported.
-  final ErrorReporter _errorReporter;
-
-  /// The object used to track the usage of labels within a given label scope.
-  _LabelTracker labelTracker;
-
-  UnusedLabelVerifier(this._errorReporter);
-
-  @override
-  void visitBreakStatement(BreakStatement node) {
-    labelTracker?.recordUsage(node.label?.name);
-  }
-
-  @override
-  void visitContinueStatement(ContinueStatement node) {
-    labelTracker?.recordUsage(node.label?.name);
-  }
-
-  @override
-  void visitLabeledStatement(LabeledStatement node) {
-    _pushLabels(node.labels);
-    try {
-      super.visitLabeledStatement(node);
-    } finally {
-      _popLabels();
-    }
-  }
-
-  @override
-  void visitSwitchStatement(SwitchStatement node) {
-    List<Label> labels = <Label>[];
-    for (SwitchMember member in node.members) {
-      labels.addAll(member.labels);
-    }
-    _pushLabels(labels);
-    try {
-      super.visitSwitchStatement(node);
-    } finally {
-      _popLabels();
-    }
-  }
-
-  /// Exit the most recently entered label scope after reporting any labels that
-  /// were not referenced within that scope.
-  void _popLabels() {
-    for (Label label in labelTracker.unusedLabels()) {
-      _errorReporter
-          .reportErrorForNode(HintCode.UNUSED_LABEL, label, [label.label.name]);
-    }
-    labelTracker = labelTracker.outerTracker;
-  }
-
-  /// Enter a new label scope in which the given [labels] are defined.
-  void _pushLabels(List<Label> labels) {
-    labelTracker = _LabelTracker(labelTracker, labels);
-  }
-}
-
 class _CatchClausesVerifier {
   final TypeSystemImpl _typeSystem;
   final _CatchClausesVerifierReporter _errorReporter;
diff --git a/pkg/analyzer/lib/src/error/return_type_verifier.dart b/pkg/analyzer/lib/src/error/return_type_verifier.dart
index 990b72e..f926e3d 100644
--- a/pkg/analyzer/lib/src/error/return_type_verifier.dart
+++ b/pkg/analyzer/lib/src/error/return_type_verifier.dart
@@ -126,6 +126,14 @@
       return;
     }
 
+    if (_typeSystem.isNonNullableByDefault) {
+      _checkReturnExpression_nullSafety(expression);
+    } else {
+      _checkReturnExpression_legacy(expression);
+    }
+  }
+
+  void _checkReturnExpression_legacy(Expression expression) {
     // `T` is the declared return type.
     // `S` is the static type of the expression.
     var T = enclosingExecutable.returnType;
@@ -188,6 +196,11 @@
       var flatten_S = _typeSystem.flatten(S);
       // It is a compile-time error if `T` is `void`,
       // and `flatten(S)` is neither `void`, `dynamic`, nor `Null`.
+      //
+      // Note, the specification was not implemented correctly, and
+      // implementing it now would be a breaking change. So, the code below
+      // intentionally does not implement the specification.
+      // https://github.com/dart-lang/sdk/issues/41803#issuecomment-635852474
       if (T.isVoid) {
         if (!_isVoidDynamicOrNull(flatten_S)) {
           reportTypeError();
@@ -216,12 +229,117 @@
     }
   }
 
-  void _checkReturnWithoutValue(ReturnStatement statement) {
-    var returnType = _flattenedReturnType;
-    if (_isVoidDynamicOrNull(returnType)) {
+  void _checkReturnExpression_nullSafety(Expression expression) {
+    // `T` is the declared return type.
+    // `S` is the static type of the expression.
+    var T = enclosingExecutable.returnType;
+    var S = getStaticType(expression);
+
+    void reportTypeError() {
+      String displayName = enclosingExecutable.element.displayName;
+      if (displayName.isEmpty) {
+        _errorReporter.reportErrorForNode(
+          StaticTypeWarningCode.RETURN_OF_INVALID_TYPE_FROM_CLOSURE,
+          expression,
+          [S, T],
+        );
+      } else if (enclosingExecutable.isMethod) {
+        _errorReporter.reportErrorForNode(
+          StaticTypeWarningCode.RETURN_OF_INVALID_TYPE_FROM_METHOD,
+          expression,
+          [S, T, displayName],
+        );
+      } else {
+        _errorReporter.reportErrorForNode(
+          StaticTypeWarningCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION,
+          expression,
+          [S, T, displayName],
+        );
+      }
+    }
+
+    if (enclosingExecutable.isSynchronous) {
+      // It is a compile-time error if `T` is `void`,
+      // and `S` is neither `void`, `dynamic`, nor `Null`.
+      if (T.isVoid) {
+        if (!_isVoidDynamicOrNull(S)) {
+          reportTypeError();
+          return;
+        }
+      }
+      // It is a compile-time error if `S` is `void`,
+      // and `T` is neither `void` nor `dynamic`.
+      if (S.isVoid) {
+        if (!_isVoidDynamic(T)) {
+          reportTypeError();
+          return;
+        }
+      }
+      // It is a compile-time error if `S` is not `void`,
+      // and `S` is not assignable to `T`.
+      if (!S.isVoid) {
+        if (!_typeSystem.isAssignableTo2(S, T)) {
+          reportTypeError();
+          return;
+        }
+      }
+      // OK
       return;
     }
 
+    if (enclosingExecutable.isAsynchronous) {
+      var T_v = _typeSystem.futureValueType(T);
+      var flatten_S = _typeSystem.flatten(S);
+      // It is a compile-time error if `flatten(T)` is `void`,
+      // and `flatten(S)` is neither `void`, `dynamic`, nor `Null`.
+      if (T_v.isVoid) {
+        if (!_isVoidDynamicOrNull(flatten_S)) {
+          reportTypeError();
+          return;
+        }
+      }
+      // It is a compile-time error if `flatten(S)` is `void`,
+      // and `flatten(T)` is neither `void`, `dynamic`.
+      if (flatten_S.isVoid) {
+        if (!_isVoidDynamic(T_v)) {
+          reportTypeError();
+          return;
+        }
+      }
+      // It is a compile-time error if `flatten(S)` is not `void`,
+      // and `Future<flatten(S)>` is not assignable to `T`.
+      if (!flatten_S.isVoid) {
+        if (!_typeSystem.isAssignableTo2(S, T_v) &&
+            !_typeSystem.isSubtypeOf2(flatten_S, T_v)) {
+          reportTypeError();
+          return;
+        }
+        // OK
+        return;
+      }
+    }
+  }
+
+  void _checkReturnWithoutValue(ReturnStatement statement) {
+    if (_typeSystem.isNonNullableByDefault) {
+      var T = enclosingExecutable.returnType;
+      if (enclosingExecutable.isSynchronous) {
+        if (_isVoidDynamicOrNull(T)) {
+          return;
+        }
+      } else {
+        var T_v = _typeSystem.futureValueType(T);
+        if (_isVoidDynamicOrNull(T_v)) {
+          return;
+        }
+      }
+    } else {
+      var returnType = _flattenedReturnType;
+      if (_isVoidDynamicOrNull(returnType)) {
+        return;
+      }
+    }
+
     _errorReporter.reportErrorForToken(
       StaticWarningCode.RETURN_WITHOUT_VALUE,
       statement.returnKeyword,
@@ -268,6 +386,10 @@
     return type;
   }
 
+  static bool _isVoidDynamic(DartType type) {
+    return type.isVoid || type.isDynamic;
+  }
+
   static bool _isVoidDynamicOrNull(DartType type) {
     return type.isVoid || type.isDynamic || type.isDartCoreNull;
   }
diff --git a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
index 659c51a..ad25164 100644
--- a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
+++ b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
@@ -25,6 +25,22 @@
   GatherUsedLocalElementsVisitor(this._enclosingLibrary);
 
   @override
+  visitAssignmentExpression(AssignmentExpression node) {
+    var element = node.staticElement;
+    if (element != null) {
+      usedElements.members.add(element);
+    }
+    super.visitAssignmentExpression(node);
+  }
+
+  @override
+  visitBinaryExpression(BinaryExpression node) {
+    var element = node.staticElement;
+    usedElements.members.add(element);
+    super.visitBinaryExpression(node);
+  }
+
+  @override
   visitCatchClause(CatchClause node) {
     SimpleIdentifier exceptionParameter = node.exceptionParameter;
     SimpleIdentifier stackTraceParameter = node.stackTraceParameter;
@@ -73,6 +89,13 @@
   }
 
   @override
+  visitIndexExpression(IndexExpression node) {
+    var element = node.staticElement;
+    usedElements.members.add(element);
+    super.visitIndexExpression(node);
+  }
+
+  @override
   visitMethodDeclaration(MethodDeclaration node) {
     ExecutableElement enclosingExecOld = _enclosingExec;
     try {
@@ -84,6 +107,20 @@
   }
 
   @override
+  visitPostfixExpression(PostfixExpression node) {
+    var element = node.staticElement;
+    usedElements.members.add(element);
+    super.visitPostfixExpression(node);
+  }
+
+  @override
+  visitPrefixExpression(PrefixExpression node) {
+    var element = node.staticElement;
+    usedElements.members.add(element);
+    super.visitPrefixExpression(node);
+  }
+
+  @override
   visitSimpleIdentifier(SimpleIdentifier node) {
     if (node.inDeclarationContext()) {
       return;
@@ -329,8 +366,8 @@
       if (enclosingElement is ClassElement &&
           enclosingElement.isPrivate &&
           element.isStatic) {
-        // Public static members of private classes and mixins are inaccessible
-        // from outside the library in which they are declared.
+        // Public static members of private classes are inaccessible from
+        // outside the library in which they are declared.
       } else if (enclosingElement is ExtensionElement &&
           enclosingElement.isPrivate) {
         // Public members of private extensions are inaccessible from outside
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 7062807..f158bd0 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -2901,10 +2901,15 @@
 /// Tracker for whether a `switch` statement has `default` or is on an
 /// enumeration, and all the enum constants are covered.
 class _SwitchExhaustiveness {
-  /// If the switch is on an enumeration, the set of all enum constants.
+  /// If the switch is on an enumeration, the set of enum constants to cover.
   /// Otherwise `null`.
   final Set<FieldElement> _enumConstants;
 
+  /// If the switch is on an enumeration, is `true` if the null value is
+  /// covered, because the switch expression type is non-nullable, or `null`
+  /// was covered explicitly.
+  bool _isNullEnumValueCovered = false;
+
   bool isExhaustive = false;
 
   factory _SwitchExhaustiveness(DartType expressionType) {
@@ -2913,22 +2918,28 @@
       if (enum_ is EnumElementImpl) {
         return _SwitchExhaustiveness._(
           enum_.constants.toSet(),
+          expressionType.nullabilitySuffix == NullabilitySuffix.none,
         );
       }
     }
-    return _SwitchExhaustiveness._(null);
+    return _SwitchExhaustiveness._(null, false);
   }
 
-  _SwitchExhaustiveness._(this._enumConstants);
+  _SwitchExhaustiveness._(this._enumConstants, this._isNullEnumValueCovered);
 
   void visitSwitchMember(SwitchMember node) {
     if (_enumConstants != null && node is SwitchCase) {
       var element = _referencedElement(node.expression);
       if (element is PropertyAccessorElement) {
         _enumConstants.remove(element.variable);
-        if (_enumConstants.isEmpty) {
-          isExhaustive = true;
-        }
+      }
+
+      if (node.expression is NullLiteral) {
+        _isNullEnumValueCovered = true;
+      }
+
+      if (_enumConstants.isEmpty && _isNullEnumValueCovered) {
+        isExhaustive = true;
       }
     } else if (node is SwitchDefault) {
       isExhaustive = true;
diff --git a/pkg/analyzer/lib/src/generated/sdk.dart b/pkg/analyzer/lib/src/generated/sdk.dart
index e07e96e..0aaabce 100644
--- a/pkg/analyzer/lib/src/generated/sdk.dart
+++ b/pkg/analyzer/lib/src/generated/sdk.dart
@@ -10,7 +10,6 @@
     show AnalysisContext, AnalysisOptions;
 import 'package:analyzer/src/generated/source.dart' show Source;
 import 'package:analyzer/src/generated/utilities_general.dart';
-import 'package:analyzer/src/summary/idl.dart' show PackageBundle;
 
 /**
  * A Dart SDK installed in a specified location.
@@ -42,6 +41,10 @@
    */
   static const String DEFAULT_VERSION = "0";
 
+  /// Return the content of the `allowed_experiments.json` file, or `null`
+  /// if the file cannot be read, e.g. does not exist.
+  String get allowedExperimentsJson;
+
   /**
    * Return the analysis context used for all of the sources in this [DartSdk].
    */
@@ -71,14 +74,6 @@
   Source fromFileUri(Uri uri);
 
   /**
-   * Return the linked [PackageBundle] for this SDK, if it can be provided, or
-   * `null` otherwise.
-   *
-   * This is a temporary API, don't use it.
-   */
-  PackageBundle getLinkedBundle();
-
-  /**
    * Return the library representing the library with the given 'dart:' [uri],
    * or `null` if the given URI does not denote a library in this SDK.
    */
diff --git a/pkg/analyzer/lib/src/generated/type_system.dart b/pkg/analyzer/lib/src/generated/type_system.dart
index 4254750..7fd31c8 100644
--- a/pkg/analyzer/lib/src/generated/type_system.dart
+++ b/pkg/analyzer/lib/src/generated/type_system.dart
@@ -655,6 +655,11 @@
       }
     }
 
+    // futureValueType(`dynamic`) = `dynamic`.
+    if (identical(T, DynamicTypeImpl.instance)) {
+      return T;
+    }
+
     // futureValueType(`void`) = `void`.
     if (identical(T, VoidTypeImpl.instance)) {
       return T;
diff --git a/pkg/analyzer/lib/src/summary/format.dart b/pkg/analyzer/lib/src/summary/format.dart
index 7a1bfcd..257823f 100644
--- a/pkg/analyzer/lib/src/summary/format.dart
+++ b/pkg/analyzer/lib/src/summary/format.dart
@@ -17444,6 +17444,7 @@
     with _PackageBundleMixin
     implements idl.PackageBundle {
   LinkedNodeBundleBuilder _bundle2;
+  PackageBundleSdkBuilder _sdk;
 
   @override
   LinkedNodeBundleBuilder get bundle2 => _bundle2;
@@ -17453,17 +17454,31 @@
     this._bundle2 = value;
   }
 
-  PackageBundleBuilder({LinkedNodeBundleBuilder bundle2}) : _bundle2 = bundle2;
+  @override
+  PackageBundleSdkBuilder get sdk => _sdk;
+
+  /// The SDK specific data, if this bundle is for SDK.
+  set sdk(PackageBundleSdkBuilder value) {
+    this._sdk = value;
+  }
+
+  PackageBundleBuilder(
+      {LinkedNodeBundleBuilder bundle2, PackageBundleSdkBuilder sdk})
+      : _bundle2 = bundle2,
+        _sdk = sdk;
 
   /// Flush [informative] data recursively.
   void flushInformative() {
     _bundle2?.flushInformative();
+    _sdk?.flushInformative();
   }
 
   /// Accumulate non-[informative] data into [signature].
   void collectApiSignature(api_sig.ApiSignature signature) {
     signature.addBool(this._bundle2 != null);
     this._bundle2?.collectApiSignature(signature);
+    signature.addBool(this._sdk != null);
+    this._sdk?.collectApiSignature(signature);
   }
 
   List<int> toBuffer() {
@@ -17473,13 +17488,20 @@
 
   fb.Offset finish(fb.Builder fbBuilder) {
     fb.Offset offset_bundle2;
+    fb.Offset offset_sdk;
     if (_bundle2 != null) {
       offset_bundle2 = _bundle2.finish(fbBuilder);
     }
+    if (_sdk != null) {
+      offset_sdk = _sdk.finish(fbBuilder);
+    }
     fbBuilder.startTable();
     if (offset_bundle2 != null) {
       fbBuilder.addOffset(0, offset_bundle2);
     }
+    if (offset_sdk != null) {
+      fbBuilder.addOffset(1, offset_sdk);
+    }
     return fbBuilder.endTable();
   }
 }
@@ -17506,6 +17528,7 @@
   _PackageBundleImpl(this._bc, this._bcOffset);
 
   idl.LinkedNodeBundle _bundle2;
+  idl.PackageBundleSdk _sdk;
 
   @override
   idl.LinkedNodeBundle get bundle2 {
@@ -17513,6 +17536,12 @@
         const _LinkedNodeBundleReader().vTableGet(_bc, _bcOffset, 0, null);
     return _bundle2;
   }
+
+  @override
+  idl.PackageBundleSdk get sdk {
+    _sdk ??= const _PackageBundleSdkReader().vTableGet(_bc, _bcOffset, 1, null);
+    return _sdk;
+  }
 }
 
 abstract class _PackageBundleMixin implements idl.PackageBundle {
@@ -17522,12 +17551,99 @@
     if (bundle2 != null) {
       _result["bundle2"] = bundle2.toJson();
     }
+    if (sdk != null) {
+      _result["sdk"] = sdk.toJson();
+    }
     return _result;
   }
 
   @override
   Map<String, Object> toMap() => {
         "bundle2": bundle2,
+        "sdk": sdk,
+      };
+
+  @override
+  String toString() => convert.json.encode(toJson());
+}
+
+class PackageBundleSdkBuilder extends Object
+    with _PackageBundleSdkMixin
+    implements idl.PackageBundleSdk {
+  String _allowedExperimentsJson;
+
+  @override
+  String get allowedExperimentsJson => _allowedExperimentsJson ??= '';
+
+  /// The content of the `allowed_experiments.json` from SDK.
+  set allowedExperimentsJson(String value) {
+    this._allowedExperimentsJson = value;
+  }
+
+  PackageBundleSdkBuilder({String allowedExperimentsJson})
+      : _allowedExperimentsJson = allowedExperimentsJson;
+
+  /// Flush [informative] data recursively.
+  void flushInformative() {}
+
+  /// Accumulate non-[informative] data into [signature].
+  void collectApiSignature(api_sig.ApiSignature signature) {
+    signature.addString(this._allowedExperimentsJson ?? '');
+  }
+
+  fb.Offset finish(fb.Builder fbBuilder) {
+    fb.Offset offset_allowedExperimentsJson;
+    if (_allowedExperimentsJson != null) {
+      offset_allowedExperimentsJson =
+          fbBuilder.writeString(_allowedExperimentsJson);
+    }
+    fbBuilder.startTable();
+    if (offset_allowedExperimentsJson != null) {
+      fbBuilder.addOffset(0, offset_allowedExperimentsJson);
+    }
+    return fbBuilder.endTable();
+  }
+}
+
+class _PackageBundleSdkReader extends fb.TableReader<_PackageBundleSdkImpl> {
+  const _PackageBundleSdkReader();
+
+  @override
+  _PackageBundleSdkImpl createObject(fb.BufferContext bc, int offset) =>
+      _PackageBundleSdkImpl(bc, offset);
+}
+
+class _PackageBundleSdkImpl extends Object
+    with _PackageBundleSdkMixin
+    implements idl.PackageBundleSdk {
+  final fb.BufferContext _bc;
+  final int _bcOffset;
+
+  _PackageBundleSdkImpl(this._bc, this._bcOffset);
+
+  String _allowedExperimentsJson;
+
+  @override
+  String get allowedExperimentsJson {
+    _allowedExperimentsJson ??=
+        const fb.StringReader().vTableGet(_bc, _bcOffset, 0, '');
+    return _allowedExperimentsJson;
+  }
+}
+
+abstract class _PackageBundleSdkMixin implements idl.PackageBundleSdk {
+  @override
+  Map<String, Object> toJson() {
+    Map<String, Object> _result = <String, Object>{};
+    if (allowedExperimentsJson != '') {
+      _result["allowedExperimentsJson"] = allowedExperimentsJson;
+    }
+    return _result;
+  }
+
+  @override
+  Map<String, Object> toMap() => {
+        "allowedExperimentsJson": allowedExperimentsJson,
       };
 
   @override
@@ -19565,10 +19681,10 @@
   List<UnlinkedNamespaceDirectiveBuilder> _exports;
   bool _hasLibraryDirective;
   bool _hasPartOfDirective;
-  String _partOfUri;
   List<UnlinkedNamespaceDirectiveBuilder> _imports;
   List<UnlinkedInformativeDataBuilder> _informativeData;
   List<int> _lineStarts;
+  String _partOfUri;
   List<String> _parts;
 
   @override
@@ -19607,14 +19723,6 @@
   }
 
   @override
-  String get partOfUri => _partOfUri ??= '';
-
-  /// URI of the `part of` directive.
-  set partOfUri(String value) {
-    this._partOfUri = value;
-  }
-
-  @override
   List<UnlinkedNamespaceDirectiveBuilder> get imports =>
       _imports ??= <UnlinkedNamespaceDirectiveBuilder>[];
 
@@ -19641,6 +19749,14 @@
   }
 
   @override
+  String get partOfUri => _partOfUri ??= '';
+
+  /// URI of the `part of` directive.
+  set partOfUri(String value) {
+    this._partOfUri = value;
+  }
+
+  @override
   List<String> get parts => _parts ??= <String>[];
 
   /// URIs of `part` directives.
@@ -19653,19 +19769,19 @@
       List<UnlinkedNamespaceDirectiveBuilder> exports,
       bool hasLibraryDirective,
       bool hasPartOfDirective,
-      String partOfUri,
       List<UnlinkedNamespaceDirectiveBuilder> imports,
       List<UnlinkedInformativeDataBuilder> informativeData,
       List<int> lineStarts,
+      String partOfUri,
       List<String> parts})
       : _apiSignature = apiSignature,
         _exports = exports,
         _hasLibraryDirective = hasLibraryDirective,
         _hasPartOfDirective = hasPartOfDirective,
-        _partOfUri = partOfUri,
         _imports = imports,
         _informativeData = informativeData,
         _lineStarts = lineStarts,
+        _partOfUri = partOfUri,
         _parts = parts;
 
   /// Flush [informative] data recursively.
@@ -19731,10 +19847,10 @@
   fb.Offset finish(fb.Builder fbBuilder) {
     fb.Offset offset_apiSignature;
     fb.Offset offset_exports;
-    fb.Offset offset_partOfUri;
     fb.Offset offset_imports;
     fb.Offset offset_informativeData;
     fb.Offset offset_lineStarts;
+    fb.Offset offset_partOfUri;
     fb.Offset offset_parts;
     if (!(_apiSignature == null || _apiSignature.isEmpty)) {
       offset_apiSignature = fbBuilder.writeListUint32(_apiSignature);
@@ -19743,9 +19859,6 @@
       offset_exports = fbBuilder
           .writeList(_exports.map((b) => b.finish(fbBuilder)).toList());
     }
-    if (_partOfUri != null) {
-      offset_partOfUri = fbBuilder.writeString(_partOfUri);
-    }
     if (!(_imports == null || _imports.isEmpty)) {
       offset_imports = fbBuilder
           .writeList(_imports.map((b) => b.finish(fbBuilder)).toList());
@@ -19757,6 +19870,9 @@
     if (!(_lineStarts == null || _lineStarts.isEmpty)) {
       offset_lineStarts = fbBuilder.writeListUint32(_lineStarts);
     }
+    if (_partOfUri != null) {
+      offset_partOfUri = fbBuilder.writeString(_partOfUri);
+    }
     if (!(_parts == null || _parts.isEmpty)) {
       offset_parts = fbBuilder
           .writeList(_parts.map((b) => fbBuilder.writeString(b)).toList());
@@ -19774,9 +19890,6 @@
     if (_hasPartOfDirective == true) {
       fbBuilder.addBool(3, true);
     }
-    if (offset_partOfUri != null) {
-      fbBuilder.addOffset(8, offset_partOfUri);
-    }
     if (offset_imports != null) {
       fbBuilder.addOffset(2, offset_imports);
     }
@@ -19786,6 +19899,9 @@
     if (offset_lineStarts != null) {
       fbBuilder.addOffset(5, offset_lineStarts);
     }
+    if (offset_partOfUri != null) {
+      fbBuilder.addOffset(8, offset_partOfUri);
+    }
     if (offset_parts != null) {
       fbBuilder.addOffset(4, offset_parts);
     }
@@ -19818,10 +19934,10 @@
   List<idl.UnlinkedNamespaceDirective> _exports;
   bool _hasLibraryDirective;
   bool _hasPartOfDirective;
-  String _partOfUri;
   List<idl.UnlinkedNamespaceDirective> _imports;
   List<idl.UnlinkedInformativeData> _informativeData;
   List<int> _lineStarts;
+  String _partOfUri;
   List<String> _parts;
 
   @override
@@ -19854,12 +19970,6 @@
   }
 
   @override
-  String get partOfUri {
-    _partOfUri ??= const fb.StringReader().vTableGet(_bc, _bcOffset, 8, '');
-    return _partOfUri;
-  }
-
-  @override
   List<idl.UnlinkedNamespaceDirective> get imports {
     _imports ??= const fb.ListReader<idl.UnlinkedNamespaceDirective>(
             _UnlinkedNamespaceDirectiveReader())
@@ -19883,6 +19993,12 @@
   }
 
   @override
+  String get partOfUri {
+    _partOfUri ??= const fb.StringReader().vTableGet(_bc, _bcOffset, 8, '');
+    return _partOfUri;
+  }
+
+  @override
   List<String> get parts {
     _parts ??= const fb.ListReader<String>(fb.StringReader())
         .vTableGet(_bc, _bcOffset, 4, const <String>[]);
@@ -19906,9 +20022,6 @@
     if (hasPartOfDirective != false) {
       _result["hasPartOfDirective"] = hasPartOfDirective;
     }
-    if (partOfUri != '') {
-      _result["partOfUri"] = partOfUri;
-    }
     if (imports.isNotEmpty) {
       _result["imports"] = imports.map((_value) => _value.toJson()).toList();
     }
@@ -19919,6 +20032,9 @@
     if (lineStarts.isNotEmpty) {
       _result["lineStarts"] = lineStarts;
     }
+    if (partOfUri != '') {
+      _result["partOfUri"] = partOfUri;
+    }
     if (parts.isNotEmpty) {
       _result["parts"] = parts;
     }
@@ -19931,10 +20047,10 @@
         "exports": exports,
         "hasLibraryDirective": hasLibraryDirective,
         "hasPartOfDirective": hasPartOfDirective,
-        "partOfUri": partOfUri,
         "imports": imports,
         "informativeData": informativeData,
         "lineStarts": lineStarts,
+        "partOfUri": partOfUri,
         "parts": parts,
       };
 
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index 9c222aa..3455b9f 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -1253,6 +1253,15 @@
 table PackageBundle {
   /// The version 2 of the summary.
   bundle2:LinkedNodeBundle (id: 0);
+
+  /// The SDK specific data, if this bundle is for SDK.
+  sdk:PackageBundleSdk (id: 1);
+}
+
+/// Summary information about a package.
+table PackageBundleSdk {
+  /// The content of the `allowed_experiments.json` from SDK.
+  allowedExperimentsJson:string (id: 0);
 }
 
 /// Summary information about a top-level type inference error.
@@ -1335,9 +1344,6 @@
   /// Is `true` if the unit contains a `part of` directive.
   hasPartOfDirective:bool (id: 3);
 
-  /// URI of the `part of` directive.
-  partOfUri:string (id: 8);
-
   /// URIs of `import` directives.
   imports:[UnlinkedNamespaceDirective] (id: 2);
 
@@ -1346,6 +1352,9 @@
   /// Offsets of the first character of each line in the source code.
   lineStarts:[uint] (id: 5);
 
+  /// URI of the `part of` directive.
+  partOfUri:string (id: 8);
+
   /// URIs of `part` directives.
   parts:[string] (id: 4);
 }
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index 178754b8..c7f6e2b 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -1888,6 +1888,17 @@
   /// The version 2 of the summary.
   @Id(0)
   LinkedNodeBundle get bundle2;
+
+  /// The SDK specific data, if this bundle is for SDK.
+  @Id(1)
+  PackageBundleSdk get sdk;
+}
+
+/// Summary information about a package.
+abstract class PackageBundleSdk extends base.SummaryClass {
+  /// The content of the `allowed_experiments.json` from SDK.
+  @Id(0)
+  String get allowedExperimentsJson;
 }
 
 /// Summary information about a top-level type inference error.
@@ -2244,10 +2255,6 @@
   @Id(3)
   bool get hasPartOfDirective;
 
-  /// URI of the `part of` directive.
-  @Id(8)
-  String get partOfUri;
-
   /// URIs of `import` directives.
   @Id(2)
   List<UnlinkedNamespaceDirective> get imports;
@@ -2260,6 +2267,10 @@
   @Id(5)
   List<int> get lineStarts;
 
+  /// URI of the `part of` directive.
+  @Id(8)
+  String get partOfUri;
+
   /// URIs of `part` directives.
   @Id(4)
   List<String> get parts;
diff --git a/pkg/analyzer/lib/src/summary/summary_file_builder.dart b/pkg/analyzer/lib/src/summary/summary_file_builder.dart
index 461f6d3..476987e 100644
--- a/pkg/analyzer/lib/src/summary/summary_file_builder.dart
+++ b/pkg/analyzer/lib/src/summary/summary_file_builder.dart
@@ -4,6 +4,7 @@
 
 import 'dart:collection';
 
+import 'package:_fe_analyzer_shared/src/sdk/allowed_experiments.dart';
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/analysis/utilities.dart';
 import 'package:analyzer/dart/ast/ast.dart';
@@ -14,70 +15,150 @@
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/summarize_elements.dart';
 import 'package:analyzer/src/summary2/link.dart' as summary2;
 import 'package:analyzer/src/summary2/linked_element_factory.dart' as summary2;
 import 'package:analyzer/src/summary2/reference.dart' as summary2;
 import 'package:meta/meta.dart';
 
+List<int> buildSdkSummary({
+  @required ResourceProvider resourceProvider,
+  @required String sdkPath,
+}) {
+  //
+  // Prepare SDK.
+  //
+  FolderBasedDartSdk sdk =
+      FolderBasedDartSdk(resourceProvider, resourceProvider.getFolder(sdkPath));
+  sdk.useSummary = false;
+  sdk.analysisOptions = AnalysisOptionsImpl();
+
+  //
+  // Prepare 'dart:' URIs to serialize.
+  //
+  Set<String> uriSet =
+      sdk.sdkLibraries.map((SdkLibrary library) => library.shortName).toSet();
+  // TODO(scheglov) Why do we need it?
+  uriSet.add('dart:html_common/html_common_dart2js.dart');
+
+  Set<Source> librarySources = HashSet<Source>();
+  for (String uri in uriSet) {
+    var source = sdk.mapDartUri(uri);
+    // TODO(scheglov) Fix the previous TODO and remove this check.
+    if (source != null) {
+      librarySources.add(source);
+    }
+  }
+
+  String allowedExperimentsJson;
+  try {
+    allowedExperimentsJson = sdk.directory
+        .getChildAssumingFolder('lib')
+        .getChildAssumingFolder('_internal')
+        .getChildAssumingFile('allowed_experiments.json')
+        .readAsStringSync();
+  } catch (_) {}
+
+  return _Builder(
+    sdk.context,
+    allowedExperimentsJson,
+    librarySources,
+  ).build();
+}
+
+@Deprecated('Use buildSdkSummary()')
 class SummaryBuilder {
-  final Iterable<Source> librarySources;
-  final AnalysisContext context;
+  final ResourceProvider resourceProvider;
+  final String sdkPath;
+
+  /// The list of SDK summaries, might also include Flutter libraries.
+  /// Used for backward compatibility with `build_resolvers`.
+  /// TODO(scheglov) Create a better API for this, and remove it.
+  Iterable<Source> _librarySources;
+
+  /// The formal analysis context.
+  /// Used for backward compatibility with `build_resolvers`.
+  /// TODO(scheglov) Remove it.
+  AnalysisContext _context;
 
   /**
    * Create a summary builder for these [librarySources] and [context].
    */
-  SummaryBuilder(this.librarySources, this.context);
+  SummaryBuilder(Iterable<Source> librarySources, AnalysisContext context)
+      : _librarySources = librarySources,
+        _context = context,
+        resourceProvider = PhysicalResourceProvider.INSTANCE,
+        sdkPath = null;
 
-  /**
-   * Create an SDK summary builder for the dart SDK at the given [sdkPath].
-   */
   factory SummaryBuilder.forSdk(String sdkPath) {
-    //
-    // Prepare SDK.
-    //
-    ResourceProvider resourceProvider = PhysicalResourceProvider.INSTANCE;
-    FolderBasedDartSdk sdk = FolderBasedDartSdk(
-        resourceProvider, resourceProvider.getFolder(sdkPath));
-    sdk.useSummary = false;
-    sdk.analysisOptions = AnalysisOptionsImpl();
-
-    //
-    // Prepare 'dart:' URIs to serialize.
-    //
-    Set<String> uriSet =
-        sdk.sdkLibraries.map((SdkLibrary library) => library.shortName).toSet();
-    uriSet.add('dart:html_common/html_common_dart2js.dart');
-
-    Set<Source> librarySources = HashSet<Source>();
-    for (String uri in uriSet) {
-      librarySources.add(sdk.mapDartUri(uri));
-    }
-
-    return SummaryBuilder(librarySources, sdk.context);
+    return SummaryBuilder.forSdk2(
+      resourceProvider: PhysicalResourceProvider.INSTANCE,
+      sdkPath: sdkPath,
+    );
   }
 
+  SummaryBuilder.forSdk2({
+    @required this.resourceProvider,
+    @required this.sdkPath,
+  });
+
   /**
    * Build the linked bundle and return its bytes.
    */
-  List<int> build({
-    @required FeatureSet featureSet,
-  }) {
-    return _Builder(context, featureSet, librarySources).build();
+  List<int> build({@deprecated FeatureSet featureSet}) {
+    if (_librarySources != null) {
+      return _build();
+    }
+
+    return buildSdkSummary(
+      resourceProvider: resourceProvider,
+      sdkPath: sdkPath,
+    );
+  }
+
+  /// The implementation that provides backward compatibility for
+  /// `build_resolvers`.
+  List<int> _build() {
+    var dartCorePath = _librarySources
+        .singleWhere((element) => '${element.uri}' == 'dart:core')
+        .fullName;
+    var sdkLib = resourceProvider.getFile(dartCorePath).parent.parent;
+
+    String allowedExperimentsJson;
+    try {
+      allowedExperimentsJson = sdkLib
+          .getChildAssumingFolder('_internal')
+          .getChildAssumingFile('allowed_experiments.json')
+          .readAsStringSync();
+    } catch (_) {}
+
+    return _Builder(
+      _context,
+      allowedExperimentsJson,
+      _librarySources,
+    ).build();
   }
 }
 
 class _Builder {
   final AnalysisContext context;
-  final FeatureSet featureSet;
+  final String allowedExperimentsJson;
   final Iterable<Source> librarySources;
 
   final Set<String> libraryUris = <String>{};
   final List<summary2.LinkInputLibrary> inputLibraries = [];
 
+  AllowedExperiments allowedExperiments;
   final PackageBundleAssembler bundleAssembler = PackageBundleAssembler();
 
-  _Builder(this.context, this.featureSet, this.librarySources);
+  _Builder(
+    this.context,
+    this.allowedExperimentsJson,
+    this.librarySources,
+  ) {
+    allowedExperiments = _parseAllowedExperiments(allowedExperimentsJson);
+  }
 
   /**
    * Build the linked bundle and return its bytes.
@@ -94,7 +175,12 @@
     var linkResult = summary2.link(elementFactory, inputLibraries);
     bundleAssembler.setBundle2(linkResult.bundle);
 
-    return bundleAssembler.assemble().toBuffer();
+    return PackageBundleBuilder(
+      bundle2: linkResult.bundle,
+      sdk: PackageBundleSdkBuilder(
+        allowedExperimentsJson: allowedExperimentsJson,
+      ),
+    ).toBuffer();
   }
 
   void _addLibrary(Source source) {
@@ -130,10 +216,23 @@
     );
   }
 
+  /// Return the [FeatureSet] for the given [uri], must be a `dart:` URI.
+  FeatureSet _featureSet(Uri uri) {
+    if (uri.isScheme('dart')) {
+      var pathSegments = uri.pathSegments;
+      if (pathSegments.isNotEmpty) {
+        var libraryName = pathSegments.first;
+        var experiments = allowedExperiments.forSdkLibrary(libraryName);
+        return FeatureSet.fromEnableFlags(experiments);
+      }
+    }
+    throw StateError('Expected a valid dart: URI: $uri');
+  }
+
   CompilationUnit _parse(Source source) {
     var result = parseString(
       content: source.contents.data,
-      featureSet: featureSet,
+      featureSet: _featureSet(source.uri),
       throwIfDiagnostics: false,
     );
 
@@ -149,4 +248,16 @@
 
     return result.unit;
   }
+
+  static AllowedExperiments _parseAllowedExperiments(String content) {
+    if (content == null) {
+      return AllowedExperiments(
+        sdkDefaultExperiments: [],
+        sdkLibraryExperiments: {},
+        packageExperiments: {},
+      );
+    }
+
+    return parseAllowedExperiments(content);
+  }
 }
diff --git a/pkg/analyzer/lib/src/summary/summary_sdk.dart b/pkg/analyzer/lib/src/summary/summary_sdk.dart
index f187419..15743d5 100644
--- a/pkg/analyzer/lib/src/summary/summary_sdk.dart
+++ b/pkg/analyzer/lib/src/summary/summary_sdk.dart
@@ -43,6 +43,11 @@
     _bundle = bundle;
   }
 
+  @override
+  String get allowedExperimentsJson {
+    return _bundle.sdk?.allowedExperimentsJson;
+  }
+
   /**
    * Return the [PackageBundle] for this SDK, not `null`.
    */
@@ -81,9 +86,6 @@
   }
 
   @override
-  PackageBundle getLinkedBundle() => _bundle;
-
-  @override
   SdkLibrary getSdkLibrary(String uri) {
     // This is not quite correct, but currently it's used only in
     // to report errors on importing or exporting of internal libraries.
diff --git a/pkg/analyzer/lib/src/summary2/named_type_builder.dart b/pkg/analyzer/lib/src/summary2/named_type_builder.dart
index d89ed3c..654da0a 100644
--- a/pkg/analyzer/lib/src/summary2/named_type_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/named_type_builder.dart
@@ -99,7 +99,11 @@
         _type = _dynamicType;
       }
     } else if (element is NeverElementImpl) {
-      _type = NeverTypeImpl.instance.withNullability(nullabilitySuffix);
+      if (typeSystem.isNonNullableByDefault) {
+        _type = NeverTypeImpl.instance.withNullability(nullabilitySuffix);
+      } else {
+        _type = typeSystem.typeProvider.nullType;
+      }
     } else if (element is TypeParameterElement) {
       _type = TypeParameterTypeImpl(
         element: element,
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
index 2f1038a..712e057 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
@@ -2,15 +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.
 
-import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/src/context/context.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/summary/idl.dart' show PackageBundle;
-import 'package:analyzer/src/summary/summary_file_builder.dart';
 import 'package:meta/meta.dart';
 
 const String sdkRoot = '/sdk';
@@ -1067,7 +1064,7 @@
   'ffi': 'const LibraryInfo("ffi/ffi.dart")',
   'html': 'const LibraryInfo("html/dart2js/html_dart2js.dart")',
   'io': 'const LibraryInfo("io/io.dart")',
-  'isolate': 'const LibraryInfo("io/isolate.dart")',
+  'isolate': 'const LibraryInfo("isolate/isolate.dart")',
   'math': 'const LibraryInfo("math/math.dart")',
 };
 
@@ -1084,9 +1081,6 @@
   @override
   final List<SdkLibrary> sdkLibraries = [];
 
-  /// The cached linked bundle of the SDK.
-  PackageBundle _bundle;
-
   /// Optional [additionalLibraries] should have unique URIs, and paths in
   /// their units are relative (will be put into `sdkRoot/lib`).
   MockSdk({
@@ -1159,6 +1153,21 @@
   }
 
   @override
+  String get allowedExperimentsJson {
+    try {
+      var convertedRoot = resourceProvider.convertPath(sdkRoot);
+      return resourceProvider
+          .getFolder(convertedRoot)
+          .getChildAssumingFolder('lib')
+          .getChildAssumingFolder('_internal')
+          .getChildAssumingFile('allowed_experiments.json')
+          .readAsStringSync();
+    } catch (_) {
+      return null;
+    }
+  }
+
+  @override
   AnalysisContextImpl get context {
     if (_analysisContext == null) {
       var factory = SourceFactory([DartUriResolver(this)]);
@@ -1167,11 +1176,6 @@
     return _analysisContext;
   }
 
-  Folder get directory {
-    var convertedRoot = resourceProvider.convertPath(sdkRoot);
-    return resourceProvider.getFolder(convertedRoot);
-  }
-
   @override
   String get sdkVersion => throw UnimplementedError();
 
@@ -1215,22 +1219,6 @@
   }
 
   @override
-  PackageBundle getLinkedBundle() {
-    if (_bundle == null) {
-      File summaryFile = resourceProvider
-          .getFile(resourceProvider.convertPath('/lib/_internal/strong.sum'));
-      List<int> bytes;
-      if (summaryFile.exists) {
-        bytes = summaryFile.readAsBytesSync();
-      } else {
-        bytes = _computeLinkedBundleBytes();
-      }
-      _bundle = PackageBundle.fromBuffer(bytes);
-    }
-    return _bundle;
-  }
-
-  @override
   SdkLibrary getSdkLibrary(String dartUri) {
     for (SdkLibrary library in _LIBRARIES) {
       if (library.shortName == dartUri) {
@@ -1252,17 +1240,6 @@
     // table above.
     return null;
   }
-
-  /// Compute the bytes of the linked bundle associated with this SDK.
-  List<int> _computeLinkedBundleBytes() {
-    List<Source> librarySources = sdkLibraries
-        .map((SdkLibrary library) => mapDartUri(library.shortName))
-        .toList();
-    var featureSet = FeatureSet.fromEnableFlags(['non-nullable']);
-    return SummaryBuilder(librarySources, context).build(
-      featureSet: featureSet,
-    );
-  }
 }
 
 class MockSdkLibrary implements SdkLibrary {
diff --git a/pkg/analyzer/lib/src/workspace/bazel.dart b/pkg/analyzer/lib/src/workspace/bazel.dart
index 8f8065d..2b009b8 100644
--- a/pkg/analyzer/lib/src/workspace/bazel.dart
+++ b/pkg/analyzer/lib/src/workspace/bazel.dart
@@ -407,13 +407,6 @@
   ///
   /// If no "bin" folder is found in any of those locations, `null` is returned.
   static List<String> _findBinFolderPaths(Folder root) {
-    // This is a symlink to the real, singular "bin" folder, but it is the
-    // easiest and cheapest to search for.
-    Folder symlink = _firstExistingFolder(root, ['blaze-bin', 'bazel-bin']);
-    if (symlink != null) {
-      return [symlink.path];
-    }
-
     Folder out = _firstExistingFolder(root, ['blaze-out', 'bazel-out']);
     if (out == null) {
       return null;
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index a6c70c1..3786641 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 0.39.8
+version: 0.39.10
 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.6.0 <3.0.0'
 
 dependencies:
-  _fe_analyzer_shared: ^3.0.0
+  _fe_analyzer_shared: ^4.0.0
   args: ^1.0.0
   charcode: ^1.1.0
   collection: ^1.10.1
@@ -25,8 +25,9 @@
 dev_dependencies:
   analysis_tool:
     path: ../analysis_tool
+  linter: any
   matcher: ^0.12.3
-  pedantic: ^1.8.0
+  pedantic: ^1.9.0
   test: ^1.0.0
   test_api: ^0.2.6
   test_reflective_loader: ^0.1.8
diff --git a/pkg/analyzer/test/generated/compile_time_error_code.dart b/pkg/analyzer/test/generated/compile_time_error_code.dart
index 15aac0f..87521ae 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code.dart
@@ -116,25 +116,6 @@
     ]);
   }
 
-  test_builtInIdentifierAsMixinName_classTypeAlias() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B {}
-class as = A with B;
-''', [
-      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 28, 2),
-    ]);
-  }
-
-  test_builtInIdentifierAsPrefixName() async {
-    await assertErrorsInCode('''
-import 'dart:async' as abstract;
-''', [
-      error(HintCode.UNUSED_IMPORT, 7, 12),
-      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_PREFIX_NAME, 23, 8),
-    ]);
-  }
-
   test_builtInIdentifierAsType_formalParameter_field() async {
     await assertErrorsInCode(r'''
 class A {
@@ -167,31 +148,6 @@
     ]);
   }
 
-  test_builtInIdentifierAsTypedefName_functionTypeAlias() async {
-    await assertErrorsInCode('''
-typedef bool as();
-''', [
-      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 13, 2),
-    ]);
-  }
-
-  test_builtInIdentifierAsTypeName() async {
-    await assertErrorsInCode('''
-class as {}
-''', [
-      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 6, 2),
-    ]);
-  }
-
-  test_builtInIdentifierAsTypeParameterName() async {
-    await assertErrorsInCode('''
-class A<as> {}
-''', [
-      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME, 8,
-          2),
-    ]);
-  }
-
   test_conflictingGenericInterfaces_hierarchyLoop() async {
     // There is no interface conflict here, but there is a loop in the class
     // hierarchy leading to a finite set of implemented types; this loop
diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart
index 10a86d2..3ac63ba 100644
--- a/pkg/analyzer/test/generated/parser_fasta_test.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_test.dart
@@ -1648,21 +1648,6 @@
 
 @reflectiveTest
 class ExtensionMethodsParserTest_Fasta extends FastaParserTestCase {
-  @override
-  CompilationUnit parseCompilationUnit(String content,
-      {List<ErrorCode> codes,
-      List<ExpectedError> errors,
-      FeatureSet featureSet}) {
-    return super.parseCompilationUnit(content,
-        codes: codes,
-        errors: errors,
-        featureSet: featureSet ??
-            FeatureSet.forTesting(
-              sdkVersion: '2.3.0',
-              additionalFeatures: [Feature.extension_methods],
-            ));
-  }
-
   void test_complex_extends() {
     var unit = parseCompilationUnit(
         'extension E extends A with B, C implements D { }',
@@ -2723,28 +2708,6 @@
     parseCompilationUnit('D? foo(X? x) { X? x1; X? x2 = x; }');
   }
 
-  void test_bangQuestionIndex() {
-    // http://dartbug.com/41177
-    CompilationUnit unit = parseCompilationUnit('f(dynamic a) { a!?[0]; }');
-    FunctionDeclaration funct = unit.declarations[0];
-    BlockFunctionBody body = funct.functionExpression.body;
-
-    ExpressionStatement statement = body.block.statements[0];
-    IndexExpression expression = statement.expression;
-
-    IntegerLiteral index = expression.index;
-    expect(index.value, 0);
-
-    Token question = expression.question;
-    expect(question, isNotNull);
-    expect(question.lexeme, "?");
-
-    PostfixExpression target = expression.target;
-    SimpleIdentifier identifier = target.operand;
-    expect(identifier.name, 'a');
-    expect(target.operator.lexeme, '!');
-  }
-
   void test_bangBeforeFuctionCall1() {
     // https://github.com/dart-lang/sdk/issues/39776
     var unit = parseCompilationUnit('f() { Function? f1; f1!(42); }');
@@ -2797,6 +2760,28 @@
     expect(argument.value, 42);
   }
 
+  void test_bangQuestionIndex() {
+    // http://dartbug.com/41177
+    CompilationUnit unit = parseCompilationUnit('f(dynamic a) { a!?[0]; }');
+    FunctionDeclaration funct = unit.declarations[0];
+    BlockFunctionBody body = funct.functionExpression.body;
+
+    ExpressionStatement statement = body.block.statements[0];
+    IndexExpression expression = statement.expression;
+
+    IntegerLiteral index = expression.index;
+    expect(index.value, 0);
+
+    Token question = expression.question;
+    expect(question, isNotNull);
+    expect(question.lexeme, "?");
+
+    PostfixExpression target = expression.target;
+    SimpleIdentifier identifier = target.operand;
+    expect(identifier.name, 'a');
+    expect(target.operator.lexeme, '!');
+  }
+
   void test_binary_expression_statement() {
     final unit = parseCompilationUnit('D? foo(X? x) { X ?? x2; }');
     FunctionDeclaration funct = unit.declarations[0];
diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart
index 8dfca61..fc60ff0d 100644
--- a/pkg/analyzer/test/src/dart/analysis/index_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart
@@ -5,12 +5,10 @@
 import 'dart:async';
 import 'dart:convert';
 
-import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/analysis/index.dart';
-import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/test_utilities/find_node.dart';
@@ -22,7 +20,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(IndexTest);
-    defineReflectiveTests(IndexWithExtensionMethodsTest);
   });
 }
 
@@ -293,6 +290,60 @@
       ..isInvokedAt('foo(); // nq', false);
   }
 
+  test_isInvokedBy_MethodElement_ofNamedExtension_instance() async {
+    await _indexTestUnit('''
+extension E on int {
+  void foo() {}
+}
+
+main() {
+  0.foo();
+}
+''');
+    MethodElement element = findElement('foo');
+    assertThat(element)..isInvokedAt('foo();', true);
+  }
+
+  test_isInvokedBy_MethodElement_ofNamedExtension_static() async {
+    await _indexTestUnit('''
+extension E on int {
+  static void foo() {}
+}
+
+main() {
+  E.foo();
+}
+''');
+    MethodElement element = findElement('foo');
+    assertThat(element)..isInvokedAt('foo();', true);
+  }
+
+  test_isInvokedBy_MethodElement_ofUnnamedExtension_instance() async {
+    await _indexTestUnit('''
+extension on int {
+  void foo() {} // int
+}
+
+extension on double {
+  void foo() {} // double
+}
+
+main() {
+  0.foo(); // int ref
+  (1.2).foo(); // double ref
+}
+''');
+    var findNode = FindNode(testCode, testUnit);
+
+    var intMethod = findNode.methodDeclaration('foo() {} // int');
+    assertThat(intMethod.declaredElement)
+      ..isInvokedAt('foo(); // int ref', true);
+
+    var doubleMethod = findNode.methodDeclaration('foo() {} // double');
+    assertThat(doubleMethod.declaredElement)
+      ..isInvokedAt('foo(); // double ref', true);
+  }
+
   test_isInvokedBy_MethodElement_propagatedType() async {
     await _indexTestUnit('''
 class A {
@@ -460,6 +511,16 @@
       ..isReferencedAt('A.field); // 3', false);
   }
 
+  test_isReferencedBy_ClassElement_fromExtension() async {
+    await _indexTestUnit('''
+class A<T> {}
+
+extension E on A<int> {}
+''');
+    ClassElement element = findElement('A');
+    assertThat(element)..isReferencedAt('A<int>', false);
+  }
+
   test_isReferencedBy_ClassElement_invocation() async {
     await _indexTestUnit('''
 class A {}
@@ -676,6 +737,20 @@
     expect(index.usedElementOffsets, isEmpty);
   }
 
+  test_isReferencedBy_ExtensionElement() async {
+    await _indexTestUnit('''
+extension E on int {
+  void foo() {}
+}
+
+main() {
+  E(0).foo();
+}
+''');
+    ExtensionElement element = findElement('E');
+    assertThat(element)..isReferencedAt('E(0).foo()', false);
+  }
+
   test_isReferencedBy_FieldElement() async {
     await _indexTestUnit('''
 class A {
@@ -980,6 +1055,78 @@
       ..isReferencedAt('1); // 2', true, length: 0);
   }
 
+  test_isReferencedBy_PropertyAccessor_ofNamedExtension_instance() async {
+    await _indexTestUnit('''
+extension E on int {
+  int get foo => 0;
+  void set foo(int _) {}
+}
+
+main() {
+  0.foo;
+  0.foo = 0;
+}
+''');
+    PropertyAccessorElement getter = findElement('foo', ElementKind.GETTER);
+    PropertyAccessorElement setter = findElement('foo=');
+    assertThat(getter)..isReferencedAt('foo;', true);
+    assertThat(setter)..isReferencedAt('foo = 0;', true);
+  }
+
+  test_isReferencedBy_PropertyAccessor_ofNamedExtension_static() async {
+    await _indexTestUnit('''
+extension E on int {
+  static int get foo => 0;
+  static void set foo(int _) {}
+}
+
+main() {
+  0.foo;
+  0.foo = 0;
+}
+''');
+    PropertyAccessorElement getter = findElement('foo', ElementKind.GETTER);
+    PropertyAccessorElement setter = findElement('foo=');
+    assertThat(getter)..isReferencedAt('foo;', true);
+    assertThat(setter)..isReferencedAt('foo = 0;', true);
+  }
+
+  test_isReferencedBy_PropertyAccessor_ofUnnamedExtension_instance() async {
+    await _indexTestUnit('''
+extension on int {
+  int get foo => 0; // int getter
+  void set foo(int _) {} // int setter
+}
+
+extension on double {
+  int get foo => 0; // double getter
+  void set foo(int _) {} // double setter
+}
+
+main() {
+  0.foo; // int getter ref
+  0.foo = 0; // int setter ref
+  (1.2).foo; // double getter ref
+  (1.2).foo = 0; // double setter ref
+}
+''');
+    var findNode = FindNode(testCode, testUnit);
+
+    var intGetter = findNode.methodDeclaration('0; // int getter');
+    var intSetter = findNode.methodDeclaration('{} // int setter');
+    assertThat(intGetter.declaredElement)
+      ..isReferencedAt('foo; // int getter ref', true);
+    assertThat(intSetter.declaredElement)
+      ..isReferencedAt('foo = 0; // int setter ref', true);
+
+    var doubleGetter = findNode.methodDeclaration('0; // double getter');
+    var doubleSetter = findNode.methodDeclaration('{} // double setter');
+    assertThat(doubleGetter.declaredElement)
+      ..isReferencedAt('foo; // double getter ref', true);
+    assertThat(doubleSetter.declaredElement)
+      ..isReferencedAt('foo = 0; // double setter ref', true);
+  }
+
   test_isReferencedBy_synthetic_leastUpperBound() async {
     await _indexTestUnit('''
 int f1({int p}) => 1;
@@ -1423,164 +1570,6 @@
   }
 }
 
-@reflectiveTest
-class IndexWithExtensionMethodsTest extends IndexTest {
-  @override
-  AnalysisOptionsImpl createAnalysisOptions() => AnalysisOptionsImpl()
-    ..contextFeatures = FeatureSet.forTesting(
-        sdkVersion: '2.3.0', additionalFeatures: [Feature.extension_methods]);
-
-  test_isInvokedBy_MethodElement_ofNamedExtension_instance() async {
-    await _indexTestUnit('''
-extension E on int {
-  void foo() {}
-}
-
-main() {
-  0.foo();
-}
-''');
-    MethodElement element = findElement('foo');
-    assertThat(element)..isInvokedAt('foo();', true);
-  }
-
-  test_isInvokedBy_MethodElement_ofNamedExtension_static() async {
-    await _indexTestUnit('''
-extension E on int {
-  static void foo() {}
-}
-
-main() {
-  E.foo();
-}
-''');
-    MethodElement element = findElement('foo');
-    assertThat(element)..isInvokedAt('foo();', true);
-  }
-
-  test_isInvokedBy_MethodElement_ofUnnamedExtension_instance() async {
-    await _indexTestUnit('''
-extension on int {
-  void foo() {} // int
-}
-
-extension on double {
-  void foo() {} // double
-}
-
-main() {
-  0.foo(); // int ref
-  (1.2).foo(); // double ref
-}
-''');
-    var findNode = FindNode(testCode, testUnit);
-
-    var intMethod = findNode.methodDeclaration('foo() {} // int');
-    assertThat(intMethod.declaredElement)
-      ..isInvokedAt('foo(); // int ref', true);
-
-    var doubleMethod = findNode.methodDeclaration('foo() {} // double');
-    assertThat(doubleMethod.declaredElement)
-      ..isInvokedAt('foo(); // double ref', true);
-  }
-
-  test_isReferencedBy_ClassElement_fromExtension() async {
-    await _indexTestUnit('''
-class A<T> {}
-
-extension E on A<int> {}
-''');
-    ClassElement element = findElement('A');
-    assertThat(element)..isReferencedAt('A<int>', false);
-  }
-
-  test_isReferencedBy_ExtensionElement() async {
-    await _indexTestUnit('''
-extension E on int {
-  void foo() {}
-}
-
-main() {
-  E(0).foo();
-}
-''');
-    ExtensionElement element = findElement('E');
-    assertThat(element)..isReferencedAt('E(0).foo()', false);
-  }
-
-  test_isReferencedBy_PropertyAccessor_ofNamedExtension_instance() async {
-    await _indexTestUnit('''
-extension E on int {
-  int get foo => 0;
-  void set foo(int _) {}
-}
-
-main() {
-  0.foo;
-  0.foo = 0;
-}
-''');
-    PropertyAccessorElement getter = findElement('foo', ElementKind.GETTER);
-    PropertyAccessorElement setter = findElement('foo=');
-    assertThat(getter)..isReferencedAt('foo;', true);
-    assertThat(setter)..isReferencedAt('foo = 0;', true);
-  }
-
-  test_isReferencedBy_PropertyAccessor_ofNamedExtension_static() async {
-    await _indexTestUnit('''
-extension E on int {
-  static int get foo => 0;
-  static void set foo(int _) {}
-}
-
-main() {
-  0.foo;
-  0.foo = 0;
-}
-''');
-    PropertyAccessorElement getter = findElement('foo', ElementKind.GETTER);
-    PropertyAccessorElement setter = findElement('foo=');
-    assertThat(getter)..isReferencedAt('foo;', true);
-    assertThat(setter)..isReferencedAt('foo = 0;', true);
-  }
-
-  test_isReferencedBy_PropertyAccessor_ofUnnamedExtension_instance() async {
-    await _indexTestUnit('''
-extension on int {
-  int get foo => 0; // int getter
-  void set foo(int _) {} // int setter
-}
-
-extension on double {
-  int get foo => 0; // double getter
-  void set foo(int _) {} // double setter
-}
-
-main() {
-  0.foo; // int getter ref
-  0.foo = 0; // int setter ref
-  (1.2).foo; // double getter ref
-  (1.2).foo = 0; // double setter ref
-}
-''');
-    var findNode = FindNode(testCode, testUnit);
-
-    var intGetter = findNode.methodDeclaration('0; // int getter');
-    var intSetter = findNode.methodDeclaration('{} // int setter');
-    assertThat(intGetter.declaredElement)
-      ..isReferencedAt('foo; // int getter ref', true);
-    assertThat(intSetter.declaredElement)
-      ..isReferencedAt('foo = 0; // int setter ref', true);
-
-    var doubleGetter = findNode.methodDeclaration('0; // double getter');
-    var doubleSetter = findNode.methodDeclaration('{} // double setter');
-    assertThat(doubleGetter.declaredElement)
-      ..isReferencedAt('foo; // double getter ref', true);
-    assertThat(doubleSetter.declaredElement)
-      ..isReferencedAt('foo = 0; // double setter ref', true);
-  }
-}
-
 class _ElementIndexAssert {
   final IndexTest test;
   final Element element;
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index c5d0487..47d262f 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -21,7 +21,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SearchTest);
-    defineReflectiveTests(SearchWithExtensionMethodsTest);
     defineReflectiveTests(SearchWithNnbdTest);
   });
 }
@@ -395,6 +394,27 @@
     await _verifyReferences(element, expected);
   }
 
+  test_searchReferences_ExtensionElement() async {
+    await _resolveTestUnit('''
+extension E on int {
+  void foo() {}
+  static void bar() {}
+}
+
+main() {
+  E(0).foo();
+  E.bar();
+}
+''');
+    var element = findElement.extension_('E');
+    var main = findElement.function('main');
+    var expected = [
+      _expectId(main, SearchResultKind.REFERENCE, 'E(0)'),
+      _expectId(main, SearchResultKind.REFERENCE, 'E.bar()'),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
   test_searchReferences_FieldElement() async {
     await _resolveTestUnit('''
 class A {
@@ -828,6 +848,70 @@
     await _verifyReferences(foo, expected);
   }
 
+  test_searchReferences_MethodElement_ofExtension_instance() async {
+    await _resolveTestUnit('''
+extension E on int {
+  void foo() {}
+
+  void bar() {
+    foo(); // 1
+    this.foo(); // 2
+    foo; // 3
+    this.foo; // 4
+  }
+}
+
+main() {
+  E(0).foo(); // 5
+  0.foo(); // 6
+  E(0).foo; // 7
+  0.foo; // 8
+}
+''');
+    var element = findElement.method('foo');
+    var bar = findElement.method('bar');
+    var main = findElement.function('main');
+    var expected = [
+      _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
+      _expectIdQ(bar, SearchResultKind.INVOCATION, 'foo(); // 2'),
+      _expectId(bar, SearchResultKind.REFERENCE, 'foo; // 3'),
+      _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo; // 4'),
+      _expectIdQ(main, SearchResultKind.INVOCATION, 'foo(); // 5'),
+      _expectIdQ(main, SearchResultKind.INVOCATION, 'foo(); // 6'),
+      _expectIdQ(main, SearchResultKind.REFERENCE, 'foo; // 7'),
+      _expectIdQ(main, SearchResultKind.REFERENCE, 'foo; // 8'),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
+  test_searchReferences_MethodElement_ofExtension_static() async {
+    await _resolveTestUnit('''
+extension E on int {
+  static void foo() {}
+
+  static void bar() {
+    foo(); // 1
+    foo; // 2
+  }
+}
+
+main() {
+  E.foo(); // 3
+  E.foo; // 4
+}
+''');
+    var element = findElement.method('foo');
+    var bar = findElement.method('bar');
+    var main = findElement.function('main');
+    var expected = [
+      _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
+      _expectId(bar, SearchResultKind.REFERENCE, 'foo; // 2'),
+      _expectIdQ(main, SearchResultKind.INVOCATION, 'foo(); // 3'),
+      _expectIdQ(main, SearchResultKind.REFERENCE, 'foo; // 4'),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
   test_searchReferences_MethodMember_class() async {
     await _resolveTestUnit('''
 class A<T> {
@@ -1165,6 +1249,62 @@
     await _verifyReferences(element, expected);
   }
 
+  test_searchReferences_PropertyAccessor_getter_ofExtension_instance() async {
+    await _resolveTestUnit('''
+extension E on int {
+  int get foo => 0;
+
+  void bar() {
+    foo; // 1
+    this.foo; // 2
+  }
+}
+
+main() {
+  E(0).foo; // 3
+  0.foo; // 4
+}
+''');
+    var element = findElement.getter('foo');
+    var bar = findElement.method('bar');
+    var main = findElement.function('main');
+    var expected = [
+      _expectId(bar, SearchResultKind.REFERENCE, 'foo; // 1'),
+      _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo; // 2'),
+      _expectIdQ(main, SearchResultKind.REFERENCE, 'foo; // 3'),
+      _expectIdQ(main, SearchResultKind.REFERENCE, 'foo; // 4'),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
+  test_searchReferences_PropertyAccessor_setter_ofExtension_instance() async {
+    await _resolveTestUnit('''
+extension E on int {
+  set foo(int _) {}
+
+  void bar() {
+    foo = 1;
+    this.foo = 2;
+  }
+}
+
+main() {
+  E(0).foo = 3;
+  0.foo = 4;
+}
+''');
+    var element = findElement.setter('foo');
+    var bar = findElement.method('bar');
+    var main = findElement.function('main');
+    var expected = [
+      _expectId(bar, SearchResultKind.REFERENCE, 'foo = 1;'),
+      _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo = 2;'),
+      _expectIdQ(main, SearchResultKind.REFERENCE, 'foo = 3;'),
+      _expectIdQ(main, SearchResultKind.REFERENCE, 'foo = 4;'),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
   test_searchReferences_PropertyAccessorElement_getter() async {
     await _resolveTestUnit('''
 class A {
@@ -1683,155 +1823,6 @@
 }
 
 @reflectiveTest
-class SearchWithExtensionMethodsTest extends SearchTest {
-  @override
-  AnalysisOptionsImpl createAnalysisOptions() => AnalysisOptionsImpl()
-    ..contextFeatures = FeatureSet.forTesting(
-        sdkVersion: '2.3.0', additionalFeatures: [Feature.extension_methods]);
-
-  test_searchReferences_ExtensionElement() async {
-    await _resolveTestUnit('''
-extension E on int {
-  void foo() {}
-  static void bar() {}
-}
-
-main() {
-  E(0).foo();
-  E.bar();
-}
-''');
-    var element = findElement.extension_('E');
-    var main = findElement.function('main');
-    var expected = [
-      _expectId(main, SearchResultKind.REFERENCE, 'E(0)'),
-      _expectId(main, SearchResultKind.REFERENCE, 'E.bar()'),
-    ];
-    await _verifyReferences(element, expected);
-  }
-
-  test_searchReferences_MethodElement_ofExtension_instance() async {
-    await _resolveTestUnit('''
-extension E on int {
-  void foo() {}
-
-  void bar() {
-    foo(); // 1
-    this.foo(); // 2
-    foo; // 3
-    this.foo; // 4
-  }
-}
-
-main() {
-  E(0).foo(); // 5
-  0.foo(); // 6
-  E(0).foo; // 7
-  0.foo; // 8
-}
-''');
-    var element = findElement.method('foo');
-    var bar = findElement.method('bar');
-    var main = findElement.function('main');
-    var expected = [
-      _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
-      _expectIdQ(bar, SearchResultKind.INVOCATION, 'foo(); // 2'),
-      _expectId(bar, SearchResultKind.REFERENCE, 'foo; // 3'),
-      _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo; // 4'),
-      _expectIdQ(main, SearchResultKind.INVOCATION, 'foo(); // 5'),
-      _expectIdQ(main, SearchResultKind.INVOCATION, 'foo(); // 6'),
-      _expectIdQ(main, SearchResultKind.REFERENCE, 'foo; // 7'),
-      _expectIdQ(main, SearchResultKind.REFERENCE, 'foo; // 8'),
-    ];
-    await _verifyReferences(element, expected);
-  }
-
-  test_searchReferences_MethodElement_ofExtension_static() async {
-    await _resolveTestUnit('''
-extension E on int {
-  static void foo() {}
-
-  static void bar() {
-    foo(); // 1
-    foo; // 2
-  }
-}
-
-main() {
-  E.foo(); // 3
-  E.foo; // 4
-}
-''');
-    var element = findElement.method('foo');
-    var bar = findElement.method('bar');
-    var main = findElement.function('main');
-    var expected = [
-      _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
-      _expectId(bar, SearchResultKind.REFERENCE, 'foo; // 2'),
-      _expectIdQ(main, SearchResultKind.INVOCATION, 'foo(); // 3'),
-      _expectIdQ(main, SearchResultKind.REFERENCE, 'foo; // 4'),
-    ];
-    await _verifyReferences(element, expected);
-  }
-
-  test_searchReferences_PropertyAccessor_getter_ofExtension_instance() async {
-    await _resolveTestUnit('''
-extension E on int {
-  int get foo => 0;
-
-  void bar() {
-    foo; // 1
-    this.foo; // 2
-  }
-}
-
-main() {
-  E(0).foo; // 3
-  0.foo; // 4
-}
-''');
-    var element = findElement.getter('foo');
-    var bar = findElement.method('bar');
-    var main = findElement.function('main');
-    var expected = [
-      _expectId(bar, SearchResultKind.REFERENCE, 'foo; // 1'),
-      _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo; // 2'),
-      _expectIdQ(main, SearchResultKind.REFERENCE, 'foo; // 3'),
-      _expectIdQ(main, SearchResultKind.REFERENCE, 'foo; // 4'),
-    ];
-    await _verifyReferences(element, expected);
-  }
-
-  test_searchReferences_PropertyAccessor_setter_ofExtension_instance() async {
-    await _resolveTestUnit('''
-extension E on int {
-  set foo(int _) {}
-
-  void bar() {
-    foo = 1;
-    this.foo = 2;
-  }
-}
-
-main() {
-  E(0).foo = 3;
-  0.foo = 4;
-}
-''');
-    var element = findElement.setter('foo');
-    var bar = findElement.method('bar');
-    var main = findElement.function('main');
-    var expected = [
-      _expectId(bar, SearchResultKind.REFERENCE, 'foo = 1;'),
-      _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo = 2;'),
-      _expectIdQ(main, SearchResultKind.REFERENCE, 'foo = 3;'),
-      _expectIdQ(main, SearchResultKind.REFERENCE, 'foo = 4;'),
-    ];
-    await _verifyReferences(element, expected);
-  }
-}
-
-@reflectiveTest
 class SearchWithNnbdTest extends SearchTest {
   @override
   AnalysisOptionsImpl createAnalysisOptions() => AnalysisOptionsImpl()
diff --git a/pkg/analyzer/test/src/dart/element/future_value_type_test.dart b/pkg/analyzer/test/src/dart/element/future_value_type_test.dart
index fcd0936..6c789e7 100644
--- a/pkg/analyzer/test/src/dart/element/future_value_type_test.dart
+++ b/pkg/analyzer/test/src/dart/element/future_value_type_test.dart
@@ -16,6 +16,11 @@
 
 @reflectiveTest
 class FutureValueTypeTest extends AbstractTypeSystemNullSafetyTest {
+  /// futureValueType(`dynamic`) = `dynamic`.
+  test_dynamic() {
+    _check(dynamicNone, 'dynamic');
+  }
+
   /// futureValueType(Future<`S`>) = `S`, for all `S`.
   test_future() {
     void check(DartType S, String expected) {
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 c327a33..d8216d2 100644
--- a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
@@ -2,12 +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/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/engine.dart';
 import 'package:meta/meta.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -17,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AstRewriteMethodInvocationTest);
-    defineReflectiveTests(AstRewriteMethodInvocationWithExtensionMethodsTest);
   });
 }
 
@@ -60,6 +57,28 @@
     _assertArgumentList(creation.argumentList, ['0']);
   }
 
+  test_targetNull_extension() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+
+extension E<T> on A {
+  void foo() {}
+}
+
+f(A a) {
+  E<int>(a).foo();
+}
+''');
+
+    var override = findNode.extensionOverride('E<int>(a)');
+    _assertExtensionOverride(
+      override,
+      expectedElement: findElement.extension_('E'),
+      expectedTypeArguments: ['int'],
+      expectedExtendedType: 'A',
+    );
+  }
+
   test_targetNull_function() async {
     await assertNoErrorsInCode(r'''
 void A<T, U>(int a) {}
@@ -272,6 +291,35 @@
     _assertArgumentList(creation.argumentList, ['0']);
   }
 
+  test_targetSimpleIdentifier_prefix_extension() async {
+    newFile('/test/lib/a.dart', content: r'''
+class A {}
+
+extension E<T> on A {
+  void foo() {}
+}
+''');
+
+    await assertNoErrorsInCode(r'''
+import 'a.dart' as prefix;
+
+f(prefix.A a) {
+  prefix.E<int>(a).foo();
+}
+''');
+
+    var importFind = findElement.importFind('package:test/a.dart');
+
+    var override = findNode.extensionOverride('E<int>(a)');
+    _assertExtensionOverride(
+      override,
+      expectedElement: importFind.extension_('E'),
+      expectedTypeArguments: ['int'],
+      expectedExtendedType: 'A',
+    );
+    assertImportPrefix(findNode.simple('prefix.E'), importFind.prefix);
+  }
+
   test_targetSimpleIdentifier_prefix_function() async {
     newFile('/test/lib/a.dart', content: r'''
 void A<T, U>(int a) {}
@@ -303,78 +351,6 @@
     expect(argumentStrings, expectedArguments);
   }
 
-  void _assertTypeArgumentList(
-    TypeArgumentList argumentList,
-    List<String> expectedArguments,
-  ) {
-    var argumentStrings = argumentList.arguments
-        .map((e) => result.content.substring(e.offset, e.end))
-        .toList();
-    expect(argumentStrings, expectedArguments);
-  }
-}
-
-@reflectiveTest
-class AstRewriteMethodInvocationWithExtensionMethodsTest
-    extends AstRewriteMethodInvocationTest {
-  @override
-  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
-    ..contextFeatures = FeatureSet.forTesting(
-      sdkVersion: '2.3.0',
-      additionalFeatures: [Feature.extension_methods],
-    );
-
-  test_targetNull_extension() async {
-    await assertNoErrorsInCode(r'''
-class A {}
-
-extension E<T> on A {
-  void foo() {}
-}
-
-f(A a) {
-  E<int>(a).foo();
-}
-''');
-
-    var override = findNode.extensionOverride('E<int>(a)');
-    _assertExtensionOverride(
-      override,
-      expectedElement: findElement.extension_('E'),
-      expectedTypeArguments: ['int'],
-      expectedExtendedType: 'A',
-    );
-  }
-
-  test_targetSimpleIdentifier_prefix_extension() async {
-    newFile('/test/lib/a.dart', content: r'''
-class A {}
-
-extension E<T> on A {
-  void foo() {}
-}
-''');
-
-    await assertNoErrorsInCode(r'''
-import 'a.dart' as prefix;
-
-f(prefix.A a) {
-  prefix.E<int>(a).foo();
-}
-''');
-
-    var importFind = findElement.importFind('package:test/a.dart');
-
-    var override = findNode.extensionOverride('E<int>(a)');
-    _assertExtensionOverride(
-      override,
-      expectedElement: importFind.extension_('E'),
-      expectedTypeArguments: ['int'],
-      expectedExtendedType: 'A',
-    );
-    assertImportPrefix(findNode.simple('prefix.E'), importFind.prefix);
-  }
-
   void _assertExtensionOverride(
     ExtensionOverride override, {
     @required ExtensionElement expectedElement,
@@ -392,4 +368,14 @@
     );
     assertType(override.extendedType, expectedExtendedType);
   }
+
+  void _assertTypeArgumentList(
+    TypeArgumentList argumentList,
+    List<String> expectedArguments,
+  ) {
+    var argumentStrings = argumentList.arguments
+        .map((e) => result.content.substring(e.offset, e.end))
+        .toList();
+    expect(argumentStrings, expectedArguments);
+  }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
index 0505e26..6b72e16 100644
--- a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
@@ -26,17 +26,10 @@
   });
 }
 
-abstract class BaseExtensionMethodsTest extends DriverResolutionTest {
-  @override
-  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
-    ..contextFeatures = FeatureSet.forTesting(
-        sdkVersion: '2.3.0', additionalFeatures: [Feature.extension_methods]);
-}
-
 /// Tests that show that extension declarations and the members inside them are
 /// resolved correctly.
 @reflectiveTest
-class ExtensionMethodsDeclarationTest extends BaseExtensionMethodsTest {
+class ExtensionMethodsDeclarationTest extends DriverResolutionTest {
   @override
   List<MockSdkLibrary> get additionalMockSdkLibraries => [
         MockSdkLibrary([
@@ -323,7 +316,7 @@
 /// Tests that show that extension declarations and the members inside them are
 /// resolved correctly.
 @reflectiveTest
-class ExtensionMethodsDeclarationWithNnbdTest extends BaseExtensionMethodsTest {
+class ExtensionMethodsDeclarationWithNnbdTest extends DriverResolutionTest {
   @override
   AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
     ..contextFeatures = FeatureSet.forTesting(
@@ -369,7 +362,7 @@
 /// Tests that show that extension declarations support all of the possible
 /// types in the `on` clause.
 @reflectiveTest
-class ExtensionMethodsExtendedTypeTest extends BaseExtensionMethodsTest {
+class ExtensionMethodsExtendedTypeTest extends DriverResolutionTest {
   test_named_generic() async {
     await assertNoErrorsInCode('''
 class C<T> {}
@@ -504,7 +497,7 @@
 /// Tests that extension members can be correctly resolved when referenced
 /// by code external to the extension declaration.
 @reflectiveTest
-class ExtensionMethodsExternalReferenceTest extends BaseExtensionMethodsTest {
+class ExtensionMethodsExternalReferenceTest extends DriverResolutionTest {
   /// Corresponds to: extension_member_resolution_t07
   test_dynamicInvocation() async {
     await assertNoErrorsInCode(r'''
@@ -1675,7 +1668,7 @@
 /// Tests that extension members can be correctly resolved when referenced
 /// by code internal to (within) the extension declaration.
 @reflectiveTest
-class ExtensionMethodsInternalReferenceTest extends BaseExtensionMethodsTest {
+class ExtensionMethodsInternalReferenceTest extends DriverResolutionTest {
   test_instance_call() async {
     await assertNoErrorsInCode('''
 class C {}
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 6ec9988..f738f6f 100644
--- a/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
@@ -2,12 +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/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/engine.dart';
 import 'package:meta/meta.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -25,11 +23,6 @@
   ExtensionElement extension;
   ExtensionOverride extensionOverride;
 
-  @override
-  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
-    ..contextFeatures = FeatureSet.forTesting(
-        sdkVersion: '2.3.0', additionalFeatures: [Feature.extension_methods]);
-
   void findDeclarationAndOverride(
       {@required String declarationName,
       @required String overrideSearch,
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
index 889c55e..c0f77b5 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
@@ -2,9 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/engine.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../driver_resolution.dart';
@@ -17,11 +15,6 @@
 
 @reflectiveTest
 class ExtensionMethodsTest extends DriverResolutionTest {
-  @override
-  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
-    ..contextFeatures = FeatureSet.forTesting(
-        sdkVersion: '2.3.0', additionalFeatures: [Feature.extension_methods]);
-
   test_implicit_getter() async {
     await assertNoErrorsInCode('''
 class A<T> {}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
index a112ed2..5fbd485 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
@@ -50,11 +50,24 @@
 
 Object Function() v = () async => foo();
 ''');
+
     assertTypeArgumentTypes(
       findNode.methodInvocation('foo();'),
-      ['FutureOr<Object>'],
+      [
+        typeStringByNullability(
+          nullable: 'FutureOr<Object?>',
+          legacy: 'FutureOr<Object>',
+        ),
+      ],
     );
-    _assertReturnType('() async => foo', 'Future<Object>');
+
+    _assertReturnType(
+      '() async => foo',
+      typeStringByNullability(
+        nullable: 'Future<Object?>',
+        legacy: 'Future<Object>',
+      ),
+    );
   }
 
   test_contextFunctionType_returnType_asyncStar_blockBody() async {
@@ -219,6 +232,27 @@
     _assertReturnType('() {', 'int');
   }
 
+  test_noContext_returnType_sync_blockBody_dynamic() async {
+    await resolveTestCode('''
+var v = (dynamic a) {
+  return a;
+};
+''');
+    _assertReturnType('(dynamic a) {', 'dynamic');
+  }
+
+  test_noContext_returnType_sync_blockBody_Never() async {
+    await resolveTestCode('''
+var v = () {
+  throw 42;
+};
+''');
+    _assertReturnType(
+      '() {',
+      typeStringByNullability(nullable: 'Never', legacy: 'Null'),
+    );
+  }
+
   test_noContext_returnType_sync_blockBody_notNullable() async {
     await resolveTestCode('''
 var v = (bool b) {
@@ -314,6 +348,13 @@
     );
   }
 
+  test_noContext_returnType_sync_expressionBody_dynamic() async {
+    await resolveTestCode('''
+var v = (dynamic a) => a;
+''');
+    _assertReturnType('(dynamic a) =>', 'dynamic');
+  }
+
   test_noContext_returnType_sync_expressionBody_Never() async {
     await resolveTestCode('''
 var v = () => throw 42;
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 d6f56d9..89f9a8e 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
@@ -250,7 +250,7 @@
     assertTypeName(
       findNode.typeName('Never a'),
       neverElement,
-      typeStr('Never', 'Never*'),
+      typeStr('Never', 'Null*'),
     );
   }
 }
diff --git a/pkg/analyzer/test/src/dart/sdk/sdk_test.dart b/pkg/analyzer/test/src/dart/sdk/sdk_test.dart
index dba0517..50066f4 100644
--- a/pkg/analyzer/test/src/dart/sdk/sdk_test.dart
+++ b/pkg/analyzer/test/src/dart/sdk/sdk_test.dart
@@ -9,7 +9,6 @@
 import 'package:analyzer/src/generated/java_engine_io.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/summary/summarize_elements.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -55,26 +54,6 @@
     expectSource('$foxLib/deep/directory/part.dart', 'dart:deep/part.dart');
   }
 
-  void test_getLinkedBundle_noBundle() {
-    EmbedderYamlLocator locator = EmbedderYamlLocator({
-      'fox': <Folder>[pathTranslator.getResource(foxLib)]
-    });
-    EmbedderSdk sdk = EmbedderSdk(resourceProvider, locator.embedderYamls);
-    expect(sdk.getLinkedBundle(), isNull);
-  }
-
-  void test_getLinkedBundle_strong() {
-    pathTranslator.newFileWithBytes(
-        '$foxPath/strong.sum', PackageBundleAssembler().assemble().toBuffer());
-    EmbedderYamlLocator locator = EmbedderYamlLocator({
-      'fox': <Folder>[pathTranslator.getResource(foxLib)]
-    });
-    EmbedderSdk sdk = EmbedderSdk(resourceProvider, locator.embedderYamls);
-    sdk.analysisOptions = AnalysisOptionsImpl();
-    sdk.useSummary = true;
-    expect(sdk.getLinkedBundle(), isNotNull);
-  }
-
   void test_getSdkLibrary() {
     EmbedderYamlLocator locator = EmbedderYamlLocator({
       'fox': <Folder>[pathTranslator.getResource(foxLib)]
diff --git a/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_test.dart b/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_test.dart
index 9051278..825805e 100644
--- a/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_test.dart
@@ -64,6 +64,89 @@
 ''');
   }
 
+  test_function_nonNullable_blockBody_switchStatement_notNullable_exhaustive() async {
+    await assertNoErrorsInCode(r'''
+enum Foo { a, b }
+
+int f(Foo foo) {
+  switch (foo) {
+    case Foo.a:
+      return 0;
+    case Foo.b:
+      return 1;
+  }
+}
+''');
+  }
+
+  test_function_nonNullable_blockBody_switchStatement_notNullable_notExhaustive() async {
+    await assertErrorsInCode(r'''
+enum Foo { a, b }
+
+int f(Foo foo) {
+  switch (foo) {
+    case Foo.a:
+      return 0;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.BODY_MIGHT_COMPLETE_NORMALLY, 23, 1),
+      error(StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH, 38, 12),
+    ]);
+  }
+
+  test_function_nonNullable_blockBody_switchStatement_nullable_exhaustive_default() async {
+    await assertNoErrorsInCode(r'''
+enum Foo { a, b }
+
+int f(Foo? foo) {
+  switch (foo) {
+    case Foo.a:
+      return 0;
+    case Foo.b:
+      return 1;
+    default:
+      return 2;
+  }
+}
+''');
+  }
+
+  test_function_nonNullable_blockBody_switchStatement_nullable_exhaustive_null() async {
+    await assertNoErrorsInCode(r'''
+enum Foo { a, b }
+
+int f(Foo? foo) {
+  switch (foo) {
+    case null:
+      return 0;
+    case Foo.a:
+      return 1;
+    case Foo.b:
+      return 2;
+  }
+}
+''');
+  }
+
+  test_function_nonNullable_blockBody_switchStatement_nullable_notExhaustive_null() async {
+    await assertErrorsInCode(r'''
+enum Foo { a, b }
+
+int f(Foo? foo) {
+  switch (foo) {
+    case Foo.a:
+      return 0;
+    case Foo.b:
+      return 1;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.BODY_MIGHT_COMPLETE_NORMALLY, 23, 1),
+      error(StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH, 39, 12),
+    ]);
+  }
+
   test_function_nullable_blockBody() async {
     await assertNoErrorsInCode(r'''
 int foo() {
diff --git a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_extension_name_test.dart b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_extension_name_test.dart
new file mode 100644
index 0000000..05791e0
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_extension_name_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/driver_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(BuiltInIdentifierAsExtensionNameTest);
+  });
+}
+
+@reflectiveTest
+class BuiltInIdentifierAsExtensionNameTest extends DriverResolutionTest {
+  test_error_builtInIdentifierAsExtensionName() async {
+    await assertErrorsInCode(
+      r'''
+extension as on Object {}
+''',
+      [
+        error(
+            CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_EXTENSION_NAME, 10, 2),
+      ],
+    );
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_prefix_name_test.dart b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_prefix_name_test.dart
new file mode 100644
index 0000000..2a79451
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_prefix_name_test.dart
@@ -0,0 +1,26 @@
+// 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 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/driver_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(BuiltInIdentifierAsPrefixNameTest);
+  });
+}
+
+@reflectiveTest
+class BuiltInIdentifierAsPrefixNameTest extends DriverResolutionTest {
+  test_builtInIdentifierAsPrefixName() async {
+    await assertErrorsInCode('''
+import 'dart:async' as abstract;
+''', [
+      error(HintCode.UNUSED_IMPORT, 7, 12),
+      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_PREFIX_NAME, 23, 8),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_type_name_test.dart b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_type_name_test.dart
new file mode 100644
index 0000000..741a257
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_type_name_test.dart
@@ -0,0 +1,33 @@
+// 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 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/driver_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(BuiltInIdentifierAsTypeNameTest);
+  });
+}
+
+@reflectiveTest
+class BuiltInIdentifierAsTypeNameTest extends DriverResolutionTest {
+  test_class() async {
+    await assertErrorsInCode('''
+class as {}
+''', [
+      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 6, 2),
+    ]);
+  }
+
+  test_mixin() async {
+    await assertErrorsInCode('''
+mixin as {}
+''', [
+      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 6, 2),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_type_parameter_name_test.dart b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_type_parameter_name_test.dart
new file mode 100644
index 0000000..b28236f
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_type_parameter_name_test.dart
@@ -0,0 +1,44 @@
+// 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 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/driver_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(BuiltInIdentifierAsTypeParameterNameTest);
+  });
+}
+
+@reflectiveTest
+class BuiltInIdentifierAsTypeParameterNameTest extends DriverResolutionTest {
+  test_class() async {
+    await assertErrorsInCode('''
+class A<as> {}
+''', [
+      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME, 8,
+          2),
+    ]);
+  }
+
+  test_extension() async {
+    await assertErrorsInCode('''
+extension <as> on List {}
+''', [
+      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME, 11,
+          2),
+    ]);
+  }
+
+  test_function() async {
+    await assertErrorsInCode('''
+void f<as>() {}
+''', [
+      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME, 7,
+          2),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_typedef_name_test.dart b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_typedef_name_test.dart
new file mode 100644
index 0000000..c695a45
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_typedef_name_test.dart
@@ -0,0 +1,49 @@
+// 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 '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/driver_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(BuiltInIdentifierAsTypedefNameTest);
+  });
+}
+
+@reflectiveTest
+class BuiltInIdentifierAsTypedefNameTest extends DriverResolutionTest {
+  test_classTypeAlias() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B {}
+class as = A with B;
+''', [
+      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 28, 2),
+    ]);
+  }
+
+  test_typedef_classic() async {
+    await assertErrorsInCode(r'''
+typedef void as();
+''', [
+      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 13, 2),
+    ]);
+  }
+
+  test_typedef_generic() async {
+    await assertErrorsInCode(r'''
+typedef as = void Function();
+''', [
+      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 8, 2),
+      // TODO(#42158): I think recovery could be much better here.
+      error(ParserErrorCode.EXPECTED_EXECUTABLE, 11, 1),
+      error(ParserErrorCode.EXPECTED_TOKEN, 11, 1),
+      error(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, 11, 1),
+      error(ParserErrorCode.MISSING_FUNCTION_BODY, 28, 1),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/builtin_identifier_as_extension_name_test.dart b/pkg/analyzer/test/src/diagnostics/builtin_identifier_as_extension_name_test.dart
deleted file mode 100644
index 774ccd0..0000000
--- a/pkg/analyzer/test/src/diagnostics/builtin_identifier_as_extension_name_test.dart
+++ /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.
-
-import 'package:analyzer/src/error/codes.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import '../dart/resolution/extension_method_test.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(BuiltinIdentifierAsExtensionNameTest);
-  });
-}
-
-@reflectiveTest
-class BuiltinIdentifierAsExtensionNameTest extends BaseExtensionMethodsTest {
-  test_error_builtInIdentifierAsExtensionName() async {
-    await assertErrorsInCode(
-      r'''
-extension as on Object {}
-''',
-      [
-        error(
-            CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_EXTENSION_NAME, 10, 2),
-      ],
-    );
-  }
-}
diff --git a/pkg/analyzer/test/src/diagnostics/illegal_async_return_type_test.dart b/pkg/analyzer/test/src/diagnostics/illegal_async_return_type_test.dart
index 5a1293a..a6ceffd 100644
--- a/pkg/analyzer/test/src/diagnostics/illegal_async_return_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/illegal_async_return_type_test.dart
@@ -20,7 +20,6 @@
 int f() async {}
 ''', [
       error(StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE, 0, 3),
-      error(HintCode.MISSING_RETURN, 4, 1),
     ]);
   }
 
@@ -52,7 +51,6 @@
   int m() async {}
 }
 ''', [
-      error(HintCode.MISSING_RETURN, 16, 1),
       error(StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE, 12, 3),
     ]);
   }
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 9d0f9b7..78fe5ce 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
@@ -5,11 +5,13 @@
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../dart/constant/potentially_constant_test.dart';
 import '../dart/resolution/driver_resolution.dart';
 
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReturnOfInvalidTypeTest);
+    defineReflectiveTests(ReturnOfInvalidTypeWithNullSafetyTest);
   });
 }
 
@@ -80,14 +82,6 @@
     ]);
   }
 
-  test_function_async_block_int__to_Future_void() async {
-    await assertNoErrorsInCode(r'''
-Future<void> f() async {
-  return 0;
-}
-''');
-  }
-
   test_function_async_block_int__to_void() async {
     await assertErrorsInCode('''
 void f() async {
@@ -167,11 +161,14 @@
   }
 
   test_function_sync_block_num__to_int() async {
-    await assertNoErrorsInCode(r'''
+    var expectedErrors = expectedErrorsByNullability(nullable: [
+      error(StaticTypeWarningCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 24, 1),
+    ], legacy: []);
+    await assertErrorsInCode(r'''
 int f(num a) {
   return a;
 }
-''');
+''', expectedErrors);
   }
 
   test_function_sync_block_String__to_int() async {
@@ -202,12 +199,11 @@
 ''');
   }
 
-  test_function_sync_block_void() async {
+  test_function_sync_block_void__to_dynamic() async {
     await assertNoErrorsInCode('''
-void a;
-void f1() { return a; }
-dynamic f2() { return a; }
-Null f3() { return a; }
+dynamic f(void a) {
+  return a;
+}
 ''');
   }
 
@@ -221,6 +217,25 @@
     ]);
   }
 
+  test_function_sync_block_void__to_Null() async {
+    var expectedErrors = expectedErrorsByNullability(nullable: [
+      error(StaticTypeWarningCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 26, 1),
+    ], legacy: []);
+    await assertErrorsInCode('''
+Null f(void a) {
+  return a;
+}
+''', expectedErrors);
+  }
+
+  test_function_sync_block_void__to_void() async {
+    await assertNoErrorsInCode('''
+void f(void a) {
+  return a;
+}
+''');
+  }
+
   test_function_sync_expression_int__to_void() async {
     await assertNoErrorsInCode('''
 void f() => 42;
@@ -281,6 +296,10 @@
 
   @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/38162')
   test_method_async_block_callable_class() async {
+    if (isNullSafetySdkAndLegacyLibrary) {
+      throw 'Make it fail for Null Safety as well, for now.';
+    }
+
     await assertNoErrorsInCode(r'''
 typedef Fn = void Function(String s);
 
@@ -328,3 +347,77 @@
     ]);
   }
 }
+
+@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(StaticTypeWarningCode.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(StaticTypeWarningCode.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(StaticTypeWarningCode.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;
+};
+''');
+  }
+}
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 b10c167..1d5efe5 100644
--- a/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart
@@ -5,11 +5,13 @@
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../dart/constant/potentially_constant_test.dart';
 import '../dart/resolution/driver_resolution.dart';
 
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReturnWithoutValueTest);
+    defineReflectiveTests(ReturnWithoutValueWithNullSafetyTest);
   });
 }
 
@@ -57,9 +59,9 @@
     ]);
   }
 
-  test_function_dynamic() async {
+  test_function_async_block_empty__to_dynamic() async {
     await assertNoErrorsInCode('''
-f() {
+dynamic f() async {
   return;
 }
 ''');
@@ -75,6 +77,22 @@
 ''');
   }
 
+  test_function_sync_block_empty__to_dynamic() async {
+    await assertNoErrorsInCode('''
+dynamic f() {
+  return;
+}
+''');
+  }
+
+  test_function_sync_block_empty__to_Null() async {
+    await assertNoErrorsInCode('''
+Null f() {
+  return;
+}
+''');
+  }
+
   test_function_void() async {
     await assertNoErrorsInCode('''
 void f() {
@@ -98,6 +116,14 @@
     ]);
   }
 
+  test_functionExpression_async_block_empty__to_Object() async {
+    await assertNoErrorsInCode('''
+Object Function() f = () async {
+  return;
+};
+''');
+  }
+
   test_method() async {
     await assertErrorsInCode('''
 class A {
@@ -125,3 +151,7 @@
     ]);
   }
 }
+
+@reflectiveTest
+class ReturnWithoutValueWithNullSafetyTest extends ReturnWithoutValueTest
+    with WithNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index fce70a1..f6ce164 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -28,8 +28,15 @@
 import 'await_in_late_local_variable_initializer_test.dart'
     as await_in_late_local_variable_initializer;
 import 'body_might_complete_normally_test.dart' as body_might_complete_normally;
-import 'builtin_identifier_as_extension_name_test.dart'
-    as builtin_as_extension_name;
+import 'built_in_identifier_as_extension_name_test.dart'
+    as built_in_as_extension_name;
+import 'built_in_identifier_as_prefix_name_test.dart'
+    as built_in_as_prefix_name;
+import 'built_in_identifier_as_type_name_test.dart' as built_in_as_type_name;
+import 'built_in_identifier_as_type_parameter_name_test.dart'
+    as built_in_as_type_parameter_name;
+import 'built_in_identifier_as_typedef_name_test.dart'
+    as built_in_as_typedef_name;
 import 'can_be_null_after_null_aware_test.dart' as can_be_null_after_null_aware;
 import 'case_block_not_terminated_test.dart' as case_block_not_terminated;
 import 'case_expression_type_implements_equals_test.dart'
@@ -533,7 +540,11 @@
     async_keyword_used_as_identifier.main();
     await_in_late_local_variable_initializer.main();
     body_might_complete_normally.main();
-    builtin_as_extension_name.main();
+    built_in_as_extension_name.main();
+    built_in_as_prefix_name.main();
+    built_in_as_type_name.main();
+    built_in_as_type_parameter_name.main();
+    built_in_as_typedef_name.main();
     can_be_null_after_null_aware.main();
     case_block_not_terminated.main();
     case_expression_type_implements_equals.main();
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 94e0131..014866b 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
@@ -5,11 +5,13 @@
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../dart/constant/potentially_constant_test.dart';
 import '../dart/resolution/driver_resolution.dart';
 
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UndefinedHiddenNameTest);
+    defineReflectiveTests(UndefinedHiddenNameWithNullSafetyTest);
   });
 }
 
@@ -34,3 +36,7 @@
     ]);
   }
 }
+
+@reflectiveTest
+class UndefinedHiddenNameWithNullSafetyTest extends UndefinedHiddenNameTest
+    with WithNullSafetyMixin {}
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 121fbda..e671e33 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
@@ -5,11 +5,13 @@
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../dart/constant/potentially_constant_test.dart';
 import '../dart/resolution/driver_resolution.dart';
 
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UndefinedShownNameTest);
+    defineReflectiveTests(UndefinedShownNameWithNullSafetyTest);
   });
 }
 
@@ -34,3 +36,7 @@
     ]);
   }
 }
+
+@reflectiveTest
+class UndefinedShownNameWithNullSafetyTest extends UndefinedShownNameTest
+    with WithNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
index 4ed85b1..7756ea0 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
@@ -726,6 +726,65 @@
 ''');
   }
 
+  test_method_isUsed_privateExtension_binaryOperator() async {
+    await assertNoErrorsInCode(r'''
+extension _A on String {
+  int operator -(int other) => other;
+}
+void main() {
+  "hello" - 3;
+}
+''');
+  }
+
+  test_method_isUsed_privateExtension_indexOperator() async {
+    await assertNoErrorsInCode(r'''
+extension _A on bool {
+  int operator [](int index) => 7;
+}
+void main() {
+  false[3];
+}
+''');
+  }
+
+  test_method_isUsed_privateExtension_operator_assignment() async {
+    await assertNoErrorsInCode(r'''
+extension _A on String {
+  String operator -(int other) => this;
+}
+void f(String s) {
+  s -= 3;
+}
+''');
+  }
+
+  test_method_isUsed_privateExtension_postfixOperator() async {
+    await assertNoErrorsInCode(r'''
+extension _A on String {
+  String operator -(int i) => this;
+}
+void f(String a) {
+  a--;
+}
+''');
+  }
+
+  // Postfix operators can only be called, not defined. The "notUsed" sibling to
+  // this test is the test on a binary operator.
+  test_method_isUsed_privateExtension_prefixOperator() async {
+    await assertNoErrorsInCode(r'''
+extension _A on String {
+  int operator ~() => 7;
+}
+void main() {
+  ~"hello";
+}
+''');
+  }
+
+  // Assignment operators can only be called, not defined. The "notUsed" sibling
+  // to this test is the test on a binary operator.
   test_method_isUsed_staticInvocation() async {
     await assertNoErrorsInCode(r'''
 class A {
@@ -748,6 +807,17 @@
 ''');
   }
 
+  test_method_isUsed_unnamedExtension_operator() async {
+    await assertNoErrorsInCode(r'''
+extension on String {
+  int operator -(int other) => other;
+}
+void main() {
+  "hello" - 3;
+}
+''');
+  }
+
   test_method_notUsed_hasSameNameAsUsed() async {
     await assertErrorsInCode(r'''
 class A {
@@ -782,6 +852,36 @@
     ]);
   }
 
+  test_method_notUsed_privateExtension_indexOperator() async {
+    await assertErrorsInCode(r'''
+extension _A on bool {
+  int operator [](int index) => 7;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 38, 2),
+    ]);
+  }
+
+  test_method_notUsed_privateExtension_operator() async {
+    await assertErrorsInCode(r'''
+extension _A on String {
+  int operator -(int other) => other;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 40, 1),
+    ]);
+  }
+
+  test_method_notUsed_privateExtension_prefixOperator() async {
+    await assertErrorsInCode(r'''
+extension _A on String {
+  int operator ~() => 7;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 40, 1),
+    ]);
+  }
+
   test_method_notUsed_referenceFromItself() async {
     await assertErrorsInCode(r'''
 class A {
@@ -827,6 +927,16 @@
     ]);
   }
 
+  test_method_notUsed_unnamedExtension_operator() async {
+    await assertErrorsInCode(r'''
+extension on String {
+  int operator -(int other) => other;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 37, 1),
+    ]);
+  }
+
   test_publicStaticMethod_privateClass_isUsed() async {
     await assertNoErrorsInCode(r'''
 class _A {
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/extension_declaration_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/extension_declaration_test.dart
index 528b76e..e4474ac 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/extension_declaration_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/extension_declaration_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.
 
-import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 
 import 'partial_code_support.dart';
@@ -85,9 +84,6 @@
                 'var'
               ]),
         ],
-        PartialCodeTest.declarationSuffixes,
-        featureSet: FeatureSet.forTesting(
-            sdkVersion: '2.3.0',
-            additionalFeatures: [Feature.extension_methods]));
+        PartialCodeTest.declarationSuffixes);
   }
 }
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index e312162..74c3543 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -82,9 +82,6 @@
 mixin ResynthesizeTestCases implements ResynthesizeTestHelpers {
   FeatureSet get disableNnbd => FeatureSet.forTesting(sdkVersion: '2.2.2');
 
-  FeatureSet get enableExtensionMethods =>
-      FeatureSet.forTesting(additionalFeatures: [Feature.extension_methods]);
-
   FeatureSet get enableNnbd =>
       FeatureSet.forTesting(additionalFeatures: [Feature.non_nullable]);
 
@@ -2031,7 +2028,6 @@
   }
 
   test_codeRange_extensions() async {
-    featureSet = enableExtensionMethods;
     var library = await checkLibrary('''
 class A {}
 
@@ -3530,7 +3526,6 @@
   }
 
   test_const_reference_staticMethod_ofExtension() async {
-    featureSet = enableExtensionMethods;
     var library = await checkLibrary('''
 class A {}
 extension E on A {
@@ -5075,7 +5070,6 @@
   }
 
   test_defaultValue_refersToExtension_method_inside() async {
-    featureSet = enableExtensionMethods;
     var library = await checkLibrary('''
 class A {}
 extension E on A {
@@ -5325,7 +5319,6 @@
   }
 
   test_duplicateDeclaration_extension() async {
-    featureSet = enableExtensionMethods;
     var library = await checkLibrary(r'''
 class A {}
 extension E on A {}
@@ -5982,7 +5975,6 @@
   }
 
   test_extension_documented_tripleSlash() async {
-    featureSet = enableExtensionMethods;
     var library = await checkLibrary('''
 /// aaa
 /// bbbb
@@ -5998,7 +5990,6 @@
   }
 
   test_extension_field_inferredType_const() async {
-    featureSet = enableExtensionMethods;
     var library = await checkLibrary('''
 extension E on int {
   static const x = 0;
@@ -7255,6 +7246,25 @@
 ''');
   }
 
+  test_inferred_type_functionExpressionInvocation_oppositeOrder() async {
+    featureSet = enableNnbd;
+    var library = await checkLibrary('''
+class A {
+  static final foo = bar(1.2);
+  static final bar = baz();
+
+  static int Function(double) baz() => (throw 0);
+}
+''');
+    checkElementText(library, r'''
+class A {
+  static final int foo;
+  static final int Function(double) bar;
+  static int Function(double) baz() {}
+}
+''');
+  }
+
   test_inferred_type_initializer_cycle() async {
     var library = await checkLibrary(r'''
 var a = b + 1;
@@ -8560,7 +8570,6 @@
   }
 
   test_metadata_extension_scope() async {
-    featureSet = enableExtensionMethods;
     var library = await checkLibrary(r'''
 const foo = 0;
 
@@ -8617,7 +8626,6 @@
   }
 
   test_metadata_extensionDeclaration() async {
-    featureSet = enableExtensionMethods;
     var library = await checkLibrary(r'''
 const a = null;
 class A {}
@@ -10293,7 +10301,7 @@
     checkElementText(
         library,
         r'''
-Never* d;
+Null* d;
 ''',
         annotateNullability: true);
   }
@@ -11382,7 +11390,6 @@
   }
 
   test_variable_initializer_staticMethod_ofExtension() async {
-    featureSet = enableExtensionMethods;
     var library = await checkLibrary('''
 class A {}
 extension E on A {
diff --git a/pkg/analyzer/test/src/summary/test_strategies.dart b/pkg/analyzer/test/src/summary/test_strategies.dart
index f7ce160..5bd873f 100644
--- a/pkg/analyzer/test/src/summary/test_strategies.dart
+++ b/pkg/analyzer/test/src/summary/test_strategies.dart
@@ -72,7 +72,7 @@
 class ResynthesizeTestStrategyTwoPhase extends AbstractResynthesizeTest
     implements ResynthesizeTestStrategy {
   @override
-  FeatureSet featureSet = FeatureSet.forTesting(sdkVersion: '2.2.2');
+  FeatureSet featureSet = FeatureSet.forTesting(sdkVersion: '2.7.0');
 
   final Set<Source> serializedSources = <Source>{};
 
diff --git a/pkg/analyzer/test/src/summary2/ast_text_printer_test.dart b/pkg/analyzer/test/src/summary2/ast_text_printer_test.dart
index b81d0f0..0c61468 100644
--- a/pkg/analyzer/test/src/summary2/ast_text_printer_test.dart
+++ b/pkg/analyzer/test/src/summary2/ast_text_printer_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 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/summary2/ast_text_printer.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -13,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AstTextPrinterTest);
-    defineReflectiveTests(AstTextPrinterWithExtensionMethodsTest);
   });
 }
 
@@ -63,6 +60,16 @@
 ''');
   }
 
+  test_extensionOverride() async {
+    await assertParseCodeAndPrintAst(this, '''
+extension E on Object {
+  int f() => 0;
+}
+
+const e = E(null).f();
+''');
+  }
+
   test_forElement() async {
     assertParseCodeAndPrintAst(this, r'''
 var _ = [1, for (var v in [2, 3, 4]) v, 5];
@@ -112,21 +119,3 @@
 ''');
   }
 }
-
-@reflectiveTest
-class AstTextPrinterWithExtensionMethodsTest extends ParseBase {
-  @override
-  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
-    ..contextFeatures = FeatureSet.forTesting(
-        sdkVersion: '2.3.0', additionalFeatures: [Feature.extension_methods]);
-
-  test_extensionOverride() async {
-    await assertParseCodeAndPrintAst(this, '''
-extension E on Object {
-  int f() => 0;
-}
-
-const e = E(null).f();
-''');
-  }
-}
diff --git a/pkg/analyzer/tool/summary/build_sdk_summaries.dart b/pkg/analyzer/tool/summary/build_sdk_summaries.dart
index 7bfc71e..5c0590b 100644
--- a/pkg/analyzer/tool/summary/build_sdk_summaries.dart
+++ b/pkg/analyzer/tool/summary/build_sdk_summaries.dart
@@ -4,11 +4,9 @@
 
 import 'dart:io';
 
-import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/summary/summary_file_builder.dart';
-import 'package:meta/meta.dart';
 
 void main(List<String> args) {
   String command;
@@ -42,20 +40,8 @@
   //
   // Handle commands.
   //
-  if (command == 'build-non-nullable') {
-    _buildSummary(
-      sdkPath,
-      outFilePath,
-      enabledExperiments: ['non-nullable'],
-      title: 'non-nullable',
-    );
-  } else if (command == 'build-legacy' || command == 'build-strong') {
-    _buildSummary(
-      sdkPath,
-      outFilePath,
-      enabledExperiments: [],
-      title: 'legacy',
-    );
+  if (command == 'build' || command == 'build-strong') {
+    _buildSummary(sdkPath, outFilePath);
   } else {
     _printUsage();
     return;
@@ -67,17 +53,12 @@
  */
 const BINARY_NAME = "build_sdk_summaries";
 
-void _buildSummary(
-  String sdkPath,
-  String outPath, {
-  @required List<String> enabledExperiments,
-  @required String title,
-}) {
-  print('Generating $title summary.');
+void _buildSummary(String sdkPath, String outPath) {
+  print('Generating summary.');
   Stopwatch sw = Stopwatch()..start();
-  var featureSet = FeatureSet.fromEnableFlags(enabledExperiments);
-  List<int> bytes = SummaryBuilder.forSdk(sdkPath).build(
-    featureSet: featureSet,
+  List<int> bytes = buildSdkSummary(
+    resourceProvider: PhysicalResourceProvider.INSTANCE,
+    sdkPath: sdkPath,
   );
   File(outPath).writeAsBytesSync(bytes, mode: FileMode.writeOnly);
   print('\tDone in ${sw.elapsedMilliseconds} ms.');
@@ -89,8 +70,6 @@
 void _printUsage() {
   print('Usage: $BINARY_NAME command arguments');
   print('Where command can be one of the following:');
-  print('  build-non-nullable output_file [sdk_path]');
-  print('    Generate non-nullable summary file.');
-  print('  build-legacy output_file [sdk_path]');
-  print('    Generate legacy summary file.');
+  print('  build output_file [sdk_path]');
+  print('    Generate summary file.');
 }
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index 3cd2c60..1b75a7a 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -6,7 +6,6 @@
 import 'dart:io' as io;
 import 'dart:isolate';
 
-import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
@@ -159,9 +158,9 @@
       final stopwatch = Stopwatch()..start();
 
       for (var i = 0; i < 3; i++) {
-        var featureSet = FeatureSet.fromEnableFlags([]);
-        SummaryBuilder.forSdk(options.dartSdkPath).build(
-          featureSet: featureSet,
+        buildSdkSummary(
+          resourceProvider: PhysicalResourceProvider.INSTANCE,
+          sdkPath: options.dartSdkPath,
         );
       }
 
@@ -555,11 +554,6 @@
     // Once options and embedders are processed, setup the SDK.
     _setupSdk(options, useSummaries, analysisOptions);
 
-    var sdkBundle = sdk.getLinkedBundle();
-    if (sdkBundle != null) {
-      summaryDataStore.addBundle(null, sdkBundle);
-    }
-
     // Choose a package resolution policy and a diet parsing policy based on
     // the command-line options.
     var sourceFactory = _chooseUriResolutionPolicy(options, embedderMap,
diff --git a/pkg/analyzer_cli/test/all.dart b/pkg/analyzer_cli/test/all.dart
index 7ea963e..55beb94 100644
--- a/pkg/analyzer_cli/test/all.dart
+++ b/pkg/analyzer_cli/test/all.dart
@@ -13,7 +13,6 @@
 import 'perf_report_test.dart' as perf_report;
 import 'reporter_test.dart' as reporter;
 import 'strong_mode_test.dart' as strong_mode;
-import 'verify_sorted_test.dart' as verify_sorted;
 
 void main() {
   analysis_options.main();
@@ -27,5 +26,4 @@
   perf_report.main();
   reporter.main();
   strong_mode.main();
-  verify_sorted.main();
 }
diff --git a/pkg/analyzer_cli/test/verify_sorted_test.dart b/pkg/analyzer_cli/test/verify_sorted_test.dart
deleted file mode 100644
index 57030b6..0000000
--- a/pkg/analyzer_cli/test/verify_sorted_test.dart
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io';
-
-import 'package:analysis_server/src/services/correction/sort_members.dart';
-import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
-import 'package:analyzer/dart/analysis/results.dart';
-import 'package:analyzer/dart/analysis/session.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/file_system/physical_file_system.dart';
-import 'package:test/test.dart';
-
-import 'utils.dart';
-
-void main() {
-  var provider = PhysicalResourceProvider.INSTANCE;
-  var normalizedRoot = provider.pathContext.normalize(packageRoot);
-  var packagePath = provider.pathContext.join(normalizedRoot, 'analyzer_cli');
-  var testDataPath = provider.pathContext.join(packagePath, 'test', 'data');
-
-  var collection = AnalysisContextCollection(
-      includedPaths: <String>[packagePath],
-      excludedPaths: [testDataPath],
-      resourceProvider: provider);
-  var contexts = collection.contexts;
-  if (contexts.length != 1) {
-    fail('The directory $packagePath contains multiple analysis contexts.');
-  }
-
-  buildTestsIn(contexts[0].currentSession, packagePath, testDataPath,
-      provider.getFolder(packagePath));
-}
-
-void buildTestsIn(AnalysisSession session, String testDirPath,
-    String testDataPath, Folder directory) {
-  var pathContext = session.resourceProvider.pathContext;
-  var children = directory.getChildren();
-  children.sort((first, second) => first.shortName.compareTo(second.shortName));
-  for (var child in children) {
-    if (child is Folder) {
-      if (child.path != testDataPath) {
-        buildTestsIn(session, testDirPath, testDataPath, child);
-      }
-    } else if (child is File && child.shortName.endsWith('.dart')) {
-      var path = child.path;
-      var relativePath = pathContext.relative(path, from: testDirPath);
-      test(relativePath, () {
-        var result = session.getParsedUnit(path);
-        if (result.state != ResultState.VALID) {
-          fail('Could not parse $path');
-        }
-        var code = result.content;
-        var unit = result.unit;
-        var errors = result.errors;
-        if (errors.isNotEmpty) {
-          fail('Errors found when parsing $path');
-        }
-        var sorter = MemberSorter(code, unit);
-        var edits = sorter.sort();
-        if (edits.isNotEmpty) {
-          fail('Unsorted file $path');
-        }
-      });
-    }
-  }
-}
diff --git a/pkg/analyzer_plugin/CHANGELOG.md b/pkg/analyzer_plugin/CHANGELOG.md
index 43fa9c2..14f32e9 100644
--- a/pkg/analyzer_plugin/CHANGELOG.md
+++ b/pkg/analyzer_plugin/CHANGELOG.md
@@ -1,9 +1,14 @@
+## 0.2.4
+- Exposed method `AnalyzerConverter.locationFromElement` (was previously
+  private).
+
 ## 0.2.3
 - Added class `Relevance`.
 - Removed `FixKind.name`, replaced with `FixKind.id`.  Technically this is a
   breaking change but we believe that in practice it is benign, since
   `FixKind.name` was only used for debugging.
 - Added function `computeDartNavigation`.
+- Note: never published (had problematic imports of package:analysis_server).
 
 ## 0.2.2
 - Change supported analyzer version to `^0.39.0`
diff --git a/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart b/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
index 8a56b73..9978fd4 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
@@ -21,36 +21,38 @@
 
   LocalDeclarationVisitor(this.offset);
 
-  void declaredClass(ClassDeclaration declaration);
+  void declaredClass(ClassDeclaration declaration) {}
 
-  void declaredClassTypeAlias(ClassTypeAlias declaration);
+  void declaredClassTypeAlias(ClassTypeAlias declaration) {}
+
+  void declaredConstructor(ConstructorDeclaration declaration) {}
 
   void declaredEnum(EnumDeclaration declaration) {}
 
-  void declaredExtension(ExtensionDeclaration declaration);
+  void declaredExtension(ExtensionDeclaration declaration) {}
 
-  void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl);
+  void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl) {}
 
-  void declaredFunction(FunctionDeclaration declaration);
+  void declaredFunction(FunctionDeclaration declaration) {}
 
-  void declaredFunctionTypeAlias(FunctionTypeAlias declaration);
+  void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {}
 
-  void declaredGenericTypeAlias(GenericTypeAlias declaration);
+  void declaredGenericTypeAlias(GenericTypeAlias declaration) {}
 
-  void declaredLabel(Label label, bool isCaseLabel);
+  void declaredLabel(Label label, bool isCaseLabel) {}
 
-  void declaredLocalVar(SimpleIdentifier name, TypeAnnotation type);
+  void declaredLocalVar(SimpleIdentifier name, TypeAnnotation type) {}
 
-  void declaredMethod(MethodDeclaration declaration);
+  void declaredMethod(MethodDeclaration declaration) {}
 
   void declaredMixin(MixinDeclaration declaration) {}
 
-  void declaredParam(SimpleIdentifier name, TypeAnnotation type);
+  void declaredParam(SimpleIdentifier name, TypeAnnotation type) {}
 
   void declaredTopLevelVar(
-      VariableDeclarationList varList, VariableDeclaration varDecl);
+      VariableDeclarationList varList, VariableDeclaration varDecl) {}
 
-  void declaredTypeParameter(TypeParameter node) {}
+  void declaredTypeParameter(TypeParameter declaration) {}
 
   /// Throw an exception indicating that [LocalDeclarationVisitor] should
   /// stop visiting. This is caught in [visit] which then exits normally.
@@ -141,6 +143,7 @@
 
   @override
   void visitConstructorDeclaration(ConstructorDeclaration node) {
+    declaredConstructor(node);
     _visitParamList(node.parameters);
     visitNode(node);
   }
diff --git a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
index d44469e..f1b94e7 100644
--- a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
+++ b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
@@ -123,7 +123,7 @@
             isConst: _isConst(element),
             isFinal: _isFinal(element),
             isStatic: _isStatic(element)),
-        location: _locationFromElement(element),
+        location: locationFromElement(element),
         typeParameters: _getTypeParametersString(element),
         parameters: _getParametersString(element),
         returnType: _getReturnTypeString(element));
@@ -185,6 +185,23 @@
   plugin.AnalysisErrorType convertErrorType(analyzer.ErrorType type) =>
       plugin.AnalysisErrorType(type.name);
 
+  /// Create a location based on an the given [element].
+  plugin.Location locationFromElement(analyzer.Element element) {
+    if (element == null || element.source == null) {
+      return null;
+    }
+    var offset = element.nameOffset;
+    var length = element.nameLength;
+    if (element is analyzer.CompilationUnitElement ||
+        (element is analyzer.LibraryElement && offset < 0)) {
+      offset = 0;
+      length = 0;
+    }
+    var unitElement = _getUnitElement(element);
+    var range = analyzer.SourceRange(offset, length);
+    return _locationForArgs(unitElement, range);
+  }
+
   /// Convert the element kind of the [element] from the 'analyzer' package to
   /// an element kind defined by the plugin API.
   plugin.ElementKind _convertElementToElementKind(analyzer.Element element) {
@@ -360,21 +377,4 @@
     return plugin.Location(unitElement.source.fullName, range.offset,
         range.length, startLine, startColumn);
   }
-
-  /// Create a location based on an the given [element].
-  plugin.Location _locationFromElement(analyzer.Element element) {
-    if (element == null || element.source == null) {
-      return null;
-    }
-    var offset = element.nameOffset;
-    var length = element.nameLength;
-    if (element is analyzer.CompilationUnitElement ||
-        (element is analyzer.LibraryElement && offset < 0)) {
-      offset = 0;
-      length = 0;
-    }
-    var unitElement = _getUnitElement(element);
-    var range = analyzer.SourceRange(offset, length);
-    return _locationForArgs(unitElement, range);
-  }
 }
diff --git a/pkg/analyzer_plugin/lib/utilities/completion/relevance.dart b/pkg/analyzer_plugin/lib/utilities/completion/relevance.dart
index 366957d..08c094e 100644
--- a/pkg/analyzer_plugin/lib/utilities/completion/relevance.dart
+++ b/pkg/analyzer_plugin/lib/utilities/completion/relevance.dart
@@ -91,3 +91,15 @@
   /// The relevance used when suggesting a type parameter.
   static const int typeParameter = 500;
 }
+
+/// A name scope for constants that are related to the relevance of completion
+/// suggestions. The values are required to be in the range [0, 1000].
+abstract class RelevanceBoost {
+  /// The relevance boost used when suggesting anything other than an enum
+  /// constant from an available declaration set.
+  static const int availableDeclaration = 10;
+
+  /// The relevance boost used when suggesting an enum constant from an
+  /// available declaration set.
+  static const int availableEnumConstant = 100;
+}
diff --git a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
index f375d47..c1664bb 100644
--- a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_server/src/protocol_server.dart' as protocol;
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
@@ -10,6 +9,7 @@
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer_plugin/utilities/analyzer_converter.dart';
 import 'package:analyzer_plugin/utilities/navigation/navigation.dart';
 
 NavigationCollector computeDartNavigation(
@@ -55,8 +55,9 @@
     if (element.location == null) {
       return;
     }
-    var kind = protocol.convertElementKind(element.kind);
-    var location = protocol.newLocation_fromElement(element);
+    var converter = AnalyzerConverter();
+    var kind = converter.convertElementKind(element.kind);
+    var location = converter.locationFromElement(element);
     if (location == null) {
       return;
     }
diff --git a/pkg/analyzer_plugin/pubspec.yaml b/pkg/analyzer_plugin/pubspec.yaml
index 9b537c1..85b313d3 100644
--- a/pkg/analyzer_plugin/pubspec.yaml
+++ b/pkg/analyzer_plugin/pubspec.yaml
@@ -1,6 +1,6 @@
 name: analyzer_plugin
 description: A framework and support code for building plugins for the analysis server.
-version: 0.2.3
+version: 0.2.4
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/analyzer_plugin
 
diff --git a/pkg/analyzer_plugin/test/src/utilities/visitors/local_declaration_visitor_test.dart b/pkg/analyzer_plugin/test/src/utilities/visitors/local_declaration_visitor_test.dart
index 56d45a7..bf85a20 100644
--- a/pkg/analyzer_plugin/test/src/utilities/visitors/local_declaration_visitor_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/visitors/local_declaration_visitor_test.dart
@@ -42,41 +42,7 @@
   TestVisitor(int offset) : super(offset);
 
   @override
-  void declaredClass(ClassDeclaration declaration) {}
-
-  @override
-  void declaredClassTypeAlias(ClassTypeAlias declaration) {}
-
-  @override
-  void declaredExtension(ExtensionDeclaration declaration) {}
-
-  @override
-  void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl) {}
-
-  @override
-  void declaredFunction(FunctionDeclaration declaration) {}
-
-  @override
-  void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {}
-
-  @override
-  void declaredGenericTypeAlias(GenericTypeAlias declaration) {}
-
-  @override
-  void declaredLabel(Label label, bool isCaseLabel) {}
-
-  @override
   void declaredLocalVar(SimpleIdentifier name, TypeAnnotation type) {
     expect(name, isNotNull);
   }
-
-  @override
-  void declaredMethod(MethodDeclaration declaration) {}
-
-  @override
-  void declaredParam(SimpleIdentifier name, TypeAnnotation type) {}
-
-  @override
-  void declaredTopLevelVar(
-      VariableDeclarationList varList, VariableDeclaration varDecl) {}
 }
diff --git a/pkg/analyzer_plugin/test/test_all.dart b/pkg/analyzer_plugin/test/test_all.dart
index 1284126..4e58423 100644
--- a/pkg/analyzer_plugin/test/test_all.dart
+++ b/pkg/analyzer_plugin/test/test_all.dart
@@ -8,7 +8,6 @@
 import 'plugin/test_all.dart' as plugin;
 import 'src/test_all.dart' as src;
 import 'utilities/test_all.dart' as utilities;
-import 'verify_sorted_test.dart' as verify_sorted;
 import 'verify_tests_test.dart' as verify_tests;
 
 void main() {
@@ -17,7 +16,6 @@
     src.main();
     utilities.main();
     verify_tests.main();
-    verify_sorted.main();
     defineReflectiveSuite(() {
       defineReflectiveTests(SpecTest);
     }, name: 'spec');
diff --git a/pkg/analyzer_plugin/test/verify_sorted_test.dart b/pkg/analyzer_plugin/test/verify_sorted_test.dart
deleted file mode 100644
index 617246b..0000000
--- a/pkg/analyzer_plugin/test/verify_sorted_test.dart
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io';
-
-import 'package:analysis_server/src/services/correction/sort_members.dart';
-import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
-import 'package:analyzer/dart/analysis/results.dart';
-import 'package:analyzer/dart/analysis/session.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/file_system/physical_file_system.dart';
-import 'package:test/test.dart';
-
-import 'utils/package_root.dart';
-
-void main() {
-  var provider = PhysicalResourceProvider.INSTANCE;
-  var normalizedRoot = provider.pathContext.normalize(packageRoot);
-  var packagePath =
-      provider.pathContext.join(normalizedRoot, 'analyzer_plugin');
-  // TODO(brianwilkerson) Fix the generator to sort the generated files and
-  //  remove these exclusions.
-  var generatedFilePaths = [
-    provider.pathContext
-        .join(packagePath, 'lib', 'protocol', 'protocol_common.dart'),
-    provider.pathContext
-        .join(packagePath, 'lib', 'protocol', 'protocol_generated.dart'),
-    provider.pathContext.join(packagePath, 'test', 'integration', 'support',
-        'integration_test_methods.dart'),
-    provider.pathContext.join(packagePath, 'test', 'integration', 'support',
-        'protocol_matchers.dart'),
-  ];
-
-  var collection = AnalysisContextCollection(
-      includedPaths: <String>[packagePath],
-      excludedPaths: generatedFilePaths,
-      resourceProvider: provider);
-  var contexts = collection.contexts;
-  if (contexts.length != 1) {
-    fail('The directory $packagePath contains multiple analysis contexts.');
-  }
-
-  buildTestsIn(contexts[0].currentSession, packagePath, generatedFilePaths,
-      provider.getFolder(packagePath));
-}
-
-void buildTestsIn(AnalysisSession session, String testDirPath,
-    List<String> generatedFilePaths, Folder directory) {
-  var pathContext = session.resourceProvider.pathContext;
-  var children = directory.getChildren();
-  children.sort((first, second) => first.shortName.compareTo(second.shortName));
-  for (var child in children) {
-    if (child is Folder) {
-      buildTestsIn(session, testDirPath, generatedFilePaths, child);
-    } else if (child is File && child.shortName.endsWith('.dart')) {
-      var path = child.path;
-      if (generatedFilePaths.contains(path)) {
-        continue;
-      }
-      var relativePath = pathContext.relative(path, from: testDirPath);
-      test(relativePath, () {
-        var result = session.getParsedUnit(path);
-        if (result.state != ResultState.VALID) {
-          fail('Could not parse $path');
-        }
-        var code = result.content;
-        var unit = result.unit;
-        var errors = result.errors;
-        if (errors.isNotEmpty) {
-          fail('Errors found when parsing $path');
-        }
-        var sorter = MemberSorter(code, unit);
-        var edits = sorter.sort();
-        if (edits.isNotEmpty) {
-          fail('Unsorted file $path');
-        }
-      });
-    }
-  }
-}
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index 7f4564c..965758e 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -875,7 +875,7 @@
     Display verbose information.
 
   -D<name>=<value>
-    Define an environment variable.
+    Define an environment declaration.
 
   --version
     Display version information.
diff --git a/pkg/compiler/lib/src/ir/constants.dart b/pkg/compiler/lib/src/ir/constants.dart
index a3d259a..ee22f63 100644
--- a/pkg/compiler/lib/src/ir/constants.dart
+++ b/pkg/compiler/lib/src/ir/constants.dart
@@ -21,16 +21,17 @@
       ir.TypeEnvironment typeEnvironment, ReportErrorFunction reportError,
       {Map<String, String> environment: const {},
       bool enableTripleShift = false,
-      bool supportReevaluationForTesting: false})
+      bool supportReevaluationForTesting: false,
+      ir.EvaluationMode evaluationMode})
       : _supportReevaluationForTesting = supportReevaluationForTesting,
-        // TODO(johnniwinther,sigmund): Pass evaluation mode for nnbd
-        //  strong/weak mode.
+        assert(evaluationMode != null),
         super(
             const Dart2jsConstantsBackend(supportsUnevaluatedConstants: false),
             environment,
             typeEnvironment,
             new ErrorReporter(reportError),
-            enableTripleShift: enableTripleShift);
+            enableTripleShift: enableTripleShift,
+            evaluationMode: evaluationMode);
 
   @override
   ErrorReporter get errorReporter => super.errorReporter;
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 edc5c05..fff5a8f 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
@@ -1831,12 +1831,12 @@
         }
         indexes.add(js.number(index));
       }
-      libraryPartsMapEntries.add(
-          new js.Property(js.string(loadId), new js.ArrayInitializer(indexes)));
+      libraryPartsMapEntries
+          .add(js.Property(js.string(loadId), js.ArrayInitializer(indexes)));
     });
 
-    deferredLoadingState.deferredLibraryParts
-        .setValue(new js.ObjectInitializer(libraryPartsMapEntries));
+    deferredLoadingState.deferredLibraryParts.setValue(
+        js.ObjectInitializer(libraryPartsMapEntries, isOneLiner: false));
     deferredLoadingState.deferredPartUris
         .setValue(js.stringArray(fragmentUris));
     deferredLoadingState.deferredPartHashes
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 90c7c44..7c7d005 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.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:front_end/src/api_prototype/constant_evaluator.dart' as ir;
 import 'package:front_end/src/api_unstable/dart2js.dart' as ir;
 
 import 'package:kernel/ast.dart' as ir;
@@ -1184,7 +1185,10 @@
     },
         environment: _environment.toMap(),
         enableTripleShift:
-            options.languageExperiments[ir.ExperimentalFlag.tripleShift]);
+            options.languageExperiments[ir.ExperimentalFlag.tripleShift],
+        evaluationMode: options.nullSafetyMode == NullSafetyMode.sound
+            ? ir.EvaluationMode.strong
+            : ir.EvaluationMode.weak);
   }
 
   @override
@@ -1328,7 +1332,8 @@
       var mainUri = elementEnvironment.mainLibrary.canonicalUri;
       // Tests permit lookup outside of dart: libraries.
       return mainUri.path.contains('tests/compiler/dart2js_native') ||
-          mainUri.path.contains('tests/compiler/dart2js_extra');
+          mainUri.path.contains(RegExp(r'(?<!generated_)tests/dart2js_2/internal')) ||
+          mainUri.path.contains(RegExp(r'(?<!generated_)tests/dart2js_2/native'));
     }
 
     DartType lookup(String typeName, {bool required}) {
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index ff92060..531eb4f 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -36,7 +36,8 @@
   bool allowedTestLibrary() {
     String scriptName = uri.path;
     return scriptName.contains('tests/compiler/dart2js_native') ||
-        scriptName.contains('tests/compiler/dart2js_extra') ||
+        scriptName.contains(RegExp(r'(?<!generated_)tests/dart2js_2/native')) ||
+        scriptName.contains(RegExp(r'(?<!generated_)tests/dart2js_2/internal')) ||
         scriptName.contains('generated_tests/dart2js_native/native_test');
   }
 
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index 8c34549..e9f7974 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -4,6 +4,7 @@
 
 library dart2js.kernel.element_map;
 
+import 'package:front_end/src/api_prototype/constant_evaluator.dart' as ir;
 import 'package:front_end/src/api_unstable/dart2js.dart' as ir;
 import 'package:js_runtime/shared/embedded_names.dart';
 import 'package:kernel/ast.dart' as ir;
@@ -817,7 +818,10 @@
     },
         environment: _environment.toMap(),
         enableTripleShift:
-            options.languageExperiments[ir.ExperimentalFlag.tripleShift]);
+            options.languageExperiments[ir.ExperimentalFlag.tripleShift],
+        evaluationMode: options.nullSafetyMode == NullSafetyMode.sound
+            ? ir.EvaluationMode.strong
+            : ir.EvaluationMode.weak);
   }
 
   @override
@@ -912,7 +916,8 @@
       var mainUri = elementEnvironment.mainLibrary.canonicalUri;
       // Tests permit lookup outside of dart: libraries.
       return mainUri.path.contains('tests/compiler/dart2js_native') ||
-          mainUri.path.contains('tests/compiler/dart2js_extra');
+          mainUri.path.contains(RegExp(r'(?<!generated_)tests/dart2js_2/internal')) ||
+          mainUri.path.contains(RegExp(r'(?<!generated_)tests/dart2js_2/native'));
     }
 
     DartType lookup(String typeName, {bool required}) {
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 1082a00..770ab50 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -230,7 +230,7 @@
 
   /// Pushes a boolean checking [expression] against null.
   pushCheckNull(HInstruction expression) {
-    push(new HIdentity(expression, graph.addConstantNull(closedWorld), null,
+    push(new HIdentity(expression, graph.addConstantNull(closedWorld),
         _abstractValueDomain.boolType));
   }
 
@@ -1322,7 +1322,7 @@
             visitCondition: () {
               HParameterValue parameter = parameters.values.first;
               push(new HIdentity(parameter, graph.addConstantNull(closedWorld),
-                  null, _abstractValueDomain.boolType));
+                  _abstractValueDomain.boolType));
             },
             visitThen: () {
               _closeAndGotoExit(HReturn(
@@ -1954,8 +1954,7 @@
       SourceInformation sourceInformation =
           _sourceInformationBuilder.buildForInMoveNext(node);
       HInstruction length = buildGetLength(sourceInformation);
-      push(new HIdentity(
-          length, originalLength, null, _abstractValueDomain.boolType)
+      push(new HIdentity(length, originalLength, _abstractValueDomain.boolType)
         ..sourceInformation = sourceInformation);
       _pushStaticInvocation(
           _commonElements.checkConcurrentModificationError,
@@ -1989,7 +1988,7 @@
           sourceInformation: sourceInformation);
       HInstruction length = buildGetLength(sourceInformation);
       HInstruction compare =
-          new HLess(index, length, null, _abstractValueDomain.boolType)
+          new HLess(index, length, _abstractValueDomain.boolType)
             ..sourceInformation = sourceInformation;
       add(compare);
       return compare;
@@ -2012,7 +2011,7 @@
           _sourceInformationBuilder.buildForInCurrent(node);
       HInstruction index = localsHandler.readLocal(indexVariable,
           sourceInformation: sourceInformation);
-      HInstruction value = new HIndex(array, index, null, type)
+      HInstruction value = new HIndex(array, index, type)
         ..sourceInformation = sourceInformation;
       add(value);
 
@@ -2041,7 +2040,7 @@
           sourceInformation: sourceInformation);
       HInstruction one = graph.addConstantInt(1, closedWorld);
       HInstruction addInstruction =
-          new HAdd(index, one, null, _abstractValueDomain.positiveIntType)
+          new HAdd(index, one, _abstractValueDomain.positiveIntType)
             ..sourceInformation = sourceInformation;
       add(addInstruction);
       localsHandler.updateLocal(indexVariable, addInstruction,
diff --git a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
index d5da5f8..c981aa7 100644
--- a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
+++ b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
@@ -144,8 +144,8 @@
         return null;
       }
     }
-    HIndexAssign converted = new HIndexAssign(closedWorld.abstractValueDomain,
-        receiver, index, value, instruction.selector);
+    HIndexAssign converted = new HIndexAssign(
+        closedWorld.abstractValueDomain, receiver, index, value);
     log?.registerIndexAssign(instruction, converted);
     return converted;
   }
@@ -217,8 +217,8 @@
     if (abstractValueDomain.isTypedArray(receiverType).isDefinitelyTrue) {
       elementType = abstractValueDomain.excludeNull(elementType);
     }
-    HIndex converted = new HIndex(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, elementType);
+    HIndex converted =
+        new HIndex(instruction.inputs[1], instruction.inputs[2], elementType);
     log?.registerIndex(instruction, converted);
     return converted;
   }
@@ -255,8 +255,8 @@
       OptimizationTestLog log) {
     HInstruction input = instruction.inputs[1];
     if (input.isNumber(closedWorld.abstractValueDomain).isDefinitelyTrue) {
-      HBitNot converted = new HBitNot(input, instruction.selector,
-          computeTypeFromInputTypes(instruction, results, closedWorld));
+      HBitNot converted = new HBitNot(
+          input, computeTypeFromInputTypes(instruction, results, closedWorld));
       log?.registerBitNot(instruction, converted);
       return converted;
     }
@@ -306,8 +306,8 @@
       OptimizationTestLog log) {
     HInstruction input = instruction.inputs[1];
     if (input.isNumber(closedWorld.abstractValueDomain).isDefinitelyTrue) {
-      HNegate converted = new HNegate(input, instruction.selector,
-          computeTypeFromInputTypes(instruction, results, closedWorld));
+      HNegate converted = new HNegate(
+          input, computeTypeFromInputTypes(instruction, results, closedWorld));
       log?.registerUnaryNegate(instruction, converted);
       return converted;
     }
@@ -345,8 +345,8 @@
       OptimizationTestLog log) {
     HInstruction input = instruction.inputs[1];
     if (input.isNumber(closedWorld.abstractValueDomain).isDefinitelyTrue) {
-      HAbs converted = new HAbs(input, instruction.selector,
-          computeTypeFromInputTypes(instruction, results, closedWorld));
+      HAbs converted = new HAbs(
+          input, computeTypeFromInputTypes(instruction, results, closedWorld));
       log?.registerAbs(instruction, converted);
       return converted;
     }
@@ -479,10 +479,7 @@
   @override
   HInstruction newBuiltinVariant(HInvokeDynamic instruction,
       GlobalTypeInferenceResults results, JClosedWorld closedWorld) {
-    return new HAdd(
-        instruction.inputs[1],
-        instruction.inputs[2],
-        instruction.selector,
+    return new HAdd(instruction.inputs[1], instruction.inputs[2],
         computeTypeFromInputTypes(instruction, results, closedWorld));
   }
 
@@ -515,7 +512,7 @@
   HInstruction newBuiltinVariant(HInvokeDynamic instruction,
       GlobalTypeInferenceResults results, JClosedWorld closedWorld) {
     return new HDivide(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, closedWorld.abstractValueDomain.doubleType);
+        closedWorld.abstractValueDomain.doubleType);
   }
 
   @override
@@ -587,10 +584,7 @@
 
     if (inputsArePositiveIntegers(instruction, closedWorld) &&
         !canBeNegativeZero(instruction.getDartReceiver(closedWorld))) {
-      return new HRemainder(
-          instruction.inputs[1],
-          instruction.inputs[2],
-          instruction.selector,
+      return new HRemainder(instruction.inputs[1], instruction.inputs[2],
           computeTypeFromInputTypes(instruction, results, closedWorld));
     }
     // TODO(sra):
@@ -632,10 +626,7 @@
   @override
   HInstruction newBuiltinVariant(HInvokeDynamic instruction,
       GlobalTypeInferenceResults results, JClosedWorld closedWorld) {
-    return new HRemainder(
-        instruction.inputs[1],
-        instruction.inputs[2],
-        instruction.selector,
+    return new HRemainder(instruction.inputs[1], instruction.inputs[2],
         computeTypeFromInputTypes(instruction, results, closedWorld));
   }
 
@@ -666,10 +657,7 @@
   @override
   HInstruction newBuiltinVariant(HInvokeDynamic instruction,
       GlobalTypeInferenceResults results, JClosedWorld closedWorld) {
-    return new HMultiply(
-        instruction.inputs[1],
-        instruction.inputs[2],
-        instruction.selector,
+    return new HMultiply(instruction.inputs[1], instruction.inputs[2],
         computeTypeFromInputTypes(instruction, results, closedWorld));
   }
 
@@ -691,10 +679,7 @@
   @override
   HInstruction newBuiltinVariant(HInvokeDynamic instruction,
       GlobalTypeInferenceResults results, JClosedWorld closedWorld) {
-    return new HSubtract(
-        instruction.inputs[1],
-        instruction.inputs[2],
-        instruction.selector,
+    return new HSubtract(instruction.inputs[1], instruction.inputs[2],
         computeTypeFromInputTypes(instruction, results, closedWorld));
   }
 
@@ -799,10 +784,7 @@
   @override
   HInstruction newBuiltinVariant(HInvokeDynamic instruction,
       GlobalTypeInferenceResults results, JClosedWorld closedWorld) {
-    return new HTruncatingDivide(
-        instruction.inputs[1],
-        instruction.inputs[2],
-        instruction.selector,
+    return new HTruncatingDivide(instruction.inputs[1], instruction.inputs[2],
         computeTypeFromInputTypes(instruction, results, closedWorld));
   }
 
@@ -903,10 +885,7 @@
   @override
   HInstruction newBuiltinVariant(HInvokeDynamic instruction,
       GlobalTypeInferenceResults results, JClosedWorld closedWorld) {
-    return new HShiftLeft(
-        instruction.inputs[1],
-        instruction.inputs[2],
-        instruction.selector,
+    return new HShiftLeft(instruction.inputs[1], instruction.inputs[2],
         computeTypeFromInputTypes(instruction, results, closedWorld));
   }
 
@@ -977,10 +956,7 @@
   @override
   HInstruction newBuiltinVariant(HInvokeDynamic instruction,
       GlobalTypeInferenceResults results, JClosedWorld closedWorld) {
-    return new HShiftRight(
-        instruction.inputs[1],
-        instruction.inputs[2],
-        instruction.selector,
+    return new HShiftRight(instruction.inputs[1], instruction.inputs[2],
         computeTypeFromInputTypes(instruction, results, closedWorld));
   }
 
@@ -1019,10 +995,7 @@
   @override
   HInstruction newBuiltinVariant(HInvokeDynamic instruction,
       GlobalTypeInferenceResults results, JClosedWorld closedWorld) {
-    return new HBitOr(
-        instruction.inputs[1],
-        instruction.inputs[2],
-        instruction.selector,
+    return new HBitOr(instruction.inputs[1], instruction.inputs[2],
         computeTypeFromInputTypes(instruction, results, closedWorld));
   }
 
@@ -1059,10 +1032,7 @@
   @override
   HInstruction newBuiltinVariant(HInvokeDynamic instruction,
       GlobalTypeInferenceResults results, JClosedWorld closedWorld) {
-    return new HBitAnd(
-        instruction.inputs[1],
-        instruction.inputs[2],
-        instruction.selector,
+    return new HBitAnd(instruction.inputs[1], instruction.inputs[2],
         computeTypeFromInputTypes(instruction, results, closedWorld));
   }
 
@@ -1096,10 +1066,7 @@
   @override
   HInstruction newBuiltinVariant(HInvokeDynamic instruction,
       GlobalTypeInferenceResults results, JClosedWorld closedWorld) {
-    return new HBitXor(
-        instruction.inputs[1],
-        instruction.inputs[2],
-        instruction.selector,
+    return new HBitXor(instruction.inputs[1], instruction.inputs[2],
         computeTypeFromInputTypes(instruction, results, closedWorld));
   }
 
@@ -1205,7 +1172,7 @@
   HInstruction newBuiltinVariant(
       HInvokeDynamic instruction, JClosedWorld closedWorld) {
     return new HIdentity(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, closedWorld.abstractValueDomain.boolType);
+        closedWorld.abstractValueDomain.boolType);
   }
 
   @override
@@ -1227,7 +1194,7 @@
   HInstruction newBuiltinVariant(
       HInvokeDynamic instruction, JClosedWorld closedWorld) {
     return new HLess(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, closedWorld.abstractValueDomain.boolType);
+        closedWorld.abstractValueDomain.boolType);
   }
 
   @override
@@ -1249,7 +1216,7 @@
   HInstruction newBuiltinVariant(
       HInvokeDynamic instruction, JClosedWorld closedWorld) {
     return new HGreater(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, closedWorld.abstractValueDomain.boolType);
+        closedWorld.abstractValueDomain.boolType);
   }
 
   @override
@@ -1271,7 +1238,7 @@
   HInstruction newBuiltinVariant(
       HInvokeDynamic instruction, JClosedWorld closedWorld) {
     return new HGreaterEqual(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, closedWorld.abstractValueDomain.boolType);
+        closedWorld.abstractValueDomain.boolType);
   }
 
   @override
@@ -1293,7 +1260,7 @@
   HInstruction newBuiltinVariant(
       HInvokeDynamic instruction, JClosedWorld closedWorld) {
     return new HLessEqual(instruction.inputs[1], instruction.inputs[2],
-        instruction.selector, closedWorld.abstractValueDomain.boolType);
+        closedWorld.abstractValueDomain.boolType);
   }
 
   @override
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index e7ea8ac..ebfce15 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -2519,9 +2519,7 @@
 }
 
 abstract class HInvokeBinary extends HInstruction {
-  final Selector selector;
-  HInvokeBinary(
-      HInstruction left, HInstruction right, this.selector, AbstractValue type)
+  HInvokeBinary(HInstruction left, HInstruction right, AbstractValue type)
       : super(<HInstruction>[left, right], type) {
     sideEffects.clearAllSideEffects();
     sideEffects.clearAllDependencies();
@@ -2535,17 +2533,15 @@
 }
 
 abstract class HBinaryArithmetic extends HInvokeBinary {
-  HBinaryArithmetic(HInstruction left, HInstruction right, Selector selector,
-      AbstractValue type)
-      : super(left, right, selector, type);
+  HBinaryArithmetic(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   constant_system.BinaryOperation operation();
 }
 
 class HAdd extends HBinaryArithmetic {
-  HAdd(HInstruction left, HInstruction right, Selector selector,
-      AbstractValue type)
-      : super(left, right, selector, type);
+  HAdd(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitAdd(this);
 
@@ -2560,9 +2556,8 @@
 }
 
 class HDivide extends HBinaryArithmetic {
-  HDivide(HInstruction left, HInstruction right, Selector selector,
-      AbstractValue type)
-      : super(left, right, selector, type);
+  HDivide(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitDivide(this);
 
@@ -2577,9 +2572,8 @@
 }
 
 class HMultiply extends HBinaryArithmetic {
-  HMultiply(HInstruction left, HInstruction right, Selector selector,
-      AbstractValue type)
-      : super(left, right, selector, type);
+  HMultiply(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitMultiply(this);
 
@@ -2594,9 +2588,8 @@
 }
 
 class HSubtract extends HBinaryArithmetic {
-  HSubtract(HInstruction left, HInstruction right, Selector selector,
-      AbstractValue type)
-      : super(left, right, selector, type);
+  HSubtract(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitSubtract(this);
 
@@ -2611,9 +2604,8 @@
 }
 
 class HTruncatingDivide extends HBinaryArithmetic {
-  HTruncatingDivide(HInstruction left, HInstruction right, Selector selector,
-      AbstractValue type)
-      : super(left, right, selector, type);
+  HTruncatingDivide(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitTruncatingDivide(this);
 
@@ -2629,9 +2621,8 @@
 }
 
 class HRemainder extends HBinaryArithmetic {
-  HRemainder(HInstruction left, HInstruction right, Selector selector,
-      AbstractValue type)
-      : super(left, right, selector, type);
+  HRemainder(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitRemainder(this);
 
@@ -2668,15 +2659,13 @@
 }
 
 abstract class HBinaryBitOp extends HInvokeBinary {
-  HBinaryBitOp(HInstruction left, HInstruction right, Selector selector,
-      AbstractValue type)
-      : super(left, right, selector, type);
+  HBinaryBitOp(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
 }
 
 class HShiftLeft extends HBinaryBitOp {
-  HShiftLeft(HInstruction left, HInstruction right, Selector selector,
-      AbstractValue type)
-      : super(left, right, selector, type);
+  HShiftLeft(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitShiftLeft(this);
 
@@ -2691,9 +2680,8 @@
 }
 
 class HShiftRight extends HBinaryBitOp {
-  HShiftRight(HInstruction left, HInstruction right, Selector selector,
-      AbstractValue type)
-      : super(left, right, selector, type);
+  HShiftRight(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitShiftRight(this);
 
@@ -2708,9 +2696,8 @@
 }
 
 class HBitOr extends HBinaryBitOp {
-  HBitOr(HInstruction left, HInstruction right, Selector selector,
-      AbstractValue type)
-      : super(left, right, selector, type);
+  HBitOr(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitBitOr(this);
 
@@ -2725,9 +2712,8 @@
 }
 
 class HBitAnd extends HBinaryBitOp {
-  HBitAnd(HInstruction left, HInstruction right, Selector selector,
-      AbstractValue type)
-      : super(left, right, selector, type);
+  HBitAnd(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitBitAnd(this);
 
@@ -2742,9 +2728,8 @@
 }
 
 class HBitXor extends HBinaryBitOp {
-  HBitXor(HInstruction left, HInstruction right, Selector selector,
-      AbstractValue type)
-      : super(left, right, selector, type);
+  HBitXor(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitBitXor(this);
 
@@ -2759,9 +2744,7 @@
 }
 
 abstract class HInvokeUnary extends HInstruction {
-  final Selector selector;
-  HInvokeUnary(HInstruction input, this.selector, type)
-      : super(<HInstruction>[input], type) {
+  HInvokeUnary(HInstruction input, type) : super(<HInstruction>[input], type) {
     sideEffects.clearAllSideEffects();
     sideEffects.clearAllDependencies();
     setUseGvn();
@@ -2773,8 +2756,7 @@
 }
 
 class HNegate extends HInvokeUnary {
-  HNegate(HInstruction input, Selector selector, AbstractValue type)
-      : super(input, selector, type);
+  HNegate(HInstruction input, AbstractValue type) : super(input, type);
   @override
   accept(HVisitor visitor) => visitor.visitNegate(this);
 
@@ -2789,8 +2771,7 @@
 }
 
 class HAbs extends HInvokeUnary {
-  HAbs(HInstruction input, Selector selector, AbstractValue type)
-      : super(input, selector, type);
+  HAbs(HInstruction input, AbstractValue type) : super(input, type);
   @override
   accept(HVisitor visitor) => visitor.visitAbs(this);
 
@@ -2805,8 +2786,7 @@
 }
 
 class HBitNot extends HInvokeUnary {
-  HBitNot(HInstruction input, Selector selector, AbstractValue type)
-      : super(input, selector, type);
+  HBitNot(HInstruction input, AbstractValue type) : super(input, type);
   @override
   accept(HVisitor visitor) => visitor.visitBitNot(this);
 
@@ -3131,14 +3111,16 @@
 
 abstract class HRelational extends HInvokeBinary {
   bool usesBoolifiedInterceptor = false;
-  HRelational(left, right, selector, type) : super(left, right, selector, type);
+  HRelational(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
 }
 
 class HIdentity extends HRelational {
   // Cached codegen decision.
   String singleComparisonOp; // null, '===', '=='
 
-  HIdentity(left, right, selector, type) : super(left, right, selector, type);
+  HIdentity(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitIdentity(this);
 
@@ -3153,7 +3135,8 @@
 }
 
 class HGreater extends HRelational {
-  HGreater(left, right, selector, type) : super(left, right, selector, type);
+  HGreater(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitGreater(this);
 
@@ -3168,8 +3151,8 @@
 }
 
 class HGreaterEqual extends HRelational {
-  HGreaterEqual(left, right, selector, type)
-      : super(left, right, selector, type);
+  HGreaterEqual(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitGreaterEqual(this);
 
@@ -3184,7 +3167,8 @@
 }
 
 class HLess extends HRelational {
-  HLess(left, right, selector, type) : super(left, right, selector, type);
+  HLess(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitLess(this);
 
@@ -3199,7 +3183,8 @@
 }
 
 class HLessEqual extends HRelational {
-  HLessEqual(left, right, selector, type) : super(left, right, selector, type);
+  HLessEqual(HInstruction left, HInstruction right, AbstractValue type)
+      : super(left, right, type);
   @override
   accept(HVisitor visitor) => visitor.visitLessEqual(this);
 
@@ -3472,9 +3457,7 @@
 /// The primitive array indexing operation. Note that this instruction
 /// does not throw because we generate the checks explicitly.
 class HIndex extends HInstruction {
-  final Selector selector;
-  HIndex(HInstruction receiver, HInstruction index, this.selector,
-      AbstractValue type)
+  HIndex(HInstruction receiver, HInstruction index, AbstractValue type)
       : super(<HInstruction>[receiver, index], type) {
     sideEffects.clearAllSideEffects();
     sideEffects.clearAllDependencies();
@@ -3514,9 +3497,8 @@
 /// The primitive array assignment operation. Note that this instruction
 /// does not throw because we generate the checks explicitly.
 class HIndexAssign extends HInstruction {
-  final Selector selector;
   HIndexAssign(AbstractValueDomain domain, HInstruction receiver,
-      HInstruction index, HInstruction value, this.selector)
+      HInstruction index, HInstruction value)
       : super(<HInstruction>[receiver, index, value], domain.emptyType) {
     sideEffects.clearAllSideEffects();
     sideEffects.clearAllDependencies();
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index 8b38f2f..ff1f05e 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -373,10 +373,10 @@
         _mostlyEmpty(whenNullBlock) &&
         _mostlyEmpty(whenNotNullBlock)) {
       HInstruction trueConstant = _graph.addConstantBool(true, _closedWorld);
-      HInstruction replacement = new HIdentity(
-          tested, trueConstant, null, _abstractValueDomain.boolType)
-        ..sourceElement = phi.sourceElement
-        ..sourceInformation = phi.sourceInformation;
+      HInstruction replacement =
+          new HIdentity(tested, trueConstant, _abstractValueDomain.boolType)
+            ..sourceElement = phi.sourceElement
+            ..sourceInformation = phi.sourceInformation;
       block.rewrite(phi, replacement);
       block.addAtEntry(replacement);
       block.removePhi(phi);
@@ -395,8 +395,8 @@
         _mostlyEmpty(whenNullBlock) &&
         _mostlyEmpty(whenNotNullBlock)) {
       HInstruction falseConstant = _graph.addConstantBool(false, _closedWorld);
-      HInstruction compare = new HIdentity(
-          tested, falseConstant, null, _abstractValueDomain.boolType);
+      HInstruction compare =
+          new HIdentity(tested, falseConstant, _abstractValueDomain.boolType);
       block.addAtEntry(compare);
       HInstruction replacement =
           new HNot(compare, _abstractValueDomain.boolType)
@@ -1584,7 +1584,7 @@
     if (element == commonElements.identicalFunction) {
       if (node.inputs.length == 2) {
         return new HIdentity(
-            node.inputs[0], node.inputs[1], null, _abstractValueDomain.boolType)
+            node.inputs[0], node.inputs[1], _abstractValueDomain.boolType)
           ..sourceInformation = node.sourceInformation;
       }
     } else if (element == commonElements.setRuntimeTypeInfo) {
@@ -2181,7 +2181,6 @@
         HInstruction nullTest = HIdentity(
             node.checkedInput,
             _graph.addConstantNull(_closedWorld),
-            null,
             _abstractValueDomain.boolType);
         if (specialization == IsTestSpecialization.isNull) return nullTest;
         nullTest.sourceInformation = node.sourceInformation;
diff --git a/pkg/compiler/test/codegen/model_data/constant_folding.dart b/pkg/compiler/test/codegen/model_data/constant_folding.dart
index 4b0d8c2..af6a2e6 100644
--- a/pkg/compiler/test/codegen/model_data/constant_folding.dart
+++ b/pkg/compiler/test/codegen/model_data/constant_folding.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-// Derived from dart2js_extra/constant_folding_test
+// Derived from tests/dart2js_2/constant_folding_test
 
 import "package:expect/expect.dart";
 
diff --git a/pkg/compiler/test/member_usage/data/constant_folding.dart b/pkg/compiler/test/member_usage/data/constant_folding.dart
index 89dd97f..e36e8d4 100644
--- a/pkg/compiler/test/member_usage/data/constant_folding.dart
+++ b/pkg/compiler/test/member_usage/data/constant_folding.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-// Derived from dart2js_extra/constant_folding_test
+// Derived from tests/dart2js_2/constant_folding_test
 
 import "package:expect/expect.dart";
 
diff --git a/pkg/compiler/test/model/cfe_constant_evaluation_test.dart b/pkg/compiler/test/model/cfe_constant_evaluation_test.dart
index da4b870..803301d 100644
--- a/pkg/compiler/test/model/cfe_constant_evaluation_test.dart
+++ b/pkg/compiler/test/model/cfe_constant_evaluation_test.dart
@@ -20,6 +20,8 @@
 import 'package:compiler/src/ir/visitors.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:compiler/src/kernel/element_map_impl.dart';
+import 'package:compiler/src/options.dart';
+import 'package:front_end/src/api_prototype/constant_evaluator.dart' as ir;
 import 'package:front_end/src/api_unstable/dart2js.dart' as ir;
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/type_environment.dart' as ir;
@@ -686,7 +688,13 @@
             // the "real error message" is the first in the context.
             errors.add(context.first.code.name);
             reportLocatedMessage(elementMap.reporter, message, context);
-          }, environment: environment, supportReevaluationForTesting: true);
+          },
+                  environment: environment,
+                  supportReevaluationForTesting: true,
+                  evaluationMode:
+                      compiler.options.nullSafetyMode == NullSafetyMode.sound
+                          ? ir.EvaluationMode.strong
+                          : ir.EvaluationMode.weak);
           ir.Constant evaluatedConstant = evaluator.evaluate(
               new ir.StaticTypeContext(node, typeEnvironment), initializer);
 
diff --git a/pkg/compiler/test/model/native_test.dart b/pkg/compiler/test/model/native_test.dart
index fda3805..e085842 100644
--- a/pkg/compiler/test/model/native_test.dart
+++ b/pkg/compiler/test/model/native_test.dart
@@ -20,7 +20,7 @@
 
 main() {
   asyncTest(() async {
-    await runTest('tests/compiler/dart2js_extra/jsinterop_test.dart', '', {
+    await runTest('tests/dart2js_2/jsinterop_test.dart', '', {
       'Class': Kind.regular,
       'JsInteropClass': Kind.jsInterop,
       'topLevelField': Kind.regular,
@@ -80,7 +80,7 @@
       '53',
       '54',
     ]);
-    await runTest('tests/compiler/dart2js_extra/non_jsinterop_test.dart', '', {
+    await runTest('tests/dart2js_2/non_jsinterop_test.dart', '', {
       'Class': Kind.regular,
       'JsInteropClass': Kind.jsInterop,
       'topLevelField': Kind.regular,
diff --git a/pkg/compiler/test/rti/data/as.dart b/pkg/compiler/test/rti/data/as.dart
index d61df9a..a8c9d3e 100644
--- a/pkg/compiler/test/rti/data/as.dart
+++ b/pkg/compiler/test/rti/data/as.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-// Derived from dart2js_extra/generic_type_error_message_test.
+// Derived from tests/dart2js_2/generic_type_error_message_test.
 
 import 'package:expect/expect.dart';
 
diff --git a/pkg/dart2native/bin/dart2native.dart b/pkg/dart2native/bin/dart2native.dart
index d51368d..bfe7ec8 100644
--- a/pkg/dart2native/bin/dart2native.dart
+++ b/pkg/dart2native/bin/dart2native.dart
@@ -116,7 +116,7 @@
 
   final ArgParser parser = ArgParser(usageLineLength: outputLineWidth)
     ..addMultiOption('define', abbr: 'D', valueHelp: 'key=value', help: '''
-Set values of environment variables. To specify multiple variables, use multiple options or use commas to separate key-value pairs.
+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.')
diff --git a/pkg/dart2native/lib/dart2native.dart b/pkg/dart2native/lib/dart2native.dart
index 21df61f..5bcceb1 100644
--- a/pkg/dart2native/lib/dart2native.dart
+++ b/pkg/dart2native/lib/dart2native.dart
@@ -37,14 +37,9 @@
   return Process.run('chmod', ['+x', outputFile]);
 }
 
-Future generateAotKernel(
-    String dart,
-    String genKernel,
-    String platformDill,
-    String sourceFile,
-    String kernelFile,
-    String packages,
-    List<String> defines) {
+Future generateAotKernel(String dart, String genKernel, String platformDill,
+    String sourceFile, String kernelFile, String packages, List<String> defines,
+    {List<String> extraGenKernelOptions = const []}) {
   return Process.run(dart, [
     genKernel,
     '--platform',
@@ -55,6 +50,7 @@
     if (packages != null) ...['--packages', packages],
     '-o',
     kernelFile,
+    ...extraGenKernelOptions,
     sourceFile
   ]);
 }
diff --git a/pkg/dartdev/lib/src/commands/create.dart b/pkg/dartdev/lib/src/commands/create.dart
index c323f78..cb95a1c 100644
--- a/pkg/dartdev/lib/src/commands/create.dart
+++ b/pkg/dartdev/lib/src/commands/create.dart
@@ -39,6 +39,7 @@
       allowed: legalTemplateIds,
       help: 'The project template to use.',
       defaultsTo: defaultTemplateId,
+      abbr: 't',
     );
     argParser.addFlag('pub',
         defaultsTo: true,
diff --git a/pkg/dartdev/lib/src/commands/format.dart b/pkg/dartdev/lib/src/commands/format.dart
index 30f8b67..c812ee1 100644
--- a/pkg/dartdev/lib/src/commands/format.dart
+++ b/pkg/dartdev/lib/src/commands/format.dart
@@ -30,13 +30,7 @@
 
   @override
   FutureOr<int> run() async {
-    // TODO(jwren) The verbose flag was added to dartfmt in version 1.3.4 with
-    // https://github.com/dart-lang/dart_style/pull/887, this version is rolled
-    // into the dart sdk build, we can remove the removal of '-v' and
-    // '--verbose':
-    List<String> args = List.from(argResults.arguments)
-      ..remove('-v')
-      ..remove('--verbose');
+    List<String> args = List.from(argResults.arguments);
 
     // By printing and returning if there are no arguments, this changes the
     // default unix-pipe behavior of dartfmt:
diff --git a/pkg/dds/lib/src/client.dart b/pkg/dds/lib/src/client.dart
index 1ab7910..7d9d5c0 100644
--- a/pkg/dds/lib/src/client.dart
+++ b/pkg/dds/lib/src/client.dart
@@ -187,7 +187,7 @@
     // Unless otherwise specified, the request is forwarded to the VM service.
     // NOTE: This must be the last fallback registered.
     _clientPeer.registerFallback((parameters) async =>
-        await _vmServicePeer.sendRequest(parameters.method, parameters.asMap));
+        await _vmServicePeer.sendRequest(parameters.method, parameters.value));
   }
 
   static int _idCounter = 0;
diff --git a/pkg/dev_compiler/test/nullable_inference_test.dart b/pkg/dev_compiler/test/nullable_inference_test.dart
index f1cadb9..8a8b513 100644
--- a/pkg/dev_compiler/test/nullable_inference_test.dart
+++ b/pkg/dev_compiler/test/nullable_inference_test.dart
@@ -668,7 +668,8 @@
       sdkUri, packagesUri, null, [], DevCompilerTarget(TargetFlags()),
       fileSystem: _fileSystem,
       experiments: const {},
-      environmentDefines: const {});
+      environmentDefines: const {},
+      nnbdMode: fe.NnbdMode.Weak);
   if (!identical(oldCompilerState, _compilerState)) inference = null;
   var result =
       await fe.compile(_compilerState, [mainUri], diagnosticMessageHandler);
diff --git a/pkg/front_end/lib/src/api_prototype/compiler_options.dart b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
index 602303d..2e8dc26 100644
--- a/pkg/front_end/lib/src/api_prototype/compiler_options.dart
+++ b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
@@ -16,6 +16,7 @@
 
 import 'experimental_flags.dart'
     show
+        AllowedExperimentalFlags,
         defaultExperimentalFlags,
         ExperimentalFlag,
         expiredExperimentalFlags,
@@ -129,6 +130,8 @@
   /// Features not mentioned in the map will have their default value.
   Map<ExperimentalFlag, bool> experimentalFlags = <ExperimentalFlag, bool>{};
 
+  AllowedExperimentalFlags allowedExperimentalFlags;
+
   /// Environment map used when evaluating `bool.fromEnvironment`,
   /// `int.fromEnvironment` and `String.fromEnvironment` during constant
   /// evaluation. If the map is `null`, all environment constants will be left
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 d5094b8..9a9da8c 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
@@ -1,80 +1,117 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
-// NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
-//
-// Instead modify 'tools/experimental_features.yaml' and run
-// 'pkg/front_end/tool/fasta generate-experimental-flags' to update.
-
 import 'package:kernel/kernel.dart' show Version;
 
-enum ExperimentalFlag {
-  constantUpdate2018,
-  controlFlowCollections,
-  extensionMethods,
-  nonNullable,
-  nonfunctionTypeAliases,
-  setLiterals,
-  spreadCollections,
-  tripleShift,
-  variance,
-}
+part 'experimental_flags_generated.dart';
 
-const Version enableConstantUpdate2018Version = const Version(2, 4);
-const Version enableControlFlowCollectionsVersion = const Version(2, 2);
-const Version enableExtensionMethodsVersion = const Version(2, 6);
-const Version enableNonNullableVersion = const Version(2, 9);
-const Version enableNonfunctionTypeAliasesVersion = const Version(2, 9);
-const Version enableSetLiteralsVersion = const Version(2, 2);
-const Version enableSpreadCollectionsVersion = const Version(2, 2);
-const Version enableTripleShiftVersion = const Version(2, 9);
-const Version enableVarianceVersion = const Version(2, 9);
+/// The set of experiments enabled for SDK and packages.
+///
+/// This are derived from an `allowed_experiments.json` file whose default is
+/// located in `sdk_nnbd/lib/_internal/allowed_experiments.json`.
+class AllowedExperimentalFlags {
+  /// The set of experiments that are enabled for all SDK libraries other than
+  /// for those which are specified in [sdkLibraryExperiments].
+  final Set<ExperimentalFlag> sdkDefaultExperiments;
 
-ExperimentalFlag parseExperimentalFlag(String flag) {
-  switch (flag) {
-    case "constant-update-2018":
-      return ExperimentalFlag.constantUpdate2018;
-    case "control-flow-collections":
-      return ExperimentalFlag.controlFlowCollections;
-    case "extension-methods":
-      return ExperimentalFlag.extensionMethods;
-    case "non-nullable":
-      return ExperimentalFlag.nonNullable;
-    case "nonfunction-type-aliases":
-      return ExperimentalFlag.nonfunctionTypeAliases;
-    case "set-literals":
-      return ExperimentalFlag.setLiterals;
-    case "spread-collections":
-      return ExperimentalFlag.spreadCollections;
-    case "triple-shift":
-      return ExperimentalFlag.tripleShift;
-    case "variance":
-      return ExperimentalFlag.variance;
+  /// Mapping from individual SDK libraries, e.g. 'core', to the set of
+  /// experiments that are enabled for this library.
+  final Map<String, Set<ExperimentalFlag>> sdkLibraryExperiments;
+
+  /// Mapping from package names, e.g. 'path', to the set of experiments that
+  /// are enabled for all files of this package.
+  final Map<String, Set<ExperimentalFlag>> packageExperiments;
+
+  const AllowedExperimentalFlags({
+    this.sdkDefaultExperiments: const {},
+    this.sdkLibraryExperiments: const {},
+    this.packageExperiments: const {},
+  });
+
+  /// Return the set of enabled experiments for the package with the [name],
+  /// e.g. "path", possibly `null`.
+  Set<ExperimentalFlag> forPackage(String name) {
+    return packageExperiments[name];
   }
-  return null;
+
+  /// Return the set of enabled experiments for the library with the [name],
+  /// e.g. "core".
+  Set<ExperimentalFlag> forSdkLibrary(String name) {
+    return sdkLibraryExperiments[name] ?? sdkDefaultExperiments;
+  }
 }
 
-const Map<ExperimentalFlag, bool> defaultExperimentalFlags = {
-  ExperimentalFlag.constantUpdate2018: true,
-  ExperimentalFlag.controlFlowCollections: true,
-  ExperimentalFlag.extensionMethods: true,
-  ExperimentalFlag.nonNullable: false,
-  ExperimentalFlag.nonfunctionTypeAliases: false,
-  ExperimentalFlag.setLiterals: true,
-  ExperimentalFlag.spreadCollections: true,
-  ExperimentalFlag.tripleShift: false,
-  ExperimentalFlag.variance: false,
-};
+/// Returns `true` if [flag] is enabled using global [experimentalFlags].
+///
+/// If [experimentalFlags] 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> experimentalFlags}) {
+  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 (experimentalFlags != null) {
+    enabled = experimentalFlags[flag];
+  }
+  enabled ??= defaultExperimentalFlags[flag];
+  return enabled;
+}
 
-const Map<ExperimentalFlag, bool> expiredExperimentalFlags = {
-  ExperimentalFlag.constantUpdate2018: true,
-  ExperimentalFlag.controlFlowCollections: true,
-  ExperimentalFlag.extensionMethods: false,
-  ExperimentalFlag.nonNullable: false,
-  ExperimentalFlag.nonfunctionTypeAliases: false,
-  ExperimentalFlag.setLiterals: true,
-  ExperimentalFlag.spreadCollections: true,
-  ExperimentalFlag.tripleShift: false,
-  ExperimentalFlag.variance: false,
-};
+/// Returns `true` if [flag] is enabled in the library with the [canonicalUri]
+/// either globally using [experimentalFlags] or per library using
+/// [allowedExperimentalFlags].
+///
+/// If [experimentalFlags] is `null` or doesn't contain [flag], the default
+/// value from [defaultExperimentalFlags] used as the global flag state.
+///
+/// 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`.
+bool isExperimentEnabledInLibrary(ExperimentalFlag flag, Uri canonicalUri,
+    {Map<ExperimentalFlag, bool> experimentalFlags,
+    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 (experimentalFlags != null) {
+    enabled = experimentalFlags[flag];
+  }
+  enabled ??= defaultExperimentalFlags[flag];
+  if (!enabled) {
+    allowedExperimentalFlags ??= defaultAllowedExperimentalFlags;
+    Set<ExperimentalFlag> allowedFlags;
+    if (canonicalUri.scheme == 'dart') {
+      allowedFlags = allowedExperimentalFlags.forSdkLibrary(canonicalUri.path);
+    } else if (canonicalUri.scheme == 'package') {
+      int index = canonicalUri.path.indexOf('/');
+      if (index >= 0) {
+        String packageName = canonicalUri.path.substring(0, index);
+        allowedFlags = allowedExperimentalFlags.forPackage(packageName);
+      }
+    }
+    if (allowedFlags != null) {
+      enabled = allowedFlags.contains(flag);
+    }
+  }
+  return enabled;
+}
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
new file mode 100644
index 0000000..9ce8b51
--- /dev/null
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
@@ -0,0 +1,85 @@
+// 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.
+
+// NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
+//
+// Instead modify 'tools/experimental_features.yaml' and run
+// 'dart pkg/front_end/tool/fasta.dart generate-experimental-flags' to update.
+
+part of 'experimental_flags.dart';
+
+enum ExperimentalFlag {
+  constantUpdate2018,
+  controlFlowCollections,
+  extensionMethods,
+  nonNullable,
+  nonfunctionTypeAliases,
+  setLiterals,
+  spreadCollections,
+  tripleShift,
+  variance,
+}
+
+const Version enableConstantUpdate2018Version = const Version(2, 4);
+const Version enableControlFlowCollectionsVersion = const Version(2, 2);
+const Version enableExtensionMethodsVersion = const Version(2, 6);
+const Version enableNonNullableVersion = const Version(2, 9);
+const Version enableNonfunctionTypeAliasesVersion = const Version(2, 9);
+const Version enableSetLiteralsVersion = const Version(2, 2);
+const Version enableSpreadCollectionsVersion = const Version(2, 2);
+const Version enableTripleShiftVersion = const Version(2, 9);
+const Version enableVarianceVersion = const Version(2, 9);
+
+ExperimentalFlag parseExperimentalFlag(String flag) {
+  switch (flag) {
+    case "constant-update-2018":
+      return ExperimentalFlag.constantUpdate2018;
+    case "control-flow-collections":
+      return ExperimentalFlag.controlFlowCollections;
+    case "extension-methods":
+      return ExperimentalFlag.extensionMethods;
+    case "non-nullable":
+      return ExperimentalFlag.nonNullable;
+    case "nonfunction-type-aliases":
+      return ExperimentalFlag.nonfunctionTypeAliases;
+    case "set-literals":
+      return ExperimentalFlag.setLiterals;
+    case "spread-collections":
+      return ExperimentalFlag.spreadCollections;
+    case "triple-shift":
+      return ExperimentalFlag.tripleShift;
+    case "variance":
+      return ExperimentalFlag.variance;
+  }
+  return null;
+}
+
+const Map<ExperimentalFlag, bool> defaultExperimentalFlags = {
+  ExperimentalFlag.constantUpdate2018: true,
+  ExperimentalFlag.controlFlowCollections: true,
+  ExperimentalFlag.extensionMethods: true,
+  ExperimentalFlag.nonNullable: false,
+  ExperimentalFlag.nonfunctionTypeAliases: false,
+  ExperimentalFlag.setLiterals: true,
+  ExperimentalFlag.spreadCollections: true,
+  ExperimentalFlag.tripleShift: false,
+  ExperimentalFlag.variance: false,
+};
+
+const Map<ExperimentalFlag, bool> expiredExperimentalFlags = {
+  ExperimentalFlag.constantUpdate2018: true,
+  ExperimentalFlag.controlFlowCollections: true,
+  ExperimentalFlag.extensionMethods: false,
+  ExperimentalFlag.nonNullable: false,
+  ExperimentalFlag.nonfunctionTypeAliases: false,
+  ExperimentalFlag.setLiterals: true,
+  ExperimentalFlag.spreadCollections: true,
+  ExperimentalFlag.tripleShift: false,
+  ExperimentalFlag.variance: false,
+};
+
+const AllowedExperimentalFlags defaultAllowedExperimentalFlags =
+    const AllowedExperimentalFlags(sdkDefaultExperiments: {
+  ExperimentalFlag.nonNullable,
+}, sdkLibraryExperiments: {}, packageExperiments: {});
diff --git a/pkg/front_end/lib/src/api_unstable/ddc.dart b/pkg/front_end/lib/src/api_unstable/ddc.dart
index fcaa746..3c0befd 100644
--- a/pkg/front_end/lib/src/api_unstable/ddc.dart
+++ b/pkg/front_end/lib/src/api_unstable/ddc.dart
@@ -116,6 +116,7 @@
     Map<ExperimentalFlag, bool> experiments,
     Map<String, String> environmentDefines,
     NnbdMode nnbdMode}) async {
+  assert(nnbdMode != null, "No NnbdMode provided.");
   additionalDills.sort((a, b) => a.toString().compareTo(b.toString()));
 
   if (oldState != null &&
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index 48303eb..b2cc5a7 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -22,8 +22,7 @@
 import '../api_prototype/compiler_options.dart'
     show CompilerOptions, DiagnosticMessage;
 
-import '../api_prototype/experimental_flags.dart'
-    show defaultExperimentalFlags, ExperimentalFlag, expiredExperimentalFlags;
+import '../api_prototype/experimental_flags.dart' as flags;
 
 import '../api_prototype/file_system.dart'
     show FileSystem, FileSystemEntity, FileSystemException;
@@ -325,15 +324,27 @@
   Target get target =>
       _target ??= _raw.target ?? new NoneTarget(new TargetFlags());
 
-  bool isExperimentEnabled(ExperimentalFlag flag) {
-    assert(defaultExperimentalFlags.containsKey(flag),
-        "No default value for $flag.");
-    assert(expiredExperimentalFlags.containsKey(flag),
-        "No expired value for $flag.");
-    if (expiredExperimentalFlags[flag]) {
-      return defaultExperimentalFlags[flag];
-    }
-    return _raw.experimentalFlags[flag] ?? defaultExperimentalFlags[flag];
+  /// Returns `true` if the [flag] is enabled globally.
+  ///
+  /// This is `true` either if the [flag] is passed through an explicit
+  /// `--enable-experiment` option or if the [flag] is expired and on by
+  /// default.
+  bool isExperimentEnabledGlobally(flags.ExperimentalFlag flag) {
+    return flags.isExperimentEnabled(flag,
+        experimentalFlags: _raw.experimentalFlags);
+  }
+
+  /// Returns `true` if the [flag] is enabled in the library with the given
+  /// [importUri].
+  ///
+  /// This is `true` either if the [flag] is enabled globally as defined
+  /// by [isExperimentEnabledGlobally] or is explicitly enabled through
+  /// the 'allowed_experiments.json' file for this library.
+  bool isExperimentEnabledInLibrary(
+      flags.ExperimentalFlag flag, Uri importUri) {
+    return flags.isExperimentEnabledInLibrary(flag, importUri,
+        experimentalFlags: _raw.experimentalFlags,
+        allowedExperimentalFlags: _raw.allowedExperimentalFlags);
   }
 
   /// Get an outline component that summarizes the SDK, if any.
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 cc25ccd..02645e8 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -5518,7 +5518,7 @@
     TypeVariableBuilder variable = typeVariables[index];
     variable.bound = bound?.builder;
     if (variance != null) {
-      if (!libraryBuilder.loader.target.enableVariance) {
+      if (!libraryBuilder.enableVarianceInLibrary) {
         reportVarianceModifierNotEnabled(variance);
       }
       variable.variance = Variance.fromString(variance.lexeme);
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 4714d44..7359ca9 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -128,7 +128,6 @@
 }
 
 enum EvaluationMode {
-  legacy,
   weak,
   agnostic,
   strong,
@@ -764,7 +763,7 @@
       {this.desugarSets = false,
       this.enableTripleShift = false,
       this.errorOnUnevaluatedConstant = false,
-      this.evaluationMode: EvaluationMode.legacy})
+      this.evaluationMode: EvaluationMode.weak})
       : numberSemantics = backend.numberSemantics,
         coreTypes = typeEnvironment.coreTypes,
         canonicalizationCache = <Constant, Constant>{},
@@ -799,7 +798,6 @@
 
   DartType convertType(DartType type) {
     switch (evaluationMode) {
-      case EvaluationMode.legacy:
       case EvaluationMode.strong:
       case EvaluationMode.agnostic:
         return type;
@@ -812,7 +810,6 @@
 
   List<DartType> convertTypes(List<DartType> types) {
     switch (evaluationMode) {
-      case EvaluationMode.legacy:
       case EvaluationMode.strong:
       case EvaluationMode.agnostic:
         return types;
@@ -2182,7 +2179,6 @@
         }
         return makeBoolConstant(strongResult);
       case EvaluationMode.weak:
-      case EvaluationMode.legacy:
         return makeBoolConstant(performIs(constant, strongMode: false));
     }
     throw new UnsupportedError("Unexpected evaluation mode $evaluationMode");
@@ -2327,7 +2323,6 @@
         result = strongResult;
         break;
       case EvaluationMode.weak:
-      case EvaluationMode.legacy:
         result =
             isSubtype(constant, type, SubtypeCheckMode.ignoringNullabilities);
         break;
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 db05cf8..bf8815e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -268,8 +268,9 @@
     if (!inferrer.typeSchemaEnvironment.isEmptyContext(typeContext)) {
       typeContext = inferrer.wrapFutureOrType(typeContext);
     }
-    ExpressionInferenceResult operandResult = inferrer
-        .inferExpression(node.operand, typeContext, true, isVoidAllowed: true);
+    ExpressionInferenceResult operandResult = inferrer.inferExpression(
+        node.operand, typeContext, true,
+        isVoidAllowed: !inferrer.isNonNullableByDefault);
     DartType inferredType =
         inferrer.typeSchemaEnvironment.unfutureType(operandResult.inferredType);
     node.operand = operandResult.expression..parent = node;
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 ab04eed..440a118 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -6,6 +6,7 @@
 
 import 'dart:async' show Future;
 
+import 'package:front_end/src/api_prototype/experimental_flags.dart';
 import 'package:kernel/ast.dart'
     show
         Arguments,
@@ -251,9 +252,8 @@
     if (dillTarget.isLoaded) {
       LibraryBuilder builder = dillTarget.loader.builders[uri];
       if (builder != null) {
-        if (enableNonNullable &&
-            (loader.nnbdMode == NnbdMode.Strong ||
-                loader.nnbdMode == NnbdMode.Agnostic)) {
+        if (loader.nnbdMode == NnbdMode.Strong ||
+            loader.nnbdMode == NnbdMode.Agnostic) {
           if (!builder.isNonNullableByDefault) {
             loader.addProblem(messageStrongModeNNBDButOptOut, -1, 1, fileUri);
           }
@@ -400,7 +400,7 @@
         nameRoot: nameRoot, libraries: libraries, uriToSource: uriToSource));
 
     NonNullableByDefaultCompiledMode compiledMode = null;
-    if (enableNonNullable) {
+    if (isExperimentEnabledGlobally(ExperimentalFlag.nonNullable)) {
       switch (loader.nnbdMode) {
         case NnbdMode.Weak:
           compiledMode = NonNullableByDefaultCompiledMode.Weak;
@@ -1095,20 +1095,24 @@
     TypeEnvironment environment =
         new TypeEnvironment(loader.coreTypes, loader.hierarchy);
     constants.EvaluationMode evaluationMode;
-    if (enableNonNullable) {
-      switch (loader.nnbdMode) {
-        case NnbdMode.Weak:
-          evaluationMode = constants.EvaluationMode.weak;
-          break;
-        case NnbdMode.Strong:
-          evaluationMode = constants.EvaluationMode.strong;
-          break;
-        case NnbdMode.Agnostic:
-          evaluationMode = constants.EvaluationMode.agnostic;
-          break;
-      }
-    } else {
-      evaluationMode = constants.EvaluationMode.legacy;
+    // If nnbd is not enabled we will use weak evaluation mode. This is needed
+    // because the SDK might be agnostic and therefore needs to be weakened
+    // for legacy mode.
+    assert(
+        isExperimentEnabledGlobally(ExperimentalFlag.nonNullable) ||
+            loader.nnbdMode == NnbdMode.Weak,
+        "Non-weak nnbd mode found without experiment enabled: "
+        "${loader.nnbdMode}.");
+    switch (loader.nnbdMode) {
+      case NnbdMode.Weak:
+        evaluationMode = constants.EvaluationMode.weak;
+        break;
+      case NnbdMode.Strong:
+        evaluationMode = constants.EvaluationMode.strong;
+        break;
+      case NnbdMode.Agnostic:
+        evaluationMode = constants.EvaluationMode.agnostic;
+        break;
     }
 
     constants.transformLibraries(
@@ -1119,7 +1123,8 @@
         new KernelConstantErrorReporter(loader),
         evaluationMode,
         desugarSets: !backendTarget.supportsSetLiterals,
-        enableTripleShift: enableTripleShift,
+        enableTripleShift:
+            isExperimentEnabledGlobally(ExperimentalFlag.tripleShift),
         errorOnUnevaluatedConstant: errorOnUnevaluatedConstant);
     ticker.logMs("Evaluated constants");
 
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 753b7fc..da9bf9d 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -1636,10 +1636,10 @@
         return;
       }
       if (type is FunctionTypeBuilder &&
-          !libraryBuilder.loader.target.enableNonfunctionTypeAliases) {
+          !libraryBuilder.enableNonfunctionTypeAliasesInLibrary) {
         if (type.nullabilityBuilder.build(libraryBuilder) ==
                 Nullability.nullable &&
-            libraryBuilder.loader.target.enableNonNullable) {
+            libraryBuilder.enableNonNullableInLibrary) {
           // The error is reported when the non-nullable experiment is enabled.
           // Otherwise, the attempt to use a nullable type will be reported
           // elsewhere.
@@ -1653,7 +1653,7 @@
           // of a generic function).
           aliasedType = type;
         }
-      } else if (libraryBuilder.loader.target.enableNonfunctionTypeAliases) {
+      } else if (libraryBuilder.enableNonfunctionTypeAliasesInLibrary) {
         if (type is TypeBuilder) {
           aliasedType = type;
         } else {
@@ -1797,7 +1797,7 @@
     if (typeParameters != null) {
       typeParameters[index].bound = bound;
       if (variance != null) {
-        if (!libraryBuilder.loader.target.enableVariance) {
+        if (!libraryBuilder.enableVarianceInLibrary) {
           reportVarianceModifierNotEnabled(variance);
         }
         typeParameters[index].variance = Variance.fromString(variance.lexeme);
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 1cfef94..f36c534 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
@@ -73,6 +73,7 @@
 import 'package:kernel/type_environment.dart'
     show SubtypeCheckMode, TypeEnvironment;
 
+import '../../api_prototype/experimental_flags.dart';
 import '../../base/nnbd_mode.dart';
 
 import '../builder/builder.dart';
@@ -166,9 +167,6 @@
 
 import 'source_loader.dart' show SourceLoader;
 
-import '../../api_prototype/experimental_flags.dart'
-    show enableNonNullableVersion;
-
 class SourceLibraryBuilder extends LibraryBuilderImpl {
   static const String MALFORMED_URI_SCHEME = "org-dartlang-malformed-uri";
 
@@ -319,9 +317,36 @@
     updateLibraryNNBDSettings();
   }
 
+  bool _enableVarianceInLibrary;
+  bool _enableNonfunctionTypeAliasesInLibrary;
+  bool _enableNonNullableInLibrary;
+  bool _enableTripleShiftInLibrary;
+  bool _enableExtensionMethodsInLibrary;
+
+  bool get enableVarianceInLibrary => _enableVarianceInLibrary ??= loader.target
+      .isExperimentEnabledInLibrary(ExperimentalFlag.variance, importUri);
+
+  bool get enableNonfunctionTypeAliasesInLibrary =>
+      _enableNonfunctionTypeAliasesInLibrary ??= loader.target
+          .isExperimentEnabledInLibrary(
+              ExperimentalFlag.nonfunctionTypeAliases, importUri);
+
+  bool get enableNonNullableInLibrary => _enableNonNullableInLibrary ??= loader
+      .target
+      .isExperimentEnabledInLibrary(ExperimentalFlag.nonNullable, importUri);
+
+  bool get enableTripleShiftInLibrary => _enableTripleShiftInLibrary ??= loader
+      .target
+      .isExperimentEnabledInLibrary(ExperimentalFlag.tripleShift, importUri);
+
+  bool get enableExtensionMethodsInLibrary =>
+      _enableExtensionMethodsInLibrary ??= loader.target
+          .isExperimentEnabledInLibrary(
+              ExperimentalFlag.extensionMethods, importUri);
+
   void updateLibraryNNBDSettings() {
     library.isNonNullableByDefault = isNonNullableByDefault;
-    if (loader.target.enableNonNullable) {
+    if (enableNonNullableInLibrary) {
       switch (loader.nnbdMode) {
         case NnbdMode.Weak:
           library.nonNullableByDefaultCompiledMode =
@@ -382,7 +407,7 @@
 
   @override
   bool get isNonNullableByDefault =>
-      loader.target.enableNonNullable &&
+      enableNonNullableInLibrary &&
       languageVersion.version >= enableNonNullableVersion &&
       !isOptOutTest(library.importUri);
 
@@ -399,14 +424,14 @@
 
   static const List<String> optOutTestPaths = [
     'co19_2/',
-    'compiler/dart2js_extra/',
     'compiler/dart2js_native/',
     'corelib_2/',
+    'dart2js_2/',
     'ffi_2',
     'language_2/',
     'lib_2/',
     'standalone_2/',
-    'vm/dart/', // in runtime/tests
+    'vm/dart_2/', // in runtime/tests
   ];
 
   LanguageVersion get languageVersion => _languageVersion;
@@ -449,7 +474,7 @@
         new LanguageVersion(version, fileUri, offset, length, explicit);
     library.setLanguageVersion(version);
 
-    if (loader.target.enableNonNullable &&
+    if (enableNonNullableInLibrary &&
         (loader.nnbdMode == NnbdMode.Strong ||
             loader.nnbdMode == NnbdMode.Agnostic)) {
       // In strong and agnostic mode, the language version is not allowed to
@@ -3031,7 +3056,7 @@
                 isNonNullableByDefault),
             fieldBuilder.charOffset,
             fieldBuilder.name.length,
-            fileUri);
+            fieldBuilder.fileUri);
       }
     }
   }
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 0401c0b..34a3675 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -256,16 +256,16 @@
     ScannerResult result = scan(bytes,
         includeComments: includeComments,
         configuration: new ScannerConfiguration(
-            enableTripleShift: target.enableTripleShift,
-            enableExtensionMethods: target.enableExtensionMethods,
+            enableTripleShift: library.enableTripleShiftInLibrary,
+            enableExtensionMethods: library.enableExtensionMethodsInLibrary,
             enableNonNullable: library.isNonNullableByDefault),
         languageVersionChanged:
             (Scanner scanner, LanguageVersionToken version) {
       library.setLanguageVersion(new Version(version.major, version.minor),
           offset: version.offset, length: version.length, explicit: true);
       scanner.configuration = new ScannerConfiguration(
-          enableTripleShift: target.enableTripleShift,
-          enableExtensionMethods: target.enableExtensionMethods,
+          enableTripleShift: library.enableTripleShiftInLibrary,
+          enableExtensionMethods: library.enableExtensionMethodsInLibrary,
           enableNonNullable: library.isNonNullableByDefault);
     });
     Token token = result.tokens;
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 26baf64..9eb4912 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
@@ -68,7 +68,7 @@
   void reportMissingNonNullableSupport(Token token) {
     assert(!libraryBuilder.isNonNullableByDefault);
     assert(token != null);
-    if (libraryBuilder.loader.target.enableNonNullable) {
+    if (libraryBuilder.enableNonNullableInLibrary) {
       if (libraryBuilder.languageVersion.isExplicit) {
         addProblem(messageNonNullableOptOut, token.charOffset, token.charCount,
             context: <LocatedMessage>[
diff --git a/pkg/front_end/lib/src/fasta/target_implementation.dart b/pkg/front_end/lib/src/fasta/target_implementation.dart
index 26400d6..e9f8d6c 100644
--- a/pkg/front_end/lib/src/fasta/target_implementation.dart
+++ b/pkg/front_end/lib/src/fasta/target_implementation.dart
@@ -48,28 +48,23 @@
   MemberBuilder cachedDuplicatedFieldInitializerError;
   MemberBuilder cachedNativeAnnotation;
 
-  bool enableExtensionMethods;
-  bool enableNonNullable;
-  bool enableTripleShift;
-  bool enableVariance;
-  bool enableNonfunctionTypeAliases;
+  final ProcessedOptions _options;
 
   TargetImplementation(Ticker ticker, this.uriTranslator, this.backendTarget)
       : assert(ticker != null),
         assert(uriTranslator != null),
         assert(backendTarget != null),
-        enableExtensionMethods = CompilerContext.current.options
-            .isExperimentEnabled(ExperimentalFlag.extensionMethods),
-        enableNonNullable = CompilerContext.current.options
-            .isExperimentEnabled(ExperimentalFlag.nonNullable),
-        enableTripleShift = CompilerContext.current.options
-            .isExperimentEnabled(ExperimentalFlag.tripleShift),
-        enableVariance = CompilerContext.current.options
-            .isExperimentEnabled(ExperimentalFlag.variance),
-        enableNonfunctionTypeAliases = CompilerContext.current.options
-            .isExperimentEnabled(ExperimentalFlag.nonfunctionTypeAliases),
+        _options = CompilerContext.current.options,
         super(ticker);
 
+  bool isExperimentEnabledInLibrary(ExperimentalFlag flag, Uri importUri) {
+    return _options.isExperimentEnabledInLibrary(flag, importUri);
+  }
+
+  bool isExperimentEnabledGlobally(ExperimentalFlag flag) {
+    return _options.isExperimentEnabledGlobally(flag);
+  }
+
   /// Creates a [LibraryBuilder] corresponding to [uri], if one doesn't exist
   /// already.
   ///
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 1445f31..c7ccf95 100644
--- a/pkg/front_end/lib/src/testing/id_testing_helper.dart
+++ b/pkg/front_end/lib/src/testing/id_testing_helper.dart
@@ -11,7 +11,8 @@
 import 'package:kernel/target/targets.dart';
 import '../api_prototype/compiler_options.dart'
     show CompilerOptions, DiagnosticMessage;
-import '../api_prototype/experimental_flags.dart' show ExperimentalFlag;
+import '../api_prototype/experimental_flags.dart'
+    show AllowedExperimentalFlags, ExperimentalFlag;
 import '../api_prototype/terminal_color_support.dart'
     show printDiagnosticMessage;
 import '../base/common.dart';
@@ -43,6 +44,7 @@
   final String marker;
   final String name;
   final Map<ExperimentalFlag, bool> experimentalFlags;
+  final AllowedExperimentalFlags allowedExperimentalFlags;
   final Uri librariesSpecificationUri;
   // TODO(johnniwinther): Tailor support to redefine selected platform
   // classes/members only.
@@ -52,6 +54,7 @@
 
   const TestConfig(this.marker, this.name,
       {this.experimentalFlags = const {},
+      this.allowedExperimentalFlags,
       this.librariesSpecificationUri,
       this.compileSdk: false,
       this.targetFlags: const TargetFlags(),
@@ -298,6 +301,7 @@
   options.debugDump = printCode;
   options.target = new NoneTarget(config.targetFlags);
   options.experimentalFlags.addAll(config.experimentalFlags);
+  options.allowedExperimentalFlags = config.allowedExperimentalFlags;
   options.nnbdMode = config.nnbdMode;
   if (config.librariesSpecificationUri != null) {
     Set<Uri> testFiles =
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart
new file mode 100644
index 0000000..a99ce0a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart
@@ -0,0 +1,71 @@
+class WrapperClass {
+  int abstract = 42;
+  int as = 42;
+  int assert = 42;
+  int async = 42;
+  int await = 42;
+  int break = 42;
+  int case = 42;
+  int catch = 42;
+  int class = 42;
+  int const = 42;
+  int continue = 42;
+  int covariant = 42;
+  int default = 42;
+  int deferred = 42;
+  int do = 42;
+  int dynamic = 42;
+  int else = 42;
+  int enum = 42;
+  int export = 42;
+  int extends = 42;
+  int extension = 42;
+  int external = 42;
+  int factory = 42;
+  int false = 42;
+  int final = 42;
+  int finally = 42;
+  int for = 42;
+  int Function = 42;
+  int get = 42;
+  int hide = 42;
+  int if = 42;
+  int implements = 42;
+  int import = 42;
+  int in = 42;
+  int inout = 42;
+  int interface = 42;
+  int is = 42;
+  int late = 42;
+  int library = 42;
+  int mixin = 42;
+  int native = 42;
+  int new = 42;
+  int null = 42;
+  int of = 42;
+  int on = 42;
+  int operator = 42;
+  int out = 42;
+  int part = 42;
+  int patch = 42;
+  int required = 42;
+  int rethrow = 42;
+  int return = 42;
+  int set = 42;
+  int show = 42;
+  int source = 42;
+  int static = 42;
+  int super = 42;
+  int switch = 42;
+  int sync = 42;
+  int this = 42;
+  int throw = 42;
+  int true = 42;
+  int try = 42;
+  int typedef = 42;
+  int var = 42;
+  int void = 42;
+  int while = 42;
+  int with = 42;
+  int yield = 42;
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect
new file mode 100644
index 0000000..3b46efd
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect
@@ -0,0 +1,1012 @@
+Problems reported:
+
+parser/error_recovery/keyword_named_class_fields:4:7: Expected an identifier, but got 'assert'.
+  int assert = 42;
+      ^^^^^^
+
+parser/error_recovery/keyword_named_class_fields:7:7: Expected an identifier, but got 'break'.
+  int break = 42;
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_fields:8:7: Expected an identifier, but got 'case'.
+  int case = 42;
+      ^^^^
+
+parser/error_recovery/keyword_named_class_fields:9:7: Expected an identifier, but got 'catch'.
+  int catch = 42;
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_fields:10:7: Expected an identifier, but got 'class'.
+  int class = 42;
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_fields:11:7: Expected an identifier, but got 'const'.
+  int const = 42;
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_fields:12:7: Expected an identifier, but got 'continue'.
+  int continue = 42;
+      ^^^^^^^^
+
+parser/error_recovery/keyword_named_class_fields:14:7: Expected an identifier, but got 'default'.
+  int default = 42;
+      ^^^^^^^
+
+parser/error_recovery/keyword_named_class_fields:16:7: Expected an identifier, but got 'do'.
+  int do = 42;
+      ^^
+
+parser/error_recovery/keyword_named_class_fields:18:7: Expected an identifier, but got 'else'.
+  int else = 42;
+      ^^^^
+
+parser/error_recovery/keyword_named_class_fields:19:7: Expected an identifier, but got 'enum'.
+  int enum = 42;
+      ^^^^
+
+parser/error_recovery/keyword_named_class_fields:21:7: Expected an identifier, but got 'extends'.
+  int extends = 42;
+      ^^^^^^^
+
+parser/error_recovery/keyword_named_class_fields:25:7: Expected an identifier, but got 'false'.
+  int false = 42;
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_fields:26:7: Expected an identifier, but got 'final'.
+  int final = 42;
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_fields:27:7: Expected an identifier, but got 'finally'.
+  int finally = 42;
+      ^^^^^^^
+
+parser/error_recovery/keyword_named_class_fields:28:7: Expected an identifier, but got 'for'.
+  int for = 42;
+      ^^^
+
+parser/error_recovery/keyword_named_class_fields:32:7: Expected an identifier, but got 'if'.
+  int if = 42;
+      ^^
+
+parser/error_recovery/keyword_named_class_fields:35:7: Expected an identifier, but got 'in'.
+  int in = 42;
+      ^^
+
+parser/error_recovery/keyword_named_class_fields:38:7: Expected an identifier, but got 'is'.
+  int is = 42;
+      ^^
+
+parser/error_recovery/keyword_named_class_fields:43:7: Expected an identifier, but got 'new'.
+  int new = 42;
+      ^^^
+
+parser/error_recovery/keyword_named_class_fields:44:7: Expected an identifier, but got 'null'.
+  int null = 42;
+      ^^^^
+
+parser/error_recovery/keyword_named_class_fields:52:7: Expected an identifier, but got 'rethrow'.
+  int rethrow = 42;
+      ^^^^^^^
+
+parser/error_recovery/keyword_named_class_fields:53:7: Expected an identifier, but got 'return'.
+  int return = 42;
+      ^^^^^^
+
+parser/error_recovery/keyword_named_class_fields:58:7: Expected an identifier, but got 'super'.
+  int super = 42;
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_fields:59:7: Expected an identifier, but got 'switch'.
+  int switch = 42;
+      ^^^^^^
+
+parser/error_recovery/keyword_named_class_fields:61:7: Expected an identifier, but got 'this'.
+  int this = 42;
+      ^^^^
+
+parser/error_recovery/keyword_named_class_fields:62:7: Expected an identifier, but got 'throw'.
+  int throw = 42;
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_fields:63:7: Expected an identifier, but got 'true'.
+  int true = 42;
+      ^^^^
+
+parser/error_recovery/keyword_named_class_fields:64:7: Expected an identifier, but got 'try'.
+  int try = 42;
+      ^^^
+
+parser/error_recovery/keyword_named_class_fields:66:7: Expected an identifier, but got 'var'.
+  int var = 42;
+      ^^^
+
+parser/error_recovery/keyword_named_class_fields:67:7: Expected an identifier, but got 'void'.
+  int void = 42;
+      ^^^^
+
+parser/error_recovery/keyword_named_class_fields:68:7: Expected an identifier, but got 'while'.
+  int while = 42;
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_fields:69:7: Expected an identifier, but got 'with'.
+  int with = 42;
+      ^^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(WrapperClass, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, WrapperClass)
+      handleNoType(WrapperClass)
+      handleClassExtends(null)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(abstract)
+          handleType(int, null)
+          handleIdentifier(abstract, fieldDeclaration)
+          beginFieldInitializer(=)
+            handleLiteralInt(42)
+          endFieldInitializer(=, ;)
+        endClassFields(null, null, null, null, 1, int, ;)
+      endMember()
+      beginMetadataStar(int)
+      endMetadataStar(0)
+      beginMember()
+        handleIdentifier(int, typeReference)
+        handleNoTypeArguments(as)
+        handleType(int, null)
+        handleIdentifier(as, fieldDeclaration)
+        beginFieldInitializer(=)
+          handleLiteralInt(42)
+        endFieldInitializer(=, ;)
+      endClassFields(null, null, null, null, 1, int, ;)
+    endMember()
+    beginMetadataStar(int)
+    endMetadataStar(0)
+    beginMember()
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(assert)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+      handleIdentifier(assert, fieldDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endClassFields(null, null, null, null, 1, int, ;)
+  endMember()
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginMember()
+    handleIdentifier(int, typeReference)
+    handleNoTypeArguments(async)
+    handleType(int, null)
+    handleIdentifier(async, fieldDeclaration)
+    beginFieldInitializer(=)
+      handleLiteralInt(42)
+    endFieldInitializer(=, ;)
+  endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+  handleIdentifier(int, typeReference)
+  handleNoTypeArguments(await)
+  handleType(int, null)
+  handleIdentifier(await, fieldDeclaration)
+  beginFieldInitializer(=)
+    handleLiteralInt(42)
+  endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(break)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+handleIdentifier(break, fieldDeclaration)
+beginFieldInitializer(=)
+  handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(case)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+handleIdentifier(case, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(catch)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+handleIdentifier(catch, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(class)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+handleIdentifier(class, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(const)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+handleIdentifier(const, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(continue)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+handleIdentifier(continue, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(covariant)
+handleType(int, null)
+handleIdentifier(covariant, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(default)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+handleIdentifier(default, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(deferred)
+handleType(int, null)
+handleIdentifier(deferred, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(do)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+handleIdentifier(do, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(dynamic)
+handleType(int, null)
+handleIdentifier(dynamic, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(else)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+handleIdentifier(else, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(enum)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+handleIdentifier(enum, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(export)
+handleType(int, null)
+handleIdentifier(export, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(extends)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+handleIdentifier(extends, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(extension)
+handleType(int, null)
+handleIdentifier(extension, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(external)
+handleType(int, null)
+handleIdentifier(external, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(factory)
+handleType(int, null)
+handleIdentifier(factory, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(false)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+handleIdentifier(false, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(final)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+handleIdentifier(final, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(finally)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+handleIdentifier(finally, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(for)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+handleIdentifier(for, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(Function)
+handleType(int, null)
+handleIdentifier(Function, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(get)
+handleType(int, null)
+handleIdentifier(get, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(hide)
+handleType(int, null)
+handleIdentifier(hide, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(if)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+handleIdentifier(if, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(implements)
+handleType(int, null)
+handleIdentifier(implements, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(import)
+handleType(int, null)
+handleIdentifier(import, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(in)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+handleIdentifier(in, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(inout)
+handleType(int, null)
+handleIdentifier(inout, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(interface)
+handleType(int, null)
+handleIdentifier(interface, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(is)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+handleIdentifier(is, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(late)
+handleType(int, null)
+handleIdentifier(late, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(library)
+handleType(int, null)
+handleIdentifier(library, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(mixin)
+handleType(int, null)
+handleIdentifier(mixin, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(native)
+handleType(int, null)
+handleIdentifier(native, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(new)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+handleIdentifier(new, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(null)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+handleIdentifier(null, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(of)
+handleType(int, null)
+handleIdentifier(of, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(on)
+handleType(int, null)
+handleIdentifier(on, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(operator)
+handleType(int, null)
+handleIdentifier(operator, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(out)
+handleType(int, null)
+handleIdentifier(out, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(part)
+handleType(int, null)
+handleIdentifier(part, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(patch)
+handleType(int, null)
+handleIdentifier(patch, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(required)
+handleType(int, null)
+handleIdentifier(required, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(rethrow)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+handleIdentifier(rethrow, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(return)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+handleIdentifier(return, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(set)
+handleType(int, null)
+handleIdentifier(set, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(show)
+handleType(int, null)
+handleIdentifier(show, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(source)
+handleType(int, null)
+handleIdentifier(source, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(static)
+handleType(int, null)
+handleIdentifier(static, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(super)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+handleIdentifier(super, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(switch)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+handleIdentifier(switch, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(sync)
+handleType(int, null)
+handleIdentifier(sync, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(this)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+handleIdentifier(this, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(throw)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+handleIdentifier(throw, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(true)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+handleIdentifier(true, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(try)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+handleIdentifier(try, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(typedef)
+handleType(int, null)
+handleIdentifier(typedef, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(var)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+handleIdentifier(var, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(void)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+handleIdentifier(void, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(while)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+handleIdentifier(while, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(with)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+handleIdentifier(with, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+beginMetadataStar(int)
+endMetadataStar(0)
+beginMember()
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(yield)
+handleType(int, null)
+handleIdentifier(yield, fieldDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endClassFields(null, null, null, null, 1, int, ;)
+endMember()
+endClassOrMixinBody(DeclarationKind.Class, 69, {, })
+endClassDeclaration(class, })
+endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
new file mode 100644
index 0000000..880586e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
@@ -0,0 +1,1755 @@
+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(WrapperClass, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, WrapperClass)
+        parseClass(WrapperClass, class, class, WrapperClass)
+          parseClassHeaderOpt(WrapperClass, class, class)
+            parseClassExtendsOpt(WrapperClass)
+              listener: handleNoType(WrapperClass)
+              listener: handleClassExtends(null)
+            parseWithClauseOpt(WrapperClass)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(WrapperClass)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(WrapperClass, DeclarationKind.Class, WrapperClass)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar({)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields({, null, null, null, null, null, {, Instance of 'SimpleType', abstract, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(abstract)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(abstract, fieldDeclaration)
+                parseFieldInitializerOpt(abstract, abstract, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(as)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(as, fieldDeclaration)
+                parseFieldInitializerOpt(as, as, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(assert)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', assert, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(assert)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+                  listener: handleIdentifier(assert, fieldDeclaration)
+                parseFieldInitializerOpt(assert, assert, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', async, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(async)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(async, fieldDeclaration)
+                parseFieldInitializerOpt(async, async, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', await, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(await)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(await, fieldDeclaration)
+                parseFieldInitializerOpt(await, await, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(break)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', break, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(break)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+                  listener: handleIdentifier(break, fieldDeclaration)
+                parseFieldInitializerOpt(break, break, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(case)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', case, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(case)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+                  listener: handleIdentifier(case, fieldDeclaration)
+                parseFieldInitializerOpt(case, case, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(catch)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', catch, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(catch)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+                  listener: handleIdentifier(catch, fieldDeclaration)
+                parseFieldInitializerOpt(catch, catch, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(class)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', class, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(class)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+                  listener: handleIdentifier(class, fieldDeclaration)
+                parseFieldInitializerOpt(class, class, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(const)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', const, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(const)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+                  listener: handleIdentifier(const, fieldDeclaration)
+                parseFieldInitializerOpt(const, const, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(continue)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', continue, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(continue)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+                  listener: handleIdentifier(continue, fieldDeclaration)
+                parseFieldInitializerOpt(continue, continue, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(covariant)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(covariant, fieldDeclaration)
+                parseFieldInitializerOpt(covariant, covariant, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(default)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', default, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(default)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+                  listener: handleIdentifier(default, fieldDeclaration)
+                parseFieldInitializerOpt(default, default, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(deferred)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(deferred, fieldDeclaration)
+                parseFieldInitializerOpt(deferred, deferred, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(do)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', do, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(do)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+                  listener: handleIdentifier(do, fieldDeclaration)
+                parseFieldInitializerOpt(do, do, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(dynamic)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(dynamic, fieldDeclaration)
+                parseFieldInitializerOpt(dynamic, dynamic, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(else)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', else, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(else)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+                  listener: handleIdentifier(else, fieldDeclaration)
+                parseFieldInitializerOpt(else, else, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(enum)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', enum, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(enum)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+                  listener: handleIdentifier(enum, fieldDeclaration)
+                parseFieldInitializerOpt(enum, enum, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(export)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(export, fieldDeclaration)
+                parseFieldInitializerOpt(export, export, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(extends)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', extends, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(extends)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+                  listener: handleIdentifier(extends, fieldDeclaration)
+                parseFieldInitializerOpt(extends, extends, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', extension, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(extension)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(extension, fieldDeclaration)
+                parseFieldInitializerOpt(extension, extension, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(external)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(external, fieldDeclaration)
+                parseFieldInitializerOpt(external, external, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(factory)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(factory, fieldDeclaration)
+                parseFieldInitializerOpt(factory, factory, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(false)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', false, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(false)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+                  listener: handleIdentifier(false, fieldDeclaration)
+                parseFieldInitializerOpt(false, false, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(final)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', final, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(final)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+                  listener: handleIdentifier(final, fieldDeclaration)
+                parseFieldInitializerOpt(final, final, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(finally)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', finally, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(finally)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+                  listener: handleIdentifier(finally, fieldDeclaration)
+                parseFieldInitializerOpt(finally, finally, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(for)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', for, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(for)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+                  listener: handleIdentifier(for, fieldDeclaration)
+                parseFieldInitializerOpt(for, for, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(Function)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(Function, fieldDeclaration)
+                parseFieldInitializerOpt(Function, Function, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(get)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(get, fieldDeclaration)
+                parseFieldInitializerOpt(get, get, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', hide, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(hide)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(hide, fieldDeclaration)
+                parseFieldInitializerOpt(hide, hide, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(if)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', if, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(if)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+                  listener: handleIdentifier(if, fieldDeclaration)
+                parseFieldInitializerOpt(if, if, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(implements, fieldDeclaration)
+                parseFieldInitializerOpt(implements, implements, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(import)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(import, fieldDeclaration)
+                parseFieldInitializerOpt(import, import, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(in)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', in, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(in)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+                  listener: handleIdentifier(in, fieldDeclaration)
+                parseFieldInitializerOpt(in, in, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', inout, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(inout)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(inout, fieldDeclaration)
+                parseFieldInitializerOpt(inout, inout, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(interface)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(interface, fieldDeclaration)
+                parseFieldInitializerOpt(interface, interface, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(is)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', is, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(is)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+                  listener: handleIdentifier(is, fieldDeclaration)
+                parseFieldInitializerOpt(is, is, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', late, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(late)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(late, fieldDeclaration)
+                parseFieldInitializerOpt(late, late, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(library)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(library, fieldDeclaration)
+                parseFieldInitializerOpt(library, library, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(mixin)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(mixin, fieldDeclaration)
+                parseFieldInitializerOpt(mixin, mixin, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', native, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(native)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(native, fieldDeclaration)
+                parseFieldInitializerOpt(native, native, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(new)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', new, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(new)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+                  listener: handleIdentifier(new, fieldDeclaration)
+                parseFieldInitializerOpt(new, new, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(null)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(null)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+                  listener: handleIdentifier(null, fieldDeclaration)
+                parseFieldInitializerOpt(null, null, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', of, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(of)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(of, fieldDeclaration)
+                parseFieldInitializerOpt(of, of, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', on, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(on)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(on, fieldDeclaration)
+                parseFieldInitializerOpt(on, on, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isUnaryMinus(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(operator)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(operator, fieldDeclaration)
+                parseFieldInitializerOpt(operator, operator, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', out, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(out)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(out, fieldDeclaration)
+                parseFieldInitializerOpt(out, out, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(part)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(part, fieldDeclaration)
+                parseFieldInitializerOpt(part, part, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', patch, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(patch)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(patch, fieldDeclaration)
+                parseFieldInitializerOpt(patch, patch, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', required, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(required)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(required, fieldDeclaration)
+                parseFieldInitializerOpt(required, required, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(rethrow)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', rethrow, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(rethrow)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+                  listener: handleIdentifier(rethrow, fieldDeclaration)
+                parseFieldInitializerOpt(rethrow, rethrow, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(return)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', return, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(return)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+                  listener: handleIdentifier(return, fieldDeclaration)
+                parseFieldInitializerOpt(return, return, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(set)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(set, fieldDeclaration)
+                parseFieldInitializerOpt(set, set, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', show, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(show)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(show, fieldDeclaration)
+                parseFieldInitializerOpt(show, show, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', source, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(source)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(source, fieldDeclaration)
+                parseFieldInitializerOpt(source, source, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(static)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(static, fieldDeclaration)
+                parseFieldInitializerOpt(static, static, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(super)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', super, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+                  listener: handleIdentifier(super, fieldDeclaration)
+                parseFieldInitializerOpt(super, super, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(switch)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', switch, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(switch)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+                  listener: handleIdentifier(switch, fieldDeclaration)
+                parseFieldInitializerOpt(switch, switch, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', sync, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(sync)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(sync, fieldDeclaration)
+                parseFieldInitializerOpt(sync, sync, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(int, ;, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
+                parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', this, DeclarationKind.Class, WrapperClass, false)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(this)
+                  listener: handleType(int, null)
+                  ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                    reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+                    listener: handleIdentifier(this, fieldDeclaration)
+                  parseFieldInitializerOpt(this, this, null, null, DeclarationKind.Class, WrapperClass)
+                    listener: beginFieldInitializer(=)
+                    parseExpression(=)
+                      parsePrecedenceExpression(=, 1, true)
+                        parseUnaryExpression(=, true)
+                          parsePrimary(=, expression)
+                            parseLiteralInt(=)
+                              listener: handleLiteralInt(42)
+                    listener: endFieldInitializer(=, ;)
+                  listener: endClassFields(null, null, null, null, 1, int, ;)
+                listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(throw)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', throw, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(throw)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+                  listener: handleIdentifier(throw, fieldDeclaration)
+                parseFieldInitializerOpt(throw, throw, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(true)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', true, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(true)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+                  listener: handleIdentifier(true, fieldDeclaration)
+                parseFieldInitializerOpt(true, true, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(try)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', try, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(try)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+                  listener: handleIdentifier(try, fieldDeclaration)
+                parseFieldInitializerOpt(try, try, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(typedef)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(typedef, fieldDeclaration)
+                parseFieldInitializerOpt(typedef, typedef, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(var)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', var, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(var)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+                  listener: handleIdentifier(var, fieldDeclaration)
+                parseFieldInitializerOpt(var, var, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(void)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', void, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(void)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+                  listener: handleIdentifier(void, fieldDeclaration)
+                parseFieldInitializerOpt(void, void, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(while)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', while, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(while)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+                  listener: handleIdentifier(while, fieldDeclaration)
+                parseFieldInitializerOpt(while, while, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(with)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.Class, WrapperClass, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+                  listener: handleIdentifier(with, fieldDeclaration)
+                parseFieldInitializerOpt(with, with, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', yield, DeclarationKind.Class, WrapperClass, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(yield)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(yield, fieldDeclaration)
+                parseFieldInitializerOpt(yield, yield, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 69, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.parser.expect
new file mode 100644
index 0000000..15e39bf
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.parser.expect
@@ -0,0 +1,145 @@
+class WrapperClass {
+int abstract = 42;
+int as = 42;
+int assert = 42;
+int async = 42;
+int await = 42;
+int break = 42;
+int case = 42;
+int catch = 42;
+int class = 42;
+int const = 42;
+int continue = 42;
+int covariant = 42;
+int default = 42;
+int deferred = 42;
+int do = 42;
+int dynamic = 42;
+int else = 42;
+int enum = 42;
+int export = 42;
+int extends = 42;
+int extension = 42;
+int external = 42;
+int factory = 42;
+int false = 42;
+int final = 42;
+int finally = 42;
+int for = 42;
+int Function = 42;
+int get = 42;
+int hide = 42;
+int if = 42;
+int implements = 42;
+int import = 42;
+int in = 42;
+int inout = 42;
+int interface = 42;
+int is = 42;
+int late = 42;
+int library = 42;
+int mixin = 42;
+int native = 42;
+int new = 42;
+int null = 42;
+int of = 42;
+int on = 42;
+int operator = 42;
+int out = 42;
+int part = 42;
+int patch = 42;
+int required = 42;
+int rethrow = 42;
+int return = 42;
+int set = 42;
+int show = 42;
+int source = 42;
+int static = 42;
+int super = 42;
+int switch = 42;
+int sync = 42;
+int this = 42;
+int throw = 42;
+int true = 42;
+int try = 42;
+int typedef = 42;
+int var = 42;
+int void = 42;
+int while = 42;
+int with = 42;
+int yield = 42;
+}
+
+
+class[KeywordToken] WrapperClass[StringToken] {[BeginToken]
+int[StringToken] abstract[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] as[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] assert[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] async[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] await[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] break[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] case[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] catch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] class[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] const[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] continue[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] covariant[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] default[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] deferred[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] do[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] dynamic[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] else[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] enum[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] export[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] extends[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] extension[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] external[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] factory[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] false[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] final[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] finally[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] for[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] Function[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] get[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] hide[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] if[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] implements[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] import[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] in[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] inout[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] interface[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] is[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] late[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] library[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] mixin[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] native[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] new[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] null[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] of[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] on[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] operator[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] out[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] part[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] patch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] required[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] rethrow[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] return[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] set[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] show[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] source[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] static[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] super[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] switch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] sync[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] this[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] throw[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] true[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] try[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] typedef[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] var[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] void[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] while[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] with[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] yield[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.scanner.expect
new file mode 100644
index 0000000..15e39bf
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.scanner.expect
@@ -0,0 +1,145 @@
+class WrapperClass {
+int abstract = 42;
+int as = 42;
+int assert = 42;
+int async = 42;
+int await = 42;
+int break = 42;
+int case = 42;
+int catch = 42;
+int class = 42;
+int const = 42;
+int continue = 42;
+int covariant = 42;
+int default = 42;
+int deferred = 42;
+int do = 42;
+int dynamic = 42;
+int else = 42;
+int enum = 42;
+int export = 42;
+int extends = 42;
+int extension = 42;
+int external = 42;
+int factory = 42;
+int false = 42;
+int final = 42;
+int finally = 42;
+int for = 42;
+int Function = 42;
+int get = 42;
+int hide = 42;
+int if = 42;
+int implements = 42;
+int import = 42;
+int in = 42;
+int inout = 42;
+int interface = 42;
+int is = 42;
+int late = 42;
+int library = 42;
+int mixin = 42;
+int native = 42;
+int new = 42;
+int null = 42;
+int of = 42;
+int on = 42;
+int operator = 42;
+int out = 42;
+int part = 42;
+int patch = 42;
+int required = 42;
+int rethrow = 42;
+int return = 42;
+int set = 42;
+int show = 42;
+int source = 42;
+int static = 42;
+int super = 42;
+int switch = 42;
+int sync = 42;
+int this = 42;
+int throw = 42;
+int true = 42;
+int try = 42;
+int typedef = 42;
+int var = 42;
+int void = 42;
+int while = 42;
+int with = 42;
+int yield = 42;
+}
+
+
+class[KeywordToken] WrapperClass[StringToken] {[BeginToken]
+int[StringToken] abstract[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] as[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] assert[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] async[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] await[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] break[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] case[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] catch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] class[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] const[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] continue[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] covariant[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] default[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] deferred[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] do[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] dynamic[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] else[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] enum[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] export[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] extends[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] extension[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] external[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] factory[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] false[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] final[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] finally[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] for[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] Function[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] get[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] hide[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] if[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] implements[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] import[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] in[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] inout[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] interface[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] is[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] late[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] library[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] mixin[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] native[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] new[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] null[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] of[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] on[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] operator[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] out[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] part[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] patch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] required[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] rethrow[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] return[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] set[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] show[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] source[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] static[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] super[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] switch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] sync[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] this[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] throw[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] true[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] try[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] typedef[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] var[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] void[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] while[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] with[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] yield[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart
new file mode 100644
index 0000000..1ea315f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart
@@ -0,0 +1,346 @@
+class WrapperClass {
+  int abstract(int x) {
+    if (x == 0) return 42;
+    return abstract(x-1) + 1;
+  }
+
+  int as(int x) {
+    if (x == 0) return 42;
+    return as(x-1) + 1;
+  }
+
+  int assert(int x) {
+    if (x == 0) return 42;
+    return assert(x-1) + 1;
+  }
+
+  int async(int x) {
+    if (x == 0) return 42;
+    return async(x-1) + 1;
+  }
+
+  int await(int x) {
+    if (x == 0) return 42;
+    return await(x-1) + 1;
+  }
+
+  int break(int x) {
+    if (x == 0) return 42;
+    return break(x-1) + 1;
+  }
+
+  int case(int x) {
+    if (x == 0) return 42;
+    return case(x-1) + 1;
+  }
+
+  int catch(int x) {
+    if (x == 0) return 42;
+    return catch(x-1) + 1;
+  }
+
+  int class(int x) {
+    if (x == 0) return 42;
+    return class(x-1) + 1;
+  }
+
+  int const(int x) {
+    if (x == 0) return 42;
+    return const(x-1) + 1;
+  }
+
+  int continue(int x) {
+    if (x == 0) return 42;
+    return continue(x-1) + 1;
+  }
+
+  int covariant(int x) {
+    if (x == 0) return 42;
+    return covariant(x-1) + 1;
+  }
+
+  int default(int x) {
+    if (x == 0) return 42;
+    return default(x-1) + 1;
+  }
+
+  int deferred(int x) {
+    if (x == 0) return 42;
+    return deferred(x-1) + 1;
+  }
+
+  int do(int x) {
+    if (x == 0) return 42;
+    return do(x-1) + 1;
+  }
+
+  int dynamic(int x) {
+    if (x == 0) return 42;
+    return dynamic(x-1) + 1;
+  }
+
+  int else(int x) {
+    if (x == 0) return 42;
+    return else(x-1) + 1;
+  }
+
+  int enum(int x) {
+    if (x == 0) return 42;
+    return enum(x-1) + 1;
+  }
+
+  int export(int x) {
+    if (x == 0) return 42;
+    return export(x-1) + 1;
+  }
+
+  int extends(int x) {
+    if (x == 0) return 42;
+    return extends(x-1) + 1;
+  }
+
+  int extension(int x) {
+    if (x == 0) return 42;
+    return extension(x-1) + 1;
+  }
+
+  int external(int x) {
+    if (x == 0) return 42;
+    return external(x-1) + 1;
+  }
+
+  int factory(int x) {
+    if (x == 0) return 42;
+    return factory(x-1) + 1;
+  }
+
+  int false(int x) {
+    if (x == 0) return 42;
+    return false(x-1) + 1;
+  }
+
+  int final(int x) {
+    if (x == 0) return 42;
+    return final(x-1) + 1;
+  }
+
+  int finally(int x) {
+    if (x == 0) return 42;
+    return finally(x-1) + 1;
+  }
+
+  int for(int x) {
+    if (x == 0) return 42;
+    return for(x-1) + 1;
+  }
+
+  int Function(int x) {
+    if (x == 0) return 42;
+    return Function(x-1) + 1;
+  }
+
+  int get(int x) {
+    if (x == 0) return 42;
+    return get(x-1) + 1;
+  }
+
+  int hide(int x) {
+    if (x == 0) return 42;
+    return hide(x-1) + 1;
+  }
+
+  int if(int x) {
+    if (x == 0) return 42;
+    return if(x-1) + 1;
+  }
+
+  int implements(int x) {
+    if (x == 0) return 42;
+    return implements(x-1) + 1;
+  }
+
+  int import(int x) {
+    if (x == 0) return 42;
+    return import(x-1) + 1;
+  }
+
+  int in(int x) {
+    if (x == 0) return 42;
+    return in(x-1) + 1;
+  }
+
+  int inout(int x) {
+    if (x == 0) return 42;
+    return inout(x-1) + 1;
+  }
+
+  int interface(int x) {
+    if (x == 0) return 42;
+    return interface(x-1) + 1;
+  }
+
+  int is(int x) {
+    if (x == 0) return 42;
+    return is(x-1) + 1;
+  }
+
+  int late(int x) {
+    if (x == 0) return 42;
+    return late(x-1) + 1;
+  }
+
+  int library(int x) {
+    if (x == 0) return 42;
+    return library(x-1) + 1;
+  }
+
+  int mixin(int x) {
+    if (x == 0) return 42;
+    return mixin(x-1) + 1;
+  }
+
+  int native(int x) {
+    if (x == 0) return 42;
+    return native(x-1) + 1;
+  }
+
+  int new(int x) {
+    if (x == 0) return 42;
+    return new(x-1) + 1;
+  }
+
+  int null(int x) {
+    if (x == 0) return 42;
+    return null(x-1) + 1;
+  }
+
+  int of(int x) {
+    if (x == 0) return 42;
+    return of(x-1) + 1;
+  }
+
+  int on(int x) {
+    if (x == 0) return 42;
+    return on(x-1) + 1;
+  }
+
+  int operator(int x) {
+    if (x == 0) return 42;
+    return operator(x-1) + 1;
+  }
+
+  int out(int x) {
+    if (x == 0) return 42;
+    return out(x-1) + 1;
+  }
+
+  int part(int x) {
+    if (x == 0) return 42;
+    return part(x-1) + 1;
+  }
+
+  int patch(int x) {
+    if (x == 0) return 42;
+    return patch(x-1) + 1;
+  }
+
+  int required(int x) {
+    if (x == 0) return 42;
+    return required(x-1) + 1;
+  }
+
+  int rethrow(int x) {
+    if (x == 0) return 42;
+    return rethrow(x-1) + 1;
+  }
+
+  int return(int x) {
+    if (x == 0) return 42;
+    return return(x-1) + 1;
+  }
+
+  int set(int x) {
+    if (x == 0) return 42;
+    return set(x-1) + 1;
+  }
+
+  int show(int x) {
+    if (x == 0) return 42;
+    return show(x-1) + 1;
+  }
+
+  int source(int x) {
+    if (x == 0) return 42;
+    return source(x-1) + 1;
+  }
+
+  int static(int x) {
+    if (x == 0) return 42;
+    return static(x-1) + 1;
+  }
+
+  int super(int x) {
+    if (x == 0) return 42;
+    return super(x-1) + 1;
+  }
+
+  int switch(int x) {
+    if (x == 0) return 42;
+    return switch(x-1) + 1;
+  }
+
+  int sync(int x) {
+    if (x == 0) return 42;
+    return sync(x-1) + 1;
+  }
+
+  int this(int x) {
+    if (x == 0) return 42;
+    return this(x-1) + 1;
+  }
+
+  int throw(int x) {
+    if (x == 0) return 42;
+    return throw(x-1) + 1;
+  }
+
+  int true(int x) {
+    if (x == 0) return 42;
+    return true(x-1) + 1;
+  }
+
+  int try(int x) {
+    if (x == 0) return 42;
+    return try(x-1) + 1;
+  }
+
+  int typedef(int x) {
+    if (x == 0) return 42;
+    return typedef(x-1) + 1;
+  }
+
+  int var(int x) {
+    if (x == 0) return 42;
+    return var(x-1) + 1;
+  }
+
+  int void(int x) {
+    if (x == 0) return 42;
+    return void(x-1) + 1;
+  }
+
+  int while(int x) {
+    if (x == 0) return 42;
+    return while(x-1) + 1;
+  }
+
+  int with(int x) {
+    if (x == 0) return 42;
+    return with(x-1) + 1;
+  }
+
+  int yield(int x) {
+    if (x == 0) return 42;
+    return yield(x-1) + 1;
+  }
+}
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
new file mode 100644
index 0000000..b80ddaf
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
@@ -0,0 +1,4748 @@
+Problems reported:
+
+parser/error_recovery/keyword_named_class_methods:12:7: Expected an identifier, but got 'assert'.
+  int assert(int x) {
+      ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:14:12: `assert` can't be used as an expression.
+    return assert(x-1) + 1;
+           ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:27:7: Expected an identifier, but got 'break'.
+  int break(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:29:12: Expected an identifier, but got 'break'.
+    return break(x-1) + 1;
+           ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:29:12: 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;
+           ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:29:12: Expected ';' after this.
+    return break(x-1) + 1;
+           ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:32:7: Expected an identifier, but got 'case'.
+  int case(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods:34:12: Expected an identifier, but got 'case'.
+    return case(x-1) + 1;
+           ^^^^
+
+parser/error_recovery/keyword_named_class_methods:37:7: Expected an identifier, but got 'catch'.
+  int catch(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:39:12: Expected an identifier, but got 'catch'.
+    return catch(x-1) + 1;
+           ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:42:7: Expected an identifier, but got 'class'.
+  int class(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:44:12: Expected an identifier, but got 'class'.
+    return class(x-1) + 1;
+           ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:47:7: Expected an identifier, but got 'const'.
+  int const(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:49:17: Expected an identifier, but got '('.
+    return const(x-1) + 1;
+                ^
+
+parser/error_recovery/keyword_named_class_methods:52:7: Expected an identifier, but got 'continue'.
+  int continue(int x) {
+      ^^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:54:12: Expected an identifier, but got 'continue'.
+    return continue(x-1) + 1;
+           ^^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:54:12: 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;
+           ^^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:54:12: Expected ';' after this.
+    return continue(x-1) + 1;
+           ^^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:62:7: Expected an identifier, but got 'default'.
+  int default(int x) {
+      ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:64:12: Expected an identifier, but got 'default'.
+    return default(x-1) + 1;
+           ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:72:7: Expected an identifier, but got 'do'.
+  int do(int x) {
+      ^^
+
+parser/error_recovery/keyword_named_class_methods:74:12: Expected an identifier, but got 'do'.
+    return do(x-1) + 1;
+           ^^
+
+parser/error_recovery/keyword_named_class_methods:74:12: Expected ';' after this.
+    return do(x-1) + 1;
+           ^^
+
+parser/error_recovery/keyword_named_class_methods:75:3: Expected 'while' before this.
+  }
+  ^
+
+parser/error_recovery/keyword_named_class_methods:75:3: Expected to find '('.
+  }
+  ^
+
+parser/error_recovery/keyword_named_class_methods:75:3: Expected an identifier, but got '}'.
+  }
+  ^
+
+parser/error_recovery/keyword_named_class_methods:75:3: Expected ';' after this.
+  }
+  ^
+
+parser/error_recovery/keyword_named_class_methods:82:7: Expected an identifier, but got 'else'.
+  int else(int x) {
+      ^^^^
+
+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.
+    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.
+    return else(x-1) + 1;
+           ^^^^
+
+parser/error_recovery/keyword_named_class_methods:84:12: Unexpected token ';'.
+    return else(x-1) + 1;
+           ^^^^
+
+parser/error_recovery/keyword_named_class_methods:87:7: Expected an identifier, but got 'enum'.
+  int enum(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods:89:12: Expected an identifier, but got 'enum'.
+    return enum(x-1) + 1;
+           ^^^^
+
+parser/error_recovery/keyword_named_class_methods:97:7: Expected an identifier, but got 'extends'.
+  int extends(int x) {
+      ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:99:12: Expected an identifier, but got 'extends'.
+    return extends(x-1) + 1;
+           ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:117:7: Expected an identifier, but got 'false'.
+  int false(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:122:7: Expected an identifier, but got 'final'.
+  int final(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:124:12: Expected an identifier, but got 'final'.
+    return final(x-1) + 1;
+           ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:124:12: 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.
+    return final(x-1) + 1;
+                 ^
+
+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: Expected an identifier, but got ')'.
+    return final(x-1) + 1;
+                    ^
+
+parser/error_recovery/keyword_named_class_methods:124:21: Expected ';' after this.
+    return final(x-1) + 1;
+                    ^
+
+parser/error_recovery/keyword_named_class_methods:124:21: Unexpected token ';'.
+    return final(x-1) + 1;
+                    ^
+
+parser/error_recovery/keyword_named_class_methods:124:23: '+' is not a prefix operator.
+    return final(x-1) + 1;
+                      ^
+
+parser/error_recovery/keyword_named_class_methods:127:7: Expected an identifier, but got 'finally'.
+  int finally(int x) {
+      ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:129:12: Expected an identifier, but got 'finally'.
+    return finally(x-1) + 1;
+           ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:132:7: Expected an identifier, but got 'for'.
+  int for(int x) {
+      ^^^
+
+parser/error_recovery/keyword_named_class_methods:134:12: Expected an identifier, but got 'for'.
+    return for(x-1) + 1;
+           ^^^
+
+parser/error_recovery/keyword_named_class_methods:134:12: 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;
+                 ^
+
+parser/error_recovery/keyword_named_class_methods:134:19: Expected an identifier, but got ')'.
+    return for(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_class_methods:134:19: 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;
+                    ^
+
+parser/error_recovery/keyword_named_class_methods:152:7: Expected an identifier, but got 'if'.
+  int if(int x) {
+      ^^
+
+parser/error_recovery/keyword_named_class_methods:154:12: Expected an identifier, but got 'if'.
+    return if(x-1) + 1;
+           ^^
+
+parser/error_recovery/keyword_named_class_methods:154:12: 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;
+                   ^
+
+parser/error_recovery/keyword_named_class_methods:167:7: Expected an identifier, but got 'in'.
+  int in(int x) {
+      ^^
+
+parser/error_recovery/keyword_named_class_methods:169:12: Expected an identifier, but got 'in'.
+    return in(x-1) + 1;
+           ^^
+
+parser/error_recovery/keyword_named_class_methods:182:7: Expected an identifier, but got 'is'.
+  int is(int x) {
+      ^^
+
+parser/error_recovery/keyword_named_class_methods:184:12: Expected an identifier, but got 'is'.
+    return is(x-1) + 1;
+           ^^
+
+parser/error_recovery/keyword_named_class_methods:184:14: Expected a type, but got '('.
+    return is(x-1) + 1;
+             ^
+
+parser/error_recovery/keyword_named_class_methods:184:14: Expected ';' after this.
+    return is(x-1) + 1;
+             ^
+
+parser/error_recovery/keyword_named_class_methods:207:7: Expected an identifier, but got 'new'.
+  int new(int x) {
+      ^^^
+
+parser/error_recovery/keyword_named_class_methods:209:15: Expected an identifier, but got '('.
+    return new(x-1) + 1;
+              ^
+
+parser/error_recovery/keyword_named_class_methods:212:7: Expected an identifier, but got 'null'.
+  int null(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods:252:7: Expected an identifier, but got 'rethrow'.
+  int rethrow(int x) {
+      ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:254:12: Expected an identifier, but got 'rethrow'.
+    return rethrow(x-1) + 1;
+           ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:257:7: Expected an identifier, but got 'return'.
+  int return(int x) {
+      ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:259:12: Unexpected token 'return'.
+    return return(x-1) + 1;
+           ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:282:7: Expected an identifier, but got 'super'.
+  int super(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:287:7: Expected an identifier, but got 'switch'.
+  int switch(int x) {
+      ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:289:12: Expected an identifier, but got 'switch'.
+    return switch(x-1) + 1;
+           ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods:289:12: 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;
+                     ^
+
+parser/error_recovery/keyword_named_class_methods:289:24: '+' is not a prefix operator.
+    return switch(x-1) + 1;
+                       ^
+
+parser/error_recovery/keyword_named_class_methods:297:7: Expected an identifier, but got 'this'.
+  int this(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods:297:7: Expected ';' after this.
+  int this(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods:297:11: Expected an identifier, but got '('.
+  int this(int x) {
+          ^
+
+parser/error_recovery/keyword_named_class_methods:302:7: Expected an identifier, but got 'throw'.
+  int throw(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:307:7: Expected an identifier, but got 'true'.
+  int true(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods:312:7: Expected an identifier, but got 'try'.
+  int try(int x) {
+      ^^^
+
+parser/error_recovery/keyword_named_class_methods:314:12: Expected an identifier, but got 'try'.
+    return try(x-1) + 1;
+           ^^^
+
+parser/error_recovery/keyword_named_class_methods:314:12: 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;
+           ^^^
+
+parser/error_recovery/keyword_named_class_methods:314:12: A try block must be followed by an 'on', 'catch', or 'finally' clause.
+    return try(x-1) + 1;
+           ^^^
+
+parser/error_recovery/keyword_named_class_methods:322:7: Expected an identifier, but got 'var'.
+  int var(int x) {
+      ^^^
+
+parser/error_recovery/keyword_named_class_methods:324:12: Expected an identifier, but got 'var'.
+    return var(x-1) + 1;
+           ^^^
+
+parser/error_recovery/keyword_named_class_methods:324:12: 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.
+    return var(x-1) + 1;
+               ^
+
+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: Expected an identifier, but got ')'.
+    return var(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_class_methods:324:19: Expected ';' after this.
+    return var(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_class_methods:324:19: Unexpected token ';'.
+    return var(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_class_methods:324:21: '+' is not a prefix operator.
+    return var(x-1) + 1;
+                    ^
+
+parser/error_recovery/keyword_named_class_methods:327:7: Expected an identifier, but got 'void'.
+  int void(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods:329:12: Expected an identifier, but got 'void'.
+    return void(x-1) + 1;
+           ^^^^
+
+parser/error_recovery/keyword_named_class_methods:329:12: 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.
+    return void(x-1) + 1;
+                ^
+
+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: Expected an identifier, but got ')'.
+    return void(x-1) + 1;
+                   ^
+
+parser/error_recovery/keyword_named_class_methods:329:20: Expected ';' after this.
+    return void(x-1) + 1;
+                   ^
+
+parser/error_recovery/keyword_named_class_methods:329:20: Unexpected token ';'.
+    return void(x-1) + 1;
+                   ^
+
+parser/error_recovery/keyword_named_class_methods:329:22: '+' is not a prefix operator.
+    return void(x-1) + 1;
+                     ^
+
+parser/error_recovery/keyword_named_class_methods:332:7: Expected an identifier, but got 'while'.
+  int while(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:334:12: Expected an identifier, but got 'while'.
+    return while(x-1) + 1;
+           ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:334:12: 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;
+                      ^
+
+parser/error_recovery/keyword_named_class_methods:337:7: Expected an identifier, but got 'with'.
+  int with(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods:339:12: Expected an identifier, but got 'with'.
+    return with(x-1) + 1;
+           ^^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(WrapperClass, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, WrapperClass)
+      handleNoType(WrapperClass)
+      handleClassExtends(null)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, abstract)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(abstract)
+            handleType(int, null)
+            handleIdentifier(abstract, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(abstract, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(abstract, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, as)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(as)
+            handleType(int, null)
+            handleIdentifier(as, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(as, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(as, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, assert)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(assert)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+            handleIdentifier(assert, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                beginAssert(assert, Assert.Expression)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                  handleRecoverableError(AssertAsExpression, assert, assert)
+                endAssert(assert, Assert.Expression, (, null, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, async)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(async)
+            handleType(int, null)
+            handleIdentifier(async, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(async, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(async, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, await)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(await)
+            handleType(int, null)
+            handleIdentifier(await, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(await, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(await, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, break)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(break)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+            handleIdentifier(break, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(break)
+                handleNoArguments(break)
+                handleSend(, break)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
+              endReturnStatement(true, return, ;)
+              handleRecoverableError(BreakOutsideOfLoop, break, break)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
+              handleBreakStatement(false, break, ;)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, -)
+              beginBinaryExpression(-)
+              handleLiteralInt(1)
+              endBinaryExpression(-)
+              handleParenthesizedExpression(()
+              beginBinaryExpression(+)
+              handleLiteralInt(1)
+              endBinaryExpression(+)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(4, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, case)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(case)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+            handleIdentifier(case, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+                handleIdentifier(case, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(case, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, catch)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(catch)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+            handleIdentifier(catch, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+                handleIdentifier(catch, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(catch, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, class)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(class)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+            handleIdentifier(class, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+                handleIdentifier(class, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(class, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, const)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(const)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+            handleIdentifier(const, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                beginConstExpression(const)
+                  handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                  handleIdentifier(, constructorReference)
+                  beginConstructorReference()
+                    handleNoTypeArguments(()
+                    handleNoConstructorReferenceContinuationAfterTypeArguments(()
+                  endConstructorReference(, null, ()
+                  beginArguments(()
+                    handleIdentifier(x, expression)
+                    handleNoTypeArguments(-)
+                    handleNoArguments(-)
+                    handleSend(x, -)
+                    beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                    endBinaryExpression(-)
+                  endArguments(1, (, ))
+                endConstExpression(const)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, continue)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(continue)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+            handleIdentifier(continue, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(continue)
+                handleNoArguments(continue)
+                handleSend(, continue)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
+              endReturnStatement(true, return, ;)
+              handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
+              handleContinueStatement(false, continue, ;)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, -)
+              beginBinaryExpression(-)
+              handleLiteralInt(1)
+              endBinaryExpression(-)
+              handleParenthesizedExpression(()
+              beginBinaryExpression(+)
+              handleLiteralInt(1)
+              endBinaryExpression(+)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(4, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, covariant)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(covariant)
+            handleType(int, null)
+            handleIdentifier(covariant, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(covariant, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(covariant, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, default)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(default)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+            handleIdentifier(default, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+                handleIdentifier(default, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(default, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, deferred)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(deferred)
+            handleType(int, null)
+            handleIdentifier(deferred, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(deferred, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(deferred, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, do)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(do)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+            handleIdentifier(do, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(do)
+                handleNoArguments(do)
+                handleSend(, do)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], do, do)
+              endReturnStatement(true, return, ;)
+              beginDoWhileStatement(do)
+                beginDoWhileStatementBody(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                  handleParenthesizedExpression(()
+                  beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                  endBinaryExpression(+)
+                  handleExpressionStatement(;)
+                endDoWhileStatementBody(;)
+                handleRecoverableError(Message[ExpectedButGot, Expected 'while' before this., null, {string: while}], }, })
+                handleRecoverableError(Message[ExpectedToken, Expected to find '('., null, {string: (}], }, })
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., null, {token: }}], }, })
+                handleIdentifier(, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(, ))
+                handleParenthesizedCondition(()
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+              endDoWhileStatement(do, while, ;)
+            endBlockFunctionBody(3, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, dynamic)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(dynamic)
+            handleType(int, null)
+            handleIdentifier(dynamic, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(dynamic, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(dynamic, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, else)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(else)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+            handleIdentifier(else, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(else)
+                handleNoArguments(else)
+                handleSend(, else)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+              endReturnStatement(true, return, ;)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(else)
+              handleNoArguments(else)
+              handleSend(, else)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+              handleExpressionStatement(;)
+              handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], else, else)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, -)
+              beginBinaryExpression(-)
+              handleLiteralInt(1)
+              endBinaryExpression(-)
+              handleParenthesizedExpression(()
+              beginBinaryExpression(+)
+              handleLiteralInt(1)
+              endBinaryExpression(+)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(4, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, enum)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(enum)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+            handleIdentifier(enum, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+                handleIdentifier(enum, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(enum, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, export)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(export)
+            handleType(int, null)
+            handleIdentifier(export, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(export, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(export, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, extends)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extends)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+            handleIdentifier(extends, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+                handleIdentifier(extends, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(extends, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, extension)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extension)
+            handleType(int, null)
+            handleIdentifier(extension, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(extension, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(extension, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, external)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(external)
+            handleType(int, null)
+            handleIdentifier(external, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(external, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(external, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, factory)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(factory)
+            handleType(int, null)
+            handleIdentifier(factory, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(factory, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(factory, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, false)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(false)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+            handleIdentifier(false, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleLiteralBool(false)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend((, ))
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, final)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(final)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+            handleIdentifier(final, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(final)
+                handleNoArguments(final)
+                handleSend(, final)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
+              endReturnStatement(true, return, ;)
+              beginMetadataStar(final)
+              endMetadataStar(0)
+              handleNoType(final)
+              beginVariablesDeclaration((, null, final)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                handleIdentifier(, localVariableDeclaration)
+                beginInitializedIdentifier()
+                  handleNoVariableInitializer(x)
+                endInitializedIdentifier()
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+              endVariablesDeclaration(1, ;)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, -)
+              beginBinaryExpression(-)
+              handleLiteralInt(1)
+              endBinaryExpression(-)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+              handleExpressionStatement(;)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+              handleIdentifier(, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(, ))
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+              handleExpressionStatement(;)
+              handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
+              handleRecoverableError(UnsupportedPrefixPlus, +, +)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(+)
+              handleNoArguments(+)
+              handleSend(, +)
+              beginBinaryExpression(+)
+              handleLiteralInt(1)
+              endBinaryExpression(+)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(6, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, finally)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finally)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+            handleIdentifier(finally, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+                handleIdentifier(finally, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(finally, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, for)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(for)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+            handleIdentifier(for, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(for)
+                handleNoArguments(for)
+                handleSend(, for)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], for, for)
+              endReturnStatement(true, return, ;)
+              beginForStatement(for)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, -)
+                beginBinaryExpression(-)
+                handleLiteralInt(1)
+                endBinaryExpression(-)
+                handleForInitializerExpressionStatement(1, false)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+                handleIdentifier(, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(, ))
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                handleExpressionStatement(;)
+                handleForLoopParts(for, (, ;, 0)
+                beginForStatementBody(+)
+                  handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                  handleIdentifier(, expression)
+                  handleNoTypeArguments(+)
+                  handleNoArguments(+)
+                  handleSend(, +)
+                  beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                  endBinaryExpression(+)
+                  handleExpressionStatement(;)
+                endForStatementBody(})
+              endForStatement(})
+            endBlockFunctionBody(3, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, Function)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(Function)
+            handleType(int, null)
+            handleIdentifier(Function, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(Function, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(Function, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, get)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(get, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(get, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(get, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, hide)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(hide)
+            handleType(int, null)
+            handleIdentifier(hide, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(hide, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(hide, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, if)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(if)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+            handleIdentifier(if, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(if)
+                handleNoArguments(if)
+                handleSend(, if)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], if, if)
+              endReturnStatement(true, return, ;)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, -)
+                beginBinaryExpression(-)
+                handleLiteralInt(1)
+                endBinaryExpression(-)
+                handleParenthesizedCondition(()
+                beginThenStatement(+)
+                  handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                  handleIdentifier(, expression)
+                  handleNoTypeArguments(+)
+                  handleNoArguments(+)
+                  handleSend(, +)
+                  beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                  endBinaryExpression(+)
+                  handleExpressionStatement(;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+            endBlockFunctionBody(3, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, implements)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(implements)
+            handleType(int, null)
+            handleIdentifier(implements, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(implements, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(implements, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, import)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(import)
+            handleType(int, null)
+            handleIdentifier(import, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(import, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(import, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, in)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(in)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+            handleIdentifier(in, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+                handleIdentifier(in, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(in, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, inout)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inout)
+            handleType(int, null)
+            handleIdentifier(inout, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(inout, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(inout, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, interface)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(interface)
+            handleType(int, null)
+            handleIdentifier(interface, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(interface, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(interface, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, is)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(is)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+            handleIdentifier(is, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(is)
+                handleNoArguments(is)
+                handleSend(, is)
+                beginIsOperatorType(is)
+                  handleRecoverableError(Message[ExpectedType, Expected a type, but got '('., null, {token: (}], (, ()
+                  handleIdentifier(, typeReference)
+                  handleNoTypeArguments(()
+                  handleType(, null)
+                endIsOperatorType(is)
+                handleIsOperator(is, null)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
+              endReturnStatement(true, return, ;)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, -)
+              beginBinaryExpression(-)
+              handleLiteralInt(1)
+              endBinaryExpression(-)
+              handleParenthesizedExpression(()
+              beginBinaryExpression(+)
+              handleLiteralInt(1)
+              endBinaryExpression(+)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(3, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, late)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(late)
+            handleType(int, null)
+            handleIdentifier(late, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(late, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(late, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, library)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(library)
+            handleType(int, null)
+            handleIdentifier(library, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(library, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(library, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, mixin)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(mixin)
+            handleType(int, null)
+            handleIdentifier(mixin, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(mixin, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(mixin, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, native)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(native)
+            handleType(int, null)
+            handleIdentifier(native, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(native, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(native, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, new)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(new)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+            handleIdentifier(new, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                beginNewExpression(new)
+                  handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                  handleIdentifier(, constructorReference)
+                  beginConstructorReference()
+                    handleNoTypeArguments(()
+                    handleNoConstructorReferenceContinuationAfterTypeArguments(()
+                  endConstructorReference(, null, ()
+                  beginArguments(()
+                    handleIdentifier(x, expression)
+                    handleNoTypeArguments(-)
+                    handleNoArguments(-)
+                    handleSend(x, -)
+                    beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                    endBinaryExpression(-)
+                  endArguments(1, (, ))
+                endNewExpression(new)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(null)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+            handleIdentifier(null, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleLiteralNull(null)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend((, ))
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, of)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(of)
+            handleType(int, null)
+            handleIdentifier(of, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(of, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(of, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, on)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(on)
+            handleType(int, null)
+            handleIdentifier(on, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(on, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(on, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          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)
+            handleIdentifier(operator, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(operator, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(operator, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, out)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(out)
+            handleType(int, null)
+            handleIdentifier(out, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(out, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(out, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, part)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(part)
+            handleType(int, null)
+            handleIdentifier(part, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(part, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(part, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, patch)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(patch)
+            handleType(int, null)
+            handleIdentifier(patch, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(patch, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(patch, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, required)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(required)
+            handleType(int, null)
+            handleIdentifier(required, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(required, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(required, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, rethrow)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(rethrow)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+            handleIdentifier(rethrow, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+                handleIdentifier(rethrow, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(rethrow, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, return)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(return)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+            handleIdentifier(return, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[UnexpectedToken, Unexpected token 'return'., null, {token: return}], return, return)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, -)
+                beginBinaryExpression(-)
+                handleLiteralInt(1)
+                endBinaryExpression(-)
+                handleParenthesizedExpression(()
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, set)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(set)
+            handleType(int, null)
+            handleIdentifier(set, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(set, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(set, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, show)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(show)
+            handleType(int, null)
+            handleIdentifier(show, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(show, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(show, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, source)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(source)
+            handleType(int, null)
+            handleIdentifier(source, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(source, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(source, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, static)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(static)
+            handleType(int, null)
+            handleIdentifier(static, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(static, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(static, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, super)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(super)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+            handleIdentifier(super, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleSuperExpression(super, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(super, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, switch)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(switch)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+            handleIdentifier(switch, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(switch)
+                handleNoArguments(switch)
+                handleSend(, switch)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], switch, switch)
+              endReturnStatement(true, return, ;)
+              beginSwitchStatement(switch)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, -)
+                beginBinaryExpression(-)
+                handleLiteralInt(1)
+                endBinaryExpression(-)
+                handleParenthesizedCondition(()
+                handleRecoverableError(Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}], ), ))
+                beginSwitchBlock({)
+                endSwitchBlock(0, {, })
+              endSwitchStatement(switch, })
+              handleRecoverableError(UnsupportedPrefixPlus, +, +)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(+)
+              handleNoArguments(+)
+              handleSend(, +)
+              beginBinaryExpression(+)
+              handleLiteralInt(1)
+              endBinaryExpression(+)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(4, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, sync)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(sync)
+            handleType(int, null)
+            handleIdentifier(sync, methodDeclaration)
+            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({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(sync, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(sync, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(this)
+          handleType(int, null)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+          handleIdentifier(this, fieldDeclaration)
+          handleNoFieldInitializer(()
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], this, this)
+        endClassFields(null, null, null, null, 1, int, ;)
+      endMember()
+      beginMetadataStar(()
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(null, null, null, null, null, ()
+          handleNoType(;)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+          handleIdentifier(, methodDeclaration)
+          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({)
+            beginIfStatement(if)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(==)
+              handleNoArguments(==)
+              handleSend(x, ==)
+              beginBinaryExpression(==)
+              handleLiteralInt(0)
+              endBinaryExpression(==)
+              handleParenthesizedCondition(()
+              beginThenStatement(return)
+                beginReturnStatement(return)
+                  handleLiteralInt(42)
+                endReturnStatement(true, return, ;)
+              endThenStatement(;)
+            endIfStatement(if, null)
+            beginReturnStatement(return)
+              handleThisExpression(this, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, -)
+                beginBinaryExpression(-)
+                handleLiteralInt(1)
+                endBinaryExpression(-)
+              endArguments(1, (, ))
+              handleSend(this, +)
+              beginBinaryExpression(+)
+              handleLiteralInt(1)
+              endBinaryExpression(+)
+            endReturnStatement(true, return, ;)
+          endBlockFunctionBody(2, {, })
+        endClassMethod(null, , (, null, })
+      endMember()
+      beginMetadataStar(int)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(null, null, null, null, null, throw)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(throw)
+          handleType(int, null)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+          handleIdentifier(throw, methodDeclaration)
+          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({)
+            beginIfStatement(if)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(==)
+              handleNoArguments(==)
+              handleSend(x, ==)
+              beginBinaryExpression(==)
+              handleLiteralInt(0)
+              endBinaryExpression(==)
+              handleParenthesizedCondition(()
+              beginThenStatement(return)
+                beginReturnStatement(return)
+                  handleLiteralInt(42)
+                endReturnStatement(true, return, ;)
+              endThenStatement(;)
+            endIfStatement(if, null)
+            beginReturnStatement(return)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, -)
+              beginBinaryExpression(-)
+              handleLiteralInt(1)
+              endBinaryExpression(-)
+              handleParenthesizedExpression(()
+              beginBinaryExpression(+)
+              handleLiteralInt(1)
+              endBinaryExpression(+)
+              handleThrowExpression(throw, ;)
+            endReturnStatement(true, return, ;)
+          endBlockFunctionBody(2, {, })
+        endClassMethod(null, int, (, null, })
+      endMember()
+      beginMetadataStar(int)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(null, null, null, null, null, true)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(true)
+          handleType(int, null)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+          handleIdentifier(true, methodDeclaration)
+          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({)
+            beginIfStatement(if)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(==)
+              handleNoArguments(==)
+              handleSend(x, ==)
+              beginBinaryExpression(==)
+              handleLiteralInt(0)
+              endBinaryExpression(==)
+              handleParenthesizedCondition(()
+              beginThenStatement(return)
+                beginReturnStatement(return)
+                  handleLiteralInt(42)
+                endReturnStatement(true, return, ;)
+              endThenStatement(;)
+            endIfStatement(if, null)
+            beginReturnStatement(return)
+              handleLiteralBool(true)
+              handleNoTypeArguments(()
+              beginArguments(()
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, -)
+                beginBinaryExpression(-)
+                handleLiteralInt(1)
+                endBinaryExpression(-)
+              endArguments(1, (, ))
+              handleSend((, ))
+              beginBinaryExpression(+)
+              handleLiteralInt(1)
+              endBinaryExpression(+)
+            endReturnStatement(true, return, ;)
+          endBlockFunctionBody(2, {, })
+        endClassMethod(null, int, (, null, })
+      endMember()
+      beginMetadataStar(int)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(null, null, null, null, null, try)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(try)
+          handleType(int, null)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+          handleIdentifier(try, methodDeclaration)
+          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({)
+            beginIfStatement(if)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(==)
+              handleNoArguments(==)
+              handleSend(x, ==)
+              beginBinaryExpression(==)
+              handleLiteralInt(0)
+              endBinaryExpression(==)
+              handleParenthesizedCondition(()
+              beginThenStatement(return)
+                beginReturnStatement(return)
+                  handleLiteralInt(42)
+                endReturnStatement(true, return, ;)
+              endThenStatement(;)
+            endIfStatement(if, null)
+            beginReturnStatement(return)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(try)
+              handleNoArguments(try)
+              handleSend(, try)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
+            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)
+              beginBlock({, BlockKind(try statement))
+              endBlock(0, {, }, BlockKind(try statement))
+              handleRecoverableError(OnlyTry, try, try)
+            endTryStatement(0, try, null)
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+            handleParenthesizedExpression(()
+            beginBinaryExpression(+)
+            handleLiteralInt(1)
+            endBinaryExpression(+)
+            handleExpressionStatement(;)
+          endBlockFunctionBody(4, {, })
+        endClassMethod(null, int, (, null, })
+      endMember()
+      beginMetadataStar(int)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(null, null, null, null, null, typedef)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(typedef)
+          handleType(int, null)
+          handleIdentifier(typedef, methodDeclaration)
+          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({)
+            beginIfStatement(if)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(==)
+              handleNoArguments(==)
+              handleSend(x, ==)
+              beginBinaryExpression(==)
+              handleLiteralInt(0)
+              endBinaryExpression(==)
+              handleParenthesizedCondition(()
+              beginThenStatement(return)
+                beginReturnStatement(return)
+                  handleLiteralInt(42)
+                endReturnStatement(true, return, ;)
+              endThenStatement(;)
+            endIfStatement(if, null)
+            beginReturnStatement(return)
+              handleIdentifier(typedef, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, -)
+                beginBinaryExpression(-)
+                handleLiteralInt(1)
+                endBinaryExpression(-)
+              endArguments(1, (, ))
+              handleSend(typedef, +)
+              beginBinaryExpression(+)
+              handleLiteralInt(1)
+              endBinaryExpression(+)
+            endReturnStatement(true, return, ;)
+          endBlockFunctionBody(2, {, })
+        endClassMethod(null, int, (, null, })
+      endMember()
+      beginMetadataStar(int)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(null, null, null, null, null, var)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(var)
+          handleType(int, null)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+          handleIdentifier(var, methodDeclaration)
+          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({)
+            beginIfStatement(if)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(==)
+              handleNoArguments(==)
+              handleSend(x, ==)
+              beginBinaryExpression(==)
+              handleLiteralInt(0)
+              endBinaryExpression(==)
+              handleParenthesizedCondition(()
+              beginThenStatement(return)
+                beginReturnStatement(return)
+                  handleLiteralInt(42)
+                endReturnStatement(true, return, ;)
+              endThenStatement(;)
+            endIfStatement(if, null)
+            beginReturnStatement(return)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(var)
+              handleNoArguments(var)
+              handleSend(, var)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
+            endReturnStatement(true, return, ;)
+            beginMetadataStar(var)
+            endMetadataStar(0)
+            handleNoType(var)
+            beginVariablesDeclaration((, null, var)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+              handleIdentifier(, localVariableDeclaration)
+              beginInitializedIdentifier()
+                handleNoVariableInitializer(x)
+              endInitializedIdentifier()
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+            endVariablesDeclaration(1, ;)
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+            handleExpressionStatement(;)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+            handleIdentifier(, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(, ))
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+            handleExpressionStatement(;)
+            handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
+            handleRecoverableError(UnsupportedPrefixPlus, +, +)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(+)
+            handleNoArguments(+)
+            handleSend(, +)
+            beginBinaryExpression(+)
+            handleLiteralInt(1)
+            endBinaryExpression(+)
+            handleExpressionStatement(;)
+          endBlockFunctionBody(6, {, })
+        endClassMethod(null, int, (, null, })
+      endMember()
+      beginMetadataStar(int)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(null, null, null, null, null, void)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(void)
+          handleType(int, null)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+          handleIdentifier(void, methodDeclaration)
+          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({)
+            beginIfStatement(if)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(==)
+              handleNoArguments(==)
+              handleSend(x, ==)
+              beginBinaryExpression(==)
+              handleLiteralInt(0)
+              endBinaryExpression(==)
+              handleParenthesizedCondition(()
+              beginThenStatement(return)
+                beginReturnStatement(return)
+                  handleLiteralInt(42)
+                endReturnStatement(true, return, ;)
+              endThenStatement(;)
+            endIfStatement(if, null)
+            beginReturnStatement(return)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(void)
+              handleNoArguments(void)
+              handleSend(, void)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+            endReturnStatement(true, return, ;)
+            beginMetadataStar(void)
+            endMetadataStar(0)
+            handleVoidKeyword(void)
+            beginVariablesDeclaration((, null, null)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+              handleIdentifier(, localVariableDeclaration)
+              beginInitializedIdentifier()
+                handleNoVariableInitializer(x)
+              endInitializedIdentifier()
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+            endVariablesDeclaration(1, ;)
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+            handleExpressionStatement(;)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+            handleIdentifier(, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(, ))
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+            handleExpressionStatement(;)
+            handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
+            handleRecoverableError(UnsupportedPrefixPlus, +, +)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(+)
+            handleNoArguments(+)
+            handleSend(, +)
+            beginBinaryExpression(+)
+            handleLiteralInt(1)
+            endBinaryExpression(+)
+            handleExpressionStatement(;)
+          endBlockFunctionBody(6, {, })
+        endClassMethod(null, int, (, null, })
+      endMember()
+      beginMetadataStar(int)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(null, null, null, null, null, while)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(while)
+          handleType(int, null)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+          handleIdentifier(while, methodDeclaration)
+          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({)
+            beginIfStatement(if)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(==)
+              handleNoArguments(==)
+              handleSend(x, ==)
+              beginBinaryExpression(==)
+              handleLiteralInt(0)
+              endBinaryExpression(==)
+              handleParenthesizedCondition(()
+              beginThenStatement(return)
+                beginReturnStatement(return)
+                  handleLiteralInt(42)
+                endReturnStatement(true, return, ;)
+              endThenStatement(;)
+            endIfStatement(if, null)
+            beginReturnStatement(return)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(while)
+              handleNoArguments(while)
+              handleSend(, while)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
+            endReturnStatement(true, return, ;)
+            beginWhileStatement(while)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, -)
+              beginBinaryExpression(-)
+              handleLiteralInt(1)
+              endBinaryExpression(-)
+              handleParenthesizedCondition(()
+              beginWhileStatementBody(+)
+                handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(+)
+                handleNoArguments(+)
+                handleSend(, +)
+                beginBinaryExpression(+)
+                handleLiteralInt(1)
+                endBinaryExpression(+)
+                handleExpressionStatement(;)
+              endWhileStatementBody(})
+            endWhileStatement(while, })
+          endBlockFunctionBody(3, {, })
+        endClassMethod(null, int, (, null, })
+      endMember()
+      beginMetadataStar(int)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(null, null, null, null, null, with)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(with)
+          handleType(int, null)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+          handleIdentifier(with, methodDeclaration)
+          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({)
+            beginIfStatement(if)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(==)
+              handleNoArguments(==)
+              handleSend(x, ==)
+              beginBinaryExpression(==)
+              handleLiteralInt(0)
+              endBinaryExpression(==)
+              handleParenthesizedCondition(()
+              beginThenStatement(return)
+                beginReturnStatement(return)
+                  handleLiteralInt(42)
+                endReturnStatement(true, return, ;)
+              endThenStatement(;)
+            endIfStatement(if, null)
+            beginReturnStatement(return)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+              handleIdentifier(with, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, -)
+                beginBinaryExpression(-)
+                handleLiteralInt(1)
+                endBinaryExpression(-)
+              endArguments(1, (, ))
+              handleSend(with, +)
+              beginBinaryExpression(+)
+              handleLiteralInt(1)
+              endBinaryExpression(+)
+            endReturnStatement(true, return, ;)
+          endBlockFunctionBody(2, {, })
+        endClassMethod(null, int, (, null, })
+      endMember()
+      beginMetadataStar(int)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(null, null, null, null, null, yield)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(yield)
+          handleType(int, null)
+          handleIdentifier(yield, methodDeclaration)
+          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({)
+            beginIfStatement(if)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(==)
+              handleNoArguments(==)
+              handleSend(x, ==)
+              beginBinaryExpression(==)
+              handleLiteralInt(0)
+              endBinaryExpression(==)
+              handleParenthesizedCondition(()
+              beginThenStatement(return)
+                beginReturnStatement(return)
+                  handleLiteralInt(42)
+                endReturnStatement(true, return, ;)
+              endThenStatement(;)
+            endIfStatement(if, null)
+            beginReturnStatement(return)
+              handleIdentifier(yield, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, -)
+                beginBinaryExpression(-)
+                handleLiteralInt(1)
+                endBinaryExpression(-)
+              endArguments(1, (, ))
+              handleSend(yield, +)
+              beginBinaryExpression(+)
+              handleLiteralInt(1)
+              endBinaryExpression(+)
+            endReturnStatement(true, return, ;)
+          endBlockFunctionBody(2, {, })
+        endClassMethod(null, int, (, null, })
+      endMember()
+    endClassOrMixinBody(DeclarationKind.Class, 70, {, })
+  endClassDeclaration(class, })
+endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
new file mode 100644
index 0000000..7c40ac6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
@@ -0,0 +1,10561 @@
+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(WrapperClass, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, WrapperClass)
+        parseClass(WrapperClass, class, class, WrapperClass)
+          parseClassHeaderOpt(WrapperClass, class, class)
+            parseClassExtendsOpt(WrapperClass)
+              listener: handleNoType(WrapperClass)
+              listener: handleClassExtends(null)
+            parseWithClauseOpt(WrapperClass)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(WrapperClass)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(WrapperClass, DeclarationKind.Class, WrapperClass)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar({)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, {, Instance of 'SimpleType', null, abstract, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, abstract)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(abstract)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(abstract, methodDeclaration)
+                parseQualifiedRestOpt(abstract, methodDeclarationContinuation)
+                parseMethodTypeVar(abstract)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(abstract, abstract, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(abstract, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(abstract, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(abstract)
+                                      parseArguments(abstract)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(abstract, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, as, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, as)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(as)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(as, methodDeclaration)
+                parseQualifiedRestOpt(as, methodDeclarationContinuation)
+                parseMethodTypeVar(as)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(as, as, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(as, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(as, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(as)
+                                      parseArguments(as)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(as, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(assert)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, assert, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, assert)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(assert)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+                  listener: handleIdentifier(assert, methodDeclaration)
+                parseQualifiedRestOpt(assert, methodDeclarationContinuation)
+                parseMethodTypeVar(assert)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(assert, assert, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(assert, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseAssert(return, Assert.Expression)
+                                  listener: beginAssert(assert, Assert.Expression)
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  reportRecoverableError(assert, AssertAsExpression)
+                                    listener: handleRecoverableError(AssertAsExpression, assert, assert)
+                                  listener: endAssert(assert, Assert.Expression, (, null, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, async, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, async)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(async)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(async, methodDeclaration)
+                parseQualifiedRestOpt(async, methodDeclarationContinuation)
+                parseMethodTypeVar(async)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(async, async, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(async, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(async, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(async)
+                                      parseArguments(async)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(async, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, await, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, await)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(await)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(await, methodDeclaration)
+                parseQualifiedRestOpt(await, methodDeclarationContinuation)
+                parseMethodTypeVar(await)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(await, await, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(await, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              inPlainSync()
+                              looksLikeAwaitExpression(return)
+                                looksLikeExpression(await)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(await, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(await)
+                                      parseArguments(await)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(await, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(break)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, break, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, break)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(break)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+                  listener: handleIdentifier(break, methodDeclaration)
+                parseQualifiedRestOpt(break, methodDeclarationContinuation)
+                parseMethodTypeVar(break)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(break, break, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(break, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(break)
+                                  parseArgumentsOpt()
+                                    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)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, break)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseBreakStatement(;)
+                        isBreakAllowed()
+                        reportRecoverableError(break, BreakOutsideOfLoop)
+                          listener: handleRecoverableError(BreakOutsideOfLoop, break, break)
+                        ensureSemicolon(break)
+                          reportRecoverableError(break, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
+                          rewriter()
+                        listener: handleBreakStatement(false, break, ;)
+                  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)
+                                                        ensureIdentifier((, expression)
+                                                          listener: handleIdentifier(x, expression)
+                                                        listener: handleNoTypeArguments(-)
+                                                        parseArgumentsOpt(x)
+                                                          listener: handleNoArguments(-)
+                                                        listener: handleSend(x, -)
+                                                listener: beginBinaryExpression(-)
+                                                parsePrecedenceExpression(-, 14, true)
+                                                  parseUnaryExpression(-, true)
+                                                    parsePrimary(-, expression)
+                                                      parseLiteralInt(-)
+                                                        listener: handleLiteralInt(1)
+                                                listener: endBinaryExpression(-)
+                                            ensureCloseParen(1, ()
+                                        listener: handleParenthesizedExpression(()
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true)
+                                  parseUnaryExpression(+, true)
+                                    parsePrimary(+, expression)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(4, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(case)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, case, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, case)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(case)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+                  listener: handleIdentifier(case, methodDeclaration)
+                parseQualifiedRestOpt(case, methodDeclarationContinuation)
+                parseMethodTypeVar(case)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(case, case, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(case, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+                                    listener: handleIdentifier(case, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(case)
+                                    parseArguments(case)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, -)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true)
+                                              parseUnaryExpression(-, true)
+                                                parsePrimary(-, expression)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(case, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(catch)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, catch, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, catch)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(catch)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+                  listener: handleIdentifier(catch, methodDeclaration)
+                parseQualifiedRestOpt(catch, methodDeclarationContinuation)
+                parseMethodTypeVar(catch)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(catch, catch, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(catch, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+                                    listener: handleIdentifier(catch, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(catch)
+                                    parseArguments(catch)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, -)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true)
+                                              parseUnaryExpression(-, true)
+                                                parsePrimary(-, expression)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(catch, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(class)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, class, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, class)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(class)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+                  listener: handleIdentifier(class, methodDeclaration)
+                parseQualifiedRestOpt(class, methodDeclarationContinuation)
+                parseMethodTypeVar(class)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(class, class, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(class, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+                                    listener: handleIdentifier(class, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(class)
+                                    parseArguments(class)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, -)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true)
+                                              parseUnaryExpression(-, true)
+                                                parsePrimary(-, expression)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(class, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(const)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, const, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, const)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(const)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+                  listener: handleIdentifier(const, methodDeclaration)
+                parseQualifiedRestOpt(const, methodDeclarationContinuation)
+                parseMethodTypeVar(const)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(const, const, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(const, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                parseConstExpression(return)
+                                  listener: beginConstExpression(const)
+                                  parseConstructorReference(const, null)
+                                    ensureIdentifier(const, constructorReference)
+                                      insertSyntheticIdentifier(const, constructorReference, message: Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], messageOnToken: null)
+                                        reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
+                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                                        rewriter()
+                                      listener: handleIdentifier(, constructorReference)
+                                    listener: beginConstructorReference()
+                                    parseQualifiedRestOpt(, constructorReferenceContinuation)
+                                    listener: handleNoTypeArguments(()
+                                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
+                                    listener: endConstructorReference(, null, ()
+                                  parseConstructorInvocationArguments()
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      parseExpression(()
+                                        parsePrecedenceExpression((, 1, true)
+                                          parseUnaryExpression((, true)
+                                            parsePrimary((, expression)
+                                              parseSendOrFunctionLiteral((, expression)
+                                                parseSend((, expression)
+                                                  ensureIdentifier((, expression)
+                                                    listener: handleIdentifier(x, expression)
+                                                  listener: handleNoTypeArguments(-)
+                                                  parseArgumentsOpt(x)
+                                                    listener: handleNoArguments(-)
+                                                  listener: handleSend(x, -)
+                                          listener: beginBinaryExpression(-)
+                                          parsePrecedenceExpression(-, 14, true)
+                                            parseUnaryExpression(-, true)
+                                              parsePrimary(-, expression)
+                                                parseLiteralInt(-)
+                                                  listener: handleLiteralInt(1)
+                                          listener: endBinaryExpression(-)
+                                      listener: endArguments(1, (, ))
+                                  listener: endConstExpression(const)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(continue)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, continue, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, continue)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(continue)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+                  listener: handleIdentifier(continue, methodDeclaration)
+                parseQualifiedRestOpt(continue, methodDeclarationContinuation)
+                parseMethodTypeVar(continue)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(continue, continue, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(continue, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(continue)
+                                  parseArgumentsOpt()
+                                    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)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, continue)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseContinueStatement(;)
+                        isContinueAllowed()
+                        reportRecoverableError(continue, ContinueOutsideOfLoop)
+                          listener: handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
+                        ensureSemicolon(continue)
+                          reportRecoverableError(continue, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
+                          rewriter()
+                        listener: handleContinueStatement(false, continue, ;)
+                  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)
+                                                        ensureIdentifier((, expression)
+                                                          listener: handleIdentifier(x, expression)
+                                                        listener: handleNoTypeArguments(-)
+                                                        parseArgumentsOpt(x)
+                                                          listener: handleNoArguments(-)
+                                                        listener: handleSend(x, -)
+                                                listener: beginBinaryExpression(-)
+                                                parsePrecedenceExpression(-, 14, true)
+                                                  parseUnaryExpression(-, true)
+                                                    parsePrimary(-, expression)
+                                                      parseLiteralInt(-)
+                                                        listener: handleLiteralInt(1)
+                                                listener: endBinaryExpression(-)
+                                            ensureCloseParen(1, ()
+                                        listener: handleParenthesizedExpression(()
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true)
+                                  parseUnaryExpression(+, true)
+                                    parsePrimary(+, expression)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(4, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, covariant, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, covariant)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(covariant)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(covariant, methodDeclaration)
+                parseQualifiedRestOpt(covariant, methodDeclarationContinuation)
+                parseMethodTypeVar(covariant)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(covariant, covariant, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(covariant, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(covariant, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(covariant)
+                                      parseArguments(covariant)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(covariant, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(default)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, default, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, default)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(default)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+                  listener: handleIdentifier(default, methodDeclaration)
+                parseQualifiedRestOpt(default, methodDeclarationContinuation)
+                parseMethodTypeVar(default)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(default, default, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(default, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+                                    listener: handleIdentifier(default, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(default)
+                                    parseArguments(default)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, -)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true)
+                                              parseUnaryExpression(-, true)
+                                                parsePrimary(-, expression)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(default, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, deferred, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, deferred)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(deferred)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(deferred, methodDeclaration)
+                parseQualifiedRestOpt(deferred, methodDeclarationContinuation)
+                parseMethodTypeVar(deferred)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(deferred, deferred, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(deferred, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(deferred, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(deferred)
+                                      parseArguments(deferred)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(deferred, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(do)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, do, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, do)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(do)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+                  listener: handleIdentifier(do, methodDeclaration)
+                parseQualifiedRestOpt(do, methodDeclarationContinuation)
+                parseMethodTypeVar(do)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(do, do, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(do, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(do)
+                                  parseArgumentsOpt()
+                                    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)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, do)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseDoWhileStatement(;)
+                        listener: beginDoWhileStatement(do)
+                        listener: beginDoWhileStatementBody(()
+                        parseStatement(do)
+                          parseStatementX(do)
+                            parseExpressionStatementOrDeclaration(do, false)
+                              parseExpressionStatementOrDeclarationAfterModifiers(do, do, null, null, null, false)
+                                looksLikeLocalFunction(()
+                                parseExpressionStatement(do)
+                                  parseExpression(do)
+                                    parsePrecedenceExpression(do, 1, true)
+                                      parseUnaryExpression(do, true)
+                                        parsePrimary(do, expression)
+                                          parseParenthesizedExpressionOrFunctionLiteral(do)
+                                            parseParenthesizedExpression(do)
+                                              parseExpressionInParenthesis(do)
+                                                parseExpressionInParenthesisRest(()
+                                                  parseExpression(()
+                                                    parsePrecedenceExpression((, 1, true)
+                                                      parseUnaryExpression((, true)
+                                                        parsePrimary((, expression)
+                                                          parseSendOrFunctionLiteral((, expression)
+                                                            parseSend((, expression)
+                                                              ensureIdentifier((, expression)
+                                                                listener: handleIdentifier(x, expression)
+                                                              listener: handleNoTypeArguments(-)
+                                                              parseArgumentsOpt(x)
+                                                                listener: handleNoArguments(-)
+                                                              listener: handleSend(x, -)
+                                                      listener: beginBinaryExpression(-)
+                                                      parsePrecedenceExpression(-, 14, true)
+                                                        parseUnaryExpression(-, true)
+                                                          parsePrimary(-, expression)
+                                                            parseLiteralInt(-)
+                                                              listener: handleLiteralInt(1)
+                                                      listener: endBinaryExpression(-)
+                                                  ensureCloseParen(1, ()
+                                              listener: handleParenthesizedExpression(()
+                                      listener: beginBinaryExpression(+)
+                                      parsePrecedenceExpression(+, 14, true)
+                                        parseUnaryExpression(+, true)
+                                          parsePrimary(+, expression)
+                                            parseLiteralInt(+)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(+)
+                                  ensureSemicolon(1)
+                                  listener: handleExpressionStatement(;)
+                        listener: endDoWhileStatementBody(;)
+                        reportRecoverableError(}, Message[ExpectedButGot, Expected 'while' before this., null, {string: while}])
+                          listener: handleRecoverableError(Message[ExpectedButGot, Expected 'while' before this., null, {string: while}], }, })
+                        rewriter()
+                        ensureParenthesizedCondition(while)
+                          reportRecoverableError(}, Message[ExpectedToken, Expected to find '('., null, {string: (}])
+                            listener: handleRecoverableError(Message[ExpectedToken, Expected to find '('., null, {string: (}], }, })
+                          rewriter()
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSend((, expression)
+                                      ensureIdentifier((, expression)
+                                        reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., null, {token: }}], }, })
+                                        rewriter()
+                                        listener: handleIdentifier(, expression)
+                                      listener: handleNoTypeArguments())
+                                      parseArgumentsOpt()
+                                        listener: handleNoArguments())
+                                      listener: handleSend(, ))
+                            ensureCloseParen(, ()
+                          listener: handleParenthesizedCondition(()
+                        ensureSemicolon())
+                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+                          rewriter()
+                        listener: endDoWhileStatement(do, while, ;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(3, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, dynamic, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, dynamic)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(dynamic)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(dynamic, methodDeclaration)
+                parseQualifiedRestOpt(dynamic, methodDeclarationContinuation)
+                parseMethodTypeVar(dynamic)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(dynamic, dynamic, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(dynamic, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(dynamic, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(dynamic)
+                                      parseArguments(dynamic)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(dynamic, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(else)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, else, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, else)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(else)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+                  listener: handleIdentifier(else, methodDeclaration)
+                parseQualifiedRestOpt(else, methodDeclarationContinuation)
+                parseMethodTypeVar(else)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(else, else, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(else, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(else)
+                                  parseArgumentsOpt()
+                                    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)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, else)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(else)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    inPlainSync()
+                                    parseSend(;, expression)
+                                      ensureIdentifier(;, expression)
+                                        reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+                                        rewriter()
+                                        listener: handleIdentifier(, expression)
+                                      listener: handleNoTypeArguments(else)
+                                      parseArgumentsOpt()
+                                        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)
+                              rewriter()
+                            listener: handleExpressionStatement(;)
+                  reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
+                    listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], else, else)
+                  notEofOrValue(}, ()
+                  parseStatement(else)
+                    parseStatementX(else)
+                      parseExpressionStatementOrDeclaration(else, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(else, else, null, null, null, false)
+                          looksLikeLocalFunction(()
+                          parseExpressionStatement(else)
+                            parseExpression(else)
+                              parsePrecedenceExpression(else, 1, true)
+                                parseUnaryExpression(else, true)
+                                  parsePrimary(else, expression)
+                                    parseParenthesizedExpressionOrFunctionLiteral(else)
+                                      parseParenthesizedExpression(else)
+                                        parseExpressionInParenthesis(else)
+                                          parseExpressionInParenthesisRest(()
+                                            parseExpression(()
+                                              parsePrecedenceExpression((, 1, true)
+                                                parseUnaryExpression((, true)
+                                                  parsePrimary((, expression)
+                                                    parseSendOrFunctionLiteral((, expression)
+                                                      parseSend((, expression)
+                                                        ensureIdentifier((, expression)
+                                                          listener: handleIdentifier(x, expression)
+                                                        listener: handleNoTypeArguments(-)
+                                                        parseArgumentsOpt(x)
+                                                          listener: handleNoArguments(-)
+                                                        listener: handleSend(x, -)
+                                                listener: beginBinaryExpression(-)
+                                                parsePrecedenceExpression(-, 14, true)
+                                                  parseUnaryExpression(-, true)
+                                                    parsePrimary(-, expression)
+                                                      parseLiteralInt(-)
+                                                        listener: handleLiteralInt(1)
+                                                listener: endBinaryExpression(-)
+                                            ensureCloseParen(1, ()
+                                        listener: handleParenthesizedExpression(()
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true)
+                                  parseUnaryExpression(+, true)
+                                    parsePrimary(+, expression)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(4, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(enum)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, enum, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, enum)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(enum)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+                  listener: handleIdentifier(enum, methodDeclaration)
+                parseQualifiedRestOpt(enum, methodDeclarationContinuation)
+                parseMethodTypeVar(enum)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(enum, enum, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(enum, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+                                    listener: handleIdentifier(enum, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(enum)
+                                    parseArguments(enum)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, -)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true)
+                                              parseUnaryExpression(-, true)
+                                                parsePrimary(-, expression)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(enum, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, export, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, export)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(export)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(export, methodDeclaration)
+                parseQualifiedRestOpt(export, methodDeclarationContinuation)
+                parseMethodTypeVar(export)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(export, export, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(export, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(export, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(export)
+                                      parseArguments(export)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(export, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(extends)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, extends, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, extends)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(extends)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+                  listener: handleIdentifier(extends, methodDeclaration)
+                parseQualifiedRestOpt(extends, methodDeclarationContinuation)
+                parseMethodTypeVar(extends)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(extends, extends, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(extends, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+                                    listener: handleIdentifier(extends, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(extends)
+                                    parseArguments(extends)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, -)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true)
+                                              parseUnaryExpression(-, true)
+                                                parsePrimary(-, expression)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(extends, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, extension, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, extension)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(extension)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(extension, methodDeclaration)
+                parseQualifiedRestOpt(extension, methodDeclarationContinuation)
+                parseMethodTypeVar(extension)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(extension, extension, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(extension, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(extension, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(extension)
+                                      parseArguments(extension)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(extension, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, external, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, external)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(external)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(external, methodDeclaration)
+                parseQualifiedRestOpt(external, methodDeclarationContinuation)
+                parseMethodTypeVar(external)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(external, external, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(external, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(external, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(external)
+                                      parseArguments(external)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(external, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, factory, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, factory)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(factory)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(factory, methodDeclaration)
+                parseQualifiedRestOpt(factory, methodDeclarationContinuation)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(factory, factory, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(factory, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(factory, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(factory)
+                                      parseArguments(factory)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(factory, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(false)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, false, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, false)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(false)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+                  listener: handleIdentifier(false, methodDeclaration)
+                parseQualifiedRestOpt(false, methodDeclarationContinuation)
+                parseMethodTypeVar(false)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(false, false, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(false, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                parseLiteralBool(return)
+                                  listener: handleLiteralBool(false)
+                            parseArgumentOrIndexStar(false, Instance of 'NoTypeParamOrArg', false)
+                              listener: handleNoTypeArguments(()
+                              parseArguments(false)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                              listener: handleSend((, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(final)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, final, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, final)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(final)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+                  listener: handleIdentifier(final, methodDeclaration)
+                parseQualifiedRestOpt(final, methodDeclarationContinuation)
+                parseMethodTypeVar(final)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(final, final, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(final, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(final)
+                                  parseArgumentsOpt()
+                                    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)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, final)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(final, ;, null, final, null, false)
+                        looksLikeLocalFunction(()
+                        listener: beginMetadataStar(final)
+                        listener: endMetadataStar(0)
+                        listener: handleNoType(final)
+                        listener: beginVariablesDeclaration((, null, final)
+                        parseVariablesDeclarationRest(final, true)
+                          parseOptionallyInitializedIdentifier(final)
+                            ensureIdentifier(final, localVariableDeclaration)
+                              reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
+                                listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                              rewriter()
+                              listener: handleIdentifier(, localVariableDeclaration)
+                            listener: beginInitializedIdentifier()
+                            parseVariableInitializerOpt()
+                              listener: handleNoVariableInitializer(x)
+                            listener: endInitializedIdentifier()
+                          ensureSemicolon()
+                            reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, x)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                        looksLikeLocalFunction(x)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            parsePrecedenceExpression(;, 1, true)
+                              parseUnaryExpression(;, true)
+                                parsePrimary(;, expression)
+                                  parseSendOrFunctionLiteral(;, expression)
+                                    parseSend(;, expression)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, -)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true)
+                                parseUnaryExpression(-, true)
+                                  parsePrimary(-, expression)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-)
+                          ensureSemicolon(1)
+                            reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+                            rewriter()
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, ))
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction())
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    parseSend(;, expression)
+                                      ensureIdentifier(;, expression)
+                                        reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+                                        rewriter()
+                                        listener: handleIdentifier(, expression)
+                                      listener: handleNoTypeArguments())
+                                      parseArgumentsOpt()
+                                        listener: handleNoArguments())
+                                      listener: handleSend(, ))
+                            ensureSemicolon()
+                              reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                              rewriter()
+                            listener: handleExpressionStatement(;)
+                  reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
+                    listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
+                  notEofOrValue(}, +)
+                  parseStatement())
+                    parseStatementX())
+                      parseExpressionStatementOrDeclaration(), false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
+                          looksLikeLocalFunction(+)
+                          parseExpressionStatement())
+                            parseExpression())
+                              parsePrecedenceExpression(), 1, true)
+                                parseUnaryExpression(), true)
+                                  rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                    reportRecoverableError(+, UnsupportedPrefixPlus)
+                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                    rewriter()
+                                  parsePrimary(), expression)
+                                    parseSendOrFunctionLiteral(), expression)
+                                      parseSend(), expression)
+                                        ensureIdentifier(), expression)
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(+)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(+)
+                                        listener: handleSend(, +)
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true)
+                                  parseUnaryExpression(+, true)
+                                    parsePrimary(+, expression)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(6, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(finally)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, finally, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, finally)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(finally)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+                  listener: handleIdentifier(finally, methodDeclaration)
+                parseQualifiedRestOpt(finally, methodDeclarationContinuation)
+                parseMethodTypeVar(finally)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(finally, finally, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(finally, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+                                    listener: handleIdentifier(finally, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(finally)
+                                    parseArguments(finally)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, -)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true)
+                                              parseUnaryExpression(-, true)
+                                                parsePrimary(-, expression)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(finally, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(for)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, for, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, for)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(for)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+                  listener: handleIdentifier(for, methodDeclaration)
+                parseQualifiedRestOpt(for, methodDeclarationContinuation)
+                parseMethodTypeVar(for)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(for, for, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(for, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(for)
+                                  parseArgumentsOpt()
+                                    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)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, for)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseForStatement(;, null)
+                        listener: beginForStatement(for)
+                        parseForLoopPartsStart(null, for)
+                          parseExpressionStatementOrDeclaration((, true)
+                            parseExpressionStatementOrDeclarationAfterModifiers((, (, null, null, null, true)
+                        parseForLoopPartsMid((, null, for)
+                          parseExpression(()
+                            parsePrecedenceExpression((, 1, true)
+                              parseUnaryExpression((, true)
+                                parsePrimary((, expression)
+                                  parseSendOrFunctionLiteral((, expression)
+                                    parseSend((, expression)
+                                      ensureIdentifier((, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, -)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true)
+                                parseUnaryExpression(-, true)
+                                  parsePrimary(-, expression)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-)
+                          listener: handleForInitializerExpressionStatement(1, false)
+                        parseForRest(null, 1, for)
+                          parseForLoopPartsRest(1, for, null)
+                            ensureSemicolon(1)
+                              reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+                              rewriter()
+                            parseExpressionStatement(;)
+                              parseExpression(;)
+                                parsePrecedenceExpression(;, 1, true)
+                                  parseUnaryExpression(;, true)
+                                    parsePrimary(;, expression)
+                                      parseSend(;, expression)
+                                        ensureIdentifier(;, expression)
+                                          reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments())
+                                        listener: handleSend(, ))
+                              ensureSemicolon()
+                                reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                  listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                                rewriter()
+                              listener: handleExpressionStatement(;)
+                            listener: handleForLoopParts(for, (, ;, 0)
+                          listener: beginForStatementBody(+)
+                          parseStatement())
+                            parseStatementX())
+                              parseExpressionStatementOrDeclaration(), false)
+                                parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
+                                  looksLikeLocalFunction(+)
+                                  parseExpressionStatement())
+                                    parseExpression())
+                                      parsePrecedenceExpression(), 1, true)
+                                        parseUnaryExpression(), true)
+                                          rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                            reportRecoverableError(+, UnsupportedPrefixPlus)
+                                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                            rewriter()
+                                          parsePrimary(), expression)
+                                            parseSendOrFunctionLiteral(), expression)
+                                              parseSend(), expression)
+                                                ensureIdentifier(), expression)
+                                                  listener: handleIdentifier(, expression)
+                                                listener: handleNoTypeArguments(+)
+                                                parseArgumentsOpt()
+                                                  listener: handleNoArguments(+)
+                                                listener: handleSend(, +)
+                                        listener: beginBinaryExpression(+)
+                                        parsePrecedenceExpression(+, 14, true)
+                                          parseUnaryExpression(+, true)
+                                            parsePrimary(+, expression)
+                                              parseLiteralInt(+)
+                                                listener: handleLiteralInt(1)
+                                        listener: endBinaryExpression(+)
+                                    ensureSemicolon(1)
+                                    listener: handleExpressionStatement(;)
+                          listener: endForStatementBody(})
+                          listener: endForStatement(})
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(3, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, Function, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, Function)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(Function)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(Function, methodDeclaration)
+                parseQualifiedRestOpt(Function, methodDeclarationContinuation)
+                parseMethodTypeVar(Function)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(Function, Function, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(Function, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(Function, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(Function)
+                                      parseArguments(Function)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(Function, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, get, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, get)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(get)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(get, methodDeclaration)
+                parseQualifiedRestOpt(get, methodDeclarationContinuation)
+                parseMethodTypeVar(get)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(get, get, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(get, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(get, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(get)
+                                      parseArguments(get)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(get, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, hide, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, hide)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(hide)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(hide, methodDeclaration)
+                parseQualifiedRestOpt(hide, methodDeclarationContinuation)
+                parseMethodTypeVar(hide)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(hide, hide, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(hide, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(hide, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(hide)
+                                      parseArguments(hide)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(hide, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(if)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, if, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, if)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(if)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+                  listener: handleIdentifier(if, methodDeclaration)
+                parseQualifiedRestOpt(if, methodDeclarationContinuation)
+                parseMethodTypeVar(if)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(if, if, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(if, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(if)
+                                  parseArgumentsOpt()
+                                    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)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, if)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseIfStatement(;)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(-)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(-)
+                                        listener: handleSend(x, -)
+                                listener: beginBinaryExpression(-)
+                                parsePrecedenceExpression(-, 14, true)
+                                  parseUnaryExpression(-, true)
+                                    parsePrimary(-, expression)
+                                      parseLiteralInt(-)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(-)
+                            ensureCloseParen(1, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(+)
+                        parseStatement())
+                          parseStatementX())
+                            parseExpressionStatementOrDeclaration(), false)
+                              parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
+                                looksLikeLocalFunction(+)
+                                parseExpressionStatement())
+                                  parseExpression())
+                                    parsePrecedenceExpression(), 1, true)
+                                      parseUnaryExpression(), true)
+                                        rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                          reportRecoverableError(+, UnsupportedPrefixPlus)
+                                            listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                          rewriter()
+                                        parsePrimary(), expression)
+                                          parseSendOrFunctionLiteral(), expression)
+                                            parseSend(), expression)
+                                              ensureIdentifier(), expression)
+                                                listener: handleIdentifier(, expression)
+                                              listener: handleNoTypeArguments(+)
+                                              parseArgumentsOpt()
+                                                listener: handleNoArguments(+)
+                                              listener: handleSend(, +)
+                                      listener: beginBinaryExpression(+)
+                                      parsePrecedenceExpression(+, 14, true)
+                                        parseUnaryExpression(+, true)
+                                          parsePrimary(+, expression)
+                                            parseLiteralInt(+)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(+)
+                                  ensureSemicolon(1)
+                                  listener: handleExpressionStatement(;)
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(3, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, implements, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, implements)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(implements, methodDeclaration)
+                parseQualifiedRestOpt(implements, methodDeclarationContinuation)
+                parseMethodTypeVar(implements)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(implements, implements, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(implements, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(implements, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(implements)
+                                      parseArguments(implements)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(implements, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, import, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, import)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(import)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(import, methodDeclaration)
+                parseQualifiedRestOpt(import, methodDeclarationContinuation)
+                parseMethodTypeVar(import)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(import, import, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(import, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(import, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(import)
+                                      parseArguments(import)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(import, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(in)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, in, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, in)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(in)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+                  listener: handleIdentifier(in, methodDeclaration)
+                parseQualifiedRestOpt(in, methodDeclarationContinuation)
+                parseMethodTypeVar(in)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(in, in, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(in, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+                                    listener: handleIdentifier(in, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(in)
+                                    parseArguments(in)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, -)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true)
+                                              parseUnaryExpression(-, true)
+                                                parsePrimary(-, expression)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(in, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, inout, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, inout)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(inout)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(inout, methodDeclaration)
+                parseQualifiedRestOpt(inout, methodDeclarationContinuation)
+                parseMethodTypeVar(inout)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(inout, inout, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(inout, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(inout, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(inout)
+                                      parseArguments(inout)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(inout, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, interface, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, interface)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(interface)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(interface, methodDeclaration)
+                parseQualifiedRestOpt(interface, methodDeclarationContinuation)
+                parseMethodTypeVar(interface)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(interface, interface, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(interface, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(interface, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(interface)
+                                      parseArguments(interface)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(interface, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(is)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, is, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, is)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(is)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+                  listener: handleIdentifier(is, methodDeclaration)
+                parseQualifiedRestOpt(is, methodDeclarationContinuation)
+                parseMethodTypeVar(is)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(is, is, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(is, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(is)
+                                  parseArgumentsOpt()
+                                    listener: handleNoArguments(is)
+                                  listener: handleSend(, is)
+                            parseIsOperatorRest()
+                              listener: beginIsOperatorType(is)
+                              computeTypeAfterIsOrAs(is)
+                              reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
+                                listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '('., null, {token: (}], (, ()
+                              rewriter()
+                              listener: handleIdentifier(, typeReference)
+                              listener: handleNoTypeArguments(()
+                              listener: handleType(, null)
+                              listener: endIsOperatorType(is)
+                              listener: handleIsOperator(is, null)
+                              skipChainedAsIsOperators()
+                        ensureSemicolon()
+                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  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)
+                                                        ensureIdentifier((, expression)
+                                                          listener: handleIdentifier(x, expression)
+                                                        listener: handleNoTypeArguments(-)
+                                                        parseArgumentsOpt(x)
+                                                          listener: handleNoArguments(-)
+                                                        listener: handleSend(x, -)
+                                                listener: beginBinaryExpression(-)
+                                                parsePrecedenceExpression(-, 14, true)
+                                                  parseUnaryExpression(-, true)
+                                                    parsePrimary(-, expression)
+                                                      parseLiteralInt(-)
+                                                        listener: handleLiteralInt(1)
+                                                listener: endBinaryExpression(-)
+                                            ensureCloseParen(1, ()
+                                        listener: handleParenthesizedExpression(()
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true)
+                                  parseUnaryExpression(+, true)
+                                    parsePrimary(+, expression)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(3, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, late, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, late)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(late)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(late, methodDeclaration)
+                parseQualifiedRestOpt(late, methodDeclarationContinuation)
+                parseMethodTypeVar(late)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(late, late, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(late, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(late, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(late)
+                                      parseArguments(late)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(late, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, library, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, library)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(library)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(library, methodDeclaration)
+                parseQualifiedRestOpt(library, methodDeclarationContinuation)
+                parseMethodTypeVar(library)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(library, library, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(library, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(library, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(library)
+                                      parseArguments(library)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(library, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, mixin, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, mixin)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(mixin)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(mixin, methodDeclaration)
+                parseQualifiedRestOpt(mixin, methodDeclarationContinuation)
+                parseMethodTypeVar(mixin)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(mixin, mixin, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(mixin, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(mixin, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(mixin)
+                                      parseArguments(mixin)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(mixin, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, native, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, native)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(native)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(native, methodDeclaration)
+                parseQualifiedRestOpt(native, methodDeclarationContinuation)
+                parseMethodTypeVar(native)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(native, native, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(native, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(native, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(native)
+                                      parseArguments(native)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(native, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(new)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, new, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, new)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(new)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+                  listener: handleIdentifier(new, methodDeclaration)
+                parseQualifiedRestOpt(new, methodDeclarationContinuation)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                parseNewExpression(return)
+                                  listener: beginNewExpression(new)
+                                  parseConstructorReference(new, null)
+                                    ensureIdentifier(new, constructorReference)
+                                      insertSyntheticIdentifier(new, constructorReference, message: Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], messageOnToken: null)
+                                        reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
+                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                                        rewriter()
+                                      listener: handleIdentifier(, constructorReference)
+                                    listener: beginConstructorReference()
+                                    parseQualifiedRestOpt(, constructorReferenceContinuation)
+                                    listener: handleNoTypeArguments(()
+                                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
+                                    listener: endConstructorReference(, null, ()
+                                  parseConstructorInvocationArguments()
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      parseExpression(()
+                                        parsePrecedenceExpression((, 1, true)
+                                          parseUnaryExpression((, true)
+                                            parsePrimary((, expression)
+                                              parseSendOrFunctionLiteral((, expression)
+                                                parseSend((, expression)
+                                                  ensureIdentifier((, expression)
+                                                    listener: handleIdentifier(x, expression)
+                                                  listener: handleNoTypeArguments(-)
+                                                  parseArgumentsOpt(x)
+                                                    listener: handleNoArguments(-)
+                                                  listener: handleSend(x, -)
+                                          listener: beginBinaryExpression(-)
+                                          parsePrecedenceExpression(-, 14, true)
+                                            parseUnaryExpression(-, true)
+                                              parsePrimary(-, expression)
+                                                parseLiteralInt(-)
+                                                  listener: handleLiteralInt(1)
+                                          listener: endBinaryExpression(-)
+                                      listener: endArguments(1, (, ))
+                                  listener: endNewExpression(new)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(null)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, null, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(null)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+                  listener: handleIdentifier(null, methodDeclaration)
+                parseQualifiedRestOpt(null, methodDeclarationContinuation)
+                parseMethodTypeVar(null)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(null, null, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(null, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                parseLiteralNull(return)
+                                  listener: handleLiteralNull(null)
+                            parseArgumentOrIndexStar(null, Instance of 'NoTypeParamOrArg', false)
+                              listener: handleNoTypeArguments(()
+                              parseArguments(null)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                              listener: handleSend((, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, of, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, of)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(of)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(of, methodDeclaration)
+                parseQualifiedRestOpt(of, methodDeclarationContinuation)
+                parseMethodTypeVar(of)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(of, of, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(of, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(of, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(of)
+                                      parseArguments(of)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(of, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, on, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, on)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(on)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(on, methodDeclaration)
+                parseQualifiedRestOpt(on, methodDeclarationContinuation)
+                parseMethodTypeVar(on)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(on, on, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(on, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(on, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(on)
+                                      parseArguments(on)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(on, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isUnaryMinus(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, WrapperClass, false)
+                isUnaryMinus(()
+                listener: beginMethod(null, null, null, null, null, operator)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(operator)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(operator, methodDeclaration)
+                parseQualifiedRestOpt(operator, methodDeclarationContinuation)
+                parseMethodTypeVar(operator)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(operator, operator, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(operator, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(operator, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(operator)
+                                      parseArguments(operator)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(operator, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, out, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, out)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(out)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(out, methodDeclaration)
+                parseQualifiedRestOpt(out, methodDeclarationContinuation)
+                parseMethodTypeVar(out)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(out, out, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(out, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(out, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(out)
+                                      parseArguments(out)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(out, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, part, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, part)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(part)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(part, methodDeclaration)
+                parseQualifiedRestOpt(part, methodDeclarationContinuation)
+                parseMethodTypeVar(part)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(part, part, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(part, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(part, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(part)
+                                      parseArguments(part)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(part, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, patch, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, patch)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(patch)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(patch, methodDeclaration)
+                parseQualifiedRestOpt(patch, methodDeclarationContinuation)
+                parseMethodTypeVar(patch)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(patch, patch, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(patch, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(patch, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(patch)
+                                      parseArguments(patch)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(patch, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, required, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, required)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(required)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(required, methodDeclaration)
+                parseQualifiedRestOpt(required, methodDeclarationContinuation)
+                parseMethodTypeVar(required)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(required, required, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(required, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(required, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(required)
+                                      parseArguments(required)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(required, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(rethrow)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, rethrow, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, rethrow)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(rethrow)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+                  listener: handleIdentifier(rethrow, methodDeclaration)
+                parseQualifiedRestOpt(rethrow, methodDeclarationContinuation)
+                parseMethodTypeVar(rethrow)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(rethrow, rethrow, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(rethrow, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+                                    listener: handleIdentifier(rethrow, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(rethrow)
+                                    parseArguments(rethrow)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, -)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true)
+                                              parseUnaryExpression(-, true)
+                                                parsePrimary(-, expression)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(rethrow, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(return)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, return, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, return)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(return)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+                  listener: handleIdentifier(return, methodDeclaration)
+                parseQualifiedRestOpt(return, methodDeclarationContinuation)
+                parseMethodTypeVar(return)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(return, return, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(return, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token 'return'., null, {token: return}], return, return)
+                                parsePrimary(return, expression)
+                                  parseParenthesizedExpressionOrFunctionLiteral(return)
+                                    parseParenthesizedExpression(return)
+                                      parseExpressionInParenthesis(return)
+                                        parseExpressionInParenthesisRest(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          ensureCloseParen(1, ()
+                                      listener: handleParenthesizedExpression(()
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, set, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, set)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(set)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(set, methodDeclaration)
+                parseQualifiedRestOpt(set, methodDeclarationContinuation)
+                parseMethodTypeVar(set)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(set, set, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(set, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(set, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(set)
+                                      parseArguments(set)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(set, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, show, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, show)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(show)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(show, methodDeclaration)
+                parseQualifiedRestOpt(show, methodDeclarationContinuation)
+                parseMethodTypeVar(show)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(show, show, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(show, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(show, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(show)
+                                      parseArguments(show)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(show, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, source, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, source)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(source)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(source, methodDeclaration)
+                parseQualifiedRestOpt(source, methodDeclarationContinuation)
+                parseMethodTypeVar(source)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(source, source, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(source, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(source, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(source)
+                                      parseArguments(source)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(source, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, static, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, static)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(static)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(static, methodDeclaration)
+                parseQualifiedRestOpt(static, methodDeclarationContinuation)
+                parseMethodTypeVar(static)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(static, static, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(static, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(static, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(static)
+                                      parseArguments(static)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(static, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(super)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, super, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, super)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+                  listener: handleIdentifier(super, methodDeclaration)
+                parseQualifiedRestOpt(super, methodDeclarationContinuation)
+                parseMethodTypeVar(super)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(super, super, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(super, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                parseSuperExpression(return, expression)
+                                  listener: handleSuperExpression(super, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArguments(super)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      parseExpression(()
+                                        parsePrecedenceExpression((, 1, true)
+                                          parseUnaryExpression((, true)
+                                            parsePrimary((, expression)
+                                              parseSendOrFunctionLiteral((, expression)
+                                                parseSend((, expression)
+                                                  ensureIdentifier((, expression)
+                                                    listener: handleIdentifier(x, expression)
+                                                  listener: handleNoTypeArguments(-)
+                                                  parseArgumentsOpt(x)
+                                                    listener: handleNoArguments(-)
+                                                  listener: handleSend(x, -)
+                                          listener: beginBinaryExpression(-)
+                                          parsePrecedenceExpression(-, 14, true)
+                                            parseUnaryExpression(-, true)
+                                              parsePrimary(-, expression)
+                                                parseLiteralInt(-)
+                                                  listener: handleLiteralInt(1)
+                                          listener: endBinaryExpression(-)
+                                      listener: endArguments(1, (, ))
+                                  listener: handleSend(super, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(switch)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, switch, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, switch)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(switch)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+                  listener: handleIdentifier(switch, methodDeclaration)
+                parseQualifiedRestOpt(switch, methodDeclarationContinuation)
+                parseMethodTypeVar(switch)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(switch, switch, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(switch, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(switch)
+                                  parseArgumentsOpt()
+                                    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)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, switch)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseSwitchStatement(;)
+                        listener: beginSwitchStatement(switch)
+                        ensureParenthesizedCondition(switch)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(-)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(-)
+                                        listener: handleSend(x, -)
+                                listener: beginBinaryExpression(-)
+                                parsePrecedenceExpression(-, 14, true)
+                                  parseUnaryExpression(-, true)
+                                    parsePrimary(-, expression)
+                                      parseLiteralInt(-)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(-)
+                            ensureCloseParen(1, ()
+                          listener: handleParenthesizedCondition(()
+                        parseSwitchBlock())
+                          ensureBlock(), null, switch statement)
+                            reportRecoverableError(), Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}])
+                              listener: handleRecoverableError(Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}], ), ))
+                            insertBlock())
+                              rewriter()
+                              rewriter()
+                          listener: beginSwitchBlock({)
+                          notEofOrValue(}, })
+                          listener: endSwitchBlock(0, {, })
+                        listener: endSwitchStatement(switch, })
+                  notEofOrValue(}, +)
+                  parseStatement(})
+                    parseStatementX(})
+                      parseExpressionStatementOrDeclaration(}, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                          looksLikeLocalFunction(+)
+                          parseExpressionStatement(})
+                            parseExpression(})
+                              parsePrecedenceExpression(}, 1, true)
+                                parseUnaryExpression(}, true)
+                                  rewriteAndRecover(}, UnsupportedPrefixPlus, )
+                                    reportRecoverableError(+, UnsupportedPrefixPlus)
+                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                    rewriter()
+                                  parsePrimary(}, expression)
+                                    parseSendOrFunctionLiteral(}, expression)
+                                      parseSend(}, expression)
+                                        ensureIdentifier(}, expression)
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(+)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(+)
+                                        listener: handleSend(, +)
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true)
+                                  parseUnaryExpression(+, true)
+                                    parsePrimary(+, expression)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(4, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, sync, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, sync)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(sync)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(sync, methodDeclaration)
+                parseQualifiedRestOpt(sync, methodDeclarationContinuation)
+                parseMethodTypeVar(sync)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(sync, sync, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(sync, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(sync, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(sync)
+                                      parseArguments(sync)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(sync, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(int, }, null, null, null, null, null, }, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
+                parseFields(}, null, null, null, null, null, }, Instance of 'SimpleType', this, DeclarationKind.Class, WrapperClass, false)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(this)
+                  listener: handleType(int, null)
+                  ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                    reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+                    listener: handleIdentifier(this, fieldDeclaration)
+                  parseFieldInitializerOpt(this, this, null, null, DeclarationKind.Class, WrapperClass)
+                    listener: handleNoFieldInitializer(()
+                  ensureSemicolon(this)
+                    reportRecoverableError(this, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], this, this)
+                    rewriter()
+                  listener: endClassFields(null, null, null, null, 1, int, ;)
+                listener: endMember()
+            notEofOrValue(}, ()
+            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(()
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, WrapperClass)
+                parseMethod(;, null, null, null, null, null, ;, Instance of 'NoType', null, (, DeclarationKind.Class, WrapperClass, false)
+                  listener: beginMethod(null, null, null, null, null, ()
+                  listener: handleNoType(;)
+                  ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
+                    insertSyntheticIdentifier(;, methodDeclaration, message: null, messageOnToken: null)
+                      reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
+                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                      rewriter()
+                    listener: handleIdentifier(, methodDeclaration)
+                  parseQualifiedRestOpt(, methodDeclarationContinuation)
+                  parseMethodTypeVar()
+                    listener: handleNoTypeVariables(()
+                  parseGetterOrFormalParameters(, (, 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(}, if)
+                    parseStatement({)
+                      parseStatementX({)
+                        parseIfStatement({)
+                          listener: beginIfStatement(if)
+                          ensureParenthesizedCondition(if)
+                            parseExpressionInParenthesisRest(()
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true)
+                                  parseUnaryExpression((, true)
+                                    parsePrimary((, expression)
+                                      parseSendOrFunctionLiteral((, expression)
+                                        parseSend((, expression)
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(x, expression)
+                                          listener: handleNoTypeArguments(==)
+                                          parseArgumentsOpt(x)
+                                            listener: handleNoArguments(==)
+                                          listener: handleSend(x, ==)
+                                  listener: beginBinaryExpression(==)
+                                  parsePrecedenceExpression(==, 8, true)
+                                    parseUnaryExpression(==, true)
+                                      parsePrimary(==, expression)
+                                        parseLiteralInt(==)
+                                          listener: handleLiteralInt(0)
+                                  listener: endBinaryExpression(==)
+                              ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition(()
+                          listener: beginThenStatement(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()
+                          listener: endThenStatement(;)
+                          listener: endIfStatement(if, null)
+                    notEofOrValue(}, return)
+                    parseStatement(;)
+                      parseStatementX(;)
+                        parseReturnStatement(;)
+                          listener: beginReturnStatement(return)
+                          parseExpression(return)
+                            parsePrecedenceExpression(return, 1, true)
+                              parseUnaryExpression(return, true)
+                                parsePrimary(return, expression)
+                                  parseThisExpression(return, expression)
+                                    listener: handleThisExpression(this, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArguments(this)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, -)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true)
+                                              parseUnaryExpression(-, true)
+                                                parsePrimary(-, expression)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-)
+                                        listener: endArguments(1, (, ))
+                                    listener: handleSend(this, +)
+                              listener: beginBinaryExpression(+)
+                              parsePrecedenceExpression(+, 14, true)
+                                parseUnaryExpression(+, true)
+                                  parsePrimary(+, expression)
+                                    parseLiteralInt(+)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(+)
+                          ensureSemicolon(1)
+                          listener: endReturnStatement(true, return, ;)
+                          inGenerator()
+                    notEofOrValue(}, })
+                    listener: endBlockFunctionBody(2, {, })
+                  listener: endClassMethod(null, , (, null, })
+                listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(throw)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, throw, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, throw)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(throw)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+                  listener: handleIdentifier(throw, methodDeclaration)
+                parseQualifiedRestOpt(throw, methodDeclarationContinuation)
+                parseMethodTypeVar(throw)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(throw, throw, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(throw, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parseThrowExpression(return, true)
+                            parseExpression(throw)
+                              parsePrecedenceExpression(throw, 1, true)
+                                parseUnaryExpression(throw, true)
+                                  parsePrimary(throw, expression)
+                                    parseParenthesizedExpressionOrFunctionLiteral(throw)
+                                      parseParenthesizedExpression(throw)
+                                        parseExpressionInParenthesis(throw)
+                                          parseExpressionInParenthesisRest(()
+                                            parseExpression(()
+                                              parsePrecedenceExpression((, 1, true)
+                                                parseUnaryExpression((, true)
+                                                  parsePrimary((, expression)
+                                                    parseSendOrFunctionLiteral((, expression)
+                                                      parseSend((, expression)
+                                                        ensureIdentifier((, expression)
+                                                          listener: handleIdentifier(x, expression)
+                                                        listener: handleNoTypeArguments(-)
+                                                        parseArgumentsOpt(x)
+                                                          listener: handleNoArguments(-)
+                                                        listener: handleSend(x, -)
+                                                listener: beginBinaryExpression(-)
+                                                parsePrecedenceExpression(-, 14, true)
+                                                  parseUnaryExpression(-, true)
+                                                    parsePrimary(-, expression)
+                                                      parseLiteralInt(-)
+                                                        listener: handleLiteralInt(1)
+                                                listener: endBinaryExpression(-)
+                                            ensureCloseParen(1, ()
+                                        listener: handleParenthesizedExpression(()
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true)
+                                  parseUnaryExpression(+, true)
+                                    parsePrimary(+, expression)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+)
+                            listener: handleThrowExpression(throw, ;)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(true)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, true, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, true)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(true)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+                  listener: handleIdentifier(true, methodDeclaration)
+                parseQualifiedRestOpt(true, methodDeclarationContinuation)
+                parseMethodTypeVar(true)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(true, true, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(true, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  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)
+                            parseArgumentOrIndexStar(true, Instance of 'NoTypeParamOrArg', false)
+                              listener: handleNoTypeArguments(()
+                              parseArguments(true)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                              listener: handleSend((, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(try)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, try, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, try)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(try)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+                  listener: handleIdentifier(try, methodDeclaration)
+                parseQualifiedRestOpt(try, methodDeclarationContinuation)
+                parseMethodTypeVar(try)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(try, try, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(try, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(try)
+                                  parseArgumentsOpt()
+                                    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)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, try)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseTryStatement(;)
+                        listener: beginTryStatement(try)
+                        parseBlock(try, BlockKind(try statement))
+                          ensureBlock(try, null, try statement)
+                            reportRecoverableError(try, Message[ExpectedClassOrMixinBody, A try statement must have a body, even if it is empty., Try adding an empty body., {string: try statement}])
+                              listener: 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)
+                            insertBlock(try)
+                              rewriter()
+                              rewriter()
+                          listener: beginBlock({, BlockKind(try statement))
+                          notEofOrValue(}, })
+                          listener: endBlock(0, {, }, BlockKind(try statement))
+                        reportRecoverableError(try, OnlyTry)
+                          listener: handleRecoverableError(OnlyTry, try, try)
+                        listener: endTryStatement(0, try, null)
+                  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)
+                                                        ensureIdentifier((, expression)
+                                                          listener: handleIdentifier(x, expression)
+                                                        listener: handleNoTypeArguments(-)
+                                                        parseArgumentsOpt(x)
+                                                          listener: handleNoArguments(-)
+                                                        listener: handleSend(x, -)
+                                                listener: beginBinaryExpression(-)
+                                                parsePrecedenceExpression(-, 14, true)
+                                                  parseUnaryExpression(-, true)
+                                                    parsePrimary(-, expression)
+                                                      parseLiteralInt(-)
+                                                        listener: handleLiteralInt(1)
+                                                listener: endBinaryExpression(-)
+                                            ensureCloseParen(1, ()
+                                        listener: handleParenthesizedExpression(()
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true)
+                                  parseUnaryExpression(+, true)
+                                    parsePrimary(+, expression)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(4, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, typedef, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, typedef)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(typedef)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(typedef, methodDeclaration)
+                parseQualifiedRestOpt(typedef, methodDeclarationContinuation)
+                parseMethodTypeVar(typedef)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(typedef, typedef, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(typedef, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(typedef, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(typedef)
+                                      parseArguments(typedef)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(typedef, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(var)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, var, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, var)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(var)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+                  listener: handleIdentifier(var, methodDeclaration)
+                parseQualifiedRestOpt(var, methodDeclarationContinuation)
+                parseMethodTypeVar(var)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(var, var, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(var, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(var)
+                                  parseArgumentsOpt()
+                                    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)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, var)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, false)
+                        looksLikeLocalFunction(()
+                        listener: beginMetadataStar(var)
+                        listener: endMetadataStar(0)
+                        listener: handleNoType(var)
+                        listener: beginVariablesDeclaration((, null, var)
+                        parseVariablesDeclarationRest(var, true)
+                          parseOptionallyInitializedIdentifier(var)
+                            ensureIdentifier(var, localVariableDeclaration)
+                              reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
+                                listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                              rewriter()
+                              listener: handleIdentifier(, localVariableDeclaration)
+                            listener: beginInitializedIdentifier()
+                            parseVariableInitializerOpt()
+                              listener: handleNoVariableInitializer(x)
+                            listener: endInitializedIdentifier()
+                          ensureSemicolon()
+                            reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, x)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                        looksLikeLocalFunction(x)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            parsePrecedenceExpression(;, 1, true)
+                              parseUnaryExpression(;, true)
+                                parsePrimary(;, expression)
+                                  parseSendOrFunctionLiteral(;, expression)
+                                    parseSend(;, expression)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, -)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true)
+                                parseUnaryExpression(-, true)
+                                  parsePrimary(-, expression)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-)
+                          ensureSemicolon(1)
+                            reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+                            rewriter()
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, ))
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction())
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    parseSend(;, expression)
+                                      ensureIdentifier(;, expression)
+                                        reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+                                        rewriter()
+                                        listener: handleIdentifier(, expression)
+                                      listener: handleNoTypeArguments())
+                                      parseArgumentsOpt()
+                                        listener: handleNoArguments())
+                                      listener: handleSend(, ))
+                            ensureSemicolon()
+                              reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                              rewriter()
+                            listener: handleExpressionStatement(;)
+                  reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
+                    listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
+                  notEofOrValue(}, +)
+                  parseStatement())
+                    parseStatementX())
+                      parseExpressionStatementOrDeclaration(), false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
+                          looksLikeLocalFunction(+)
+                          parseExpressionStatement())
+                            parseExpression())
+                              parsePrecedenceExpression(), 1, true)
+                                parseUnaryExpression(), true)
+                                  rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                    reportRecoverableError(+, UnsupportedPrefixPlus)
+                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                    rewriter()
+                                  parsePrimary(), expression)
+                                    parseSendOrFunctionLiteral(), expression)
+                                      parseSend(), expression)
+                                        ensureIdentifier(), expression)
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(+)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(+)
+                                        listener: handleSend(, +)
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true)
+                                  parseUnaryExpression(+, true)
+                                    parsePrimary(+, expression)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(6, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(void)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, void, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, void)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(void)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+                  listener: handleIdentifier(void, methodDeclaration)
+                parseQualifiedRestOpt(void, methodDeclarationContinuation)
+                parseMethodTypeVar(void)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(void, void, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(void, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                parseSendOrFunctionLiteral(return, expression)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
+                                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+                                      rewriter()
+                                      listener: handleIdentifier(, expression)
+                                    listener: handleNoTypeArguments(void)
+                                    parseArgumentsOpt()
+                                      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)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, void)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(()
+                          listener: beginMetadataStar(void)
+                          listener: endMetadataStar(0)
+                          listener: handleVoidKeyword(void)
+                          listener: beginVariablesDeclaration((, null, null)
+                          parseVariablesDeclarationRest(void, true)
+                            parseOptionallyInitializedIdentifier(void)
+                              ensureIdentifier(void, localVariableDeclaration)
+                                reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                                rewriter()
+                                listener: handleIdentifier(, localVariableDeclaration)
+                              listener: beginInitializedIdentifier()
+                              parseVariableInitializerOpt()
+                                listener: handleNoVariableInitializer(x)
+                              listener: endInitializedIdentifier()
+                            ensureSemicolon()
+                              reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+                              rewriter()
+                            listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, x)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                        looksLikeLocalFunction(x)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            parsePrecedenceExpression(;, 1, true)
+                              parseUnaryExpression(;, true)
+                                parsePrimary(;, expression)
+                                  parseSendOrFunctionLiteral(;, expression)
+                                    parseSend(;, expression)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, -)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true)
+                                parseUnaryExpression(-, true)
+                                  parsePrimary(-, expression)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-)
+                          ensureSemicolon(1)
+                            reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+                            rewriter()
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, ))
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction())
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    parseSend(;, expression)
+                                      ensureIdentifier(;, expression)
+                                        reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+                                        rewriter()
+                                        listener: handleIdentifier(, expression)
+                                      listener: handleNoTypeArguments())
+                                      parseArgumentsOpt()
+                                        listener: handleNoArguments())
+                                      listener: handleSend(, ))
+                            ensureSemicolon()
+                              reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                              rewriter()
+                            listener: handleExpressionStatement(;)
+                  reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
+                    listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
+                  notEofOrValue(}, +)
+                  parseStatement())
+                    parseStatementX())
+                      parseExpressionStatementOrDeclaration(), false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
+                          looksLikeLocalFunction(+)
+                          parseExpressionStatement())
+                            parseExpression())
+                              parsePrecedenceExpression(), 1, true)
+                                parseUnaryExpression(), true)
+                                  rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                    reportRecoverableError(+, UnsupportedPrefixPlus)
+                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                    rewriter()
+                                  parsePrimary(), expression)
+                                    parseSendOrFunctionLiteral(), expression)
+                                      parseSend(), expression)
+                                        ensureIdentifier(), expression)
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(+)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(+)
+                                        listener: handleSend(, +)
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true)
+                                  parseUnaryExpression(+, true)
+                                    parsePrimary(+, expression)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(6, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(while)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, while, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, while)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(while)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+                  listener: handleIdentifier(while, methodDeclaration)
+                parseQualifiedRestOpt(while, methodDeclarationContinuation)
+                parseMethodTypeVar(while)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(while, while, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(while, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(while)
+                                  parseArgumentsOpt()
+                                    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)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, while)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseWhileStatement(;)
+                        listener: beginWhileStatement(while)
+                        ensureParenthesizedCondition(while)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(-)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(-)
+                                        listener: handleSend(x, -)
+                                listener: beginBinaryExpression(-)
+                                parsePrecedenceExpression(-, 14, true)
+                                  parseUnaryExpression(-, true)
+                                    parsePrimary(-, expression)
+                                      parseLiteralInt(-)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(-)
+                            ensureCloseParen(1, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginWhileStatementBody(+)
+                        parseStatement())
+                          parseStatementX())
+                            parseExpressionStatementOrDeclaration(), false)
+                              parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
+                                looksLikeLocalFunction(+)
+                                parseExpressionStatement())
+                                  parseExpression())
+                                    parsePrecedenceExpression(), 1, true)
+                                      parseUnaryExpression(), true)
+                                        rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                          reportRecoverableError(+, UnsupportedPrefixPlus)
+                                            listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                          rewriter()
+                                        parsePrimary(), expression)
+                                          parseSendOrFunctionLiteral(), expression)
+                                            parseSend(), expression)
+                                              ensureIdentifier(), expression)
+                                                listener: handleIdentifier(, expression)
+                                              listener: handleNoTypeArguments(+)
+                                              parseArgumentsOpt()
+                                                listener: handleNoArguments(+)
+                                              listener: handleSend(, +)
+                                      listener: beginBinaryExpression(+)
+                                      parsePrecedenceExpression(+, 14, true)
+                                        parseUnaryExpression(+, true)
+                                          parsePrimary(+, expression)
+                                            parseLiteralInt(+)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(+)
+                                  ensureSemicolon(1)
+                                  listener: handleExpressionStatement(;)
+                        listener: endWhileStatementBody(})
+                        listener: endWhileStatement(while, })
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(3, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(with)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, with, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(null, null, null, null, null, with)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+                  listener: handleIdentifier(with, methodDeclaration)
+                parseQualifiedRestOpt(with, methodDeclarationContinuation)
+                parseMethodTypeVar(with)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(with, with, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(with, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSend(return, expression)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+                                    listener: handleIdentifier(with, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(with)
+                                    parseArguments(with)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, -)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true)
+                                              parseUnaryExpression(-, true)
+                                                parsePrimary(-, expression)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(with, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, yield, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(null, null, null, null, null, yield)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(yield)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(yield, methodDeclaration)
+                parseQualifiedRestOpt(yield, methodDeclarationContinuation)
+                parseMethodTypeVar(yield)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(yield, yield, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(yield, 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(}, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if)
+                          parseExpressionInParenthesisRest(()
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true)
+                                parseUnaryExpression((, true)
+                                  parsePrimary((, expression)
+                                    parseSendOrFunctionLiteral((, expression)
+                                      parseSend((, expression)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, ==)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true)
+                                  parseUnaryExpression(==, true)
+                                    parsePrimary(==, expression)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==)
+                            ensureCloseParen(0, ()
+                          listener: handleParenthesizedCondition(()
+                        listener: beginThenStatement(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()
+                        listener: endThenStatement(;)
+                        listener: endIfStatement(if, null)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrimary(return, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(yield, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(yield)
+                                      parseArguments(yield)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(yield, +)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true)
+                              parseUnaryExpression(+, true)
+                                parsePrimary(+, expression)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, int, (, null, })
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 70, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.parser.expect
new file mode 100644
index 0000000..12d12c3
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.parser.expect
@@ -0,0 +1,697 @@
+NOTICE: Stream was rewritten by parser!
+
+class WrapperClass {
+int abstract(int x) {
+if (x == 0) return 42;
+return abstract(x-1) + 1;
+}
+
+int as(int x) {
+if (x == 0) return 42;
+return as(x-1) + 1;
+}
+
+int assert(int x) {
+if (x == 0) return 42;
+return assert(x-1) + 1;
+}
+
+int async(int x) {
+if (x == 0) return 42;
+return async(x-1) + 1;
+}
+
+int await(int x) {
+if (x == 0) return 42;
+return await(x-1) + 1;
+}
+
+int break(int x) {
+if (x == 0) return 42;
+return ;break;(x-1) + 1;
+}
+
+int case(int x) {
+if (x == 0) return 42;
+return case(x-1) + 1;
+}
+
+int catch(int x) {
+if (x == 0) return 42;
+return catch(x-1) + 1;
+}
+
+int class(int x) {
+if (x == 0) return 42;
+return class(x-1) + 1;
+}
+
+int const(int x) {
+if (x == 0) return 42;
+return const(x-1) + 1;
+}
+
+int continue(int x) {
+if (x == 0) return 42;
+return ;continue;(x-1) + 1;
+}
+
+int covariant(int x) {
+if (x == 0) return 42;
+return covariant(x-1) + 1;
+}
+
+int default(int x) {
+if (x == 0) return 42;
+return default(x-1) + 1;
+}
+
+int deferred(int x) {
+if (x == 0) return 42;
+return deferred(x-1) + 1;
+}
+
+int do(int x) {
+if (x == 0) return 42;
+return ;do(x-1) + 1;
+while();}
+
+int dynamic(int x) {
+if (x == 0) return 42;
+return dynamic(x-1) + 1;
+}
+
+int else(int x) {
+if (x == 0) return 42;
+return ;;else(x-1) + 1;
+}
+
+int enum(int x) {
+if (x == 0) return 42;
+return enum(x-1) + 1;
+}
+
+int export(int x) {
+if (x == 0) return 42;
+return export(x-1) + 1;
+}
+
+int extends(int x) {
+if (x == 0) return 42;
+return extends(x-1) + 1;
+}
+
+int extension(int x) {
+if (x == 0) return 42;
+return extension(x-1) + 1;
+}
+
+int external(int x) {
+if (x == 0) return 42;
+return external(x-1) + 1;
+}
+
+int factory(int x) {
+if (x == 0) return 42;
+return factory(x-1) + 1;
+}
+
+int false(int x) {
+if (x == 0) return 42;
+return false(x-1) + 1;
+}
+
+int final(int x) {
+if (x == 0) return 42;
+return ;final(;x-1;;) + 1;
+}
+
+int finally(int x) {
+if (x == 0) return 42;
+return finally(x-1) + 1;
+}
+
+int for(int x) {
+if (x == 0) return 42;
+return ;for(x-1;;) + 1;
+}
+
+int Function(int x) {
+if (x == 0) return 42;
+return Function(x-1) + 1;
+}
+
+int get(int x) {
+if (x == 0) return 42;
+return get(x-1) + 1;
+}
+
+int hide(int x) {
+if (x == 0) return 42;
+return hide(x-1) + 1;
+}
+
+int if(int x) {
+if (x == 0) return 42;
+return ;if(x-1) + 1;
+}
+
+int implements(int x) {
+if (x == 0) return 42;
+return implements(x-1) + 1;
+}
+
+int import(int x) {
+if (x == 0) return 42;
+return import(x-1) + 1;
+}
+
+int in(int x) {
+if (x == 0) return 42;
+return in(x-1) + 1;
+}
+
+int inout(int x) {
+if (x == 0) return 42;
+return inout(x-1) + 1;
+}
+
+int interface(int x) {
+if (x == 0) return 42;
+return interface(x-1) + 1;
+}
+
+int is(int x) {
+if (x == 0) return 42;
+return is;(x-1) + 1;
+}
+
+int late(int x) {
+if (x == 0) return 42;
+return late(x-1) + 1;
+}
+
+int library(int x) {
+if (x == 0) return 42;
+return library(x-1) + 1;
+}
+
+int mixin(int x) {
+if (x == 0) return 42;
+return mixin(x-1) + 1;
+}
+
+int native(int x) {
+if (x == 0) return 42;
+return native(x-1) + 1;
+}
+
+int new(int x) {
+if (x == 0) return 42;
+return new(x-1) + 1;
+}
+
+int null(int x) {
+if (x == 0) return 42;
+return null(x-1) + 1;
+}
+
+int of(int x) {
+if (x == 0) return 42;
+return of(x-1) + 1;
+}
+
+int on(int x) {
+if (x == 0) return 42;
+return on(x-1) + 1;
+}
+
+int operator(int x) {
+if (x == 0) return 42;
+return operator(x-1) + 1;
+}
+
+int out(int x) {
+if (x == 0) return 42;
+return out(x-1) + 1;
+}
+
+int part(int x) {
+if (x == 0) return 42;
+return part(x-1) + 1;
+}
+
+int patch(int x) {
+if (x == 0) return 42;
+return patch(x-1) + 1;
+}
+
+int required(int x) {
+if (x == 0) return 42;
+return required(x-1) + 1;
+}
+
+int rethrow(int x) {
+if (x == 0) return 42;
+return rethrow(x-1) + 1;
+}
+
+int return(int x) {
+if (x == 0) return 42;
+return return(x-1) + 1;
+}
+
+int set(int x) {
+if (x == 0) return 42;
+return set(x-1) + 1;
+}
+
+int show(int x) {
+if (x == 0) return 42;
+return show(x-1) + 1;
+}
+
+int source(int x) {
+if (x == 0) return 42;
+return source(x-1) + 1;
+}
+
+int static(int x) {
+if (x == 0) return 42;
+return static(x-1) + 1;
+}
+
+int super(int x) {
+if (x == 0) return 42;
+return super(x-1) + 1;
+}
+
+int switch(int x) {
+if (x == 0) return 42;
+return ;switch(x-1) {}+ 1;
+}
+
+int sync(int x) {
+if (x == 0) return 42;
+return sync(x-1) + 1;
+}
+
+int this;(int x) {
+if (x == 0) return 42;
+return this(x-1) + 1;
+}
+
+int throw(int x) {
+if (x == 0) return 42;
+return throw(x-1) + 1;
+}
+
+int true(int x) {
+if (x == 0) return 42;
+return true(x-1) + 1;
+}
+
+int try(int x) {
+if (x == 0) return 42;
+return ;try{}(x-1) + 1;
+}
+
+int typedef(int x) {
+if (x == 0) return 42;
+return typedef(x-1) + 1;
+}
+
+int var(int x) {
+if (x == 0) return 42;
+return ;var(;x-1;;) + 1;
+}
+
+int void(int x) {
+if (x == 0) return 42;
+return ;void(;x-1;;) + 1;
+}
+
+int while(int x) {
+if (x == 0) return 42;
+return ;while(x-1) + 1;
+}
+
+int with(int x) {
+if (x == 0) return 42;
+return with(x-1) + 1;
+}
+
+int yield(int x) {
+if (x == 0) return 42;
+return yield(x-1) + 1;
+}
+}
+
+
+class[KeywordToken] WrapperClass[StringToken] {[BeginToken]
+int[StringToken] abstract[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] abstract[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] as[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] as[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] assert[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] assert[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] async[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] async[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] await[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] await[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] break[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]break[KeywordToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] case[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] case[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] catch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] catch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] class[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] class[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] const[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] const[KeywordToken][SyntheticStringToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] continue[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]continue[KeywordToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] covariant[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] covariant[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] default[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] default[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] deferred[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] deferred[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] do[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]do[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+while[SyntheticKeywordToken]([SyntheticBeginToken][SyntheticStringToken])[SyntheticToken];[SyntheticToken]}[SimpleToken]
+
+int[StringToken] dynamic[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] dynamic[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] else[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken]else[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] enum[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] enum[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] export[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] export[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extends[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extends[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extension[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extension[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] external[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] external[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] factory[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] factory[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] false[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] false[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] final[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]final[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] finally[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] finally[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] for[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]for[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] Function[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] Function[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] get[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] get[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] hide[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] hide[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] if[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]if[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] implements[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] implements[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] import[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] import[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] in[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] in[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] inout[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] inout[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] interface[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] interface[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] is[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken]is[KeywordToken][SyntheticStringToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] late[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] late[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] library[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] library[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] mixin[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] mixin[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] native[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] native[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] new[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] new[KeywordToken][SyntheticStringToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] null[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] null[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] of[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] of[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] on[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] on[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] operator[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] operator[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] out[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] out[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] part[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] part[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] patch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] patch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] required[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] required[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] rethrow[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] rethrow[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] return[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] return[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] set[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] set[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] show[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] show[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] source[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] source[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] static[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] static[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] super[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] super[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] switch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]switch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] {[SyntheticBeginToken]}[SyntheticToken][SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] sync[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] sync[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] this[KeywordToken];[SyntheticToken][SyntheticStringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] throw[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] throw[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] true[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] true[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] try[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]try[KeywordToken]{[SyntheticBeginToken]}[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] typedef[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] typedef[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] var[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]var[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] void[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]void[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] while[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]while[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] with[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] with[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] yield[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] yield[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.scanner.expect
new file mode 100644
index 0000000..994c2c6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.scanner.expect
@@ -0,0 +1,695 @@
+class WrapperClass {
+int abstract(int x) {
+if (x == 0) return 42;
+return abstract(x-1) + 1;
+}
+
+int as(int x) {
+if (x == 0) return 42;
+return as(x-1) + 1;
+}
+
+int assert(int x) {
+if (x == 0) return 42;
+return assert(x-1) + 1;
+}
+
+int async(int x) {
+if (x == 0) return 42;
+return async(x-1) + 1;
+}
+
+int await(int x) {
+if (x == 0) return 42;
+return await(x-1) + 1;
+}
+
+int break(int x) {
+if (x == 0) return 42;
+return break(x-1) + 1;
+}
+
+int case(int x) {
+if (x == 0) return 42;
+return case(x-1) + 1;
+}
+
+int catch(int x) {
+if (x == 0) return 42;
+return catch(x-1) + 1;
+}
+
+int class(int x) {
+if (x == 0) return 42;
+return class(x-1) + 1;
+}
+
+int const(int x) {
+if (x == 0) return 42;
+return const(x-1) + 1;
+}
+
+int continue(int x) {
+if (x == 0) return 42;
+return continue(x-1) + 1;
+}
+
+int covariant(int x) {
+if (x == 0) return 42;
+return covariant(x-1) + 1;
+}
+
+int default(int x) {
+if (x == 0) return 42;
+return default(x-1) + 1;
+}
+
+int deferred(int x) {
+if (x == 0) return 42;
+return deferred(x-1) + 1;
+}
+
+int do(int x) {
+if (x == 0) return 42;
+return do(x-1) + 1;
+}
+
+int dynamic(int x) {
+if (x == 0) return 42;
+return dynamic(x-1) + 1;
+}
+
+int else(int x) {
+if (x == 0) return 42;
+return else(x-1) + 1;
+}
+
+int enum(int x) {
+if (x == 0) return 42;
+return enum(x-1) + 1;
+}
+
+int export(int x) {
+if (x == 0) return 42;
+return export(x-1) + 1;
+}
+
+int extends(int x) {
+if (x == 0) return 42;
+return extends(x-1) + 1;
+}
+
+int extension(int x) {
+if (x == 0) return 42;
+return extension(x-1) + 1;
+}
+
+int external(int x) {
+if (x == 0) return 42;
+return external(x-1) + 1;
+}
+
+int factory(int x) {
+if (x == 0) return 42;
+return factory(x-1) + 1;
+}
+
+int false(int x) {
+if (x == 0) return 42;
+return false(x-1) + 1;
+}
+
+int final(int x) {
+if (x == 0) return 42;
+return final(x-1) + 1;
+}
+
+int finally(int x) {
+if (x == 0) return 42;
+return finally(x-1) + 1;
+}
+
+int for(int x) {
+if (x == 0) return 42;
+return for(x-1) + 1;
+}
+
+int Function(int x) {
+if (x == 0) return 42;
+return Function(x-1) + 1;
+}
+
+int get(int x) {
+if (x == 0) return 42;
+return get(x-1) + 1;
+}
+
+int hide(int x) {
+if (x == 0) return 42;
+return hide(x-1) + 1;
+}
+
+int if(int x) {
+if (x == 0) return 42;
+return if(x-1) + 1;
+}
+
+int implements(int x) {
+if (x == 0) return 42;
+return implements(x-1) + 1;
+}
+
+int import(int x) {
+if (x == 0) return 42;
+return import(x-1) + 1;
+}
+
+int in(int x) {
+if (x == 0) return 42;
+return in(x-1) + 1;
+}
+
+int inout(int x) {
+if (x == 0) return 42;
+return inout(x-1) + 1;
+}
+
+int interface(int x) {
+if (x == 0) return 42;
+return interface(x-1) + 1;
+}
+
+int is(int x) {
+if (x == 0) return 42;
+return is(x-1) + 1;
+}
+
+int late(int x) {
+if (x == 0) return 42;
+return late(x-1) + 1;
+}
+
+int library(int x) {
+if (x == 0) return 42;
+return library(x-1) + 1;
+}
+
+int mixin(int x) {
+if (x == 0) return 42;
+return mixin(x-1) + 1;
+}
+
+int native(int x) {
+if (x == 0) return 42;
+return native(x-1) + 1;
+}
+
+int new(int x) {
+if (x == 0) return 42;
+return new(x-1) + 1;
+}
+
+int null(int x) {
+if (x == 0) return 42;
+return null(x-1) + 1;
+}
+
+int of(int x) {
+if (x == 0) return 42;
+return of(x-1) + 1;
+}
+
+int on(int x) {
+if (x == 0) return 42;
+return on(x-1) + 1;
+}
+
+int operator(int x) {
+if (x == 0) return 42;
+return operator(x-1) + 1;
+}
+
+int out(int x) {
+if (x == 0) return 42;
+return out(x-1) + 1;
+}
+
+int part(int x) {
+if (x == 0) return 42;
+return part(x-1) + 1;
+}
+
+int patch(int x) {
+if (x == 0) return 42;
+return patch(x-1) + 1;
+}
+
+int required(int x) {
+if (x == 0) return 42;
+return required(x-1) + 1;
+}
+
+int rethrow(int x) {
+if (x == 0) return 42;
+return rethrow(x-1) + 1;
+}
+
+int return(int x) {
+if (x == 0) return 42;
+return return(x-1) + 1;
+}
+
+int set(int x) {
+if (x == 0) return 42;
+return set(x-1) + 1;
+}
+
+int show(int x) {
+if (x == 0) return 42;
+return show(x-1) + 1;
+}
+
+int source(int x) {
+if (x == 0) return 42;
+return source(x-1) + 1;
+}
+
+int static(int x) {
+if (x == 0) return 42;
+return static(x-1) + 1;
+}
+
+int super(int x) {
+if (x == 0) return 42;
+return super(x-1) + 1;
+}
+
+int switch(int x) {
+if (x == 0) return 42;
+return switch(x-1) + 1;
+}
+
+int sync(int x) {
+if (x == 0) return 42;
+return sync(x-1) + 1;
+}
+
+int this(int x) {
+if (x == 0) return 42;
+return this(x-1) + 1;
+}
+
+int throw(int x) {
+if (x == 0) return 42;
+return throw(x-1) + 1;
+}
+
+int true(int x) {
+if (x == 0) return 42;
+return true(x-1) + 1;
+}
+
+int try(int x) {
+if (x == 0) return 42;
+return try(x-1) + 1;
+}
+
+int typedef(int x) {
+if (x == 0) return 42;
+return typedef(x-1) + 1;
+}
+
+int var(int x) {
+if (x == 0) return 42;
+return var(x-1) + 1;
+}
+
+int void(int x) {
+if (x == 0) return 42;
+return void(x-1) + 1;
+}
+
+int while(int x) {
+if (x == 0) return 42;
+return while(x-1) + 1;
+}
+
+int with(int x) {
+if (x == 0) return 42;
+return with(x-1) + 1;
+}
+
+int yield(int x) {
+if (x == 0) return 42;
+return yield(x-1) + 1;
+}
+}
+
+
+class[KeywordToken] WrapperClass[StringToken] {[BeginToken]
+int[StringToken] abstract[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] abstract[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] as[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] as[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] assert[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] assert[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] async[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] async[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] await[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] await[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] break[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] break[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] case[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] case[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] catch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] catch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] class[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] class[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] const[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] const[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] continue[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] continue[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] covariant[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] covariant[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] default[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] default[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] deferred[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] deferred[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] do[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] do[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] dynamic[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] dynamic[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] else[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] else[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] enum[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] enum[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] export[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] export[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extends[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extends[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extension[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extension[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] external[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] external[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] factory[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] factory[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] false[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] false[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] final[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] final[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] finally[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] finally[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] for[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] for[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] Function[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] Function[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] get[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] get[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] hide[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] hide[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] if[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] if[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] implements[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] implements[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] import[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] import[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] in[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] in[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] inout[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] inout[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] interface[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] interface[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] is[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] is[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] late[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] late[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] library[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] library[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] mixin[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] mixin[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] native[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] native[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] new[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] new[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] null[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] null[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] of[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] of[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] on[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] on[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] operator[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] operator[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] out[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] out[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] part[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] part[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] patch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] patch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] required[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] required[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] rethrow[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] rethrow[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] return[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] return[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] set[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] set[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] show[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] show[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] source[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] source[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] static[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] static[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] super[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] super[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] switch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] switch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] sync[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] sync[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] throw[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] throw[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] true[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] true[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] try[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] try[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] typedef[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] typedef[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] var[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] var[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] void[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] void[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] while[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] while[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] with[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] with[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] yield[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] yield[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart
new file mode 100644
index 0000000..7c04d0e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart
@@ -0,0 +1,69 @@
+int abstract = 42;
+int as = 42;
+int assert = 42;
+int async = 42;
+int await = 42;
+int break = 42;
+int case = 42;
+int catch = 42;
+int class = 42;
+int const = 42;
+int continue = 42;
+int covariant = 42;
+int default = 42;
+int deferred = 42;
+int do = 42;
+int dynamic = 42;
+int else = 42;
+int enum = 42;
+int export = 42;
+int extends = 42;
+int extension = 42;
+int external = 42;
+int factory = 42;
+int false = 42;
+int final = 42;
+int finally = 42;
+int for = 42;
+int Function = 42;
+int get = 42;
+int hide = 42;
+int if = 42;
+int implements = 42;
+int import = 42;
+int in = 42;
+int inout = 42;
+int interface = 42;
+int is = 42;
+int late = 42;
+int library = 42;
+int mixin = 42;
+int native = 42;
+int new = 42;
+int null = 42;
+int of = 42;
+int on = 42;
+int operator = 42;
+int out = 42;
+int part = 42;
+int patch = 42;
+int required = 42;
+int rethrow = 42;
+int return = 42;
+int set = 42;
+int show = 42;
+int source = 42;
+int static = 42;
+int super = 42;
+int switch = 42;
+int sync = 42;
+int this = 42;
+int throw = 42;
+int true = 42;
+int try = 42;
+int typedef = 42;
+int var = 42;
+int void = 42;
+int while = 42;
+int with = 42;
+int yield = 42;
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.expect
new file mode 100644
index 0000000..2d7d7f0
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.expect
@@ -0,0 +1,997 @@
+Problems reported:
+
+parser/error_recovery/keyword_named_top_level_fields:3:5: Expected an identifier, but got 'assert'.
+int assert = 42;
+    ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:6:5: Expected an identifier, but got 'break'.
+int break = 42;
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:7:5: Expected an identifier, but got 'case'.
+int case = 42;
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:8:5: Expected an identifier, but got 'catch'.
+int catch = 42;
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:9:5: Expected an identifier, but got 'class'.
+int class = 42;
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:10:5: Expected an identifier, but got 'const'.
+int const = 42;
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:11:5: Expected an identifier, but got 'continue'.
+int continue = 42;
+    ^^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:13:5: Expected an identifier, but got 'default'.
+int default = 42;
+    ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:15:5: Expected an identifier, but got 'do'.
+int do = 42;
+    ^^
+
+parser/error_recovery/keyword_named_top_level_fields:17:5: Expected an identifier, but got 'else'.
+int else = 42;
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:18:5: Expected an identifier, but got 'enum'.
+int enum = 42;
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:20:5: Expected an identifier, but got 'extends'.
+int extends = 42;
+    ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:24:5: Expected an identifier, but got 'false'.
+int false = 42;
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:25:5: Expected an identifier, but got 'final'.
+int final = 42;
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:26:5: Expected an identifier, but got 'finally'.
+int finally = 42;
+    ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:27:5: Expected an identifier, but got 'for'.
+int for = 42;
+    ^^^
+
+parser/error_recovery/keyword_named_top_level_fields:31:5: Expected an identifier, but got 'if'.
+int if = 42;
+    ^^
+
+parser/error_recovery/keyword_named_top_level_fields:34:5: Expected an identifier, but got 'in'.
+int in = 42;
+    ^^
+
+parser/error_recovery/keyword_named_top_level_fields:37:5: Expected an identifier, but got 'is'.
+int is = 42;
+    ^^
+
+parser/error_recovery/keyword_named_top_level_fields:42:5: Expected an identifier, but got 'new'.
+int new = 42;
+    ^^^
+
+parser/error_recovery/keyword_named_top_level_fields:43:5: Expected an identifier, but got 'null'.
+int null = 42;
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:51:5: Expected an identifier, but got 'rethrow'.
+int rethrow = 42;
+    ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:52:5: Expected an identifier, but got 'return'.
+int return = 42;
+    ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:57:5: Expected an identifier, but got 'super'.
+int super = 42;
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:58:5: Expected an identifier, but got 'switch'.
+int switch = 42;
+    ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:60:5: Expected an identifier, but got 'this'.
+int this = 42;
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:61:5: Expected an identifier, but got 'throw'.
+int throw = 42;
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:62:5: Expected an identifier, but got 'true'.
+int true = 42;
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:63:5: Expected an identifier, but got 'try'.
+int try = 42;
+    ^^^
+
+parser/error_recovery/keyword_named_top_level_fields:65:5: Expected an identifier, but got 'var'.
+int var = 42;
+    ^^^
+
+parser/error_recovery/keyword_named_top_level_fields:66:5: Expected an identifier, but got 'void'.
+int void = 42;
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:67:5: Expected an identifier, but got 'while'.
+int while = 42;
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_fields:68:5: Expected an identifier, but got 'with'.
+int with = 42;
+    ^^^^
+
+beginCompilationUnit(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    handleIdentifier(int, typeReference)
+    handleNoTypeArguments(abstract)
+    handleType(int, null)
+    handleIdentifier(abstract, topLevelVariableDeclaration)
+    beginFieldInitializer(=)
+      handleLiteralInt(42)
+    endFieldInitializer(=, ;)
+  endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+  handleIdentifier(int, typeReference)
+  handleNoTypeArguments(as)
+  handleType(int, null)
+  handleIdentifier(as, topLevelVariableDeclaration)
+  beginFieldInitializer(=)
+    handleLiteralInt(42)
+  endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(assert)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+handleIdentifier(assert, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+  handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(async)
+handleType(int, null)
+handleIdentifier(async, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(await)
+handleType(int, null)
+handleIdentifier(await, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(break)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+handleIdentifier(break, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(case)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+handleIdentifier(case, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(catch)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+handleIdentifier(catch, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(class)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+handleIdentifier(class, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(const)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+handleIdentifier(const, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(continue)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+handleIdentifier(continue, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(covariant)
+handleType(int, null)
+handleIdentifier(covariant, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(default)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+handleIdentifier(default, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(deferred)
+handleType(int, null)
+handleIdentifier(deferred, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(do)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+handleIdentifier(do, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(dynamic)
+handleType(int, null)
+handleIdentifier(dynamic, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(else)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+handleIdentifier(else, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(enum)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+handleIdentifier(enum, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(export)
+handleType(int, null)
+handleIdentifier(export, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(extends)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+handleIdentifier(extends, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(extension)
+handleType(int, null)
+handleIdentifier(extension, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(external)
+handleType(int, null)
+handleIdentifier(external, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(factory)
+handleType(int, null)
+handleIdentifier(factory, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(false)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+handleIdentifier(false, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(final)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+handleIdentifier(final, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(finally)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+handleIdentifier(finally, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(for)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+handleIdentifier(for, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(Function)
+handleType(int, null)
+handleIdentifier(Function, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(get)
+handleType(int, null)
+handleIdentifier(get, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(hide)
+handleType(int, null)
+handleIdentifier(hide, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(if)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+handleIdentifier(if, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(implements)
+handleType(int, null)
+handleIdentifier(implements, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(import)
+handleType(int, null)
+handleIdentifier(import, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(in)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+handleIdentifier(in, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(inout)
+handleType(int, null)
+handleIdentifier(inout, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(interface)
+handleType(int, null)
+handleIdentifier(interface, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(is)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+handleIdentifier(is, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(late)
+handleType(int, null)
+handleIdentifier(late, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(library)
+handleType(int, null)
+handleIdentifier(library, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(mixin)
+handleType(int, null)
+handleIdentifier(mixin, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(native)
+handleType(int, null)
+handleIdentifier(native, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(new)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+handleIdentifier(new, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(null)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+handleIdentifier(null, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(of)
+handleType(int, null)
+handleIdentifier(of, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(on)
+handleType(int, null)
+handleIdentifier(on, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(operator)
+handleType(int, null)
+handleIdentifier(operator, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(out)
+handleType(int, null)
+handleIdentifier(out, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(part)
+handleType(int, null)
+handleIdentifier(part, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(patch)
+handleType(int, null)
+handleIdentifier(patch, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(required)
+handleType(int, null)
+handleIdentifier(required, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(rethrow)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+handleIdentifier(rethrow, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(return)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+handleIdentifier(return, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(set)
+handleType(int, null)
+handleIdentifier(set, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(show)
+handleType(int, null)
+handleIdentifier(show, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(source)
+handleType(int, null)
+handleIdentifier(source, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(static)
+handleType(int, null)
+handleIdentifier(static, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(super)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+handleIdentifier(super, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(switch)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+handleIdentifier(switch, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(sync)
+handleType(int, null)
+handleIdentifier(sync, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(this)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+handleIdentifier(this, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(throw)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+handleIdentifier(throw, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(true)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+handleIdentifier(true, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(try)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+handleIdentifier(try, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(typedef)
+handleType(int, null)
+handleIdentifier(typedef, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(var)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+handleIdentifier(var, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(void)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+handleIdentifier(void, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(while)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+handleIdentifier(while, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(with)
+handleType(int, null)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+handleIdentifier(with, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration(int)
+beginMetadataStar(int)
+endMetadataStar(0)
+beginTopLevelMember(int)
+handleIdentifier(int, typeReference)
+handleNoTypeArguments(yield)
+handleType(int, null)
+handleIdentifier(yield, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleLiteralInt(42)
+endFieldInitializer(=, ;)
+endTopLevelFields(null, null, null, null, 1, int, ;)
+endTopLevelDeclaration()
+endCompilationUnit(69, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect
new file mode 100644
index 0000000..20430f0
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect
@@ -0,0 +1,1723 @@
+parseUnit(int)
+  skipErrorTokens(int)
+  listener: beginCompilationUnit(int)
+  syntheticPreviousToken(int)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(int)
+      parseFields(, null, null, null, null, null, , Instance of 'SimpleType', abstract, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(abstract)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(abstract, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(abstract, abstract, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(as)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(as, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(as, as, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(assert)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', assert, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(assert)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+          listener: handleIdentifier(assert, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(assert, assert, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', async, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(async)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(async, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(async, async, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', await, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(await)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(await, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(await, await, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(break)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', break, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(break)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+          listener: handleIdentifier(break, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(break, break, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(case)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', case, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(case)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+          listener: handleIdentifier(case, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(case, case, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(catch)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', catch, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(catch)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+          listener: handleIdentifier(catch, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(catch, catch, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(class)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', class, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(class)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+          listener: handleIdentifier(class, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(class, class, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(const)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', const, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(const)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+          listener: handleIdentifier(const, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(const, const, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(continue)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', continue, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(continue)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+          listener: handleIdentifier(continue, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(continue, continue, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(covariant)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(covariant, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(covariant, covariant, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(default)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', default, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(default)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+          listener: handleIdentifier(default, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(default, default, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(deferred)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(deferred, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(deferred, deferred, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(do)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', do, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(do)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+          listener: handleIdentifier(do, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(do, do, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(dynamic)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(dynamic, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(dynamic, dynamic, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(else)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', else, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(else)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+          listener: handleIdentifier(else, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(else, else, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(enum)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', enum, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(enum)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+          listener: handleIdentifier(enum, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(enum, enum, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(export)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(export, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(export, export, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(extends)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', extends, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(extends)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+          listener: handleIdentifier(extends, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(extends, extends, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', extension, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(extension)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(extension, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(extension, extension, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(external)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(external, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(external, external, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(factory)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(factory, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(factory, factory, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(false)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', false, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(false)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+          listener: handleIdentifier(false, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(false, false, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(final)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', final, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(final)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+          listener: handleIdentifier(final, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(final, final, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(finally)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', finally, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(finally)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+          listener: handleIdentifier(finally, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(finally, finally, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(for)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', for, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(for)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+          listener: handleIdentifier(for, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(for, for, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(Function)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(Function, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(Function, Function, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(get)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(get, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(get, get, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', hide, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(hide)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(hide, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(hide, hide, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(if)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', if, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(if)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+          listener: handleIdentifier(if, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(if, if, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(implements)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(implements, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(implements, implements, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(import)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(import, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(import, import, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(in)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', in, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(in)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+          listener: handleIdentifier(in, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(in, in, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', inout, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(inout)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(inout, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(inout, inout, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(interface)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(interface, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(interface, interface, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(is)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', is, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(is)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+          listener: handleIdentifier(is, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(is, is, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', late, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(late)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(late, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(late, late, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(library)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(library, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(library, library, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(mixin)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(mixin, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(mixin, mixin, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', native, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(native)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(native, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(native, native, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(new)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', new, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(new)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+          listener: handleIdentifier(new, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(new, new, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(null)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(null)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+          listener: handleIdentifier(null, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(null, null, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', of, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(of)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(of, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(of, of, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', on, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(on)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(on, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(on, on, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(operator)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(operator, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(operator, operator, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', out, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(out)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(out, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(out, out, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(part)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(part, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(part, part, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', patch, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(patch)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(patch, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(patch, patch, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', required, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(required)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(required, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(required, required, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(rethrow)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', rethrow, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(rethrow)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+          listener: handleIdentifier(rethrow, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(rethrow, rethrow, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(return)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', return, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(return)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+          listener: handleIdentifier(return, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(return, return, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(set)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(set, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(set, set, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', show, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(show)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(show, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(show, show, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', source, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(source)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(source, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(source, source, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(static)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(static, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(static, static, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(super)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', super, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(super)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+          listener: handleIdentifier(super, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(super, super, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(switch)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', switch, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(switch)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+          listener: handleIdentifier(switch, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(switch, switch, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', sync, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(sync)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(sync, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(sync, sync, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', this, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(this)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+          listener: handleIdentifier(this, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(this, this, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(throw)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', throw, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(throw)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+          listener: handleIdentifier(throw, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(throw, throw, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(true)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', true, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(true)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+          listener: handleIdentifier(true, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(true, true, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(try)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', try, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(try)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+          listener: handleIdentifier(try, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(try, try, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(typedef)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(typedef, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(typedef, typedef, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(var)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', var, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(var)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+          listener: handleIdentifier(var, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(var, var, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(void)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', void, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(void)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+          listener: handleIdentifier(void, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(void, void, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(while)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', while, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(while)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+          listener: handleIdentifier(while, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(while, while, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(with)
+      indicatesMethodOrField(=)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.TopLevel, null, true)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(with)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+          reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+          listener: handleIdentifier(with, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(with, with, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(int)
+      parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', yield, DeclarationKind.TopLevel, null, false)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(yield)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(yield, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(yield, yield, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(42)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, 1, int, ;)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(int)
+  listener: endCompilationUnit(69, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.parser.expect
new file mode 100644
index 0000000..d20abc0
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.parser.expect
@@ -0,0 +1,141 @@
+int abstract = 42;
+int as = 42;
+int assert = 42;
+int async = 42;
+int await = 42;
+int break = 42;
+int case = 42;
+int catch = 42;
+int class = 42;
+int const = 42;
+int continue = 42;
+int covariant = 42;
+int default = 42;
+int deferred = 42;
+int do = 42;
+int dynamic = 42;
+int else = 42;
+int enum = 42;
+int export = 42;
+int extends = 42;
+int extension = 42;
+int external = 42;
+int factory = 42;
+int false = 42;
+int final = 42;
+int finally = 42;
+int for = 42;
+int Function = 42;
+int get = 42;
+int hide = 42;
+int if = 42;
+int implements = 42;
+int import = 42;
+int in = 42;
+int inout = 42;
+int interface = 42;
+int is = 42;
+int late = 42;
+int library = 42;
+int mixin = 42;
+int native = 42;
+int new = 42;
+int null = 42;
+int of = 42;
+int on = 42;
+int operator = 42;
+int out = 42;
+int part = 42;
+int patch = 42;
+int required = 42;
+int rethrow = 42;
+int return = 42;
+int set = 42;
+int show = 42;
+int source = 42;
+int static = 42;
+int super = 42;
+int switch = 42;
+int sync = 42;
+int this = 42;
+int throw = 42;
+int true = 42;
+int try = 42;
+int typedef = 42;
+int var = 42;
+int void = 42;
+int while = 42;
+int with = 42;
+int yield = 42;
+
+
+int[StringToken] abstract[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] as[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] assert[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] async[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] await[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] break[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] case[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] catch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] class[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] const[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] continue[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] covariant[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] default[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] deferred[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] do[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] dynamic[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] else[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] enum[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] export[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] extends[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] extension[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] external[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] factory[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] false[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] final[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] finally[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] for[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] Function[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] get[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] hide[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] if[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] implements[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] import[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] in[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] inout[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] interface[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] is[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] late[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] library[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] mixin[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] native[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] new[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] null[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] of[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] on[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] operator[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] out[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] part[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] patch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] required[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] rethrow[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] return[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] set[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] show[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] source[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] static[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] super[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] switch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] sync[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] this[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] throw[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] true[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] try[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] typedef[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] var[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] void[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] while[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] with[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] yield[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.scanner.expect
new file mode 100644
index 0000000..d20abc0
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.scanner.expect
@@ -0,0 +1,141 @@
+int abstract = 42;
+int as = 42;
+int assert = 42;
+int async = 42;
+int await = 42;
+int break = 42;
+int case = 42;
+int catch = 42;
+int class = 42;
+int const = 42;
+int continue = 42;
+int covariant = 42;
+int default = 42;
+int deferred = 42;
+int do = 42;
+int dynamic = 42;
+int else = 42;
+int enum = 42;
+int export = 42;
+int extends = 42;
+int extension = 42;
+int external = 42;
+int factory = 42;
+int false = 42;
+int final = 42;
+int finally = 42;
+int for = 42;
+int Function = 42;
+int get = 42;
+int hide = 42;
+int if = 42;
+int implements = 42;
+int import = 42;
+int in = 42;
+int inout = 42;
+int interface = 42;
+int is = 42;
+int late = 42;
+int library = 42;
+int mixin = 42;
+int native = 42;
+int new = 42;
+int null = 42;
+int of = 42;
+int on = 42;
+int operator = 42;
+int out = 42;
+int part = 42;
+int patch = 42;
+int required = 42;
+int rethrow = 42;
+int return = 42;
+int set = 42;
+int show = 42;
+int source = 42;
+int static = 42;
+int super = 42;
+int switch = 42;
+int sync = 42;
+int this = 42;
+int throw = 42;
+int true = 42;
+int try = 42;
+int typedef = 42;
+int var = 42;
+int void = 42;
+int while = 42;
+int with = 42;
+int yield = 42;
+
+
+int[StringToken] abstract[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] as[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] assert[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] async[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] await[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] break[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] case[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] catch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] class[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] const[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] continue[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] covariant[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] default[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] deferred[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] do[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] dynamic[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] else[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] enum[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] export[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] extends[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] extension[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] external[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] factory[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] false[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] final[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] finally[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] for[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] Function[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] get[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] hide[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] if[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] implements[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] import[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] in[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] inout[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] interface[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] is[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] late[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] library[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] mixin[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] native[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] new[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] null[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] of[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] on[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] operator[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] out[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] part[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] patch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] required[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] rethrow[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] return[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] set[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] show[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] source[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] static[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] super[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] switch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] sync[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] this[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] throw[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] true[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] try[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] typedef[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] var[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] void[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] while[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] with[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+int[StringToken] yield[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart
new file mode 100644
index 0000000..bc40039
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart
@@ -0,0 +1,344 @@
+int abstract(int x) {
+  if (x == 0) return 42;
+  return abstract(x-1) + 1;
+}
+
+int as(int x) {
+  if (x == 0) return 42;
+  return as(x-1) + 1;
+}
+
+int assert(int x) {
+  if (x == 0) return 42;
+  return assert(x-1) + 1;
+}
+
+int async(int x) {
+  if (x == 0) return 42;
+  return async(x-1) + 1;
+}
+
+int await(int x) {
+  if (x == 0) return 42;
+  return await(x-1) + 1;
+}
+
+int break(int x) {
+  if (x == 0) return 42;
+  return break(x-1) + 1;
+}
+
+int case(int x) {
+  if (x == 0) return 42;
+  return case(x-1) + 1;
+}
+
+int catch(int x) {
+  if (x == 0) return 42;
+  return catch(x-1) + 1;
+}
+
+int class(int x) {
+  if (x == 0) return 42;
+  return class(x-1) + 1;
+}
+
+int const(int x) {
+  if (x == 0) return 42;
+  return const(x-1) + 1;
+}
+
+int continue(int x) {
+  if (x == 0) return 42;
+  return continue(x-1) + 1;
+}
+
+int covariant(int x) {
+  if (x == 0) return 42;
+  return covariant(x-1) + 1;
+}
+
+int default(int x) {
+  if (x == 0) return 42;
+  return default(x-1) + 1;
+}
+
+int deferred(int x) {
+  if (x == 0) return 42;
+  return deferred(x-1) + 1;
+}
+
+int do(int x) {
+  if (x == 0) return 42;
+  return do(x-1) + 1;
+}
+
+int dynamic(int x) {
+  if (x == 0) return 42;
+  return dynamic(x-1) + 1;
+}
+
+int else(int x) {
+  if (x == 0) return 42;
+  return else(x-1) + 1;
+}
+
+int enum(int x) {
+  if (x == 0) return 42;
+  return enum(x-1) + 1;
+}
+
+int export(int x) {
+  if (x == 0) return 42;
+  return export(x-1) + 1;
+}
+
+int extends(int x) {
+  if (x == 0) return 42;
+  return extends(x-1) + 1;
+}
+
+int extension(int x) {
+  if (x == 0) return 42;
+  return extension(x-1) + 1;
+}
+
+int external(int x) {
+  if (x == 0) return 42;
+  return external(x-1) + 1;
+}
+
+int factory(int x) {
+  if (x == 0) return 42;
+  return factory(x-1) + 1;
+}
+
+int false(int x) {
+  if (x == 0) return 42;
+  return false(x-1) + 1;
+}
+
+int final(int x) {
+  if (x == 0) return 42;
+  return final(x-1) + 1;
+}
+
+int finally(int x) {
+  if (x == 0) return 42;
+  return finally(x-1) + 1;
+}
+
+int for(int x) {
+  if (x == 0) return 42;
+  return for(x-1) + 1;
+}
+
+int Function(int x) {
+  if (x == 0) return 42;
+  return Function(x-1) + 1;
+}
+
+int get(int x) {
+  if (x == 0) return 42;
+  return get(x-1) + 1;
+}
+
+int hide(int x) {
+  if (x == 0) return 42;
+  return hide(x-1) + 1;
+}
+
+int if(int x) {
+  if (x == 0) return 42;
+  return if(x-1) + 1;
+}
+
+int implements(int x) {
+  if (x == 0) return 42;
+  return implements(x-1) + 1;
+}
+
+int import(int x) {
+  if (x == 0) return 42;
+  return import(x-1) + 1;
+}
+
+int in(int x) {
+  if (x == 0) return 42;
+  return in(x-1) + 1;
+}
+
+int inout(int x) {
+  if (x == 0) return 42;
+  return inout(x-1) + 1;
+}
+
+int interface(int x) {
+  if (x == 0) return 42;
+  return interface(x-1) + 1;
+}
+
+int is(int x) {
+  if (x == 0) return 42;
+  return is(x-1) + 1;
+}
+
+int late(int x) {
+  if (x == 0) return 42;
+  return late(x-1) + 1;
+}
+
+int library(int x) {
+  if (x == 0) return 42;
+  return library(x-1) + 1;
+}
+
+int mixin(int x) {
+  if (x == 0) return 42;
+  return mixin(x-1) + 1;
+}
+
+int native(int x) {
+  if (x == 0) return 42;
+  return native(x-1) + 1;
+}
+
+int new(int x) {
+  if (x == 0) return 42;
+  return new(x-1) + 1;
+}
+
+int null(int x) {
+  if (x == 0) return 42;
+  return null(x-1) + 1;
+}
+
+int of(int x) {
+  if (x == 0) return 42;
+  return of(x-1) + 1;
+}
+
+int on(int x) {
+  if (x == 0) return 42;
+  return on(x-1) + 1;
+}
+
+int operator(int x) {
+  if (x == 0) return 42;
+  return operator(x-1) + 1;
+}
+
+int out(int x) {
+  if (x == 0) return 42;
+  return out(x-1) + 1;
+}
+
+int part(int x) {
+  if (x == 0) return 42;
+  return part(x-1) + 1;
+}
+
+int patch(int x) {
+  if (x == 0) return 42;
+  return patch(x-1) + 1;
+}
+
+int required(int x) {
+  if (x == 0) return 42;
+  return required(x-1) + 1;
+}
+
+int rethrow(int x) {
+  if (x == 0) return 42;
+  return rethrow(x-1) + 1;
+}
+
+int return(int x) {
+  if (x == 0) return 42;
+  return return(x-1) + 1;
+}
+
+int set(int x) {
+  if (x == 0) return 42;
+  return set(x-1) + 1;
+}
+
+int show(int x) {
+  if (x == 0) return 42;
+  return show(x-1) + 1;
+}
+
+int source(int x) {
+  if (x == 0) return 42;
+  return source(x-1) + 1;
+}
+
+int static(int x) {
+  if (x == 0) return 42;
+  return static(x-1) + 1;
+}
+
+int super(int x) {
+  if (x == 0) return 42;
+  return super(x-1) + 1;
+}
+
+int switch(int x) {
+  if (x == 0) return 42;
+  return switch(x-1) + 1;
+}
+
+int sync(int x) {
+  if (x == 0) return 42;
+  return sync(x-1) + 1;
+}
+
+int this(int x) {
+  if (x == 0) return 42;
+  return this(x-1) + 1;
+}
+
+int throw(int x) {
+  if (x == 0) return 42;
+  return throw(x-1) + 1;
+}
+
+int true(int x) {
+  if (x == 0) return 42;
+  return true(x-1) + 1;
+}
+
+int try(int x) {
+  if (x == 0) return 42;
+  return try(x-1) + 1;
+}
+
+int typedef(int x) {
+  if (x == 0) return 42;
+  return typedef(x-1) + 1;
+}
+
+int var(int x) {
+  if (x == 0) return 42;
+  return var(x-1) + 1;
+}
+
+int void(int x) {
+  if (x == 0) return 42;
+  return void(x-1) + 1;
+}
+
+int while(int x) {
+  if (x == 0) return 42;
+  return while(x-1) + 1;
+}
+
+int with(int x) {
+  if (x == 0) return 42;
+  return with(x-1) + 1;
+}
+
+int yield(int x) {
+  if (x == 0) return 42;
+  return yield(x-1) + 1;
+}
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
new file mode 100644
index 0000000..fffb7b5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect
@@ -0,0 +1,4646 @@
+Problems reported:
+
+parser/error_recovery/keyword_named_top_level_methods:11:5: Expected an identifier, but got 'assert'.
+int assert(int x) {
+    ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:13:10: `assert` can't be used as an expression.
+  return assert(x-1) + 1;
+         ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:26:5: Expected an identifier, but got 'break'.
+int break(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:28:10: Expected an identifier, but got 'break'.
+  return break(x-1) + 1;
+         ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:28:10: 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;
+         ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:28:10: Expected ';' after this.
+  return break(x-1) + 1;
+         ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:31:5: Expected an identifier, but got 'case'.
+int case(int x) {
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:33:10: Expected an identifier, but got 'case'.
+  return case(x-1) + 1;
+         ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:36:5: Expected an identifier, but got 'catch'.
+int catch(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:38:10: Expected an identifier, but got 'catch'.
+  return catch(x-1) + 1;
+         ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:41:5: Expected an identifier, but got 'class'.
+int class(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:43:10: Expected an identifier, but got 'class'.
+  return class(x-1) + 1;
+         ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:46:5: Expected an identifier, but got 'const'.
+int const(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:48:15: Expected an identifier, but got '('.
+  return const(x-1) + 1;
+              ^
+
+parser/error_recovery/keyword_named_top_level_methods:51:5: Expected an identifier, but got 'continue'.
+int continue(int x) {
+    ^^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:53:10: Expected an identifier, but got 'continue'.
+  return continue(x-1) + 1;
+         ^^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:53:10: 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;
+         ^^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:53:10: Expected ';' after this.
+  return continue(x-1) + 1;
+         ^^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:61:5: Expected an identifier, but got 'default'.
+int default(int x) {
+    ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:63:10: Expected an identifier, but got 'default'.
+  return default(x-1) + 1;
+         ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:71:5: Expected an identifier, but got 'do'.
+int do(int x) {
+    ^^
+
+parser/error_recovery/keyword_named_top_level_methods:73:10: Expected an identifier, but got 'do'.
+  return do(x-1) + 1;
+         ^^
+
+parser/error_recovery/keyword_named_top_level_methods:73:10: Expected ';' after this.
+  return do(x-1) + 1;
+         ^^
+
+parser/error_recovery/keyword_named_top_level_methods:74:1: Expected 'while' before this.
+}
+^
+
+parser/error_recovery/keyword_named_top_level_methods:74:1: Expected to find '('.
+}
+^
+
+parser/error_recovery/keyword_named_top_level_methods:74:1: Expected an identifier, but got '}'.
+}
+^
+
+parser/error_recovery/keyword_named_top_level_methods:74:1: Expected ';' after this.
+}
+^
+
+parser/error_recovery/keyword_named_top_level_methods:81:5: Expected an identifier, but got 'else'.
+int else(int x) {
+    ^^^^
+
+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.
+  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.
+  return else(x-1) + 1;
+         ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:83:10: Unexpected token ';'.
+  return else(x-1) + 1;
+         ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:86:5: Expected an identifier, but got 'enum'.
+int enum(int x) {
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:88:10: Expected an identifier, but got 'enum'.
+  return enum(x-1) + 1;
+         ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:96:5: Expected an identifier, but got 'extends'.
+int extends(int x) {
+    ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:98:10: Expected an identifier, but got 'extends'.
+  return extends(x-1) + 1;
+         ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:116:5: Expected an identifier, but got 'false'.
+int false(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:121:5: Expected an identifier, but got 'final'.
+int final(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:123:10: Expected an identifier, but got 'final'.
+  return final(x-1) + 1;
+         ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:123:10: 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.
+  return final(x-1) + 1;
+               ^
+
+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: Expected an identifier, but got ')'.
+  return final(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_top_level_methods:123:19: 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;
+                  ^
+
+parser/error_recovery/keyword_named_top_level_methods:123:21: '+' is not a prefix operator.
+  return final(x-1) + 1;
+                    ^
+
+parser/error_recovery/keyword_named_top_level_methods:126:5: Expected an identifier, but got 'finally'.
+int finally(int x) {
+    ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:128:10: Expected an identifier, but got 'finally'.
+  return finally(x-1) + 1;
+         ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:131:5: Expected an identifier, but got 'for'.
+int for(int x) {
+    ^^^
+
+parser/error_recovery/keyword_named_top_level_methods:133:10: Expected an identifier, but got 'for'.
+  return for(x-1) + 1;
+         ^^^
+
+parser/error_recovery/keyword_named_top_level_methods:133:10: 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;
+               ^
+
+parser/error_recovery/keyword_named_top_level_methods:133:17: Expected an identifier, but got ')'.
+  return for(x-1) + 1;
+                ^
+
+parser/error_recovery/keyword_named_top_level_methods:133:17: 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;
+                  ^
+
+parser/error_recovery/keyword_named_top_level_methods:151:5: Expected an identifier, but got 'if'.
+int if(int x) {
+    ^^
+
+parser/error_recovery/keyword_named_top_level_methods:153:10: Expected an identifier, but got 'if'.
+  return if(x-1) + 1;
+         ^^
+
+parser/error_recovery/keyword_named_top_level_methods:153:10: 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;
+                 ^
+
+parser/error_recovery/keyword_named_top_level_methods:166:5: Expected an identifier, but got 'in'.
+int in(int x) {
+    ^^
+
+parser/error_recovery/keyword_named_top_level_methods:168:10: Expected an identifier, but got 'in'.
+  return in(x-1) + 1;
+         ^^
+
+parser/error_recovery/keyword_named_top_level_methods:181:5: Expected an identifier, but got 'is'.
+int is(int x) {
+    ^^
+
+parser/error_recovery/keyword_named_top_level_methods:183:10: Expected an identifier, but got 'is'.
+  return is(x-1) + 1;
+         ^^
+
+parser/error_recovery/keyword_named_top_level_methods:183:12: Expected a type, but got '('.
+  return is(x-1) + 1;
+           ^
+
+parser/error_recovery/keyword_named_top_level_methods:183:12: Expected ';' after this.
+  return is(x-1) + 1;
+           ^
+
+parser/error_recovery/keyword_named_top_level_methods:206:5: Expected an identifier, but got 'new'.
+int new(int x) {
+    ^^^
+
+parser/error_recovery/keyword_named_top_level_methods:208:13: Expected an identifier, but got '('.
+  return new(x-1) + 1;
+            ^
+
+parser/error_recovery/keyword_named_top_level_methods:211:5: Expected an identifier, but got 'null'.
+int null(int x) {
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:251:5: Expected an identifier, but got 'rethrow'.
+int rethrow(int x) {
+    ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:253:10: Expected an identifier, but got 'rethrow'.
+  return rethrow(x-1) + 1;
+         ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:256:5: Expected an identifier, but got 'return'.
+int return(int x) {
+    ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:258:10: Unexpected token 'return'.
+  return return(x-1) + 1;
+         ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:281:5: Expected an identifier, but got 'super'.
+int super(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:286:5: Expected an identifier, but got 'switch'.
+int switch(int x) {
+    ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:288:10: Expected an identifier, but got 'switch'.
+  return switch(x-1) + 1;
+         ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:288:10: 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;
+                   ^
+
+parser/error_recovery/keyword_named_top_level_methods:288:22: '+' is not a prefix operator.
+  return switch(x-1) + 1;
+                     ^
+
+parser/error_recovery/keyword_named_top_level_methods:296:5: Expected an identifier, but got 'this'.
+int this(int x) {
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:301:5: Expected an identifier, but got 'throw'.
+int throw(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:306:5: Expected an identifier, but got 'true'.
+int true(int x) {
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:311:5: Expected an identifier, but got 'try'.
+int try(int x) {
+    ^^^
+
+parser/error_recovery/keyword_named_top_level_methods:313:10: Expected an identifier, but got 'try'.
+  return try(x-1) + 1;
+         ^^^
+
+parser/error_recovery/keyword_named_top_level_methods:313:10: 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;
+         ^^^
+
+parser/error_recovery/keyword_named_top_level_methods:313:10: A try block must be followed by an 'on', 'catch', or 'finally' clause.
+  return try(x-1) + 1;
+         ^^^
+
+parser/error_recovery/keyword_named_top_level_methods:321:5: Expected an identifier, but got 'var'.
+int var(int x) {
+    ^^^
+
+parser/error_recovery/keyword_named_top_level_methods:323:10: Expected an identifier, but got 'var'.
+  return var(x-1) + 1;
+         ^^^
+
+parser/error_recovery/keyword_named_top_level_methods:323:10: 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.
+  return var(x-1) + 1;
+             ^
+
+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: Expected an identifier, but got ')'.
+  return var(x-1) + 1;
+                ^
+
+parser/error_recovery/keyword_named_top_level_methods:323:17: 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;
+                ^
+
+parser/error_recovery/keyword_named_top_level_methods:323:19: '+' is not a prefix operator.
+  return var(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_top_level_methods:326:5: Expected an identifier, but got 'void'.
+int void(int x) {
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:328:10: Expected an identifier, but got 'void'.
+  return void(x-1) + 1;
+         ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:328:10: 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.
+  return void(x-1) + 1;
+              ^
+
+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: Expected an identifier, but got ')'.
+  return void(x-1) + 1;
+                 ^
+
+parser/error_recovery/keyword_named_top_level_methods:328:18: 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;
+                 ^
+
+parser/error_recovery/keyword_named_top_level_methods:328:20: '+' is not a prefix operator.
+  return void(x-1) + 1;
+                   ^
+
+parser/error_recovery/keyword_named_top_level_methods:331:5: Expected an identifier, but got 'while'.
+int while(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:333:10: Expected an identifier, but got 'while'.
+  return while(x-1) + 1;
+         ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:333:10: 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;
+                    ^
+
+parser/error_recovery/keyword_named_top_level_methods:336:5: Expected an identifier, but got 'with'.
+int with(int x) {
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods:338:10: Expected an identifier, but got 'with'.
+  return with(x-1) + 1;
+         ^^^^
+
+beginCompilationUnit(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(abstract)
+      handleType(int, null)
+      handleIdentifier(abstract, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(abstract, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(abstract, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(as)
+      handleType(int, null)
+      handleIdentifier(as, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(as, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(as, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(assert)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+      handleIdentifier(assert, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          beginAssert(assert, Assert.Expression)
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+            handleRecoverableError(AssertAsExpression, assert, assert)
+          endAssert(assert, Assert.Expression, (, null, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(async)
+      handleType(int, null)
+      handleIdentifier(async, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(async, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(async, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(await)
+      handleType(int, null)
+      handleIdentifier(await, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(await, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(await, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(break)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+      handleIdentifier(break, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(break)
+          handleNoArguments(break)
+          handleSend(, break)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
+        endReturnStatement(true, return, ;)
+        handleRecoverableError(BreakOutsideOfLoop, break, break)
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
+        handleBreakStatement(false, break, ;)
+        handleIdentifier(x, expression)
+        handleNoTypeArguments(-)
+        handleNoArguments(-)
+        handleSend(x, -)
+        beginBinaryExpression(-)
+        handleLiteralInt(1)
+        endBinaryExpression(-)
+        handleParenthesizedExpression(()
+        beginBinaryExpression(+)
+        handleLiteralInt(1)
+        endBinaryExpression(+)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(4, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(case)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+      handleIdentifier(case, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+          handleIdentifier(case, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(case, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(catch)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+      handleIdentifier(catch, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+          handleIdentifier(catch, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(catch, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(class)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+      handleIdentifier(class, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+          handleIdentifier(class, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(class, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(const)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+      handleIdentifier(const, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          beginConstExpression(const)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+            handleIdentifier(, constructorReference)
+            beginConstructorReference()
+              handleNoTypeArguments(()
+              handleNoConstructorReferenceContinuationAfterTypeArguments(()
+            endConstructorReference(, null, ()
+            beginArguments(()
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, -)
+              beginBinaryExpression(-)
+              handleLiteralInt(1)
+              endBinaryExpression(-)
+            endArguments(1, (, ))
+          endConstExpression(const)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(continue)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+      handleIdentifier(continue, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(continue)
+          handleNoArguments(continue)
+          handleSend(, continue)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
+        endReturnStatement(true, return, ;)
+        handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
+        handleContinueStatement(false, continue, ;)
+        handleIdentifier(x, expression)
+        handleNoTypeArguments(-)
+        handleNoArguments(-)
+        handleSend(x, -)
+        beginBinaryExpression(-)
+        handleLiteralInt(1)
+        endBinaryExpression(-)
+        handleParenthesizedExpression(()
+        beginBinaryExpression(+)
+        handleLiteralInt(1)
+        endBinaryExpression(+)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(4, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(covariant)
+      handleType(int, null)
+      handleIdentifier(covariant, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(covariant, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(covariant, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(default)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+      handleIdentifier(default, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+          handleIdentifier(default, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(default, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(deferred)
+      handleType(int, null)
+      handleIdentifier(deferred, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(deferred, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(deferred, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(do)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+      handleIdentifier(do, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(do)
+          handleNoArguments(do)
+          handleSend(, do)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], do, do)
+        endReturnStatement(true, return, ;)
+        beginDoWhileStatement(do)
+          beginDoWhileStatementBody(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+            handleParenthesizedExpression(()
+            beginBinaryExpression(+)
+            handleLiteralInt(1)
+            endBinaryExpression(+)
+            handleExpressionStatement(;)
+          endDoWhileStatementBody(;)
+          handleRecoverableError(Message[ExpectedButGot, Expected 'while' before this., null, {string: while}], }, })
+          handleRecoverableError(Message[ExpectedToken, Expected to find '('., null, {string: (}], }, })
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., null, {token: }}], }, })
+          handleIdentifier(, expression)
+          handleNoTypeArguments())
+          handleNoArguments())
+          handleSend(, ))
+          handleParenthesizedCondition(()
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+        endDoWhileStatement(do, while, ;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(dynamic)
+      handleType(int, null)
+      handleIdentifier(dynamic, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(dynamic, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(dynamic, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(else)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+      handleIdentifier(else, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(else)
+          handleNoArguments(else)
+          handleSend(, else)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+        endReturnStatement(true, return, ;)
+        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+        handleIdentifier(, expression)
+        handleNoTypeArguments(else)
+        handleNoArguments(else)
+        handleSend(, else)
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+        handleExpressionStatement(;)
+        handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], else, else)
+        handleIdentifier(x, expression)
+        handleNoTypeArguments(-)
+        handleNoArguments(-)
+        handleSend(x, -)
+        beginBinaryExpression(-)
+        handleLiteralInt(1)
+        endBinaryExpression(-)
+        handleParenthesizedExpression(()
+        beginBinaryExpression(+)
+        handleLiteralInt(1)
+        endBinaryExpression(+)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(4, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(enum)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+      handleIdentifier(enum, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+          handleIdentifier(enum, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(enum, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(export)
+      handleType(int, null)
+      handleIdentifier(export, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(export, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(export, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(extends)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+      handleIdentifier(extends, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+          handleIdentifier(extends, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(extends, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(extension)
+      handleType(int, null)
+      handleIdentifier(extension, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(extension, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(extension, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(external)
+      handleType(int, null)
+      handleIdentifier(external, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(external, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(external, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(factory)
+      handleType(int, null)
+      handleIdentifier(factory, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(factory, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(factory, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(false)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+      handleIdentifier(false, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleLiteralBool(false)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend((, ))
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(final)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+      handleIdentifier(final, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(final)
+          handleNoArguments(final)
+          handleSend(, final)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
+        endReturnStatement(true, return, ;)
+        beginMetadataStar(final)
+        endMetadataStar(0)
+        handleNoType(final)
+        beginVariablesDeclaration((, null, final)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+          handleIdentifier(, localVariableDeclaration)
+          beginInitializedIdentifier()
+            handleNoVariableInitializer(x)
+          endInitializedIdentifier()
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(x, expression)
+        handleNoTypeArguments(-)
+        handleNoArguments(-)
+        handleSend(x, -)
+        beginBinaryExpression(-)
+        handleLiteralInt(1)
+        endBinaryExpression(-)
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+        handleExpressionStatement(;)
+        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+        handleIdentifier(, expression)
+        handleNoTypeArguments())
+        handleNoArguments())
+        handleSend(, ))
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+        handleExpressionStatement(;)
+        handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
+        handleRecoverableError(UnsupportedPrefixPlus, +, +)
+        handleIdentifier(, expression)
+        handleNoTypeArguments(+)
+        handleNoArguments(+)
+        handleSend(, +)
+        beginBinaryExpression(+)
+        handleLiteralInt(1)
+        endBinaryExpression(+)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(6, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(finally)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+      handleIdentifier(finally, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+          handleIdentifier(finally, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(finally, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(for)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+      handleIdentifier(for, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(for)
+          handleNoArguments(for)
+          handleSend(, for)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], for, for)
+        endReturnStatement(true, return, ;)
+        beginForStatement(for)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(-)
+          handleNoArguments(-)
+          handleSend(x, -)
+          beginBinaryExpression(-)
+          handleLiteralInt(1)
+          endBinaryExpression(-)
+          handleForInitializerExpressionStatement(1, false)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+          handleIdentifier(, expression)
+          handleNoTypeArguments())
+          handleNoArguments())
+          handleSend(, ))
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+          handleExpressionStatement(;)
+          handleForLoopParts(for, (, ;, 0)
+          beginForStatementBody(+)
+            handleRecoverableError(UnsupportedPrefixPlus, +, +)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(+)
+            handleNoArguments(+)
+            handleSend(, +)
+            beginBinaryExpression(+)
+            handleLiteralInt(1)
+            endBinaryExpression(+)
+            handleExpressionStatement(;)
+          endForStatementBody(})
+        endForStatement(})
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(Function)
+      handleType(int, null)
+      handleIdentifier(Function, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(Function, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(Function, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(get)
+      handleType(int, null)
+      handleIdentifier(get, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(get, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(get, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(hide)
+      handleType(int, null)
+      handleIdentifier(hide, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(hide, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(hide, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(if)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+      handleIdentifier(if, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(if)
+          handleNoArguments(if)
+          handleSend(, if)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], if, if)
+        endReturnStatement(true, return, ;)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(-)
+          handleNoArguments(-)
+          handleSend(x, -)
+          beginBinaryExpression(-)
+          handleLiteralInt(1)
+          endBinaryExpression(-)
+          handleParenthesizedCondition(()
+          beginThenStatement(+)
+            handleRecoverableError(UnsupportedPrefixPlus, +, +)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(+)
+            handleNoArguments(+)
+            handleSend(, +)
+            beginBinaryExpression(+)
+            handleLiteralInt(1)
+            endBinaryExpression(+)
+            handleExpressionStatement(;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(int, null)
+      handleIdentifier(implements, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(implements, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(implements, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(import)
+      handleType(int, null)
+      handleIdentifier(import, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(import, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(import, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(in)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+      handleIdentifier(in, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+          handleIdentifier(in, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(in, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(inout)
+      handleType(int, null)
+      handleIdentifier(inout, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(inout, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(inout, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(interface)
+      handleType(int, null)
+      handleIdentifier(interface, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(interface, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(interface, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(is)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+      handleIdentifier(is, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(is)
+          handleNoArguments(is)
+          handleSend(, is)
+          beginIsOperatorType(is)
+            handleRecoverableError(Message[ExpectedType, Expected a type, but got '('., null, {token: (}], (, ()
+            handleIdentifier(, typeReference)
+            handleNoTypeArguments(()
+            handleType(, null)
+          endIsOperatorType(is)
+          handleIsOperator(is, null)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
+        endReturnStatement(true, return, ;)
+        handleIdentifier(x, expression)
+        handleNoTypeArguments(-)
+        handleNoArguments(-)
+        handleSend(x, -)
+        beginBinaryExpression(-)
+        handleLiteralInt(1)
+        endBinaryExpression(-)
+        handleParenthesizedExpression(()
+        beginBinaryExpression(+)
+        handleLiteralInt(1)
+        endBinaryExpression(+)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(late)
+      handleType(int, null)
+      handleIdentifier(late, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(late, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(late, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(library)
+      handleType(int, null)
+      handleIdentifier(library, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(library, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(library, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(mixin)
+      handleType(int, null)
+      handleIdentifier(mixin, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(mixin, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(mixin, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(native)
+      handleType(int, null)
+      handleIdentifier(native, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(native, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(native, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(new)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+      handleIdentifier(new, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          beginNewExpression(new)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+            handleIdentifier(, constructorReference)
+            beginConstructorReference()
+              handleNoTypeArguments(()
+              handleNoConstructorReferenceContinuationAfterTypeArguments(()
+            endConstructorReference(, null, ()
+            beginArguments(()
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, -)
+              beginBinaryExpression(-)
+              handleLiteralInt(1)
+              endBinaryExpression(-)
+            endArguments(1, (, ))
+          endNewExpression(new)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(null)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+      handleIdentifier(null, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleLiteralNull(null)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend((, ))
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(of)
+      handleType(int, null)
+      handleIdentifier(of, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(of, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(of, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(on)
+      handleType(int, null)
+      handleIdentifier(on, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(on, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(on, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(operator)
+      handleType(int, null)
+      handleIdentifier(operator, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(operator, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(operator, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(out)
+      handleType(int, null)
+      handleIdentifier(out, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(out, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(out, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(part)
+      handleType(int, null)
+      handleIdentifier(part, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(part, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(part, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(patch)
+      handleType(int, null)
+      handleIdentifier(patch, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(patch, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(patch, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(required)
+      handleType(int, null)
+      handleIdentifier(required, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(required, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(required, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(rethrow)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+      handleIdentifier(rethrow, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+          handleIdentifier(rethrow, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(rethrow, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(return)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+      handleIdentifier(return, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[UnexpectedToken, Unexpected token 'return'., null, {token: return}], return, return)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(-)
+          handleNoArguments(-)
+          handleSend(x, -)
+          beginBinaryExpression(-)
+          handleLiteralInt(1)
+          endBinaryExpression(-)
+          handleParenthesizedExpression(()
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(set)
+      handleType(int, null)
+      handleIdentifier(set, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(set, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(set, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(show)
+      handleType(int, null)
+      handleIdentifier(show, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(show, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(show, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(source)
+      handleType(int, null)
+      handleIdentifier(source, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(source, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(source, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(static)
+      handleType(int, null)
+      handleIdentifier(static, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(static, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(static, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(super)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+      handleIdentifier(super, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleSuperExpression(super, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(super, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(switch)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+      handleIdentifier(switch, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(switch)
+          handleNoArguments(switch)
+          handleSend(, switch)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], switch, switch)
+        endReturnStatement(true, return, ;)
+        beginSwitchStatement(switch)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(-)
+          handleNoArguments(-)
+          handleSend(x, -)
+          beginBinaryExpression(-)
+          handleLiteralInt(1)
+          endBinaryExpression(-)
+          handleParenthesizedCondition(()
+          handleRecoverableError(Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}], ), ))
+          beginSwitchBlock({)
+          endSwitchBlock(0, {, })
+        endSwitchStatement(switch, })
+        handleRecoverableError(UnsupportedPrefixPlus, +, +)
+        handleIdentifier(, expression)
+        handleNoTypeArguments(+)
+        handleNoArguments(+)
+        handleSend(, +)
+        beginBinaryExpression(+)
+        handleLiteralInt(1)
+        endBinaryExpression(+)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(4, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(sync)
+      handleType(int, null)
+      handleIdentifier(sync, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(sync, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(sync, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(this)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+      handleIdentifier(this, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleThisExpression(this, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(this, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(throw)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+      handleIdentifier(throw, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(-)
+          handleNoArguments(-)
+          handleSend(x, -)
+          beginBinaryExpression(-)
+          handleLiteralInt(1)
+          endBinaryExpression(-)
+          handleParenthesizedExpression(()
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+          handleThrowExpression(throw, ;)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(true)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+      handleIdentifier(true, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleLiteralBool(true)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend((, ))
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(try)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+      handleIdentifier(try, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(try)
+          handleNoArguments(try)
+          handleSend(, try)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
+        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)
+          beginBlock({, BlockKind(try statement))
+          endBlock(0, {, }, BlockKind(try statement))
+          handleRecoverableError(OnlyTry, try, try)
+        endTryStatement(0, try, null)
+        handleIdentifier(x, expression)
+        handleNoTypeArguments(-)
+        handleNoArguments(-)
+        handleSend(x, -)
+        beginBinaryExpression(-)
+        handleLiteralInt(1)
+        endBinaryExpression(-)
+        handleParenthesizedExpression(()
+        beginBinaryExpression(+)
+        handleLiteralInt(1)
+        endBinaryExpression(+)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(4, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(typedef)
+      handleType(int, null)
+      handleIdentifier(typedef, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(typedef, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(typedef, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(var)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+      handleIdentifier(var, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(var)
+          handleNoArguments(var)
+          handleSend(, var)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
+        endReturnStatement(true, return, ;)
+        beginMetadataStar(var)
+        endMetadataStar(0)
+        handleNoType(var)
+        beginVariablesDeclaration((, null, var)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+          handleIdentifier(, localVariableDeclaration)
+          beginInitializedIdentifier()
+            handleNoVariableInitializer(x)
+          endInitializedIdentifier()
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(x, expression)
+        handleNoTypeArguments(-)
+        handleNoArguments(-)
+        handleSend(x, -)
+        beginBinaryExpression(-)
+        handleLiteralInt(1)
+        endBinaryExpression(-)
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+        handleExpressionStatement(;)
+        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+        handleIdentifier(, expression)
+        handleNoTypeArguments())
+        handleNoArguments())
+        handleSend(, ))
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+        handleExpressionStatement(;)
+        handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
+        handleRecoverableError(UnsupportedPrefixPlus, +, +)
+        handleIdentifier(, expression)
+        handleNoTypeArguments(+)
+        handleNoArguments(+)
+        handleSend(, +)
+        beginBinaryExpression(+)
+        handleLiteralInt(1)
+        endBinaryExpression(+)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(6, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(void)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+      handleIdentifier(void, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(void)
+          handleNoArguments(void)
+          handleSend(, void)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+        endReturnStatement(true, return, ;)
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        handleVoidKeyword(void)
+        beginVariablesDeclaration((, null, null)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+          handleIdentifier(, localVariableDeclaration)
+          beginInitializedIdentifier()
+            handleNoVariableInitializer(x)
+          endInitializedIdentifier()
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(x, expression)
+        handleNoTypeArguments(-)
+        handleNoArguments(-)
+        handleSend(x, -)
+        beginBinaryExpression(-)
+        handleLiteralInt(1)
+        endBinaryExpression(-)
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+        handleExpressionStatement(;)
+        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+        handleIdentifier(, expression)
+        handleNoTypeArguments())
+        handleNoArguments())
+        handleSend(, ))
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+        handleExpressionStatement(;)
+        handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
+        handleRecoverableError(UnsupportedPrefixPlus, +, +)
+        handleIdentifier(, expression)
+        handleNoTypeArguments(+)
+        handleNoArguments(+)
+        handleSend(, +)
+        beginBinaryExpression(+)
+        handleLiteralInt(1)
+        endBinaryExpression(+)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(6, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(while)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+      handleIdentifier(while, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(while)
+          handleNoArguments(while)
+          handleSend(, while)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
+        endReturnStatement(true, return, ;)
+        beginWhileStatement(while)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(-)
+          handleNoArguments(-)
+          handleSend(x, -)
+          beginBinaryExpression(-)
+          handleLiteralInt(1)
+          endBinaryExpression(-)
+          handleParenthesizedCondition(()
+          beginWhileStatementBody(+)
+            handleRecoverableError(UnsupportedPrefixPlus, +, +)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(+)
+            handleNoArguments(+)
+            handleSend(, +)
+            beginBinaryExpression(+)
+            handleLiteralInt(1)
+            endBinaryExpression(+)
+            handleExpressionStatement(;)
+          endWhileStatementBody(})
+        endWhileStatement(while, })
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(with)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+      handleIdentifier(with, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+          handleIdentifier(with, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(with, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(yield)
+      handleType(int, null)
+      handleIdentifier(yield, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, ==)
+          beginBinaryExpression(==)
+          handleLiteralInt(0)
+          endBinaryExpression(==)
+          handleParenthesizedCondition(()
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(;)
+        endIfStatement(if, null)
+        beginReturnStatement(return)
+          handleIdentifier(yield, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, -)
+            beginBinaryExpression(-)
+            handleLiteralInt(1)
+            endBinaryExpression(-)
+          endArguments(1, (, ))
+          handleSend(yield, +)
+          beginBinaryExpression(+)
+          handleLiteralInt(1)
+          endBinaryExpression(+)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(69, )
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
new file mode 100644
index 0000000..c54e05b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect
@@ -0,0 +1,10229 @@
+parseUnit(int)
+  skipErrorTokens(int)
+  listener: beginCompilationUnit(int)
+  syntheticPreviousToken(int)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(, null, , Instance of 'SimpleType', null, abstract, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(abstract)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(abstract, topLevelFunctionDeclaration)
+        parseMethodTypeVar(abstract)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(abstract, abstract, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(abstract, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(abstract, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(abstract)
+                              parseArguments(abstract)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(abstract, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, as, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(as)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(as, topLevelFunctionDeclaration)
+        parseMethodTypeVar(as)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(as, as, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(as, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(as, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(as)
+                              parseArguments(as)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(as, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(assert)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, assert, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(assert)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+          listener: handleIdentifier(assert, topLevelFunctionDeclaration)
+        parseMethodTypeVar(assert)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(assert, assert, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(assert, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseAssert(return, Assert.Expression)
+                          listener: beginAssert(assert, Assert.Expression)
+                          parseExpression(()
+                            parsePrecedenceExpression((, 1, true)
+                              parseUnaryExpression((, true)
+                                parsePrimary((, expression)
+                                  parseSendOrFunctionLiteral((, expression)
+                                    parseSend((, expression)
+                                      ensureIdentifier((, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, -)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true)
+                                parseUnaryExpression(-, true)
+                                  parsePrimary(-, expression)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-)
+                          reportRecoverableError(assert, AssertAsExpression)
+                            listener: handleRecoverableError(AssertAsExpression, assert, assert)
+                          listener: endAssert(assert, Assert.Expression, (, null, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, async, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(async)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(async, topLevelFunctionDeclaration)
+        parseMethodTypeVar(async)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(async, async, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(async, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(async, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(async)
+                              parseArguments(async)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(async, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, await, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(await)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(await, topLevelFunctionDeclaration)
+        parseMethodTypeVar(await)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(await, await, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(await, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      inPlainSync()
+                      looksLikeAwaitExpression(return)
+                        looksLikeExpression(await)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(await, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(await)
+                              parseArguments(await)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(await, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(break)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, break, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(break)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+          listener: handleIdentifier(break, topLevelFunctionDeclaration)
+        parseMethodTypeVar(break)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(break, break, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(break, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(break)
+                          parseArgumentsOpt()
+                            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)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, break)
+          parseStatement(;)
+            parseStatementX(;)
+              parseBreakStatement(;)
+                isBreakAllowed()
+                reportRecoverableError(break, BreakOutsideOfLoop)
+                  listener: handleRecoverableError(BreakOutsideOfLoop, break, break)
+                ensureSemicolon(break)
+                  reportRecoverableError(break, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
+                  rewriter()
+                listener: handleBreakStatement(false, break, ;)
+          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)
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(x, expression)
+                                                listener: handleNoTypeArguments(-)
+                                                parseArgumentsOpt(x)
+                                                  listener: handleNoArguments(-)
+                                                listener: handleSend(x, -)
+                                        listener: beginBinaryExpression(-)
+                                        parsePrecedenceExpression(-, 14, true)
+                                          parseUnaryExpression(-, true)
+                                            parsePrimary(-, expression)
+                                              parseLiteralInt(-)
+                                                listener: handleLiteralInt(1)
+                                        listener: endBinaryExpression(-)
+                                    ensureCloseParen(1, ()
+                                listener: handleParenthesizedExpression(()
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true)
+                          parseUnaryExpression(+, true)
+                            parsePrimary(+, expression)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(4, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(case)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, case, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(case)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+          listener: handleIdentifier(case, topLevelFunctionDeclaration)
+        parseMethodTypeVar(case)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(case, case, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(case, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+                            listener: handleIdentifier(case, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(case)
+                            parseArguments(case)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                parseExpression(()
+                                  parsePrecedenceExpression((, 1, true)
+                                    parseUnaryExpression((, true)
+                                      parsePrimary((, expression)
+                                        parseSendOrFunctionLiteral((, expression)
+                                          parseSend((, expression)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, -)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true)
+                                      parseUnaryExpression(-, true)
+                                        parsePrimary(-, expression)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(case, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(catch)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, catch, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(catch)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+          listener: handleIdentifier(catch, topLevelFunctionDeclaration)
+        parseMethodTypeVar(catch)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(catch, catch, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(catch, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+                            listener: handleIdentifier(catch, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(catch)
+                            parseArguments(catch)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                parseExpression(()
+                                  parsePrecedenceExpression((, 1, true)
+                                    parseUnaryExpression((, true)
+                                      parsePrimary((, expression)
+                                        parseSendOrFunctionLiteral((, expression)
+                                          parseSend((, expression)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, -)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true)
+                                      parseUnaryExpression(-, true)
+                                        parsePrimary(-, expression)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(catch, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(class)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, class, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(class)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+          listener: handleIdentifier(class, topLevelFunctionDeclaration)
+        parseMethodTypeVar(class)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(class, class, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(class, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+                            listener: handleIdentifier(class, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(class)
+                            parseArguments(class)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                parseExpression(()
+                                  parsePrecedenceExpression((, 1, true)
+                                    parseUnaryExpression((, true)
+                                      parsePrimary((, expression)
+                                        parseSendOrFunctionLiteral((, expression)
+                                          parseSend((, expression)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, -)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true)
+                                      parseUnaryExpression(-, true)
+                                        parsePrimary(-, expression)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(class, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(const)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, const, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(const)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+          listener: handleIdentifier(const, topLevelFunctionDeclaration)
+        parseMethodTypeVar(const)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(const, const, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(const, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        parseConstExpression(return)
+                          listener: beginConstExpression(const)
+                          parseConstructorReference(const, null)
+                            ensureIdentifier(const, constructorReference)
+                              insertSyntheticIdentifier(const, constructorReference, message: Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], messageOnToken: null)
+                                reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
+                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                                rewriter()
+                              listener: handleIdentifier(, constructorReference)
+                            listener: beginConstructorReference()
+                            parseQualifiedRestOpt(, constructorReferenceContinuation)
+                            listener: handleNoTypeArguments(()
+                            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
+                            listener: endConstructorReference(, null, ()
+                          parseConstructorInvocationArguments()
+                            parseArgumentsRest(()
+                              listener: beginArguments(()
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true)
+                                  parseUnaryExpression((, true)
+                                    parsePrimary((, expression)
+                                      parseSendOrFunctionLiteral((, expression)
+                                        parseSend((, expression)
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(x, expression)
+                                          listener: handleNoTypeArguments(-)
+                                          parseArgumentsOpt(x)
+                                            listener: handleNoArguments(-)
+                                          listener: handleSend(x, -)
+                                  listener: beginBinaryExpression(-)
+                                  parsePrecedenceExpression(-, 14, true)
+                                    parseUnaryExpression(-, true)
+                                      parsePrimary(-, expression)
+                                        parseLiteralInt(-)
+                                          listener: handleLiteralInt(1)
+                                  listener: endBinaryExpression(-)
+                              listener: endArguments(1, (, ))
+                          listener: endConstExpression(const)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(continue)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, continue, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(continue)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+          listener: handleIdentifier(continue, topLevelFunctionDeclaration)
+        parseMethodTypeVar(continue)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(continue, continue, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(continue, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(continue)
+                          parseArgumentsOpt()
+                            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)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, continue)
+          parseStatement(;)
+            parseStatementX(;)
+              parseContinueStatement(;)
+                isContinueAllowed()
+                reportRecoverableError(continue, ContinueOutsideOfLoop)
+                  listener: handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
+                ensureSemicolon(continue)
+                  reportRecoverableError(continue, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
+                  rewriter()
+                listener: handleContinueStatement(false, continue, ;)
+          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)
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(x, expression)
+                                                listener: handleNoTypeArguments(-)
+                                                parseArgumentsOpt(x)
+                                                  listener: handleNoArguments(-)
+                                                listener: handleSend(x, -)
+                                        listener: beginBinaryExpression(-)
+                                        parsePrecedenceExpression(-, 14, true)
+                                          parseUnaryExpression(-, true)
+                                            parsePrimary(-, expression)
+                                              parseLiteralInt(-)
+                                                listener: handleLiteralInt(1)
+                                        listener: endBinaryExpression(-)
+                                    ensureCloseParen(1, ()
+                                listener: handleParenthesizedExpression(()
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true)
+                          parseUnaryExpression(+, true)
+                            parsePrimary(+, expression)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(4, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, covariant, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(covariant)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(covariant, topLevelFunctionDeclaration)
+        parseMethodTypeVar(covariant)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(covariant, covariant, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(covariant, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(covariant, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(covariant)
+                              parseArguments(covariant)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(covariant, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(default)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, default, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(default)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+          listener: handleIdentifier(default, topLevelFunctionDeclaration)
+        parseMethodTypeVar(default)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(default, default, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(default, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+                            listener: handleIdentifier(default, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(default)
+                            parseArguments(default)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                parseExpression(()
+                                  parsePrecedenceExpression((, 1, true)
+                                    parseUnaryExpression((, true)
+                                      parsePrimary((, expression)
+                                        parseSendOrFunctionLiteral((, expression)
+                                          parseSend((, expression)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, -)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true)
+                                      parseUnaryExpression(-, true)
+                                        parsePrimary(-, expression)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(default, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, deferred, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(deferred)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(deferred, topLevelFunctionDeclaration)
+        parseMethodTypeVar(deferred)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(deferred, deferred, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(deferred, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(deferred, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(deferred)
+                              parseArguments(deferred)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(deferred, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(do)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, do, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(do)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+          listener: handleIdentifier(do, topLevelFunctionDeclaration)
+        parseMethodTypeVar(do)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(do, do, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(do, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(do)
+                          parseArgumentsOpt()
+                            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)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, do)
+          parseStatement(;)
+            parseStatementX(;)
+              parseDoWhileStatement(;)
+                listener: beginDoWhileStatement(do)
+                listener: beginDoWhileStatementBody(()
+                parseStatement(do)
+                  parseStatementX(do)
+                    parseExpressionStatementOrDeclaration(do, false)
+                      parseExpressionStatementOrDeclarationAfterModifiers(do, do, null, null, null, false)
+                        looksLikeLocalFunction(()
+                        parseExpressionStatement(do)
+                          parseExpression(do)
+                            parsePrecedenceExpression(do, 1, true)
+                              parseUnaryExpression(do, true)
+                                parsePrimary(do, expression)
+                                  parseParenthesizedExpressionOrFunctionLiteral(do)
+                                    parseParenthesizedExpression(do)
+                                      parseExpressionInParenthesis(do)
+                                        parseExpressionInParenthesisRest(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, -)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true)
+                                                parseUnaryExpression(-, true)
+                                                  parsePrimary(-, expression)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-)
+                                          ensureCloseParen(1, ()
+                                      listener: handleParenthesizedExpression(()
+                              listener: beginBinaryExpression(+)
+                              parsePrecedenceExpression(+, 14, true)
+                                parseUnaryExpression(+, true)
+                                  parsePrimary(+, expression)
+                                    parseLiteralInt(+)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(+)
+                          ensureSemicolon(1)
+                          listener: handleExpressionStatement(;)
+                listener: endDoWhileStatementBody(;)
+                reportRecoverableError(}, Message[ExpectedButGot, Expected 'while' before this., null, {string: while}])
+                  listener: handleRecoverableError(Message[ExpectedButGot, Expected 'while' before this., null, {string: while}], }, })
+                rewriter()
+                ensureParenthesizedCondition(while)
+                  reportRecoverableError(}, Message[ExpectedToken, Expected to find '('., null, {string: (}])
+                    listener: handleRecoverableError(Message[ExpectedToken, Expected to find '('., null, {string: (}], }, })
+                  rewriter()
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSend((, expression)
+                              ensureIdentifier((, expression)
+                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., null, {token: }}], }, })
+                                rewriter()
+                                listener: handleIdentifier(, expression)
+                              listener: handleNoTypeArguments())
+                              parseArgumentsOpt()
+                                listener: handleNoArguments())
+                              listener: handleSend(, ))
+                    ensureCloseParen(, ()
+                  listener: handleParenthesizedCondition(()
+                ensureSemicolon())
+                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+                  rewriter()
+                listener: endDoWhileStatement(do, while, ;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, dynamic, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(dynamic)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(dynamic, topLevelFunctionDeclaration)
+        parseMethodTypeVar(dynamic)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(dynamic, dynamic, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(dynamic, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(dynamic, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(dynamic)
+                              parseArguments(dynamic)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(dynamic, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(else)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, else, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(else)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+          listener: handleIdentifier(else, topLevelFunctionDeclaration)
+        parseMethodTypeVar(else)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(else, else, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(else, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(else)
+                          parseArgumentsOpt()
+                            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)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, else)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(else)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            inPlainSync()
+                            parseSend(;, expression)
+                              ensureIdentifier(;, expression)
+                                reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+                                rewriter()
+                                listener: handleIdentifier(, expression)
+                              listener: handleNoTypeArguments(else)
+                              parseArgumentsOpt()
+                                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)
+                      rewriter()
+                    listener: handleExpressionStatement(;)
+          reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
+            listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], else, else)
+          notEofOrValue(}, ()
+          parseStatement(else)
+            parseStatementX(else)
+              parseExpressionStatementOrDeclaration(else, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(else, else, null, null, null, false)
+                  looksLikeLocalFunction(()
+                  parseExpressionStatement(else)
+                    parseExpression(else)
+                      parsePrecedenceExpression(else, 1, true)
+                        parseUnaryExpression(else, true)
+                          parsePrimary(else, expression)
+                            parseParenthesizedExpressionOrFunctionLiteral(else)
+                              parseParenthesizedExpression(else)
+                                parseExpressionInParenthesis(else)
+                                  parseExpressionInParenthesisRest(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              parseSend((, expression)
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(x, expression)
+                                                listener: handleNoTypeArguments(-)
+                                                parseArgumentsOpt(x)
+                                                  listener: handleNoArguments(-)
+                                                listener: handleSend(x, -)
+                                        listener: beginBinaryExpression(-)
+                                        parsePrecedenceExpression(-, 14, true)
+                                          parseUnaryExpression(-, true)
+                                            parsePrimary(-, expression)
+                                              parseLiteralInt(-)
+                                                listener: handleLiteralInt(1)
+                                        listener: endBinaryExpression(-)
+                                    ensureCloseParen(1, ()
+                                listener: handleParenthesizedExpression(()
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true)
+                          parseUnaryExpression(+, true)
+                            parsePrimary(+, expression)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(4, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(enum)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, enum, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(enum)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+          listener: handleIdentifier(enum, topLevelFunctionDeclaration)
+        parseMethodTypeVar(enum)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(enum, enum, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(enum, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+                            listener: handleIdentifier(enum, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(enum)
+                            parseArguments(enum)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                parseExpression(()
+                                  parsePrecedenceExpression((, 1, true)
+                                    parseUnaryExpression((, true)
+                                      parsePrimary((, expression)
+                                        parseSendOrFunctionLiteral((, expression)
+                                          parseSend((, expression)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, -)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true)
+                                      parseUnaryExpression(-, true)
+                                        parsePrimary(-, expression)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(enum, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, export, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(export)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(export, topLevelFunctionDeclaration)
+        parseMethodTypeVar(export)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(export, export, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(export, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(export, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(export)
+                              parseArguments(export)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(export, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(extends)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, extends, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(extends)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+          listener: handleIdentifier(extends, topLevelFunctionDeclaration)
+        parseMethodTypeVar(extends)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(extends, extends, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(extends, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+                            listener: handleIdentifier(extends, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(extends)
+                            parseArguments(extends)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                parseExpression(()
+                                  parsePrecedenceExpression((, 1, true)
+                                    parseUnaryExpression((, true)
+                                      parsePrimary((, expression)
+                                        parseSendOrFunctionLiteral((, expression)
+                                          parseSend((, expression)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, -)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true)
+                                      parseUnaryExpression(-, true)
+                                        parsePrimary(-, expression)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(extends, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, extension, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(extension)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(extension, topLevelFunctionDeclaration)
+        parseMethodTypeVar(extension)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(extension, extension, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(extension, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(extension, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(extension)
+                              parseArguments(extension)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(extension, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, external, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(external)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(external, topLevelFunctionDeclaration)
+        parseMethodTypeVar(external)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(external, external, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(external, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(external, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(external)
+                              parseArguments(external)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(external, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, factory, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(factory)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(factory, topLevelFunctionDeclaration)
+        parseMethodTypeVar(factory)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(factory, factory, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(factory, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(factory, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(factory)
+                              parseArguments(factory)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(factory, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(false)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, false, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(false)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+          listener: handleIdentifier(false, topLevelFunctionDeclaration)
+        parseMethodTypeVar(false)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(false, false, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(false, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        parseLiteralBool(return)
+                          listener: handleLiteralBool(false)
+                    parseArgumentOrIndexStar(false, Instance of 'NoTypeParamOrArg', false)
+                      listener: handleNoTypeArguments(()
+                      parseArguments(false)
+                        parseArgumentsRest(()
+                          listener: beginArguments(()
+                          parseExpression(()
+                            parsePrecedenceExpression((, 1, true)
+                              parseUnaryExpression((, true)
+                                parsePrimary((, expression)
+                                  parseSendOrFunctionLiteral((, expression)
+                                    parseSend((, expression)
+                                      ensureIdentifier((, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, -)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true)
+                                parseUnaryExpression(-, true)
+                                  parsePrimary(-, expression)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-)
+                          listener: endArguments(1, (, ))
+                      listener: handleSend((, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(final)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, final, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(final)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+          listener: handleIdentifier(final, topLevelFunctionDeclaration)
+        parseMethodTypeVar(final)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(final, final, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(final, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(final)
+                          parseArgumentsOpt()
+                            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)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, final)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(final, ;, null, final, null, false)
+                looksLikeLocalFunction(()
+                listener: beginMetadataStar(final)
+                listener: endMetadataStar(0)
+                listener: handleNoType(final)
+                listener: beginVariablesDeclaration((, null, final)
+                parseVariablesDeclarationRest(final, true)
+                  parseOptionallyInitializedIdentifier(final)
+                    ensureIdentifier(final, localVariableDeclaration)
+                      reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
+                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                      rewriter()
+                      listener: handleIdentifier(, localVariableDeclaration)
+                    listener: beginInitializedIdentifier()
+                    parseVariableInitializerOpt()
+                      listener: handleNoVariableInitializer(x)
+                    listener: endInitializedIdentifier()
+                  ensureSemicolon()
+                    reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, x)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(x)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            parseSend(;, expression)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(x, expression)
+                              listener: handleNoTypeArguments(-)
+                              parseArgumentsOpt(x)
+                                listener: handleNoArguments(-)
+                              listener: handleSend(x, -)
+                      listener: beginBinaryExpression(-)
+                      parsePrecedenceExpression(-, 14, true)
+                        parseUnaryExpression(-, true)
+                          parsePrimary(-, expression)
+                            parseLiteralInt(-)
+                              listener: handleLiteralInt(1)
+                      listener: endBinaryExpression(-)
+                  ensureSemicolon(1)
+                    reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+                    rewriter()
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, ))
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction())
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseSend(;, expression)
+                              ensureIdentifier(;, expression)
+                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+                                rewriter()
+                                listener: handleIdentifier(, expression)
+                              listener: handleNoTypeArguments())
+                              parseArgumentsOpt()
+                                listener: handleNoArguments())
+                              listener: handleSend(, ))
+                    ensureSemicolon()
+                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                      rewriter()
+                    listener: handleExpressionStatement(;)
+          reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
+            listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
+          notEofOrValue(}, +)
+          parseStatement())
+            parseStatementX())
+              parseExpressionStatementOrDeclaration(), false)
+                parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
+                  looksLikeLocalFunction(+)
+                  parseExpressionStatement())
+                    parseExpression())
+                      parsePrecedenceExpression(), 1, true)
+                        parseUnaryExpression(), true)
+                          rewriteAndRecover(), UnsupportedPrefixPlus, )
+                            reportRecoverableError(+, UnsupportedPrefixPlus)
+                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                            rewriter()
+                          parsePrimary(), expression)
+                            parseSendOrFunctionLiteral(), expression)
+                              parseSend(), expression)
+                                ensureIdentifier(), expression)
+                                  listener: handleIdentifier(, expression)
+                                listener: handleNoTypeArguments(+)
+                                parseArgumentsOpt()
+                                  listener: handleNoArguments(+)
+                                listener: handleSend(, +)
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true)
+                          parseUnaryExpression(+, true)
+                            parsePrimary(+, expression)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(6, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(finally)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, finally, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(finally)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+          listener: handleIdentifier(finally, topLevelFunctionDeclaration)
+        parseMethodTypeVar(finally)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(finally, finally, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(finally, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+                            listener: handleIdentifier(finally, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(finally)
+                            parseArguments(finally)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                parseExpression(()
+                                  parsePrecedenceExpression((, 1, true)
+                                    parseUnaryExpression((, true)
+                                      parsePrimary((, expression)
+                                        parseSendOrFunctionLiteral((, expression)
+                                          parseSend((, expression)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, -)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true)
+                                      parseUnaryExpression(-, true)
+                                        parsePrimary(-, expression)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(finally, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(for)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, for, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(for)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+          listener: handleIdentifier(for, topLevelFunctionDeclaration)
+        parseMethodTypeVar(for)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(for, for, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(for, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(for)
+                          parseArgumentsOpt()
+                            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)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, for)
+          parseStatement(;)
+            parseStatementX(;)
+              parseForStatement(;, null)
+                listener: beginForStatement(for)
+                parseForLoopPartsStart(null, for)
+                  parseExpressionStatementOrDeclaration((, true)
+                    parseExpressionStatementOrDeclarationAfterModifiers((, (, null, null, null, true)
+                parseForLoopPartsMid((, null, for)
+                  parseExpression(()
+                    parsePrecedenceExpression((, 1, true)
+                      parseUnaryExpression((, true)
+                        parsePrimary((, expression)
+                          parseSendOrFunctionLiteral((, expression)
+                            parseSend((, expression)
+                              ensureIdentifier((, expression)
+                                listener: handleIdentifier(x, expression)
+                              listener: handleNoTypeArguments(-)
+                              parseArgumentsOpt(x)
+                                listener: handleNoArguments(-)
+                              listener: handleSend(x, -)
+                      listener: beginBinaryExpression(-)
+                      parsePrecedenceExpression(-, 14, true)
+                        parseUnaryExpression(-, true)
+                          parsePrimary(-, expression)
+                            parseLiteralInt(-)
+                              listener: handleLiteralInt(1)
+                      listener: endBinaryExpression(-)
+                  listener: handleForInitializerExpressionStatement(1, false)
+                parseForRest(null, 1, for)
+                  parseForLoopPartsRest(1, for, null)
+                    ensureSemicolon(1)
+                      reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+                      rewriter()
+                    parseExpressionStatement(;)
+                      parseExpression(;)
+                        parsePrecedenceExpression(;, 1, true)
+                          parseUnaryExpression(;, true)
+                            parsePrimary(;, expression)
+                              parseSend(;, expression)
+                                ensureIdentifier(;, expression)
+                                  reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+                                  rewriter()
+                                  listener: handleIdentifier(, expression)
+                                listener: handleNoTypeArguments())
+                                parseArgumentsOpt()
+                                  listener: handleNoArguments())
+                                listener: handleSend(, ))
+                      ensureSemicolon()
+                        reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                          listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                        rewriter()
+                      listener: handleExpressionStatement(;)
+                    listener: handleForLoopParts(for, (, ;, 0)
+                  listener: beginForStatementBody(+)
+                  parseStatement())
+                    parseStatementX())
+                      parseExpressionStatementOrDeclaration(), false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
+                          looksLikeLocalFunction(+)
+                          parseExpressionStatement())
+                            parseExpression())
+                              parsePrecedenceExpression(), 1, true)
+                                parseUnaryExpression(), true)
+                                  rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                    reportRecoverableError(+, UnsupportedPrefixPlus)
+                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                    rewriter()
+                                  parsePrimary(), expression)
+                                    parseSendOrFunctionLiteral(), expression)
+                                      parseSend(), expression)
+                                        ensureIdentifier(), expression)
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(+)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(+)
+                                        listener: handleSend(, +)
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true)
+                                  parseUnaryExpression(+, true)
+                                    parsePrimary(+, expression)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement(;)
+                  listener: endForStatementBody(})
+                  listener: endForStatement(})
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, Function, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(Function)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(Function, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(Function)
+                              parseArguments(Function)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(Function, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, get, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(get)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(get, topLevelFunctionDeclaration)
+        parseMethodTypeVar(get)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(get, get, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(get, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(get, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(get)
+                              parseArguments(get)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(get, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, hide, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(hide)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(hide, topLevelFunctionDeclaration)
+        parseMethodTypeVar(hide)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(hide, hide, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(hide, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(hide, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(hide)
+                              parseArguments(hide)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(hide, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(if)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, if, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(if)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+          listener: handleIdentifier(if, topLevelFunctionDeclaration)
+        parseMethodTypeVar(if)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(if, if, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(if, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(if)
+                          parseArgumentsOpt()
+                            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)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, if)
+          parseStatement(;)
+            parseStatementX(;)
+              parseIfStatement(;)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(-)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(-)
+                                listener: handleSend(x, -)
+                        listener: beginBinaryExpression(-)
+                        parsePrecedenceExpression(-, 14, true)
+                          parseUnaryExpression(-, true)
+                            parsePrimary(-, expression)
+                              parseLiteralInt(-)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(-)
+                    ensureCloseParen(1, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(+)
+                parseStatement())
+                  parseStatementX())
+                    parseExpressionStatementOrDeclaration(), false)
+                      parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
+                        looksLikeLocalFunction(+)
+                        parseExpressionStatement())
+                          parseExpression())
+                            parsePrecedenceExpression(), 1, true)
+                              parseUnaryExpression(), true)
+                                rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                  reportRecoverableError(+, UnsupportedPrefixPlus)
+                                    listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                  rewriter()
+                                parsePrimary(), expression)
+                                  parseSendOrFunctionLiteral(), expression)
+                                    parseSend(), expression)
+                                      ensureIdentifier(), expression)
+                                        listener: handleIdentifier(, expression)
+                                      listener: handleNoTypeArguments(+)
+                                      parseArgumentsOpt()
+                                        listener: handleNoArguments(+)
+                                      listener: handleSend(, +)
+                              listener: beginBinaryExpression(+)
+                              parsePrecedenceExpression(+, 14, true)
+                                parseUnaryExpression(+, true)
+                                  parsePrimary(+, expression)
+                                    parseLiteralInt(+)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(+)
+                          ensureSemicolon(1)
+                          listener: handleExpressionStatement(;)
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, implements, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(implements)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(implements, topLevelFunctionDeclaration)
+        parseMethodTypeVar(implements)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(implements, implements, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(implements, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(implements, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(implements)
+                              parseArguments(implements)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(implements, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, import, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(import)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(import, topLevelFunctionDeclaration)
+        parseMethodTypeVar(import)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(import, import, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(import, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(import, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(import)
+                              parseArguments(import)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(import, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(in)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, in, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(in)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+          listener: handleIdentifier(in, topLevelFunctionDeclaration)
+        parseMethodTypeVar(in)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(in, in, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(in, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+                            listener: handleIdentifier(in, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(in)
+                            parseArguments(in)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                parseExpression(()
+                                  parsePrecedenceExpression((, 1, true)
+                                    parseUnaryExpression((, true)
+                                      parsePrimary((, expression)
+                                        parseSendOrFunctionLiteral((, expression)
+                                          parseSend((, expression)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, -)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true)
+                                      parseUnaryExpression(-, true)
+                                        parsePrimary(-, expression)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(in, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, inout, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(inout)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(inout, topLevelFunctionDeclaration)
+        parseMethodTypeVar(inout)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(inout, inout, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(inout, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(inout, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(inout)
+                              parseArguments(inout)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(inout, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, interface, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(interface)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(interface, topLevelFunctionDeclaration)
+        parseMethodTypeVar(interface)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(interface, interface, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(interface, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(interface, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(interface)
+                              parseArguments(interface)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(interface, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(is)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, is, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(is)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+          listener: handleIdentifier(is, topLevelFunctionDeclaration)
+        parseMethodTypeVar(is)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(is, is, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(is, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(is)
+                          parseArgumentsOpt()
+                            listener: handleNoArguments(is)
+                          listener: handleSend(, is)
+                    parseIsOperatorRest()
+                      listener: beginIsOperatorType(is)
+                      computeTypeAfterIsOrAs(is)
+                      reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
+                        listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '('., null, {token: (}], (, ()
+                      rewriter()
+                      listener: handleIdentifier(, typeReference)
+                      listener: handleNoTypeArguments(()
+                      listener: handleType(, null)
+                      listener: endIsOperatorType(is)
+                      listener: handleIsOperator(is, null)
+                      skipChainedAsIsOperators()
+                ensureSemicolon()
+                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          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)
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(x, expression)
+                                                listener: handleNoTypeArguments(-)
+                                                parseArgumentsOpt(x)
+                                                  listener: handleNoArguments(-)
+                                                listener: handleSend(x, -)
+                                        listener: beginBinaryExpression(-)
+                                        parsePrecedenceExpression(-, 14, true)
+                                          parseUnaryExpression(-, true)
+                                            parsePrimary(-, expression)
+                                              parseLiteralInt(-)
+                                                listener: handleLiteralInt(1)
+                                        listener: endBinaryExpression(-)
+                                    ensureCloseParen(1, ()
+                                listener: handleParenthesizedExpression(()
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true)
+                          parseUnaryExpression(+, true)
+                            parsePrimary(+, expression)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, late, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(late)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(late, topLevelFunctionDeclaration)
+        parseMethodTypeVar(late)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(late, late, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(late, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(late, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(late)
+                              parseArguments(late)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(late, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, library, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(library)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(library, topLevelFunctionDeclaration)
+        parseMethodTypeVar(library)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(library, library, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(library, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(library, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(library)
+                              parseArguments(library)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(library, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, mixin, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(mixin)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(mixin, topLevelFunctionDeclaration)
+        parseMethodTypeVar(mixin)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(mixin, mixin, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(mixin, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(mixin, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(mixin)
+                              parseArguments(mixin)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(mixin, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, native, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(native)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(native, topLevelFunctionDeclaration)
+        parseMethodTypeVar(native)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(native, native, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(native, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(native, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(native)
+                              parseArguments(native)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(native, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(new)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, new, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(new)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+          listener: handleIdentifier(new, topLevelFunctionDeclaration)
+        parseMethodTypeVar(new)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(new, new, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(new, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        parseNewExpression(return)
+                          listener: beginNewExpression(new)
+                          parseConstructorReference(new, null)
+                            ensureIdentifier(new, constructorReference)
+                              insertSyntheticIdentifier(new, constructorReference, message: Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], messageOnToken: null)
+                                reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
+                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                                rewriter()
+                              listener: handleIdentifier(, constructorReference)
+                            listener: beginConstructorReference()
+                            parseQualifiedRestOpt(, constructorReferenceContinuation)
+                            listener: handleNoTypeArguments(()
+                            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
+                            listener: endConstructorReference(, null, ()
+                          parseConstructorInvocationArguments()
+                            parseArgumentsRest(()
+                              listener: beginArguments(()
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true)
+                                  parseUnaryExpression((, true)
+                                    parsePrimary((, expression)
+                                      parseSendOrFunctionLiteral((, expression)
+                                        parseSend((, expression)
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(x, expression)
+                                          listener: handleNoTypeArguments(-)
+                                          parseArgumentsOpt(x)
+                                            listener: handleNoArguments(-)
+                                          listener: handleSend(x, -)
+                                  listener: beginBinaryExpression(-)
+                                  parsePrecedenceExpression(-, 14, true)
+                                    parseUnaryExpression(-, true)
+                                      parsePrimary(-, expression)
+                                        parseLiteralInt(-)
+                                          listener: handleLiteralInt(1)
+                                  listener: endBinaryExpression(-)
+                              listener: endArguments(1, (, ))
+                          listener: endNewExpression(new)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(null)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, null, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(null)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+          listener: handleIdentifier(null, topLevelFunctionDeclaration)
+        parseMethodTypeVar(null)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(null, null, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(null, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        parseLiteralNull(return)
+                          listener: handleLiteralNull(null)
+                    parseArgumentOrIndexStar(null, Instance of 'NoTypeParamOrArg', false)
+                      listener: handleNoTypeArguments(()
+                      parseArguments(null)
+                        parseArgumentsRest(()
+                          listener: beginArguments(()
+                          parseExpression(()
+                            parsePrecedenceExpression((, 1, true)
+                              parseUnaryExpression((, true)
+                                parsePrimary((, expression)
+                                  parseSendOrFunctionLiteral((, expression)
+                                    parseSend((, expression)
+                                      ensureIdentifier((, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, -)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true)
+                                parseUnaryExpression(-, true)
+                                  parsePrimary(-, expression)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-)
+                          listener: endArguments(1, (, ))
+                      listener: handleSend((, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, of, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(of)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(of, topLevelFunctionDeclaration)
+        parseMethodTypeVar(of)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(of, of, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(of, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(of, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(of)
+                              parseArguments(of)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(of, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, on, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(on)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(on, topLevelFunctionDeclaration)
+        parseMethodTypeVar(on)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(on, on, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(on, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(on, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(on)
+                              parseArguments(on)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(on, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, operator, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(operator)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(operator, topLevelFunctionDeclaration)
+        parseMethodTypeVar(operator)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(operator, operator, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(operator, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(operator, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(operator)
+                              parseArguments(operator)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(operator, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, out, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(out)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(out, topLevelFunctionDeclaration)
+        parseMethodTypeVar(out)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(out, out, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(out, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(out, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(out)
+                              parseArguments(out)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(out, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, part, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(part)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(part, topLevelFunctionDeclaration)
+        parseMethodTypeVar(part)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(part, part, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(part, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(part, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(part)
+                              parseArguments(part)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(part, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, patch, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(patch)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(patch, topLevelFunctionDeclaration)
+        parseMethodTypeVar(patch)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(patch, patch, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(patch, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(patch, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(patch)
+                              parseArguments(patch)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(patch, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, required, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(required)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(required, topLevelFunctionDeclaration)
+        parseMethodTypeVar(required)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(required, required, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(required, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(required, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(required)
+                              parseArguments(required)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(required, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(rethrow)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, rethrow, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(rethrow)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+          listener: handleIdentifier(rethrow, topLevelFunctionDeclaration)
+        parseMethodTypeVar(rethrow)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(rethrow, rethrow, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(rethrow, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+                            listener: handleIdentifier(rethrow, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(rethrow)
+                            parseArguments(rethrow)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                parseExpression(()
+                                  parsePrecedenceExpression((, 1, true)
+                                    parseUnaryExpression((, true)
+                                      parsePrimary((, expression)
+                                        parseSendOrFunctionLiteral((, expression)
+                                          parseSend((, expression)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, -)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true)
+                                      parseUnaryExpression(-, true)
+                                        parsePrimary(-, expression)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(rethrow, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(return)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, return, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(return)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+          listener: handleIdentifier(return, topLevelFunctionDeclaration)
+        parseMethodTypeVar(return)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(return, return, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(return, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+                          listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token 'return'., null, {token: return}], return, return)
+                        parsePrimary(return, expression)
+                          parseParenthesizedExpressionOrFunctionLiteral(return)
+                            parseParenthesizedExpression(return)
+                              parseExpressionInParenthesis(return)
+                                parseExpressionInParenthesisRest(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  ensureCloseParen(1, ()
+                              listener: handleParenthesizedExpression(()
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, set, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(set)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(set, topLevelFunctionDeclaration)
+        parseMethodTypeVar(set)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(set, set, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(set, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(set, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(set)
+                              parseArguments(set)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(set, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, show, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(show)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(show, topLevelFunctionDeclaration)
+        parseMethodTypeVar(show)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(show, show, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(show, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(show, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(show)
+                              parseArguments(show)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(show, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, source, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(source)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(source, topLevelFunctionDeclaration)
+        parseMethodTypeVar(source)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(source, source, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(source, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(source, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(source)
+                              parseArguments(source)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(source, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, static, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(static)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(static, topLevelFunctionDeclaration)
+        parseMethodTypeVar(static)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(static, static, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(static, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(static, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(static)
+                              parseArguments(static)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(static, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(super)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, super, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(super)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+          listener: handleIdentifier(super, topLevelFunctionDeclaration)
+        parseMethodTypeVar(super)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(super, super, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(super, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        parseSuperExpression(return, expression)
+                          listener: handleSuperExpression(super, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArguments(super)
+                            parseArgumentsRest(()
+                              listener: beginArguments(()
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true)
+                                  parseUnaryExpression((, true)
+                                    parsePrimary((, expression)
+                                      parseSendOrFunctionLiteral((, expression)
+                                        parseSend((, expression)
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(x, expression)
+                                          listener: handleNoTypeArguments(-)
+                                          parseArgumentsOpt(x)
+                                            listener: handleNoArguments(-)
+                                          listener: handleSend(x, -)
+                                  listener: beginBinaryExpression(-)
+                                  parsePrecedenceExpression(-, 14, true)
+                                    parseUnaryExpression(-, true)
+                                      parsePrimary(-, expression)
+                                        parseLiteralInt(-)
+                                          listener: handleLiteralInt(1)
+                                  listener: endBinaryExpression(-)
+                              listener: endArguments(1, (, ))
+                          listener: handleSend(super, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(switch)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, switch, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(switch)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+          listener: handleIdentifier(switch, topLevelFunctionDeclaration)
+        parseMethodTypeVar(switch)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(switch, switch, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(switch, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(switch)
+                          parseArgumentsOpt()
+                            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)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, switch)
+          parseStatement(;)
+            parseStatementX(;)
+              parseSwitchStatement(;)
+                listener: beginSwitchStatement(switch)
+                ensureParenthesizedCondition(switch)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(-)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(-)
+                                listener: handleSend(x, -)
+                        listener: beginBinaryExpression(-)
+                        parsePrecedenceExpression(-, 14, true)
+                          parseUnaryExpression(-, true)
+                            parsePrimary(-, expression)
+                              parseLiteralInt(-)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(-)
+                    ensureCloseParen(1, ()
+                  listener: handleParenthesizedCondition(()
+                parseSwitchBlock())
+                  ensureBlock(), null, switch statement)
+                    reportRecoverableError(), Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}])
+                      listener: handleRecoverableError(Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}], ), ))
+                    insertBlock())
+                      rewriter()
+                      rewriter()
+                  listener: beginSwitchBlock({)
+                  notEofOrValue(}, })
+                  listener: endSwitchBlock(0, {, })
+                listener: endSwitchStatement(switch, })
+          notEofOrValue(}, +)
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclaration(}, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                  looksLikeLocalFunction(+)
+                  parseExpressionStatement(})
+                    parseExpression(})
+                      parsePrecedenceExpression(}, 1, true)
+                        parseUnaryExpression(}, true)
+                          rewriteAndRecover(}, UnsupportedPrefixPlus, )
+                            reportRecoverableError(+, UnsupportedPrefixPlus)
+                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                            rewriter()
+                          parsePrimary(}, expression)
+                            parseSendOrFunctionLiteral(}, expression)
+                              parseSend(}, expression)
+                                ensureIdentifier(}, expression)
+                                  listener: handleIdentifier(, expression)
+                                listener: handleNoTypeArguments(+)
+                                parseArgumentsOpt()
+                                  listener: handleNoArguments(+)
+                                listener: handleSend(, +)
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true)
+                          parseUnaryExpression(+, true)
+                            parsePrimary(+, expression)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(4, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, sync, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(sync)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(sync, topLevelFunctionDeclaration)
+        parseMethodTypeVar(sync)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(sync, sync, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(sync, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(sync, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(sync)
+                              parseArguments(sync)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(sync, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, this, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(this)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+          listener: handleIdentifier(this, topLevelFunctionDeclaration)
+        parseMethodTypeVar(this)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(this, this, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(this, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        parseThisExpression(return, expression)
+                          listener: handleThisExpression(this, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArguments(this)
+                            parseArgumentsRest(()
+                              listener: beginArguments(()
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true)
+                                  parseUnaryExpression((, true)
+                                    parsePrimary((, expression)
+                                      parseSendOrFunctionLiteral((, expression)
+                                        parseSend((, expression)
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(x, expression)
+                                          listener: handleNoTypeArguments(-)
+                                          parseArgumentsOpt(x)
+                                            listener: handleNoArguments(-)
+                                          listener: handleSend(x, -)
+                                  listener: beginBinaryExpression(-)
+                                  parsePrecedenceExpression(-, 14, true)
+                                    parseUnaryExpression(-, true)
+                                      parsePrimary(-, expression)
+                                        parseLiteralInt(-)
+                                          listener: handleLiteralInt(1)
+                                  listener: endBinaryExpression(-)
+                              listener: endArguments(1, (, ))
+                          listener: handleSend(this, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(throw)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, throw, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(throw)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+          listener: handleIdentifier(throw, topLevelFunctionDeclaration)
+        parseMethodTypeVar(throw)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(throw, throw, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(throw, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parseThrowExpression(return, true)
+                    parseExpression(throw)
+                      parsePrecedenceExpression(throw, 1, true)
+                        parseUnaryExpression(throw, true)
+                          parsePrimary(throw, expression)
+                            parseParenthesizedExpressionOrFunctionLiteral(throw)
+                              parseParenthesizedExpression(throw)
+                                parseExpressionInParenthesis(throw)
+                                  parseExpressionInParenthesisRest(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              parseSend((, expression)
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(x, expression)
+                                                listener: handleNoTypeArguments(-)
+                                                parseArgumentsOpt(x)
+                                                  listener: handleNoArguments(-)
+                                                listener: handleSend(x, -)
+                                        listener: beginBinaryExpression(-)
+                                        parsePrecedenceExpression(-, 14, true)
+                                          parseUnaryExpression(-, true)
+                                            parsePrimary(-, expression)
+                                              parseLiteralInt(-)
+                                                listener: handleLiteralInt(1)
+                                        listener: endBinaryExpression(-)
+                                    ensureCloseParen(1, ()
+                                listener: handleParenthesizedExpression(()
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true)
+                          parseUnaryExpression(+, true)
+                            parsePrimary(+, expression)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+)
+                    listener: handleThrowExpression(throw, ;)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(true)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, true, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(true)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+          listener: handleIdentifier(true, topLevelFunctionDeclaration)
+        parseMethodTypeVar(true)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(true, true, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(true, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          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)
+                    parseArgumentOrIndexStar(true, Instance of 'NoTypeParamOrArg', false)
+                      listener: handleNoTypeArguments(()
+                      parseArguments(true)
+                        parseArgumentsRest(()
+                          listener: beginArguments(()
+                          parseExpression(()
+                            parsePrecedenceExpression((, 1, true)
+                              parseUnaryExpression((, true)
+                                parsePrimary((, expression)
+                                  parseSendOrFunctionLiteral((, expression)
+                                    parseSend((, expression)
+                                      ensureIdentifier((, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, -)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true)
+                                parseUnaryExpression(-, true)
+                                  parsePrimary(-, expression)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-)
+                          listener: endArguments(1, (, ))
+                      listener: handleSend((, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(try)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, try, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(try)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+          listener: handleIdentifier(try, topLevelFunctionDeclaration)
+        parseMethodTypeVar(try)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(try, try, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(try, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(try)
+                          parseArgumentsOpt()
+                            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)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, try)
+          parseStatement(;)
+            parseStatementX(;)
+              parseTryStatement(;)
+                listener: beginTryStatement(try)
+                parseBlock(try, BlockKind(try statement))
+                  ensureBlock(try, null, try statement)
+                    reportRecoverableError(try, Message[ExpectedClassOrMixinBody, A try statement must have a body, even if it is empty., Try adding an empty body., {string: try statement}])
+                      listener: 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)
+                    insertBlock(try)
+                      rewriter()
+                      rewriter()
+                  listener: beginBlock({, BlockKind(try statement))
+                  notEofOrValue(}, })
+                  listener: endBlock(0, {, }, BlockKind(try statement))
+                reportRecoverableError(try, OnlyTry)
+                  listener: handleRecoverableError(OnlyTry, try, try)
+                listener: endTryStatement(0, try, null)
+          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)
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(x, expression)
+                                                listener: handleNoTypeArguments(-)
+                                                parseArgumentsOpt(x)
+                                                  listener: handleNoArguments(-)
+                                                listener: handleSend(x, -)
+                                        listener: beginBinaryExpression(-)
+                                        parsePrecedenceExpression(-, 14, true)
+                                          parseUnaryExpression(-, true)
+                                            parsePrimary(-, expression)
+                                              parseLiteralInt(-)
+                                                listener: handleLiteralInt(1)
+                                        listener: endBinaryExpression(-)
+                                    ensureCloseParen(1, ()
+                                listener: handleParenthesizedExpression(()
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true)
+                          parseUnaryExpression(+, true)
+                            parsePrimary(+, expression)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(4, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, typedef, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(typedef)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(typedef, topLevelFunctionDeclaration)
+        parseMethodTypeVar(typedef)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(typedef, typedef, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(typedef, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(typedef, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(typedef)
+                              parseArguments(typedef)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(typedef, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(var)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, var, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(var)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+          listener: handleIdentifier(var, topLevelFunctionDeclaration)
+        parseMethodTypeVar(var)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(var, var, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(var, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(var)
+                          parseArgumentsOpt()
+                            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)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, var)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, false)
+                looksLikeLocalFunction(()
+                listener: beginMetadataStar(var)
+                listener: endMetadataStar(0)
+                listener: handleNoType(var)
+                listener: beginVariablesDeclaration((, null, var)
+                parseVariablesDeclarationRest(var, true)
+                  parseOptionallyInitializedIdentifier(var)
+                    ensureIdentifier(var, localVariableDeclaration)
+                      reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
+                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                      rewriter()
+                      listener: handleIdentifier(, localVariableDeclaration)
+                    listener: beginInitializedIdentifier()
+                    parseVariableInitializerOpt()
+                      listener: handleNoVariableInitializer(x)
+                    listener: endInitializedIdentifier()
+                  ensureSemicolon()
+                    reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, x)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(x)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            parseSend(;, expression)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(x, expression)
+                              listener: handleNoTypeArguments(-)
+                              parseArgumentsOpt(x)
+                                listener: handleNoArguments(-)
+                              listener: handleSend(x, -)
+                      listener: beginBinaryExpression(-)
+                      parsePrecedenceExpression(-, 14, true)
+                        parseUnaryExpression(-, true)
+                          parsePrimary(-, expression)
+                            parseLiteralInt(-)
+                              listener: handleLiteralInt(1)
+                      listener: endBinaryExpression(-)
+                  ensureSemicolon(1)
+                    reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+                    rewriter()
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, ))
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction())
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseSend(;, expression)
+                              ensureIdentifier(;, expression)
+                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+                                rewriter()
+                                listener: handleIdentifier(, expression)
+                              listener: handleNoTypeArguments())
+                              parseArgumentsOpt()
+                                listener: handleNoArguments())
+                              listener: handleSend(, ))
+                    ensureSemicolon()
+                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                      rewriter()
+                    listener: handleExpressionStatement(;)
+          reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
+            listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
+          notEofOrValue(}, +)
+          parseStatement())
+            parseStatementX())
+              parseExpressionStatementOrDeclaration(), false)
+                parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
+                  looksLikeLocalFunction(+)
+                  parseExpressionStatement())
+                    parseExpression())
+                      parsePrecedenceExpression(), 1, true)
+                        parseUnaryExpression(), true)
+                          rewriteAndRecover(), UnsupportedPrefixPlus, )
+                            reportRecoverableError(+, UnsupportedPrefixPlus)
+                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                            rewriter()
+                          parsePrimary(), expression)
+                            parseSendOrFunctionLiteral(), expression)
+                              parseSend(), expression)
+                                ensureIdentifier(), expression)
+                                  listener: handleIdentifier(, expression)
+                                listener: handleNoTypeArguments(+)
+                                parseArgumentsOpt()
+                                  listener: handleNoArguments(+)
+                                listener: handleSend(, +)
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true)
+                          parseUnaryExpression(+, true)
+                            parsePrimary(+, expression)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(6, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(void)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, void, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(void)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+          listener: handleIdentifier(void, topLevelFunctionDeclaration)
+        parseMethodTypeVar(void)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(void, void, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(void, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        parseSendOrFunctionLiteral(return, expression)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
+                                listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+                              rewriter()
+                              listener: handleIdentifier(, expression)
+                            listener: handleNoTypeArguments(void)
+                            parseArgumentsOpt()
+                              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)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, void)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(()
+                  listener: beginMetadataStar(void)
+                  listener: endMetadataStar(0)
+                  listener: handleVoidKeyword(void)
+                  listener: beginVariablesDeclaration((, null, null)
+                  parseVariablesDeclarationRest(void, true)
+                    parseOptionallyInitializedIdentifier(void)
+                      ensureIdentifier(void, localVariableDeclaration)
+                        reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
+                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                        rewriter()
+                        listener: handleIdentifier(, localVariableDeclaration)
+                      listener: beginInitializedIdentifier()
+                      parseVariableInitializerOpt()
+                        listener: handleNoVariableInitializer(x)
+                      listener: endInitializedIdentifier()
+                    ensureSemicolon()
+                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+                      rewriter()
+                    listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, x)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(x)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            parseSend(;, expression)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(x, expression)
+                              listener: handleNoTypeArguments(-)
+                              parseArgumentsOpt(x)
+                                listener: handleNoArguments(-)
+                              listener: handleSend(x, -)
+                      listener: beginBinaryExpression(-)
+                      parsePrecedenceExpression(-, 14, true)
+                        parseUnaryExpression(-, true)
+                          parsePrimary(-, expression)
+                            parseLiteralInt(-)
+                              listener: handleLiteralInt(1)
+                      listener: endBinaryExpression(-)
+                  ensureSemicolon(1)
+                    reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+                    rewriter()
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, ))
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction())
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseSend(;, expression)
+                              ensureIdentifier(;, expression)
+                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+                                rewriter()
+                                listener: handleIdentifier(, expression)
+                              listener: handleNoTypeArguments())
+                              parseArgumentsOpt()
+                                listener: handleNoArguments())
+                              listener: handleSend(, ))
+                    ensureSemicolon()
+                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                      rewriter()
+                    listener: handleExpressionStatement(;)
+          reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
+            listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
+          notEofOrValue(}, +)
+          parseStatement())
+            parseStatementX())
+              parseExpressionStatementOrDeclaration(), false)
+                parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
+                  looksLikeLocalFunction(+)
+                  parseExpressionStatement())
+                    parseExpression())
+                      parsePrecedenceExpression(), 1, true)
+                        parseUnaryExpression(), true)
+                          rewriteAndRecover(), UnsupportedPrefixPlus, )
+                            reportRecoverableError(+, UnsupportedPrefixPlus)
+                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                            rewriter()
+                          parsePrimary(), expression)
+                            parseSendOrFunctionLiteral(), expression)
+                              parseSend(), expression)
+                                ensureIdentifier(), expression)
+                                  listener: handleIdentifier(, expression)
+                                listener: handleNoTypeArguments(+)
+                                parseArgumentsOpt()
+                                  listener: handleNoArguments(+)
+                                listener: handleSend(, +)
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true)
+                          parseUnaryExpression(+, true)
+                            parsePrimary(+, expression)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(6, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(while)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, while, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(while)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+          listener: handleIdentifier(while, topLevelFunctionDeclaration)
+        parseMethodTypeVar(while)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(while, while, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(while, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(while)
+                          parseArgumentsOpt()
+                            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)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, while)
+          parseStatement(;)
+            parseStatementX(;)
+              parseWhileStatement(;)
+                listener: beginWhileStatement(while)
+                ensureParenthesizedCondition(while)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(-)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(-)
+                                listener: handleSend(x, -)
+                        listener: beginBinaryExpression(-)
+                        parsePrecedenceExpression(-, 14, true)
+                          parseUnaryExpression(-, true)
+                            parsePrimary(-, expression)
+                              parseLiteralInt(-)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(-)
+                    ensureCloseParen(1, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginWhileStatementBody(+)
+                parseStatement())
+                  parseStatementX())
+                    parseExpressionStatementOrDeclaration(), false)
+                      parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
+                        looksLikeLocalFunction(+)
+                        parseExpressionStatement())
+                          parseExpression())
+                            parsePrecedenceExpression(), 1, true)
+                              parseUnaryExpression(), true)
+                                rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                  reportRecoverableError(+, UnsupportedPrefixPlus)
+                                    listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                  rewriter()
+                                parsePrimary(), expression)
+                                  parseSendOrFunctionLiteral(), expression)
+                                    parseSend(), expression)
+                                      ensureIdentifier(), expression)
+                                        listener: handleIdentifier(, expression)
+                                      listener: handleNoTypeArguments(+)
+                                      parseArgumentsOpt()
+                                        listener: handleNoArguments(+)
+                                      listener: handleSend(, +)
+                              listener: beginBinaryExpression(+)
+                              parsePrecedenceExpression(+, 14, true)
+                                parseUnaryExpression(+, true)
+                                  parsePrimary(+, expression)
+                                    parseLiteralInt(+)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(+)
+                          ensureSemicolon(1)
+                          listener: handleExpressionStatement(;)
+                listener: endWhileStatementBody(})
+                listener: endWhileStatement(while, })
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(with)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, with, true)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(with)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+          listener: handleIdentifier(with, topLevelFunctionDeclaration)
+        parseMethodTypeVar(with)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(with, with, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(with, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSend(return, expression)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+                            listener: handleIdentifier(with, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(with)
+                            parseArguments(with)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                parseExpression(()
+                                  parsePrecedenceExpression((, 1, true)
+                                    parseUnaryExpression((, true)
+                                      parsePrimary((, expression)
+                                        parseSendOrFunctionLiteral((, expression)
+                                          parseSend((, expression)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, -)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true)
+                                      parseUnaryExpression(-, true)
+                                        parsePrimary(-, expression)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(with, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, yield, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(yield)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(yield, topLevelFunctionDeclaration)
+        parseMethodTypeVar(yield)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(yield, yield, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(yield, 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(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          parsePrimary((, expression)
+                            parseSendOrFunctionLiteral((, expression)
+                              parseSend((, expression)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, ==)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true)
+                          parseUnaryExpression(==, true)
+                            parsePrimary(==, expression)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==)
+                    ensureCloseParen(0, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement(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()
+                listener: endThenStatement(;)
+                listener: endIfStatement(if, null)
+          notEofOrValue(}, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(yield, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(yield)
+                              parseArguments(yield)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  parseExpression(()
+                                    parsePrecedenceExpression((, 1, true)
+                                      parseUnaryExpression((, true)
+                                        parsePrimary((, expression)
+                                          parseSendOrFunctionLiteral((, expression)
+                                            parseSend((, expression)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, -)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true)
+                                        parseUnaryExpression(-, true)
+                                          parsePrimary(-, expression)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(yield, +)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        parsePrimary(+, expression)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(int)
+  listener: endCompilationUnit(69, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.parser.expect
new file mode 100644
index 0000000..7620786
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.parser.expect
@@ -0,0 +1,693 @@
+NOTICE: Stream was rewritten by parser!
+
+int abstract(int x) {
+if (x == 0) return 42;
+return abstract(x-1) + 1;
+}
+
+int as(int x) {
+if (x == 0) return 42;
+return as(x-1) + 1;
+}
+
+int assert(int x) {
+if (x == 0) return 42;
+return assert(x-1) + 1;
+}
+
+int async(int x) {
+if (x == 0) return 42;
+return async(x-1) + 1;
+}
+
+int await(int x) {
+if (x == 0) return 42;
+return await(x-1) + 1;
+}
+
+int break(int x) {
+if (x == 0) return 42;
+return ;break;(x-1) + 1;
+}
+
+int case(int x) {
+if (x == 0) return 42;
+return case(x-1) + 1;
+}
+
+int catch(int x) {
+if (x == 0) return 42;
+return catch(x-1) + 1;
+}
+
+int class(int x) {
+if (x == 0) return 42;
+return class(x-1) + 1;
+}
+
+int const(int x) {
+if (x == 0) return 42;
+return const(x-1) + 1;
+}
+
+int continue(int x) {
+if (x == 0) return 42;
+return ;continue;(x-1) + 1;
+}
+
+int covariant(int x) {
+if (x == 0) return 42;
+return covariant(x-1) + 1;
+}
+
+int default(int x) {
+if (x == 0) return 42;
+return default(x-1) + 1;
+}
+
+int deferred(int x) {
+if (x == 0) return 42;
+return deferred(x-1) + 1;
+}
+
+int do(int x) {
+if (x == 0) return 42;
+return ;do(x-1) + 1;
+while();}
+
+int dynamic(int x) {
+if (x == 0) return 42;
+return dynamic(x-1) + 1;
+}
+
+int else(int x) {
+if (x == 0) return 42;
+return ;;else(x-1) + 1;
+}
+
+int enum(int x) {
+if (x == 0) return 42;
+return enum(x-1) + 1;
+}
+
+int export(int x) {
+if (x == 0) return 42;
+return export(x-1) + 1;
+}
+
+int extends(int x) {
+if (x == 0) return 42;
+return extends(x-1) + 1;
+}
+
+int extension(int x) {
+if (x == 0) return 42;
+return extension(x-1) + 1;
+}
+
+int external(int x) {
+if (x == 0) return 42;
+return external(x-1) + 1;
+}
+
+int factory(int x) {
+if (x == 0) return 42;
+return factory(x-1) + 1;
+}
+
+int false(int x) {
+if (x == 0) return 42;
+return false(x-1) + 1;
+}
+
+int final(int x) {
+if (x == 0) return 42;
+return ;final(;x-1;;) + 1;
+}
+
+int finally(int x) {
+if (x == 0) return 42;
+return finally(x-1) + 1;
+}
+
+int for(int x) {
+if (x == 0) return 42;
+return ;for(x-1;;) + 1;
+}
+
+int Function(int x) {
+if (x == 0) return 42;
+return Function(x-1) + 1;
+}
+
+int get(int x) {
+if (x == 0) return 42;
+return get(x-1) + 1;
+}
+
+int hide(int x) {
+if (x == 0) return 42;
+return hide(x-1) + 1;
+}
+
+int if(int x) {
+if (x == 0) return 42;
+return ;if(x-1) + 1;
+}
+
+int implements(int x) {
+if (x == 0) return 42;
+return implements(x-1) + 1;
+}
+
+int import(int x) {
+if (x == 0) return 42;
+return import(x-1) + 1;
+}
+
+int in(int x) {
+if (x == 0) return 42;
+return in(x-1) + 1;
+}
+
+int inout(int x) {
+if (x == 0) return 42;
+return inout(x-1) + 1;
+}
+
+int interface(int x) {
+if (x == 0) return 42;
+return interface(x-1) + 1;
+}
+
+int is(int x) {
+if (x == 0) return 42;
+return is;(x-1) + 1;
+}
+
+int late(int x) {
+if (x == 0) return 42;
+return late(x-1) + 1;
+}
+
+int library(int x) {
+if (x == 0) return 42;
+return library(x-1) + 1;
+}
+
+int mixin(int x) {
+if (x == 0) return 42;
+return mixin(x-1) + 1;
+}
+
+int native(int x) {
+if (x == 0) return 42;
+return native(x-1) + 1;
+}
+
+int new(int x) {
+if (x == 0) return 42;
+return new(x-1) + 1;
+}
+
+int null(int x) {
+if (x == 0) return 42;
+return null(x-1) + 1;
+}
+
+int of(int x) {
+if (x == 0) return 42;
+return of(x-1) + 1;
+}
+
+int on(int x) {
+if (x == 0) return 42;
+return on(x-1) + 1;
+}
+
+int operator(int x) {
+if (x == 0) return 42;
+return operator(x-1) + 1;
+}
+
+int out(int x) {
+if (x == 0) return 42;
+return out(x-1) + 1;
+}
+
+int part(int x) {
+if (x == 0) return 42;
+return part(x-1) + 1;
+}
+
+int patch(int x) {
+if (x == 0) return 42;
+return patch(x-1) + 1;
+}
+
+int required(int x) {
+if (x == 0) return 42;
+return required(x-1) + 1;
+}
+
+int rethrow(int x) {
+if (x == 0) return 42;
+return rethrow(x-1) + 1;
+}
+
+int return(int x) {
+if (x == 0) return 42;
+return return(x-1) + 1;
+}
+
+int set(int x) {
+if (x == 0) return 42;
+return set(x-1) + 1;
+}
+
+int show(int x) {
+if (x == 0) return 42;
+return show(x-1) + 1;
+}
+
+int source(int x) {
+if (x == 0) return 42;
+return source(x-1) + 1;
+}
+
+int static(int x) {
+if (x == 0) return 42;
+return static(x-1) + 1;
+}
+
+int super(int x) {
+if (x == 0) return 42;
+return super(x-1) + 1;
+}
+
+int switch(int x) {
+if (x == 0) return 42;
+return ;switch(x-1) {}+ 1;
+}
+
+int sync(int x) {
+if (x == 0) return 42;
+return sync(x-1) + 1;
+}
+
+int this(int x) {
+if (x == 0) return 42;
+return this(x-1) + 1;
+}
+
+int throw(int x) {
+if (x == 0) return 42;
+return throw(x-1) + 1;
+}
+
+int true(int x) {
+if (x == 0) return 42;
+return true(x-1) + 1;
+}
+
+int try(int x) {
+if (x == 0) return 42;
+return ;try{}(x-1) + 1;
+}
+
+int typedef(int x) {
+if (x == 0) return 42;
+return typedef(x-1) + 1;
+}
+
+int var(int x) {
+if (x == 0) return 42;
+return ;var(;x-1;;) + 1;
+}
+
+int void(int x) {
+if (x == 0) return 42;
+return ;void(;x-1;;) + 1;
+}
+
+int while(int x) {
+if (x == 0) return 42;
+return ;while(x-1) + 1;
+}
+
+int with(int x) {
+if (x == 0) return 42;
+return with(x-1) + 1;
+}
+
+int yield(int x) {
+if (x == 0) return 42;
+return yield(x-1) + 1;
+}
+
+
+int[StringToken] abstract[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] abstract[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] as[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] as[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] assert[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] assert[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] async[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] async[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] await[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] await[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] break[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]break[KeywordToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] case[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] case[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] catch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] catch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] class[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] class[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] const[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] const[KeywordToken][SyntheticStringToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] continue[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]continue[KeywordToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] covariant[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] covariant[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] default[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] default[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] deferred[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] deferred[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] do[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]do[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+while[SyntheticKeywordToken]([SyntheticBeginToken][SyntheticStringToken])[SyntheticToken];[SyntheticToken]}[SimpleToken]
+
+int[StringToken] dynamic[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] dynamic[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] else[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken]else[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] enum[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] enum[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] export[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] export[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extends[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extends[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extension[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extension[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] external[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] external[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] factory[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] factory[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] false[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] false[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] final[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]final[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] finally[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] finally[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] for[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]for[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] Function[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] Function[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] get[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] get[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] hide[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] hide[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] if[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]if[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] implements[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] implements[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] import[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] import[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] in[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] in[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] inout[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] inout[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] interface[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] interface[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] is[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken]is[KeywordToken][SyntheticStringToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] late[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] late[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] library[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] library[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] mixin[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] mixin[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] native[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] native[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] new[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] new[KeywordToken][SyntheticStringToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] null[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] null[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] of[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] of[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] on[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] on[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] operator[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] operator[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] out[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] out[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] part[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] part[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] patch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] patch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] required[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] required[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] rethrow[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] rethrow[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] return[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] return[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] set[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] set[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] show[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] show[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] source[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] source[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] static[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] static[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] super[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] super[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] switch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]switch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] {[SyntheticBeginToken]}[SyntheticToken][SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] sync[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] sync[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] throw[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] throw[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] true[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] true[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] try[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]try[KeywordToken]{[SyntheticBeginToken]}[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] typedef[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] typedef[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] var[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]var[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] void[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]void[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] while[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]while[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] with[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] with[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] yield[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] yield[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.scanner.expect
new file mode 100644
index 0000000..68c7a93
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.scanner.expect
@@ -0,0 +1,691 @@
+int abstract(int x) {
+if (x == 0) return 42;
+return abstract(x-1) + 1;
+}
+
+int as(int x) {
+if (x == 0) return 42;
+return as(x-1) + 1;
+}
+
+int assert(int x) {
+if (x == 0) return 42;
+return assert(x-1) + 1;
+}
+
+int async(int x) {
+if (x == 0) return 42;
+return async(x-1) + 1;
+}
+
+int await(int x) {
+if (x == 0) return 42;
+return await(x-1) + 1;
+}
+
+int break(int x) {
+if (x == 0) return 42;
+return break(x-1) + 1;
+}
+
+int case(int x) {
+if (x == 0) return 42;
+return case(x-1) + 1;
+}
+
+int catch(int x) {
+if (x == 0) return 42;
+return catch(x-1) + 1;
+}
+
+int class(int x) {
+if (x == 0) return 42;
+return class(x-1) + 1;
+}
+
+int const(int x) {
+if (x == 0) return 42;
+return const(x-1) + 1;
+}
+
+int continue(int x) {
+if (x == 0) return 42;
+return continue(x-1) + 1;
+}
+
+int covariant(int x) {
+if (x == 0) return 42;
+return covariant(x-1) + 1;
+}
+
+int default(int x) {
+if (x == 0) return 42;
+return default(x-1) + 1;
+}
+
+int deferred(int x) {
+if (x == 0) return 42;
+return deferred(x-1) + 1;
+}
+
+int do(int x) {
+if (x == 0) return 42;
+return do(x-1) + 1;
+}
+
+int dynamic(int x) {
+if (x == 0) return 42;
+return dynamic(x-1) + 1;
+}
+
+int else(int x) {
+if (x == 0) return 42;
+return else(x-1) + 1;
+}
+
+int enum(int x) {
+if (x == 0) return 42;
+return enum(x-1) + 1;
+}
+
+int export(int x) {
+if (x == 0) return 42;
+return export(x-1) + 1;
+}
+
+int extends(int x) {
+if (x == 0) return 42;
+return extends(x-1) + 1;
+}
+
+int extension(int x) {
+if (x == 0) return 42;
+return extension(x-1) + 1;
+}
+
+int external(int x) {
+if (x == 0) return 42;
+return external(x-1) + 1;
+}
+
+int factory(int x) {
+if (x == 0) return 42;
+return factory(x-1) + 1;
+}
+
+int false(int x) {
+if (x == 0) return 42;
+return false(x-1) + 1;
+}
+
+int final(int x) {
+if (x == 0) return 42;
+return final(x-1) + 1;
+}
+
+int finally(int x) {
+if (x == 0) return 42;
+return finally(x-1) + 1;
+}
+
+int for(int x) {
+if (x == 0) return 42;
+return for(x-1) + 1;
+}
+
+int Function(int x) {
+if (x == 0) return 42;
+return Function(x-1) + 1;
+}
+
+int get(int x) {
+if (x == 0) return 42;
+return get(x-1) + 1;
+}
+
+int hide(int x) {
+if (x == 0) return 42;
+return hide(x-1) + 1;
+}
+
+int if(int x) {
+if (x == 0) return 42;
+return if(x-1) + 1;
+}
+
+int implements(int x) {
+if (x == 0) return 42;
+return implements(x-1) + 1;
+}
+
+int import(int x) {
+if (x == 0) return 42;
+return import(x-1) + 1;
+}
+
+int in(int x) {
+if (x == 0) return 42;
+return in(x-1) + 1;
+}
+
+int inout(int x) {
+if (x == 0) return 42;
+return inout(x-1) + 1;
+}
+
+int interface(int x) {
+if (x == 0) return 42;
+return interface(x-1) + 1;
+}
+
+int is(int x) {
+if (x == 0) return 42;
+return is(x-1) + 1;
+}
+
+int late(int x) {
+if (x == 0) return 42;
+return late(x-1) + 1;
+}
+
+int library(int x) {
+if (x == 0) return 42;
+return library(x-1) + 1;
+}
+
+int mixin(int x) {
+if (x == 0) return 42;
+return mixin(x-1) + 1;
+}
+
+int native(int x) {
+if (x == 0) return 42;
+return native(x-1) + 1;
+}
+
+int new(int x) {
+if (x == 0) return 42;
+return new(x-1) + 1;
+}
+
+int null(int x) {
+if (x == 0) return 42;
+return null(x-1) + 1;
+}
+
+int of(int x) {
+if (x == 0) return 42;
+return of(x-1) + 1;
+}
+
+int on(int x) {
+if (x == 0) return 42;
+return on(x-1) + 1;
+}
+
+int operator(int x) {
+if (x == 0) return 42;
+return operator(x-1) + 1;
+}
+
+int out(int x) {
+if (x == 0) return 42;
+return out(x-1) + 1;
+}
+
+int part(int x) {
+if (x == 0) return 42;
+return part(x-1) + 1;
+}
+
+int patch(int x) {
+if (x == 0) return 42;
+return patch(x-1) + 1;
+}
+
+int required(int x) {
+if (x == 0) return 42;
+return required(x-1) + 1;
+}
+
+int rethrow(int x) {
+if (x == 0) return 42;
+return rethrow(x-1) + 1;
+}
+
+int return(int x) {
+if (x == 0) return 42;
+return return(x-1) + 1;
+}
+
+int set(int x) {
+if (x == 0) return 42;
+return set(x-1) + 1;
+}
+
+int show(int x) {
+if (x == 0) return 42;
+return show(x-1) + 1;
+}
+
+int source(int x) {
+if (x == 0) return 42;
+return source(x-1) + 1;
+}
+
+int static(int x) {
+if (x == 0) return 42;
+return static(x-1) + 1;
+}
+
+int super(int x) {
+if (x == 0) return 42;
+return super(x-1) + 1;
+}
+
+int switch(int x) {
+if (x == 0) return 42;
+return switch(x-1) + 1;
+}
+
+int sync(int x) {
+if (x == 0) return 42;
+return sync(x-1) + 1;
+}
+
+int this(int x) {
+if (x == 0) return 42;
+return this(x-1) + 1;
+}
+
+int throw(int x) {
+if (x == 0) return 42;
+return throw(x-1) + 1;
+}
+
+int true(int x) {
+if (x == 0) return 42;
+return true(x-1) + 1;
+}
+
+int try(int x) {
+if (x == 0) return 42;
+return try(x-1) + 1;
+}
+
+int typedef(int x) {
+if (x == 0) return 42;
+return typedef(x-1) + 1;
+}
+
+int var(int x) {
+if (x == 0) return 42;
+return var(x-1) + 1;
+}
+
+int void(int x) {
+if (x == 0) return 42;
+return void(x-1) + 1;
+}
+
+int while(int x) {
+if (x == 0) return 42;
+return while(x-1) + 1;
+}
+
+int with(int x) {
+if (x == 0) return 42;
+return with(x-1) + 1;
+}
+
+int yield(int x) {
+if (x == 0) return 42;
+return yield(x-1) + 1;
+}
+
+
+int[StringToken] abstract[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] abstract[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] as[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] as[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] assert[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] assert[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] async[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] async[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] await[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] await[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] break[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] break[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] case[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] case[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] catch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] catch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] class[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] class[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] const[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] const[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] continue[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] continue[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] covariant[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] covariant[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] default[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] default[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] deferred[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] deferred[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] do[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] do[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] dynamic[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] dynamic[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] else[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] else[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] enum[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] enum[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] export[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] export[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extends[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extends[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extension[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extension[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] external[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] external[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] factory[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] factory[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] false[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] false[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] final[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] final[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] finally[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] finally[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] for[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] for[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] Function[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] Function[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] get[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] get[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] hide[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] hide[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] if[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] if[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] implements[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] implements[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] import[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] import[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] in[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] in[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] inout[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] inout[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] interface[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] interface[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] is[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] is[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] late[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] late[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] library[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] library[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] mixin[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] mixin[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] native[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] native[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] new[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] new[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] null[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] null[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] of[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] of[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] on[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] on[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] operator[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] operator[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] out[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] out[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] part[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] part[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] patch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] patch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] required[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] required[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] rethrow[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] rethrow[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] return[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] return[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] set[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] set[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] show[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] show[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] source[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] source[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] static[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] static[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] super[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] super[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] switch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] switch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] sync[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] sync[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] throw[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] throw[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] true[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] true[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] try[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] try[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] typedef[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] typedef[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] var[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] var[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] void[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] void[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] while[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] while[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] with[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] with[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] yield[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] yield[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart
new file mode 100644
index 0000000..32dc160
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart
@@ -0,0 +1,138 @@
+typedef void abstract();
+typedef abstract = void Function();
+typedef void as();
+typedef as = void Function();
+typedef void assert();
+typedef assert = void Function();
+typedef void async();
+typedef async = void Function();
+typedef void await();
+typedef await = void Function();
+typedef void break();
+typedef break = void Function();
+typedef void case();
+typedef case = void Function();
+typedef void catch();
+typedef catch = void Function();
+typedef void class();
+typedef class = void Function();
+typedef void const();
+typedef const = void Function();
+typedef void continue();
+typedef continue = void Function();
+typedef void covariant();
+typedef covariant = void Function();
+typedef void default();
+typedef default = void Function();
+typedef void deferred();
+typedef deferred = void Function();
+typedef void do();
+typedef do = void Function();
+typedef void dynamic();
+typedef dynamic = void Function();
+typedef void else();
+typedef else = void Function();
+typedef void enum();
+typedef enum = void Function();
+typedef void export();
+typedef export = void Function();
+typedef void extends();
+typedef extends = void Function();
+typedef void extension();
+typedef extension = void Function();
+typedef void external();
+typedef external = void Function();
+typedef void factory();
+typedef factory = void Function();
+typedef void false();
+typedef false = void Function();
+typedef void final();
+typedef final = void Function();
+typedef void finally();
+typedef finally = void Function();
+typedef void for();
+typedef for = void Function();
+typedef void Function();
+typedef Function = void Function();
+typedef void get();
+typedef get = void Function();
+typedef void hide();
+typedef hide = void Function();
+typedef void if();
+typedef if = void Function();
+typedef void implements();
+typedef implements = void Function();
+typedef void import();
+typedef import = void Function();
+typedef void in();
+typedef in = void Function();
+typedef void inout();
+typedef inout = void Function();
+typedef void interface();
+typedef interface = void Function();
+typedef void is();
+typedef is = void Function();
+typedef void late();
+typedef late = void Function();
+typedef void library();
+typedef library = void Function();
+typedef void mixin();
+typedef mixin = void Function();
+typedef void native();
+typedef native = void Function();
+typedef void new();
+typedef new = void Function();
+typedef void null();
+typedef null = void Function();
+typedef void of();
+typedef of = void Function();
+typedef void on();
+typedef on = void Function();
+typedef void operator();
+typedef operator = void Function();
+typedef void out();
+typedef out = void Function();
+typedef void part();
+typedef part = void Function();
+typedef void patch();
+typedef patch = void Function();
+typedef void required();
+typedef required = void Function();
+typedef void rethrow();
+typedef rethrow = void Function();
+typedef void return();
+typedef return = void Function();
+typedef void set();
+typedef set = void Function();
+typedef void show();
+typedef show = void Function();
+typedef void source();
+typedef source = void Function();
+typedef void static();
+typedef static = void Function();
+typedef void super();
+typedef super = void Function();
+typedef void switch();
+typedef switch = void Function();
+typedef void sync();
+typedef sync = void Function();
+typedef void this();
+typedef this = void Function();
+typedef void throw();
+typedef throw = void Function();
+typedef void true();
+typedef true = void Function();
+typedef void try();
+typedef try = void Function();
+typedef void typedef();
+typedef typedef = void Function();
+typedef void var();
+typedef var = void Function();
+typedef void void();
+typedef void = void Function();
+typedef void while();
+typedef while = void Function();
+typedef void with();
+typedef with = void Function();
+typedef void yield();
+typedef yield = void Function();
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.expect
new file mode 100644
index 0000000..4aee1df
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.expect
@@ -0,0 +1,4404 @@
+Problems reported:
+
+parser/error_recovery/keyword_named_typedefs:1:14: Can't use 'abstract' as a name here.
+typedef void abstract();
+             ^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:2:9: Can't use 'abstract' as a name here.
+typedef abstract = void Function();
+        ^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:2:18: A typedef needs an explicit list of parameters.
+typedef abstract = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:2:18: Expected ';' after this.
+typedef abstract = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:2:18: Expected a declaration, but got '='.
+typedef abstract = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:2:35: Expected a function body or '=>'.
+typedef abstract = void Function();
+                                  ^
+
+parser/error_recovery/keyword_named_typedefs:3:14: Can't use 'as' as a name here.
+typedef void as();
+             ^^
+
+parser/error_recovery/keyword_named_typedefs:4:9: Can't use 'as' as a name here.
+typedef as = void Function();
+        ^^
+
+parser/error_recovery/keyword_named_typedefs:4:12: A typedef needs an explicit list of parameters.
+typedef as = void Function();
+           ^
+
+parser/error_recovery/keyword_named_typedefs:4:12: Expected ';' after this.
+typedef as = void Function();
+           ^
+
+parser/error_recovery/keyword_named_typedefs:4:12: Expected a declaration, but got '='.
+typedef as = void Function();
+           ^
+
+parser/error_recovery/keyword_named_typedefs:4:29: Expected a function body or '=>'.
+typedef as = void Function();
+                            ^
+
+parser/error_recovery/keyword_named_typedefs:5:14: Expected an identifier, but got 'assert'.
+typedef void assert();
+             ^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:6:9: Expected an identifier, but got 'assert'.
+typedef assert = void Function();
+        ^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:6:16: A typedef needs an explicit list of parameters.
+typedef assert = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:6:16: Expected ';' after this.
+typedef assert = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:6:16: Expected a declaration, but got '='.
+typedef assert = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:6:33: Expected a function body or '=>'.
+typedef assert = void Function();
+                                ^
+
+parser/error_recovery/keyword_named_typedefs:11:14: Expected an identifier, but got 'break'.
+typedef void break();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:12:9: Expected an identifier, but got 'break'.
+typedef break = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:12:15: A typedef needs an explicit list of parameters.
+typedef break = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:12:15: Expected ';' after this.
+typedef break = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:12:15: Expected a declaration, but got '='.
+typedef break = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:12:32: Expected a function body or '=>'.
+typedef break = void Function();
+                               ^
+
+parser/error_recovery/keyword_named_typedefs:13:14: Expected an identifier, but got 'case'.
+typedef void case();
+             ^^^^
+
+parser/error_recovery/keyword_named_typedefs:14:9: Expected an identifier, but got 'case'.
+typedef case = void Function();
+        ^^^^
+
+parser/error_recovery/keyword_named_typedefs:14:14: A typedef needs an explicit list of parameters.
+typedef case = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:14:14: Expected ';' after this.
+typedef case = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:14:14: Expected a declaration, but got '='.
+typedef case = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:14:31: Expected a function body or '=>'.
+typedef case = void Function();
+                              ^
+
+parser/error_recovery/keyword_named_typedefs:15:14: Expected an identifier, but got 'catch'.
+typedef void catch();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:16:9: Expected an identifier, but got 'catch'.
+typedef catch = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:16:15: A typedef needs an explicit list of parameters.
+typedef catch = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:16:15: Expected ';' after this.
+typedef catch = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:16:15: Expected a declaration, but got '='.
+typedef catch = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:16:32: Expected a function body or '=>'.
+typedef catch = void Function();
+                               ^
+
+parser/error_recovery/keyword_named_typedefs:17:14: Expected an identifier, but got 'class'.
+typedef void class();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:17:14: A typedef needs an explicit list of parameters.
+typedef void class();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:17:14: Expected ';' after this.
+typedef void class();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:17:19: Expected an identifier, but got '('.
+typedef void class();
+                  ^
+
+parser/error_recovery/keyword_named_typedefs:17:20: A class declaration must have a body, even if it is empty.
+typedef void class();
+                   ^
+
+parser/error_recovery/keyword_named_typedefs:17:20: Expected a declaration, but got ')'.
+typedef void class();
+                   ^
+
+parser/error_recovery/keyword_named_typedefs:17:21: Unexpected token ';'.
+typedef void class();
+                    ^
+
+parser/error_recovery/keyword_named_typedefs:18:9: Expected an identifier, but got 'class'.
+typedef class = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:18:9: A typedef needs an explicit list of parameters.
+typedef class = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:18:9: Expected ';' after this.
+typedef class = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:18:15: Expected an identifier, but got '='.
+typedef class = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:18:17: A class declaration must have a body, even if it is empty.
+typedef class = void Function();
+                ^^^^
+
+parser/error_recovery/keyword_named_typedefs:18:32: Expected a function body or '=>'.
+typedef class = void Function();
+                               ^
+
+parser/error_recovery/keyword_named_typedefs:19:14: Expected an identifier, but got 'const'.
+typedef void const();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:19:14: A typedef needs an explicit list of parameters.
+typedef void const();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:19:14: Expected ';' after this.
+typedef void const();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:19:19: Expected an identifier, but got '('.
+typedef void const();
+                  ^
+
+parser/error_recovery/keyword_named_typedefs:19:14: Can't have modifier 'const' here.
+typedef void const();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:19:21: Expected a function body or '=>'.
+typedef void const();
+                    ^
+
+parser/error_recovery/keyword_named_typedefs:20:9: Expected an identifier, but got 'const'.
+typedef const = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:20:9: A typedef needs an explicit list of parameters.
+typedef const = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:20:9: Expected ';' after this.
+typedef const = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:20:15: Expected an identifier, but got '='.
+typedef const = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:20:17: Expected an identifier, but got 'void'.
+typedef const = void Function();
+                ^^^^
+
+parser/error_recovery/keyword_named_typedefs:20:17: Expected ';' after this.
+typedef const = void Function();
+                ^^^^
+
+parser/error_recovery/keyword_named_typedefs:20:32: Expected a function body or '=>'.
+typedef const = void Function();
+                               ^
+
+parser/error_recovery/keyword_named_typedefs:21:14: Expected an identifier, but got 'continue'.
+typedef void continue();
+             ^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:22:9: Expected an identifier, but got 'continue'.
+typedef continue = void Function();
+        ^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:22:18: A typedef needs an explicit list of parameters.
+typedef continue = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:22:18: Expected ';' after this.
+typedef continue = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:22:18: Expected a declaration, but got '='.
+typedef continue = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:22:35: Expected a function body or '=>'.
+typedef continue = void Function();
+                                  ^
+
+parser/error_recovery/keyword_named_typedefs:23:14: Can't use 'covariant' as a name here.
+typedef void covariant();
+             ^^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:24:9: Can't use 'covariant' as a name here.
+typedef covariant = void Function();
+        ^^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:24:19: A typedef needs an explicit list of parameters.
+typedef covariant = void Function();
+                  ^
+
+parser/error_recovery/keyword_named_typedefs:24:19: Expected ';' after this.
+typedef covariant = void Function();
+                  ^
+
+parser/error_recovery/keyword_named_typedefs:24:19: Expected a declaration, but got '='.
+typedef covariant = void Function();
+                  ^
+
+parser/error_recovery/keyword_named_typedefs:24:36: Expected a function body or '=>'.
+typedef covariant = void Function();
+                                   ^
+
+parser/error_recovery/keyword_named_typedefs:25:14: Expected an identifier, but got 'default'.
+typedef void default();
+             ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:26:9: Expected an identifier, but got 'default'.
+typedef default = void Function();
+        ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:26:17: A typedef needs an explicit list of parameters.
+typedef default = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:26:17: Expected ';' after this.
+typedef default = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:26:17: Expected a declaration, but got '='.
+typedef default = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:26:34: Expected a function body or '=>'.
+typedef default = void Function();
+                                 ^
+
+parser/error_recovery/keyword_named_typedefs:27:14: Can't use 'deferred' as a name here.
+typedef void deferred();
+             ^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:28:9: Can't use 'deferred' as a name here.
+typedef deferred = void Function();
+        ^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:28:18: A typedef needs an explicit list of parameters.
+typedef deferred = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:28:18: Expected ';' after this.
+typedef deferred = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:28:18: Expected a declaration, but got '='.
+typedef deferred = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:28:35: Expected a function body or '=>'.
+typedef deferred = void Function();
+                                  ^
+
+parser/error_recovery/keyword_named_typedefs:29:14: Expected an identifier, but got 'do'.
+typedef void do();
+             ^^
+
+parser/error_recovery/keyword_named_typedefs:30:9: Expected an identifier, but got 'do'.
+typedef do = void Function();
+        ^^
+
+parser/error_recovery/keyword_named_typedefs:30:12: A typedef needs an explicit list of parameters.
+typedef do = void Function();
+           ^
+
+parser/error_recovery/keyword_named_typedefs:30:12: Expected ';' after this.
+typedef do = void Function();
+           ^
+
+parser/error_recovery/keyword_named_typedefs:30:12: Expected a declaration, but got '='.
+typedef do = void Function();
+           ^
+
+parser/error_recovery/keyword_named_typedefs:30:29: Expected a function body or '=>'.
+typedef do = void Function();
+                            ^
+
+parser/error_recovery/keyword_named_typedefs:31:14: Can't use 'dynamic' as a name here.
+typedef void dynamic();
+             ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:32:9: Can't use 'dynamic' as a name here.
+typedef dynamic = void Function();
+        ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:32:17: A typedef needs an explicit list of parameters.
+typedef dynamic = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:32:17: Expected ';' after this.
+typedef dynamic = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:32:17: Expected a declaration, but got '='.
+typedef dynamic = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:32:34: Expected a function body or '=>'.
+typedef dynamic = void Function();
+                                 ^
+
+parser/error_recovery/keyword_named_typedefs:33:14: Expected an identifier, but got 'else'.
+typedef void else();
+             ^^^^
+
+parser/error_recovery/keyword_named_typedefs:34:9: Expected an identifier, but got 'else'.
+typedef else = void Function();
+        ^^^^
+
+parser/error_recovery/keyword_named_typedefs:34:14: A typedef needs an explicit list of parameters.
+typedef else = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:34:14: Expected ';' after this.
+typedef else = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:34:14: Expected a declaration, but got '='.
+typedef else = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:34:31: Expected a function body or '=>'.
+typedef else = void Function();
+                              ^
+
+parser/error_recovery/keyword_named_typedefs:35:14: Expected an identifier, but got 'enum'.
+typedef void enum();
+             ^^^^
+
+parser/error_recovery/keyword_named_typedefs:35:14: A typedef needs an explicit list of parameters.
+typedef void enum();
+             ^^^^
+
+parser/error_recovery/keyword_named_typedefs:35:14: Expected ';' after this.
+typedef void enum();
+             ^^^^
+
+parser/error_recovery/keyword_named_typedefs:35:18: Expected an identifier, but got '('.
+typedef void enum();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:35:19: Expected a enum body, but got ')'.
+typedef void enum();
+                  ^
+
+parser/error_recovery/keyword_named_typedefs:35:19: Expected a declaration, but got ')'.
+typedef void enum();
+                  ^
+
+parser/error_recovery/keyword_named_typedefs:35:20: Unexpected token ';'.
+typedef void enum();
+                   ^
+
+parser/error_recovery/keyword_named_typedefs:36:9: Expected an identifier, but got 'enum'.
+typedef enum = void Function();
+        ^^^^
+
+parser/error_recovery/keyword_named_typedefs:36:9: A typedef needs an explicit list of parameters.
+typedef enum = void Function();
+        ^^^^
+
+parser/error_recovery/keyword_named_typedefs:36:9: Expected ';' after this.
+typedef enum = void Function();
+        ^^^^
+
+parser/error_recovery/keyword_named_typedefs:36:14: Expected an identifier, but got '='.
+typedef enum = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:36:16: Expected a enum body, but got 'void'.
+typedef enum = void Function();
+               ^^^^
+
+parser/error_recovery/keyword_named_typedefs:36:31: Expected a function body or '=>'.
+typedef enum = void Function();
+                              ^
+
+parser/error_recovery/keyword_named_typedefs:37:14: Can't use 'export' as a name here.
+typedef void export();
+             ^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:38:9: Can't use 'export' as a name here.
+typedef export = void Function();
+        ^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:38:16: A typedef needs an explicit list of parameters.
+typedef export = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:38:16: Expected ';' after this.
+typedef export = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:38:16: Expected a declaration, but got '='.
+typedef export = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:38:33: Expected a function body or '=>'.
+typedef export = void Function();
+                                ^
+
+parser/error_recovery/keyword_named_typedefs:39:14: Expected an identifier, but got 'extends'.
+typedef void extends();
+             ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:40:9: Expected an identifier, but got 'extends'.
+typedef extends = void Function();
+        ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:40:17: A typedef needs an explicit list of parameters.
+typedef extends = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:40:17: Expected ';' after this.
+typedef extends = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:40:17: Expected a declaration, but got '='.
+typedef extends = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:40:34: Expected a function body or '=>'.
+typedef extends = void Function();
+                                 ^
+
+parser/error_recovery/keyword_named_typedefs:41:14: Can't use 'extension' as a name here.
+typedef void extension();
+             ^^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:42:9: Can't use 'extension' as a name here.
+typedef extension = void Function();
+        ^^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:42:19: A typedef needs an explicit list of parameters.
+typedef extension = void Function();
+                  ^
+
+parser/error_recovery/keyword_named_typedefs:42:19: Expected ';' after this.
+typedef extension = void Function();
+                  ^
+
+parser/error_recovery/keyword_named_typedefs:42:19: Expected a declaration, but got '='.
+typedef extension = void Function();
+                  ^
+
+parser/error_recovery/keyword_named_typedefs:42:36: Expected a function body or '=>'.
+typedef extension = void Function();
+                                   ^
+
+parser/error_recovery/keyword_named_typedefs:43:14: Can't use 'external' as a name here.
+typedef void external();
+             ^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:44:9: Can't use 'external' as a name here.
+typedef external = void Function();
+        ^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:44:18: A typedef needs an explicit list of parameters.
+typedef external = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:44:18: Expected ';' after this.
+typedef external = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:44:18: Expected a declaration, but got '='.
+typedef external = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:44:35: Expected a function body or '=>'.
+typedef external = void Function();
+                                  ^
+
+parser/error_recovery/keyword_named_typedefs:45:14: Can't use 'factory' as a name here.
+typedef void factory();
+             ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:46:9: Can't use 'factory' as a name here.
+typedef factory = void Function();
+        ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:46:17: A typedef needs an explicit list of parameters.
+typedef factory = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:46:17: Expected ';' after this.
+typedef factory = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:46:17: Expected a declaration, but got '='.
+typedef factory = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:46:34: Expected a function body or '=>'.
+typedef factory = void Function();
+                                 ^
+
+parser/error_recovery/keyword_named_typedefs:47:14: Expected an identifier, but got 'false'.
+typedef void false();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:48:9: Expected an identifier, but got 'false'.
+typedef false = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:48:15: A typedef needs an explicit list of parameters.
+typedef false = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:48:15: Expected ';' after this.
+typedef false = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:48:15: Expected a declaration, but got '='.
+typedef false = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:48:32: Expected a function body or '=>'.
+typedef false = void Function();
+                               ^
+
+parser/error_recovery/keyword_named_typedefs:49:14: Expected an identifier, but got 'final'.
+typedef void final();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:49:14: A typedef needs an explicit list of parameters.
+typedef void final();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:49:14: Expected ';' after this.
+typedef void final();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:49:19: Expected an identifier, but got '('.
+typedef void final();
+                  ^
+
+parser/error_recovery/keyword_named_typedefs:49:14: Can't have modifier 'final' here.
+typedef void final();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:49:21: Expected a function body or '=>'.
+typedef void final();
+                    ^
+
+parser/error_recovery/keyword_named_typedefs:50:9: Expected an identifier, but got 'final'.
+typedef final = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:50:9: A typedef needs an explicit list of parameters.
+typedef final = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:50:9: Expected ';' after this.
+typedef final = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:50:15: Expected an identifier, but got '='.
+typedef final = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:50:17: Expected an identifier, but got 'void'.
+typedef final = void Function();
+                ^^^^
+
+parser/error_recovery/keyword_named_typedefs:50:17: Expected ';' after this.
+typedef final = void Function();
+                ^^^^
+
+parser/error_recovery/keyword_named_typedefs:50:32: Expected a function body or '=>'.
+typedef final = void Function();
+                               ^
+
+parser/error_recovery/keyword_named_typedefs:51:14: Expected an identifier, but got 'finally'.
+typedef void finally();
+             ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:52:9: Expected an identifier, but got 'finally'.
+typedef finally = void Function();
+        ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:52:17: A typedef needs an explicit list of parameters.
+typedef finally = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:52:17: Expected ';' after this.
+typedef finally = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:52:17: Expected a declaration, but got '='.
+typedef finally = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:52:34: Expected a function body or '=>'.
+typedef finally = void Function();
+                                 ^
+
+parser/error_recovery/keyword_named_typedefs:53:14: Expected an identifier, but got 'for'.
+typedef void for();
+             ^^^
+
+parser/error_recovery/keyword_named_typedefs:54:9: Expected an identifier, but got 'for'.
+typedef for = void Function();
+        ^^^
+
+parser/error_recovery/keyword_named_typedefs:54:13: A typedef needs an explicit list of parameters.
+typedef for = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:54:13: Expected ';' after this.
+typedef for = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:54:13: Expected a declaration, but got '='.
+typedef for = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:54:30: Expected a function body or '=>'.
+typedef for = void Function();
+                             ^
+
+parser/error_recovery/keyword_named_typedefs:55:14: Expected an identifier, but got 'Function'.
+typedef void Function();
+             ^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:57:14: Can't use 'get' as a name here.
+typedef void get();
+             ^^^
+
+parser/error_recovery/keyword_named_typedefs:58:9: Can't use 'get' as a name here.
+typedef get = void Function();
+        ^^^
+
+parser/error_recovery/keyword_named_typedefs:58:13: A typedef needs an explicit list of parameters.
+typedef get = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:58:13: Expected ';' after this.
+typedef get = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:58:13: Expected a declaration, but got '='.
+typedef get = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:58:30: Expected a function body or '=>'.
+typedef get = void Function();
+                             ^
+
+parser/error_recovery/keyword_named_typedefs:61:14: Expected an identifier, but got 'if'.
+typedef void if();
+             ^^
+
+parser/error_recovery/keyword_named_typedefs:62:9: Expected an identifier, but got 'if'.
+typedef if = void Function();
+        ^^
+
+parser/error_recovery/keyword_named_typedefs:62:12: A typedef needs an explicit list of parameters.
+typedef if = void Function();
+           ^
+
+parser/error_recovery/keyword_named_typedefs:62:12: Expected ';' after this.
+typedef if = void Function();
+           ^
+
+parser/error_recovery/keyword_named_typedefs:62:12: Expected a declaration, but got '='.
+typedef if = void Function();
+           ^
+
+parser/error_recovery/keyword_named_typedefs:62:29: Expected a function body or '=>'.
+typedef if = void Function();
+                            ^
+
+parser/error_recovery/keyword_named_typedefs:63:14: Can't use 'implements' as a name here.
+typedef void implements();
+             ^^^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:64:9: Can't use 'implements' as a name here.
+typedef implements = void Function();
+        ^^^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:64:20: A typedef needs an explicit list of parameters.
+typedef implements = void Function();
+                   ^
+
+parser/error_recovery/keyword_named_typedefs:64:20: Expected ';' after this.
+typedef implements = void Function();
+                   ^
+
+parser/error_recovery/keyword_named_typedefs:64:20: Expected a declaration, but got '='.
+typedef implements = void Function();
+                   ^
+
+parser/error_recovery/keyword_named_typedefs:64:37: Expected a function body or '=>'.
+typedef implements = void Function();
+                                    ^
+
+parser/error_recovery/keyword_named_typedefs:65:14: Can't use 'import' as a name here.
+typedef void import();
+             ^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:66:9: Can't use 'import' as a name here.
+typedef import = void Function();
+        ^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:66:16: A typedef needs an explicit list of parameters.
+typedef import = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:66:16: Expected ';' after this.
+typedef import = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:66:16: Expected a declaration, but got '='.
+typedef import = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:66:33: Expected a function body or '=>'.
+typedef import = void Function();
+                                ^
+
+parser/error_recovery/keyword_named_typedefs:67:14: Expected an identifier, but got 'in'.
+typedef void in();
+             ^^
+
+parser/error_recovery/keyword_named_typedefs:68:9: Expected an identifier, but got 'in'.
+typedef in = void Function();
+        ^^
+
+parser/error_recovery/keyword_named_typedefs:68:12: A typedef needs an explicit list of parameters.
+typedef in = void Function();
+           ^
+
+parser/error_recovery/keyword_named_typedefs:68:12: Expected ';' after this.
+typedef in = void Function();
+           ^
+
+parser/error_recovery/keyword_named_typedefs:68:12: Expected a declaration, but got '='.
+typedef in = void Function();
+           ^
+
+parser/error_recovery/keyword_named_typedefs:68:29: Expected a function body or '=>'.
+typedef in = void Function();
+                            ^
+
+parser/error_recovery/keyword_named_typedefs:71:14: Can't use 'interface' as a name here.
+typedef void interface();
+             ^^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:72:9: Can't use 'interface' as a name here.
+typedef interface = void Function();
+        ^^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:72:19: A typedef needs an explicit list of parameters.
+typedef interface = void Function();
+                  ^
+
+parser/error_recovery/keyword_named_typedefs:72:19: Expected ';' after this.
+typedef interface = void Function();
+                  ^
+
+parser/error_recovery/keyword_named_typedefs:72:19: Expected a declaration, but got '='.
+typedef interface = void Function();
+                  ^
+
+parser/error_recovery/keyword_named_typedefs:72:36: Expected a function body or '=>'.
+typedef interface = void Function();
+                                   ^
+
+parser/error_recovery/keyword_named_typedefs:73:14: Expected an identifier, but got 'is'.
+typedef void is();
+             ^^
+
+parser/error_recovery/keyword_named_typedefs:74:9: Expected an identifier, but got 'is'.
+typedef is = void Function();
+        ^^
+
+parser/error_recovery/keyword_named_typedefs:74:12: A typedef needs an explicit list of parameters.
+typedef is = void Function();
+           ^
+
+parser/error_recovery/keyword_named_typedefs:74:12: Expected ';' after this.
+typedef is = void Function();
+           ^
+
+parser/error_recovery/keyword_named_typedefs:74:12: Expected a declaration, but got '='.
+typedef is = void Function();
+           ^
+
+parser/error_recovery/keyword_named_typedefs:74:29: Expected a function body or '=>'.
+typedef is = void Function();
+                            ^
+
+parser/error_recovery/keyword_named_typedefs:75:14: Can't use 'late' as a name here.
+typedef void late();
+             ^^^^
+
+parser/error_recovery/keyword_named_typedefs:76:9: Can't use 'late' as a name here.
+typedef late = void Function();
+        ^^^^
+
+parser/error_recovery/keyword_named_typedefs:76:14: A typedef needs an explicit list of parameters.
+typedef late = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:76:14: Expected ';' after this.
+typedef late = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:76:14: Expected a declaration, but got '='.
+typedef late = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:76:31: Expected a function body or '=>'.
+typedef late = void Function();
+                              ^
+
+parser/error_recovery/keyword_named_typedefs:77:14: Can't use 'library' as a name here.
+typedef void library();
+             ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:78:9: Can't use 'library' as a name here.
+typedef library = void Function();
+        ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:78:17: A typedef needs an explicit list of parameters.
+typedef library = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:78:17: Expected ';' after this.
+typedef library = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:78:17: Expected a declaration, but got '='.
+typedef library = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:78:34: Expected a function body or '=>'.
+typedef library = void Function();
+                                 ^
+
+parser/error_recovery/keyword_named_typedefs:79:14: Can't use 'mixin' as a name here.
+typedef void mixin();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:80:9: Can't use 'mixin' as a name here.
+typedef mixin = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:80:15: A typedef needs an explicit list of parameters.
+typedef mixin = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:80:15: Expected ';' after this.
+typedef mixin = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:80:15: Expected a declaration, but got '='.
+typedef mixin = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:80:32: Expected a function body or '=>'.
+typedef mixin = void Function();
+                               ^
+
+parser/error_recovery/keyword_named_typedefs:83:14: Expected an identifier, but got 'new'.
+typedef void new();
+             ^^^
+
+parser/error_recovery/keyword_named_typedefs:84:9: Expected an identifier, but got 'new'.
+typedef new = void Function();
+        ^^^
+
+parser/error_recovery/keyword_named_typedefs:84:13: A typedef needs an explicit list of parameters.
+typedef new = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:84:13: Expected ';' after this.
+typedef new = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:84:13: Expected a declaration, but got '='.
+typedef new = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:84:30: Expected a function body or '=>'.
+typedef new = void Function();
+                             ^
+
+parser/error_recovery/keyword_named_typedefs:85:14: Expected an identifier, but got 'null'.
+typedef void null();
+             ^^^^
+
+parser/error_recovery/keyword_named_typedefs:86:9: Expected an identifier, but got 'null'.
+typedef null = void Function();
+        ^^^^
+
+parser/error_recovery/keyword_named_typedefs:86:14: A typedef needs an explicit list of parameters.
+typedef null = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:86:14: Expected ';' after this.
+typedef null = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:86:14: Expected a declaration, but got '='.
+typedef null = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:86:31: Expected a function body or '=>'.
+typedef null = void Function();
+                              ^
+
+parser/error_recovery/keyword_named_typedefs:91:14: Can't use 'operator' as a name here.
+typedef void operator();
+             ^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:92:9: Can't use 'operator' as a name here.
+typedef operator = void Function();
+        ^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:92:18: A typedef needs an explicit list of parameters.
+typedef operator = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:92:18: Expected ';' after this.
+typedef operator = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:92:18: Expected a declaration, but got '='.
+typedef operator = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:92:35: Expected a function body or '=>'.
+typedef operator = void Function();
+                                  ^
+
+parser/error_recovery/keyword_named_typedefs:95:14: Can't use 'part' as a name here.
+typedef void part();
+             ^^^^
+
+parser/error_recovery/keyword_named_typedefs:96:9: Can't use 'part' as a name here.
+typedef part = void Function();
+        ^^^^
+
+parser/error_recovery/keyword_named_typedefs:96:14: A typedef needs an explicit list of parameters.
+typedef part = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:96:14: Expected ';' after this.
+typedef part = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:96:14: Expected a declaration, but got '='.
+typedef part = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:96:31: Expected a function body or '=>'.
+typedef part = void Function();
+                              ^
+
+parser/error_recovery/keyword_named_typedefs:99:14: Can't use 'required' as a name here.
+typedef void required();
+             ^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:100:9: Can't use 'required' as a name here.
+typedef required = void Function();
+        ^^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:100:18: A typedef needs an explicit list of parameters.
+typedef required = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:100:18: Expected ';' after this.
+typedef required = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:100:18: Expected a declaration, but got '='.
+typedef required = void Function();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:100:35: Expected a function body or '=>'.
+typedef required = void Function();
+                                  ^
+
+parser/error_recovery/keyword_named_typedefs:101:14: Expected an identifier, but got 'rethrow'.
+typedef void rethrow();
+             ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:102:9: Expected an identifier, but got 'rethrow'.
+typedef rethrow = void Function();
+        ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:102:17: A typedef needs an explicit list of parameters.
+typedef rethrow = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:102:17: Expected ';' after this.
+typedef rethrow = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:102:17: Expected a declaration, but got '='.
+typedef rethrow = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:102:34: Expected a function body or '=>'.
+typedef rethrow = void Function();
+                                 ^
+
+parser/error_recovery/keyword_named_typedefs:103:14: Expected an identifier, but got 'return'.
+typedef void return();
+             ^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:104:9: Expected an identifier, but got 'return'.
+typedef return = void Function();
+        ^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:104:16: A typedef needs an explicit list of parameters.
+typedef return = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:104:16: Expected ';' after this.
+typedef return = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:104:16: Expected a declaration, but got '='.
+typedef return = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:104:33: Expected a function body or '=>'.
+typedef return = void Function();
+                                ^
+
+parser/error_recovery/keyword_named_typedefs:105:14: Can't use 'set' as a name here.
+typedef void set();
+             ^^^
+
+parser/error_recovery/keyword_named_typedefs:106:9: Can't use 'set' as a name here.
+typedef set = void Function();
+        ^^^
+
+parser/error_recovery/keyword_named_typedefs:106:13: A typedef needs an explicit list of parameters.
+typedef set = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:106:13: Expected ';' after this.
+typedef set = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:106:13: Expected a declaration, but got '='.
+typedef set = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:106:30: Expected a function body or '=>'.
+typedef set = void Function();
+                             ^
+
+parser/error_recovery/keyword_named_typedefs:111:14: Can't use 'static' as a name here.
+typedef void static();
+             ^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:112:9: Can't use 'static' as a name here.
+typedef static = void Function();
+        ^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:112:16: A typedef needs an explicit list of parameters.
+typedef static = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:112:16: Expected ';' after this.
+typedef static = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:112:16: Expected a declaration, but got '='.
+typedef static = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:112:33: Expected a function body or '=>'.
+typedef static = void Function();
+                                ^
+
+parser/error_recovery/keyword_named_typedefs:113:14: Expected an identifier, but got 'super'.
+typedef void super();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:114:9: Expected an identifier, but got 'super'.
+typedef super = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:114:15: A typedef needs an explicit list of parameters.
+typedef super = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:114:15: Expected ';' after this.
+typedef super = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:114:15: Expected a declaration, but got '='.
+typedef super = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:114:32: Expected a function body or '=>'.
+typedef super = void Function();
+                               ^
+
+parser/error_recovery/keyword_named_typedefs:115:14: Expected an identifier, but got 'switch'.
+typedef void switch();
+             ^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:116:9: Expected an identifier, but got 'switch'.
+typedef switch = void Function();
+        ^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:116:16: A typedef needs an explicit list of parameters.
+typedef switch = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:116:16: Expected ';' after this.
+typedef switch = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:116:16: Expected a declaration, but got '='.
+typedef switch = void Function();
+               ^
+
+parser/error_recovery/keyword_named_typedefs:116:33: Expected a function body or '=>'.
+typedef switch = void Function();
+                                ^
+
+parser/error_recovery/keyword_named_typedefs:119:14: Expected an identifier, but got 'this'.
+typedef void this();
+             ^^^^
+
+parser/error_recovery/keyword_named_typedefs:120:9: Expected an identifier, but got 'this'.
+typedef this = void Function();
+        ^^^^
+
+parser/error_recovery/keyword_named_typedefs:120:14: A typedef needs an explicit list of parameters.
+typedef this = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:120:14: Expected ';' after this.
+typedef this = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:120:14: Expected a declaration, but got '='.
+typedef this = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:120:31: Expected a function body or '=>'.
+typedef this = void Function();
+                              ^
+
+parser/error_recovery/keyword_named_typedefs:121:14: Expected an identifier, but got 'throw'.
+typedef void throw();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:122:9: Expected an identifier, but got 'throw'.
+typedef throw = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:122:15: A typedef needs an explicit list of parameters.
+typedef throw = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:122:15: Expected ';' after this.
+typedef throw = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:122:15: Expected a declaration, but got '='.
+typedef throw = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:122:32: Expected a function body or '=>'.
+typedef throw = void Function();
+                               ^
+
+parser/error_recovery/keyword_named_typedefs:123:14: Expected an identifier, but got 'true'.
+typedef void true();
+             ^^^^
+
+parser/error_recovery/keyword_named_typedefs:124:9: Expected an identifier, but got 'true'.
+typedef true = void Function();
+        ^^^^
+
+parser/error_recovery/keyword_named_typedefs:124:14: A typedef needs an explicit list of parameters.
+typedef true = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:124:14: Expected ';' after this.
+typedef true = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:124:14: Expected a declaration, but got '='.
+typedef true = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:124:31: Expected a function body or '=>'.
+typedef true = void Function();
+                              ^
+
+parser/error_recovery/keyword_named_typedefs:125:14: Expected an identifier, but got 'try'.
+typedef void try();
+             ^^^
+
+parser/error_recovery/keyword_named_typedefs:126:9: Expected an identifier, but got 'try'.
+typedef try = void Function();
+        ^^^
+
+parser/error_recovery/keyword_named_typedefs:126:13: A typedef needs an explicit list of parameters.
+typedef try = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:126:13: Expected ';' after this.
+typedef try = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:126:13: Expected a declaration, but got '='.
+typedef try = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:126:30: Expected a function body or '=>'.
+typedef try = void Function();
+                             ^
+
+parser/error_recovery/keyword_named_typedefs:127:14: Can't use 'typedef' as a name here.
+typedef void typedef();
+             ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:128:9: Can't use 'typedef' as a name here.
+typedef typedef = void Function();
+        ^^^^^^^
+
+parser/error_recovery/keyword_named_typedefs:128:17: A typedef needs an explicit list of parameters.
+typedef typedef = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:128:17: Expected ';' after this.
+typedef typedef = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:128:17: Expected a declaration, but got '='.
+typedef typedef = void Function();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:128:34: Expected a function body or '=>'.
+typedef typedef = void Function();
+                                 ^
+
+parser/error_recovery/keyword_named_typedefs:129:14: Expected an identifier, but got 'var'.
+typedef void var();
+             ^^^
+
+parser/error_recovery/keyword_named_typedefs:129:14: A typedef needs an explicit list of parameters.
+typedef void var();
+             ^^^
+
+parser/error_recovery/keyword_named_typedefs:129:14: Expected ';' after this.
+typedef void var();
+             ^^^
+
+parser/error_recovery/keyword_named_typedefs:129:17: Expected an identifier, but got '('.
+typedef void var();
+                ^
+
+parser/error_recovery/keyword_named_typedefs:129:14: The return type can't be 'var'.
+typedef void var();
+             ^^^
+
+parser/error_recovery/keyword_named_typedefs:129:19: Expected a function body or '=>'.
+typedef void var();
+                  ^
+
+parser/error_recovery/keyword_named_typedefs:130:9: Expected an identifier, but got 'var'.
+typedef var = void Function();
+        ^^^
+
+parser/error_recovery/keyword_named_typedefs:130:9: A typedef needs an explicit list of parameters.
+typedef var = void Function();
+        ^^^
+
+parser/error_recovery/keyword_named_typedefs:130:9: Expected ';' after this.
+typedef var = void Function();
+        ^^^
+
+parser/error_recovery/keyword_named_typedefs:130:13: Expected an identifier, but got '='.
+typedef var = void Function();
+            ^
+
+parser/error_recovery/keyword_named_typedefs:130:15: Expected an identifier, but got 'void'.
+typedef var = void Function();
+              ^^^^
+
+parser/error_recovery/keyword_named_typedefs:130:15: Expected ';' after this.
+typedef var = void Function();
+              ^^^^
+
+parser/error_recovery/keyword_named_typedefs:130:30: Expected a function body or '=>'.
+typedef var = void Function();
+                             ^
+
+parser/error_recovery/keyword_named_typedefs:131:14: Expected an identifier, but got 'void'.
+typedef void void();
+             ^^^^
+
+parser/error_recovery/keyword_named_typedefs:131:14: A typedef needs an explicit list of parameters.
+typedef void void();
+             ^^^^
+
+parser/error_recovery/keyword_named_typedefs:131:14: Expected ';' after this.
+typedef void void();
+             ^^^^
+
+parser/error_recovery/keyword_named_typedefs:131:18: Expected an identifier, but got '('.
+typedef void void();
+                 ^
+
+parser/error_recovery/keyword_named_typedefs:131:20: Expected a function body or '=>'.
+typedef void void();
+                   ^
+
+parser/error_recovery/keyword_named_typedefs:132:14: Expected an identifier, but got '='.
+typedef void = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:132:14: A typedef needs an explicit list of parameters.
+typedef void = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:132:14: Expected ';' after this.
+typedef void = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:132:14: Expected a declaration, but got '='.
+typedef void = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:132:31: Expected a function body or '=>'.
+typedef void = void Function();
+                              ^
+
+parser/error_recovery/keyword_named_typedefs:133:14: Expected an identifier, but got 'while'.
+typedef void while();
+             ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:134:9: Expected an identifier, but got 'while'.
+typedef while = void Function();
+        ^^^^^
+
+parser/error_recovery/keyword_named_typedefs:134:15: A typedef needs an explicit list of parameters.
+typedef while = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:134:15: Expected ';' after this.
+typedef while = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:134:15: Expected a declaration, but got '='.
+typedef while = void Function();
+              ^
+
+parser/error_recovery/keyword_named_typedefs:134:32: Expected a function body or '=>'.
+typedef while = void Function();
+                               ^
+
+parser/error_recovery/keyword_named_typedefs:135:14: Expected an identifier, but got 'with'.
+typedef void with();
+             ^^^^
+
+parser/error_recovery/keyword_named_typedefs:136:9: Expected an identifier, but got 'with'.
+typedef with = void Function();
+        ^^^^
+
+parser/error_recovery/keyword_named_typedefs:136:14: A typedef needs an explicit list of parameters.
+typedef with = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:136:14: Expected ';' after this.
+typedef with = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:136:14: Expected a declaration, but got '='.
+typedef with = void Function();
+             ^
+
+parser/error_recovery/keyword_named_typedefs:136:31: Expected a function body or '=>'.
+typedef with = void Function();
+                              ^
+
+beginCompilationUnit(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginFunctionTypeAlias(typedef)
+    handleVoidKeyword(void)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {token: abstract}], abstract, abstract)
+    handleIdentifier(abstract, typedefDeclaration)
+    handleNoTypeVariables(()
+    beginFormalParameters((, MemberKind.FunctionTypeAlias)
+    endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+  endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+  handleNoType(typedef)
+  handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {token: abstract}], abstract, abstract)
+  handleIdentifier(abstract, typedefDeclaration)
+  handleNoTypeVariables(=)
+  handleRecoverableError(MissingTypedefParameters, =, =)
+  beginFormalParameters((, MemberKind.FunctionTypeAlias)
+  endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+  handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+  handleVoidKeyword(void)
+  handleIdentifier(Function, topLevelFunctionDeclaration)
+  handleNoTypeVariables(()
+  beginFormalParameters((, MemberKind.TopLevelMethod)
+  endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+  handleAsyncModifier(null, null)
+  handleRecoverableError(ExpectedBody, ;, ;)
+  handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {token: as}], as, as)
+handleIdentifier(as, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {token: as}], as, as)
+handleIdentifier(as, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+handleIdentifier(assert, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+handleIdentifier(assert, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleIdentifier(async, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleIdentifier(async, typedefDeclaration)
+handleNoTypeVariables(=)
+handleNoTypeVariables(()
+beginFunctionType(void)
+handleVoidKeyword(void)
+beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+endFunctionType(Function, null)
+endFunctionTypeAlias(typedef, =, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleIdentifier(await, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleIdentifier(await, typedefDeclaration)
+handleNoTypeVariables(=)
+handleNoTypeVariables(()
+beginFunctionType(void)
+handleVoidKeyword(void)
+beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+endFunctionType(Function, null)
+endFunctionTypeAlias(typedef, =, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+handleIdentifier(break, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+handleIdentifier(break, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+handleIdentifier(case, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+handleIdentifier(case, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+handleIdentifier(catch, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+handleIdentifier(catch, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+handleIdentifier(, typedefDeclaration)
+handleNoTypeVariables(class)
+handleRecoverableError(MissingTypedefParameters, class, class)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], class, class)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(class)
+beginMetadataStar(class)
+endMetadataStar(0)
+beginClassOrNamedMixinApplicationPrelude(class)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+handleIdentifier(, classOrMixinDeclaration)
+handleNoTypeVariables())
+beginClassDeclaration(class, null, )
+handleNoType()
+handleClassExtends(null)
+handleClassNoWithClause()
+handleClassOrMixinImplements(null, 0)
+handleClassHeader(class, class, null)
+handleNoType()
+handleClassExtends(null)
+handleClassNoWithClause()
+handleClassOrMixinImplements(null, 0)
+handleRecoverClassHeader()
+handleRecoverableError(Message[ExpectedClassOrMixinBody, A class declaration must have a body, even if it is empty., Try adding an empty body., {string: class declaration}], ), ))
+beginClassOrMixinBody(DeclarationKind.Class, {)
+endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+endClassDeclaration(class, })
+endTopLevelDeclaration())
+beginMetadataStar())
+endMetadataStar(0)
+beginTopLevelMember())
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got ')'., null, {token: )}], ), ))
+handleInvalidTopLevelDeclaration())
+endTopLevelDeclaration(;)
+beginMetadataStar(;)
+endMetadataStar(0)
+beginTopLevelMember(;)
+handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ;, ;)
+handleInvalidTopLevelDeclaration(;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+handleIdentifier(, typedefDeclaration)
+handleNoTypeVariables(class)
+handleRecoverableError(MissingTypedefParameters, class, class)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], class, class)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(class)
+beginMetadataStar(class)
+endMetadataStar(0)
+beginClassOrNamedMixinApplicationPrelude(class)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], =, =)
+handleIdentifier(, classOrMixinDeclaration)
+handleNoTypeVariables(void)
+beginClassDeclaration(class, null, )
+handleNoType()
+handleClassExtends(null)
+handleClassNoWithClause()
+handleClassOrMixinImplements(null, 0)
+handleClassHeader(class, class, null)
+handleNoType()
+handleClassExtends(null)
+handleClassNoWithClause()
+handleClassOrMixinImplements(null, 0)
+handleRecoverClassHeader()
+handleRecoverableError(Message[ExpectedClassOrMixinBody, A class declaration must have a body, even if it is empty., Try adding an empty body., {string: class declaration}], void, void)
+beginClassOrMixinBody(DeclarationKind.Class, {)
+endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+endClassDeclaration(class, })
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(}, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+handleIdentifier(, typedefDeclaration)
+handleNoTypeVariables(const)
+handleRecoverableError(MissingTypedefParameters, const, const)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], const, const)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(const)
+beginMetadataStar(const)
+endMetadataStar(0)
+beginTopLevelMember(const)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'const' here., Try removing 'const'., {token: const}], const, const)
+beginTopLevelMethod(;, null)
+handleNoType(const)
+handleIdentifier(, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(const, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+handleIdentifier(, typedefDeclaration)
+handleNoTypeVariables(const)
+handleRecoverableError(MissingTypedefParameters, const, const)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], const, const)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(const)
+beginMetadataStar(const)
+endMetadataStar(0)
+beginTopLevelMember(const)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], =, =)
+handleNoType(const)
+handleIdentifier(, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+handleIdentifier(, expression)
+handleNoTypeArguments(void)
+handleNoArguments(void)
+handleSend(, void)
+endFieldInitializer(=, void)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+endTopLevelFields(null, null, null, const, 1, const, ;)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(;, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+handleIdentifier(continue, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+handleIdentifier(continue, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {token: covariant}], covariant, covariant)
+handleIdentifier(covariant, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {token: covariant}], covariant, covariant)
+handleIdentifier(covariant, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+handleIdentifier(default, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+handleIdentifier(default, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {token: deferred}], deferred, deferred)
+handleIdentifier(deferred, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {token: deferred}], deferred, deferred)
+handleIdentifier(deferred, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+handleIdentifier(do, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+handleIdentifier(do, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {token: dynamic}], dynamic, dynamic)
+handleIdentifier(dynamic, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {token: dynamic}], dynamic, dynamic)
+handleIdentifier(dynamic, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+handleIdentifier(else, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+handleIdentifier(else, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+handleIdentifier(, typedefDeclaration)
+handleNoTypeVariables(enum)
+handleRecoverableError(MissingTypedefParameters, enum, enum)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], enum, enum)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(enum)
+beginMetadataStar(enum)
+endMetadataStar(0)
+beginEnum(enum)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+handleIdentifier(, enumDeclaration)
+handleRecoverableError(Message[ExpectedEnumBody, Expected a enum body, but got ')'., An enum definition must have a body with at least one constant name., {token: )}], ), ))
+endEnum(enum, {, 0)
+endTopLevelDeclaration())
+beginMetadataStar())
+endMetadataStar(0)
+beginTopLevelMember())
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got ')'., null, {token: )}], ), ))
+handleInvalidTopLevelDeclaration())
+endTopLevelDeclaration(;)
+beginMetadataStar(;)
+endMetadataStar(0)
+beginTopLevelMember(;)
+handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ;, ;)
+handleInvalidTopLevelDeclaration(;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+handleIdentifier(, typedefDeclaration)
+handleNoTypeVariables(enum)
+handleRecoverableError(MissingTypedefParameters, enum, enum)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], enum, enum)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(enum)
+beginMetadataStar(enum)
+endMetadataStar(0)
+beginEnum(enum)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], =, =)
+handleIdentifier(, enumDeclaration)
+handleRecoverableError(Message[ExpectedEnumBody, Expected a enum body, but got 'void'., An enum definition must have a body with at least one constant name., {token: void}], void, void)
+endEnum(enum, {, 0)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(}, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {token: export}], export, export)
+handleIdentifier(export, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {token: export}], export, export)
+handleIdentifier(export, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+handleIdentifier(extends, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+handleIdentifier(extends, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {token: extension}], extension, extension)
+handleIdentifier(extension, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {token: extension}], extension, extension)
+handleIdentifier(extension, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {token: external}], external, external)
+handleIdentifier(external, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {token: external}], external, external)
+handleIdentifier(external, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {token: factory}], factory, factory)
+handleIdentifier(factory, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {token: factory}], factory, factory)
+handleIdentifier(factory, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+handleIdentifier(false, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+handleIdentifier(false, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+handleIdentifier(, typedefDeclaration)
+handleNoTypeVariables(final)
+handleRecoverableError(MissingTypedefParameters, final, final)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(final)
+beginMetadataStar(final)
+endMetadataStar(0)
+beginTopLevelMember(final)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'final' here., Try removing 'final'., {token: final}], final, final)
+beginTopLevelMethod(;, null)
+handleNoType(final)
+handleIdentifier(, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(final, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+handleIdentifier(, typedefDeclaration)
+handleNoTypeVariables(final)
+handleRecoverableError(MissingTypedefParameters, final, final)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(final)
+beginMetadataStar(final)
+endMetadataStar(0)
+beginTopLevelMember(final)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], =, =)
+handleNoType(final)
+handleIdentifier(, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+handleIdentifier(, expression)
+handleNoTypeArguments(void)
+handleNoArguments(void)
+handleSend(, void)
+endFieldInitializer(=, void)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+endTopLevelFields(null, null, null, final, 1, final, ;)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(;, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+handleIdentifier(finally, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+handleIdentifier(finally, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+handleIdentifier(for, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+handleIdentifier(for, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'Function'., null, {token: Function}], Function, Function)
+handleIdentifier(Function, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleIdentifier(Function, typedefDeclaration)
+handleNoTypeVariables(=)
+handleNoTypeVariables(()
+beginFunctionType(void)
+handleVoidKeyword(void)
+beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+endFunctionType(Function, null)
+endFunctionTypeAlias(typedef, =, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {token: get}], get, get)
+handleIdentifier(get, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {token: get}], get, get)
+handleIdentifier(get, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleIdentifier(hide, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleIdentifier(hide, typedefDeclaration)
+handleNoTypeVariables(=)
+handleNoTypeVariables(()
+beginFunctionType(void)
+handleVoidKeyword(void)
+beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+endFunctionType(Function, null)
+endFunctionTypeAlias(typedef, =, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+handleIdentifier(if, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+handleIdentifier(if, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {token: implements}], implements, implements)
+handleIdentifier(implements, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {token: implements}], implements, implements)
+handleIdentifier(implements, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {token: import}], import, import)
+handleIdentifier(import, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {token: import}], import, import)
+handleIdentifier(import, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+handleIdentifier(in, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+handleIdentifier(in, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleIdentifier(inout, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleIdentifier(inout, typedefDeclaration)
+handleNoTypeVariables(=)
+handleNoTypeVariables(()
+beginFunctionType(void)
+handleVoidKeyword(void)
+beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+endFunctionType(Function, null)
+endFunctionTypeAlias(typedef, =, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {token: interface}], interface, interface)
+handleIdentifier(interface, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {token: interface}], interface, interface)
+handleIdentifier(interface, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+handleIdentifier(is, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+handleIdentifier(is, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {token: late}], late, late)
+handleIdentifier(late, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {token: late}], late, late)
+handleIdentifier(late, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {token: library}], library, library)
+handleIdentifier(library, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {token: library}], library, library)
+handleIdentifier(library, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {token: mixin}], mixin, mixin)
+handleIdentifier(mixin, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {token: mixin}], mixin, mixin)
+handleIdentifier(mixin, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleIdentifier(native, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleIdentifier(native, typedefDeclaration)
+handleNoTypeVariables(=)
+handleNoTypeVariables(()
+beginFunctionType(void)
+handleVoidKeyword(void)
+beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+endFunctionType(Function, null)
+endFunctionTypeAlias(typedef, =, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+handleIdentifier(new, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+handleIdentifier(new, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+handleIdentifier(null, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+handleIdentifier(null, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleIdentifier(of, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleIdentifier(of, typedefDeclaration)
+handleNoTypeVariables(=)
+handleNoTypeVariables(()
+beginFunctionType(void)
+handleVoidKeyword(void)
+beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+endFunctionType(Function, null)
+endFunctionTypeAlias(typedef, =, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleIdentifier(on, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleIdentifier(on, typedefDeclaration)
+handleNoTypeVariables(=)
+handleNoTypeVariables(()
+beginFunctionType(void)
+handleVoidKeyword(void)
+beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+endFunctionType(Function, null)
+endFunctionTypeAlias(typedef, =, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {token: operator}], operator, operator)
+handleIdentifier(operator, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {token: operator}], operator, operator)
+handleIdentifier(operator, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleIdentifier(out, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleIdentifier(out, typedefDeclaration)
+handleNoTypeVariables(=)
+handleNoTypeVariables(()
+beginFunctionType(void)
+handleVoidKeyword(void)
+beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+endFunctionType(Function, null)
+endFunctionTypeAlias(typedef, =, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {token: part}], part, part)
+handleIdentifier(part, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {token: part}], part, part)
+handleIdentifier(part, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleIdentifier(patch, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleIdentifier(patch, typedefDeclaration)
+handleNoTypeVariables(=)
+handleNoTypeVariables(()
+beginFunctionType(void)
+handleVoidKeyword(void)
+beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+endFunctionType(Function, null)
+endFunctionTypeAlias(typedef, =, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {token: required}], required, required)
+handleIdentifier(required, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {token: required}], required, required)
+handleIdentifier(required, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+handleIdentifier(rethrow, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+handleIdentifier(rethrow, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+handleIdentifier(return, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+handleIdentifier(return, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {token: set}], set, set)
+handleIdentifier(set, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {token: set}], set, set)
+handleIdentifier(set, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleIdentifier(show, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleIdentifier(show, typedefDeclaration)
+handleNoTypeVariables(=)
+handleNoTypeVariables(()
+beginFunctionType(void)
+handleVoidKeyword(void)
+beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+endFunctionType(Function, null)
+endFunctionTypeAlias(typedef, =, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleIdentifier(source, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleIdentifier(source, typedefDeclaration)
+handleNoTypeVariables(=)
+handleNoTypeVariables(()
+beginFunctionType(void)
+handleVoidKeyword(void)
+beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+endFunctionType(Function, null)
+endFunctionTypeAlias(typedef, =, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {token: static}], static, static)
+handleIdentifier(static, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {token: static}], static, static)
+handleIdentifier(static, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+handleIdentifier(super, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+handleIdentifier(super, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+handleIdentifier(switch, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+handleIdentifier(switch, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleIdentifier(sync, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleIdentifier(sync, typedefDeclaration)
+handleNoTypeVariables(=)
+handleNoTypeVariables(()
+beginFunctionType(void)
+handleVoidKeyword(void)
+beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+endFunctionType(Function, null)
+endFunctionTypeAlias(typedef, =, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+handleIdentifier(this, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+handleIdentifier(this, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+handleIdentifier(throw, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+handleIdentifier(throw, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+handleIdentifier(true, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+handleIdentifier(true, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+handleIdentifier(try, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+handleIdentifier(try, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {token: typedef}], typedef, typedef)
+handleIdentifier(typedef, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {token: typedef}], typedef, typedef)
+handleIdentifier(typedef, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+handleIdentifier(, typedefDeclaration)
+handleNoTypeVariables(var)
+handleRecoverableError(MissingTypedefParameters, var, var)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(var)
+beginMetadataStar(var)
+endMetadataStar(0)
+beginTopLevelMember(var)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+handleRecoverableError(VarReturnType, var, var)
+beginTopLevelMethod(;, null)
+handleNoType(var)
+handleIdentifier(, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(var, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+handleIdentifier(, typedefDeclaration)
+handleNoTypeVariables(var)
+handleRecoverableError(MissingTypedefParameters, var, var)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(var)
+beginMetadataStar(var)
+endMetadataStar(0)
+beginTopLevelMember(var)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], =, =)
+handleNoType(var)
+handleIdentifier(, topLevelVariableDeclaration)
+beginFieldInitializer(=)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+handleIdentifier(, expression)
+handleNoTypeArguments(void)
+handleNoArguments(void)
+handleSend(, void)
+endFieldInitializer(=, void)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+endTopLevelFields(null, null, null, var, 1, var, ;)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(;, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+handleIdentifier(, typedefDeclaration)
+handleNoTypeVariables(void)
+handleRecoverableError(MissingTypedefParameters, void, void)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+beginTopLevelMethod(;, null)
+handleVoidKeyword(void)
+handleIdentifier(, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], =, =)
+handleIdentifier(, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+handleIdentifier(while, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+handleIdentifier(while, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+handleIdentifier(with, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleNoType(typedef)
+handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+handleIdentifier(with, typedefDeclaration)
+handleNoTypeVariables(=)
+handleRecoverableError(MissingTypedefParameters, =, =)
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(=)
+beginMetadataStar(=)
+endMetadataStar(0)
+beginTopLevelMember(=)
+handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+handleInvalidTopLevelDeclaration(=)
+endTopLevelDeclaration(void)
+beginMetadataStar(void)
+endMetadataStar(0)
+beginTopLevelMember(void)
+beginTopLevelMethod(=, null)
+handleVoidKeyword(void)
+handleIdentifier(Function, topLevelFunctionDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.TopLevelMethod)
+endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+handleAsyncModifier(null, null)
+handleRecoverableError(ExpectedBody, ;, ;)
+handleEmptyFunctionBody(;)
+endTopLevelMethod(void, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleVoidKeyword(void)
+handleIdentifier(yield, typedefDeclaration)
+handleNoTypeVariables(()
+beginFormalParameters((, MemberKind.FunctionTypeAlias)
+endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+endFunctionTypeAlias(typedef, null, ;)
+endTopLevelDeclaration(typedef)
+beginMetadataStar(typedef)
+endMetadataStar(0)
+beginFunctionTypeAlias(typedef)
+handleIdentifier(yield, typedefDeclaration)
+handleNoTypeVariables(=)
+handleNoTypeVariables(()
+beginFunctionType(void)
+handleVoidKeyword(void)
+beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+endFunctionType(Function, null)
+endFunctionTypeAlias(typedef, =, ;)
+endTopLevelDeclaration()
+endCompilationUnit(258, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect
new file mode 100644
index 0000000..a112c82
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect
@@ -0,0 +1,5745 @@
+parseUnit(typedef)
+  skipErrorTokens(typedef)
+  listener: beginCompilationUnit(typedef)
+  syntheticPreviousToken(typedef)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {token: abstract}], abstract, abstract)
+          listener: handleIdentifier(abstract, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(abstract, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {token: abstract}], abstract, abstract)
+          listener: handleIdentifier(abstract, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(abstract, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {token: as}], as, as)
+          listener: handleIdentifier(as, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(as, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {token: as}], as, as)
+          listener: handleIdentifier(as, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(as, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+          listener: handleIdentifier(assert, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(assert, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+          listener: handleIdentifier(assert, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(assert, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          listener: handleIdentifier(async, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(async, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleIdentifier(async, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: handleNoTypeVariables(()
+        listener: beginFunctionType(void)
+        listener: handleVoidKeyword(void)
+        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+        listener: endFunctionType(Function, null)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, =, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          listener: handleIdentifier(await, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(await, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleIdentifier(await, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: handleNoTypeVariables(()
+        listener: beginFunctionType(void)
+        listener: handleVoidKeyword(void)
+        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+        listener: endFunctionType(Function, null)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, =, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+          listener: handleIdentifier(break, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(break, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+          listener: handleIdentifier(break, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(break, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+          listener: handleIdentifier(case, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(case, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+          listener: handleIdentifier(case, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(case, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+          listener: handleIdentifier(catch, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(catch, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+          listener: handleIdentifier(catch, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(catch, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          insertSyntheticIdentifier(void, typedefDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], messageOnToken: null)
+            reportRecoverableError(class, Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}])
+              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+            rewriter()
+          listener: handleIdentifier(, typedefDeclaration)
+        listener: handleNoTypeVariables(class)
+        parseFormalParametersRequiredOpt(, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(class, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, class, class)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], class, class)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, 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)
+          reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+          rewriter()
+          listener: handleIdentifier(, classOrMixinDeclaration)
+        listener: handleNoTypeVariables())
+        listener: beginClassDeclaration(class, null, )
+        parseClass(, class, class, )
+          parseClassHeaderOpt(, class, class)
+            parseClassExtendsOpt()
+              listener: handleNoType()
+              listener: handleClassExtends(null)
+            parseWithClauseOpt()
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt()
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassHeaderRecovery(, class, class)
+            parseClassHeaderOpt(, class, class)
+              parseClassExtendsOpt()
+              parseWithClauseOpt()
+              parseClassOrMixinImplementsOpt()
+            skipUnexpectedTokenOpt(, [extends, with, implements, {])
+            parseClassExtendsOpt()
+              listener: handleNoType()
+              listener: handleClassExtends(null)
+            parseWithClauseOpt()
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt()
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleRecoverClassHeader()
+          ensureBlock(, null, class declaration)
+            reportRecoverableError(, Message[ExpectedClassOrMixinBody, A class declaration must have a body, even if it is empty., Try adding an empty body., {string: class declaration}])
+              listener: handleRecoverableError(Message[ExpectedClassOrMixinBody, A class declaration must have a body, even if it is empty., Try adding an empty body., {string: class declaration}], ), ))
+            insertBlock()
+              rewriter()
+              rewriter()
+          parseClassOrMixinOrExtensionBody(, DeclarationKind.Class, )
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration())
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar())
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember())
+    parseInvalidTopLevelDeclaration(})
+      reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got ')'., null, {token: )}], ), ))
+      listener: handleInvalidTopLevelDeclaration())
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(), Instance of 'DirectiveContext')
+    parseMetadataStar())
+      listener: beginMetadataStar(;)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(;)
+    parseInvalidTopLevelDeclaration())
+      reportRecoverableErrorWithToken(;, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ;, ;)
+      listener: handleInvalidTopLevelDeclaration(;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          insertSyntheticIdentifier(typedef, typedefDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], messageOnToken: null)
+            reportRecoverableError(class, Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}])
+              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+            rewriter()
+          listener: handleIdentifier(, typedefDeclaration)
+        listener: handleNoTypeVariables(class)
+        parseFormalParametersRequiredOpt(, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(class, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, class, class)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], class, class)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, 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)
+          reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], =, =)
+          rewriter()
+          listener: handleIdentifier(, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(void)
+        listener: beginClassDeclaration(class, null, )
+        parseClass(, class, class, )
+          parseClassHeaderOpt(, class, class)
+            parseClassExtendsOpt()
+              listener: handleNoType()
+              listener: handleClassExtends(null)
+            parseWithClauseOpt()
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt()
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassHeaderRecovery(, class, class)
+            parseClassHeaderOpt(, class, class)
+              parseClassExtendsOpt()
+              parseWithClauseOpt()
+              parseClassOrMixinImplementsOpt()
+            skipUnexpectedTokenOpt(, [extends, with, implements, {])
+            parseClassExtendsOpt()
+              listener: handleNoType()
+              listener: handleClassExtends(null)
+            parseWithClauseOpt()
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt()
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleRecoverClassHeader()
+          ensureBlock(, null, class declaration)
+            reportRecoverableError(, Message[ExpectedClassOrMixinBody, A class declaration must have a body, even if it is empty., Try adding an empty body., {string: class declaration}])
+              listener: handleRecoverableError(Message[ExpectedClassOrMixinBody, A class declaration must have a body, even if it is empty., Try adding an empty body., {string: class declaration}], void, void)
+            insertBlock()
+              rewriter()
+              rewriter()
+          parseClassOrMixinOrExtensionBody(, DeclarationKind.Class, )
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          insertSyntheticIdentifier(void, typedefDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], messageOnToken: null)
+            reportRecoverableError(const, Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}])
+              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+            rewriter()
+          listener: handleIdentifier(, typedefDeclaration)
+        listener: handleNoTypeVariables(const)
+        parseFormalParametersRequiredOpt(, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(const, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, const, const)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], const, const)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(const)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(const)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(const)
+      insertSyntheticIdentifier(const, methodDeclaration, message: null, messageOnToken: null)
+        reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
+          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+        rewriter()
+      reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'const' here., Try removing 'const'., {token: const}], const, const)
+      parseTopLevelMethod(;, null, const, Instance of 'NoType', null, , false)
+        listener: beginTopLevelMethod(;, null)
+        listener: handleNoType(const)
+        ensureIdentifierPotentiallyRecovered(const, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(, topLevelFunctionDeclaration)
+        parseMethodTypeVar()
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(, , false, MemberKind.TopLevelMethod)
+          parseFormalParameters(, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(const, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          insertSyntheticIdentifier(typedef, typedefDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], messageOnToken: null)
+            reportRecoverableError(const, Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}])
+              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+            rewriter()
+          listener: handleIdentifier(, typedefDeclaration)
+        listener: handleNoTypeVariables(const)
+        parseFormalParametersRequiredOpt(, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(const, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, const, const)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], const, const)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(const)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(const)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(const)
+      insertSyntheticIdentifier(const, methodDeclaration, message: null, messageOnToken: null)
+        reportRecoverableError(=, Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}])
+          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], =, =)
+        rewriter()
+      parseFields(;, null, null, null, null, const, const, Instance of 'NoType', , DeclarationKind.TopLevel, null, false)
+        listener: handleNoType(const)
+        ensureIdentifierPotentiallyRecovered(const, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(, , null, const, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      ensureIdentifier(=, expression)
+                        reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
+                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+                        rewriter()
+                        listener: handleIdentifier(, expression)
+                      listener: handleNoTypeArguments(void)
+                      parseArgumentsOpt()
+                        listener: handleNoArguments(void)
+                      listener: handleSend(, void)
+          listener: endFieldInitializer(=, void)
+        ensureSemicolon()
+          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, const, 1, const, ;)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(;, null, ;, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(;, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+          listener: handleIdentifier(continue, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(continue, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+          listener: handleIdentifier(continue, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(continue, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {token: covariant}], covariant, covariant)
+          listener: handleIdentifier(covariant, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(covariant, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {token: covariant}], covariant, covariant)
+          listener: handleIdentifier(covariant, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(covariant, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+          listener: handleIdentifier(default, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(default, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+          listener: handleIdentifier(default, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(default, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {token: deferred}], deferred, deferred)
+          listener: handleIdentifier(deferred, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(deferred, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {token: deferred}], deferred, deferred)
+          listener: handleIdentifier(deferred, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(deferred, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+          listener: handleIdentifier(do, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(do, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+          listener: handleIdentifier(do, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(do, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {token: dynamic}], dynamic, dynamic)
+          listener: handleIdentifier(dynamic, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(dynamic, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {token: dynamic}], dynamic, dynamic)
+          listener: handleIdentifier(dynamic, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(dynamic, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+          listener: handleIdentifier(else, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(else, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+          listener: handleIdentifier(else, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(else, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          insertSyntheticIdentifier(void, typedefDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], messageOnToken: null)
+            reportRecoverableError(enum, Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}])
+              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+            rewriter()
+          listener: handleIdentifier(, typedefDeclaration)
+        listener: handleNoTypeVariables(enum)
+        parseFormalParametersRequiredOpt(, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(enum, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, enum, enum)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], enum, enum)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(enum)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, enum, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, enum)
+      parseEnum(enum)
+        listener: beginEnum(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+          rewriter()
+          listener: handleIdentifier(, enumDeclaration)
+        ensureBlock(, Instance of 'Template<(Token) => Message>', null)
+          reportRecoverableError(), Message[ExpectedEnumBody, Expected a enum body, but got ')'., An enum definition must have a body with at least one constant name., {token: )}])
+            listener: handleRecoverableError(Message[ExpectedEnumBody, Expected a enum body, but got ')'., An enum definition must have a body with at least one constant name., {token: )}], ), ))
+          insertBlock()
+            rewriter()
+            rewriter()
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration())
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar())
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember())
+    parseInvalidTopLevelDeclaration(})
+      reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got ')'., null, {token: )}], ), ))
+      listener: handleInvalidTopLevelDeclaration())
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(), Instance of 'DirectiveContext')
+    parseMetadataStar())
+      listener: beginMetadataStar(;)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(;)
+    parseInvalidTopLevelDeclaration())
+      reportRecoverableErrorWithToken(;, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ;, ;)
+      listener: handleInvalidTopLevelDeclaration(;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          insertSyntheticIdentifier(typedef, typedefDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], messageOnToken: null)
+            reportRecoverableError(enum, Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}])
+              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+            rewriter()
+          listener: handleIdentifier(, typedefDeclaration)
+        listener: handleNoTypeVariables(enum)
+        parseFormalParametersRequiredOpt(, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(enum, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, enum, enum)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], enum, enum)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(enum)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, enum, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, enum)
+      parseEnum(enum)
+        listener: beginEnum(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], =, =)
+          rewriter()
+          listener: handleIdentifier(, enumDeclaration)
+        ensureBlock(, Instance of 'Template<(Token) => Message>', null)
+          reportRecoverableError(void, Message[ExpectedEnumBody, Expected a enum body, but got 'void'., An enum definition must have a body with at least one constant name., {token: void}])
+            listener: handleRecoverableError(Message[ExpectedEnumBody, Expected a enum body, but got 'void'., An enum definition must have a body with at least one constant name., {token: void}], void, void)
+          insertBlock()
+            rewriter()
+            rewriter()
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {token: export}], export, export)
+          listener: handleIdentifier(export, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(export, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {token: export}], export, export)
+          listener: handleIdentifier(export, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(export, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+          listener: handleIdentifier(extends, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(extends, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+          listener: handleIdentifier(extends, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(extends, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {token: extension}], extension, extension)
+          listener: handleIdentifier(extension, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(extension, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {token: extension}], extension, extension)
+          listener: handleIdentifier(extension, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(extension, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {token: external}], external, external)
+          listener: handleIdentifier(external, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(external, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {token: external}], external, external)
+          listener: handleIdentifier(external, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(external, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {token: factory}], factory, factory)
+          listener: handleIdentifier(factory, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(factory, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {token: factory}], factory, factory)
+          listener: handleIdentifier(factory, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(factory, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+          listener: handleIdentifier(false, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(false, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+          listener: handleIdentifier(false, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(false, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          insertSyntheticIdentifier(void, typedefDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], messageOnToken: null)
+            reportRecoverableError(final, Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}])
+              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+            rewriter()
+          listener: handleIdentifier(, typedefDeclaration)
+        listener: handleNoTypeVariables(final)
+        parseFormalParametersRequiredOpt(, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(final, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, final, final)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(final)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(final)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(final)
+      insertSyntheticIdentifier(final, methodDeclaration, message: null, messageOnToken: null)
+        reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
+          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+        rewriter()
+      reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'final' here., Try removing 'final'., {token: final}], final, final)
+      parseTopLevelMethod(;, null, final, Instance of 'NoType', null, , false)
+        listener: beginTopLevelMethod(;, null)
+        listener: handleNoType(final)
+        ensureIdentifierPotentiallyRecovered(final, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(, topLevelFunctionDeclaration)
+        parseMethodTypeVar()
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(, , false, MemberKind.TopLevelMethod)
+          parseFormalParameters(, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(final, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          insertSyntheticIdentifier(typedef, typedefDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], messageOnToken: null)
+            reportRecoverableError(final, Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}])
+              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+            rewriter()
+          listener: handleIdentifier(, typedefDeclaration)
+        listener: handleNoTypeVariables(final)
+        parseFormalParametersRequiredOpt(, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(final, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, final, final)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(final)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(final)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(final)
+      insertSyntheticIdentifier(final, methodDeclaration, message: null, messageOnToken: null)
+        reportRecoverableError(=, Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}])
+          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], =, =)
+        rewriter()
+      parseFields(;, null, null, null, null, final, final, Instance of 'NoType', , DeclarationKind.TopLevel, null, false)
+        listener: handleNoType(final)
+        ensureIdentifierPotentiallyRecovered(final, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(, , null, final, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      ensureIdentifier(=, expression)
+                        reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
+                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+                        rewriter()
+                        listener: handleIdentifier(, expression)
+                      listener: handleNoTypeArguments(void)
+                      parseArgumentsOpt()
+                        listener: handleNoArguments(void)
+                      listener: handleSend(, void)
+          listener: endFieldInitializer(=, void)
+        ensureSemicolon()
+          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, final, 1, final, ;)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(;, null, ;, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(;, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+          listener: handleIdentifier(finally, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(finally, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+          listener: handleIdentifier(finally, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(finally, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+          listener: handleIdentifier(for, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(for, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+          listener: handleIdentifier(for, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(for, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(Function, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'Function'., null, {token: Function}], Function, Function)
+          listener: handleIdentifier(Function, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(Function, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleIdentifier(Function, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: handleNoTypeVariables(()
+        listener: beginFunctionType(void)
+        listener: handleVoidKeyword(void)
+        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+        listener: endFunctionType(Function, null)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, =, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {token: get}], get, get)
+          listener: handleIdentifier(get, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(get, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {token: get}], get, get)
+          listener: handleIdentifier(get, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(get, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          listener: handleIdentifier(hide, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(hide, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleIdentifier(hide, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: handleNoTypeVariables(()
+        listener: beginFunctionType(void)
+        listener: handleVoidKeyword(void)
+        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+        listener: endFunctionType(Function, null)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, =, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+          listener: handleIdentifier(if, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(if, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+          listener: handleIdentifier(if, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(if, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {token: implements}], implements, implements)
+          listener: handleIdentifier(implements, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(implements, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {token: implements}], implements, implements)
+          listener: handleIdentifier(implements, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(implements, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {token: import}], import, import)
+          listener: handleIdentifier(import, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(import, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {token: import}], import, import)
+          listener: handleIdentifier(import, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(import, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+          listener: handleIdentifier(in, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(in, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+          listener: handleIdentifier(in, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(in, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          listener: handleIdentifier(inout, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(inout, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleIdentifier(inout, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: handleNoTypeVariables(()
+        listener: beginFunctionType(void)
+        listener: handleVoidKeyword(void)
+        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+        listener: endFunctionType(Function, null)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, =, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {token: interface}], interface, interface)
+          listener: handleIdentifier(interface, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(interface, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {token: interface}], interface, interface)
+          listener: handleIdentifier(interface, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(interface, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+          listener: handleIdentifier(is, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(is, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+          listener: handleIdentifier(is, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(is, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {token: late}], late, late)
+          listener: handleIdentifier(late, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(late, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {token: late}], late, late)
+          listener: handleIdentifier(late, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(late, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {token: library}], library, library)
+          listener: handleIdentifier(library, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(library, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {token: library}], library, library)
+          listener: handleIdentifier(library, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(library, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {token: mixin}], mixin, mixin)
+          listener: handleIdentifier(mixin, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(mixin, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {token: mixin}], mixin, mixin)
+          listener: handleIdentifier(mixin, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(mixin, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          listener: handleIdentifier(native, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(native, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleIdentifier(native, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: handleNoTypeVariables(()
+        listener: beginFunctionType(void)
+        listener: handleVoidKeyword(void)
+        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+        listener: endFunctionType(Function, null)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, =, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+          listener: handleIdentifier(new, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(new, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+          listener: handleIdentifier(new, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(new, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+          listener: handleIdentifier(null, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(null, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+          listener: handleIdentifier(null, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(null, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          listener: handleIdentifier(of, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(of, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleIdentifier(of, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: handleNoTypeVariables(()
+        listener: beginFunctionType(void)
+        listener: handleVoidKeyword(void)
+        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+        listener: endFunctionType(Function, null)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, =, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          listener: handleIdentifier(on, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(on, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleIdentifier(on, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: handleNoTypeVariables(()
+        listener: beginFunctionType(void)
+        listener: handleVoidKeyword(void)
+        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+        listener: endFunctionType(Function, null)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, =, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {token: operator}], operator, operator)
+          listener: handleIdentifier(operator, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(operator, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {token: operator}], operator, operator)
+          listener: handleIdentifier(operator, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(operator, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          listener: handleIdentifier(out, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(out, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleIdentifier(out, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: handleNoTypeVariables(()
+        listener: beginFunctionType(void)
+        listener: handleVoidKeyword(void)
+        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+        listener: endFunctionType(Function, null)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, =, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {token: part}], part, part)
+          listener: handleIdentifier(part, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(part, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {token: part}], part, part)
+          listener: handleIdentifier(part, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(part, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          listener: handleIdentifier(patch, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(patch, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleIdentifier(patch, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: handleNoTypeVariables(()
+        listener: beginFunctionType(void)
+        listener: handleVoidKeyword(void)
+        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+        listener: endFunctionType(Function, null)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, =, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {token: required}], required, required)
+          listener: handleIdentifier(required, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(required, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {token: required}], required, required)
+          listener: handleIdentifier(required, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(required, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+          listener: handleIdentifier(rethrow, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(rethrow, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+          listener: handleIdentifier(rethrow, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(rethrow, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+          listener: handleIdentifier(return, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(return, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+          listener: handleIdentifier(return, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(return, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {token: set}], set, set)
+          listener: handleIdentifier(set, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(set, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {token: set}], set, set)
+          listener: handleIdentifier(set, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(set, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          listener: handleIdentifier(show, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(show, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleIdentifier(show, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: handleNoTypeVariables(()
+        listener: beginFunctionType(void)
+        listener: handleVoidKeyword(void)
+        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+        listener: endFunctionType(Function, null)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, =, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          listener: handleIdentifier(source, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(source, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleIdentifier(source, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: handleNoTypeVariables(()
+        listener: beginFunctionType(void)
+        listener: handleVoidKeyword(void)
+        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+        listener: endFunctionType(Function, null)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, =, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {token: static}], static, static)
+          listener: handleIdentifier(static, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(static, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {token: static}], static, static)
+          listener: handleIdentifier(static, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(static, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+          listener: handleIdentifier(super, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(super, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+          listener: handleIdentifier(super, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(super, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+          listener: handleIdentifier(switch, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(switch, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+          listener: handleIdentifier(switch, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(switch, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          listener: handleIdentifier(sync, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(sync, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleIdentifier(sync, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: handleNoTypeVariables(()
+        listener: beginFunctionType(void)
+        listener: handleVoidKeyword(void)
+        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+        listener: endFunctionType(Function, null)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, =, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+          listener: handleIdentifier(this, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(this, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+          listener: handleIdentifier(this, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(this, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+          listener: handleIdentifier(throw, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(throw, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+          listener: handleIdentifier(throw, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(throw, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+          listener: handleIdentifier(true, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(true, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+          listener: handleIdentifier(true, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(true, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+          listener: handleIdentifier(try, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(try, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+          listener: handleIdentifier(try, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(try, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {token: typedef}], typedef, typedef)
+          listener: handleIdentifier(typedef, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(typedef, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {token: typedef}], typedef, typedef)
+          listener: handleIdentifier(typedef, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(typedef, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          insertSyntheticIdentifier(void, typedefDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], messageOnToken: null)
+            reportRecoverableError(var, Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}])
+              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+            rewriter()
+          listener: handleIdentifier(, typedefDeclaration)
+        listener: handleNoTypeVariables(var)
+        parseFormalParametersRequiredOpt(, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(var, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, var, var)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(var)
+      insertSyntheticIdentifier(var, methodDeclaration, message: null, messageOnToken: null)
+        reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
+          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+        rewriter()
+      reportRecoverableError(var, VarReturnType)
+        listener: handleRecoverableError(VarReturnType, var, var)
+      parseTopLevelMethod(;, null, var, Instance of 'NoType', null, , false)
+        listener: beginTopLevelMethod(;, null)
+        listener: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(, topLevelFunctionDeclaration)
+        parseMethodTypeVar()
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(, , false, MemberKind.TopLevelMethod)
+          parseFormalParameters(, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(var, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          insertSyntheticIdentifier(typedef, typedefDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], messageOnToken: null)
+            reportRecoverableError(var, Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}])
+              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+            rewriter()
+          listener: handleIdentifier(, typedefDeclaration)
+        listener: handleNoTypeVariables(var)
+        parseFormalParametersRequiredOpt(, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(var, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, var, var)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(var)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(var)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(var)
+      insertSyntheticIdentifier(var, methodDeclaration, message: null, messageOnToken: null)
+        reportRecoverableError(=, Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}])
+          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], =, =)
+        rewriter()
+      parseFields(;, null, null, null, null, var, var, Instance of 'NoType', , DeclarationKind.TopLevel, null, false)
+        listener: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(, , null, var, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseSendOrFunctionLiteral(=, expression)
+                    looksLikeFunctionBody(;)
+                    parseSend(=, expression)
+                      ensureIdentifier(=, expression)
+                        reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
+                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+                        rewriter()
+                        listener: handleIdentifier(, expression)
+                      listener: handleNoTypeArguments(void)
+                      parseArgumentsOpt()
+                        listener: handleNoArguments(void)
+                      listener: handleSend(, void)
+          listener: endFieldInitializer(=, void)
+        ensureSemicolon()
+          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, var, 1, var, ;)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(;, null, ;, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(;, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          insertSyntheticIdentifier(void, typedefDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], messageOnToken: null)
+            reportRecoverableError(void, Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}])
+              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+            rewriter()
+          listener: handleIdentifier(, typedefDeclaration)
+        listener: handleNoTypeVariables(void)
+        parseFormalParametersRequiredOpt(, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(void, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, void, void)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(void)
+      insertSyntheticIdentifier(void, methodDeclaration, message: null, messageOnToken: null)
+        reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
+          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+        rewriter()
+      parseTopLevelMethod(;, null, ;, Instance of 'VoidType', null, , false)
+        listener: beginTopLevelMethod(;, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(, topLevelFunctionDeclaration)
+        parseMethodTypeVar()
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(, , false, MemberKind.TopLevelMethod)
+          parseFormalParameters(, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          insertSyntheticIdentifier(void, typedefDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], messageOnToken: null)
+            reportRecoverableError(=, Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}])
+              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], =, =)
+            rewriter()
+          listener: handleIdentifier(, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+          listener: handleIdentifier(while, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(while, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+          listener: handleIdentifier(while, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(while, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+          listener: handleIdentifier(with, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(with, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleNoType(typedef)
+        ensureIdentifier(typedef, typedefDeclaration)
+          reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+          listener: handleIdentifier(with, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        parseFormalParametersRequiredOpt(with, MemberKind.FunctionTypeAlias)
+          missingParameterMessage(MemberKind.FunctionTypeAlias)
+          reportRecoverableError(=, MissingTypedefParameters)
+            listener: handleRecoverableError(MissingTypedefParameters, =, =)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          rewriter()
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(=)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(=)
+      listener: endMetadataStar(0)
+    listener: beginTopLevelMember(=)
+    parseInvalidTopLevelDeclaration(;)
+      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+      listener: handleInvalidTopLevelDeclaration(=)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(=, Instance of 'DirectiveContext')
+    parseMetadataStar(=)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(=)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          reportRecoverableError(;, ExpectedBody)
+            listener: handleRecoverableError(ExpectedBody, ;, ;)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(void, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleVoidKeyword(void)
+        ensureIdentifier(void, typedefDeclaration)
+          listener: handleIdentifier(yield, typedefDeclaration)
+        listener: handleNoTypeVariables(()
+        parseFormalParametersRequiredOpt(yield, MemberKind.FunctionTypeAlias)
+          parseFormalParametersRest((, MemberKind.FunctionTypeAlias)
+            listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
+            listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, null, ;)
+  listener: endTopLevelDeclaration(typedef)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(typedef)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+      parseTopLevelKeywordModifiers(;, typedef)
+      parseTypedef(typedef)
+        listener: beginFunctionTypeAlias(typedef)
+        listener: handleIdentifier(yield, typedefDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: handleNoTypeVariables(()
+        listener: beginFunctionType(void)
+        listener: handleVoidKeyword(void)
+        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+        listener: endFunctionType(Function, null)
+        ensureSemicolon())
+        listener: endFunctionTypeAlias(typedef, =, ;)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(typedef)
+  listener: endCompilationUnit(258, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.parser.expect
new file mode 100644
index 0000000..eb2551e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.parser.expect
@@ -0,0 +1,281 @@
+NOTICE: Stream was rewritten by parser!
+
+typedef void abstract();
+typedef abstract ();= void Function();
+typedef void as();
+typedef as ();= void Function();
+typedef void assert();
+typedef assert ();= void Function();
+typedef void async();
+typedef async = void Function();
+typedef void await();
+typedef await = void Function();
+typedef void break();
+typedef break ();= void Function();
+typedef void case();
+typedef case ();= void Function();
+typedef void catch();
+typedef catch ();= void Function();
+typedef void ();class({});
+typedef ();class = {}void Function();
+typedef void ();const();
+typedef ();const = ;void Function();
+typedef void continue();
+typedef continue ();= void Function();
+typedef void covariant();
+typedef covariant ();= void Function();
+typedef void default();
+typedef default ();= void Function();
+typedef void deferred();
+typedef deferred ();= void Function();
+typedef void do();
+typedef do ();= void Function();
+typedef void dynamic();
+typedef dynamic ();= void Function();
+typedef void else();
+typedef else ();= void Function();
+typedef void ();enum({});
+typedef ();enum = {}void Function();
+typedef void export();
+typedef export ();= void Function();
+typedef void extends();
+typedef extends ();= void Function();
+typedef void extension();
+typedef extension ();= void Function();
+typedef void external();
+typedef external ();= void Function();
+typedef void factory();
+typedef factory ();= void Function();
+typedef void false();
+typedef false ();= void Function();
+typedef void ();final();
+typedef ();final = ;void Function();
+typedef void finally();
+typedef finally ();= void Function();
+typedef void for();
+typedef for ();= void Function();
+typedef void Function();
+typedef Function = void Function();
+typedef void get();
+typedef get ();= void Function();
+typedef void hide();
+typedef hide = void Function();
+typedef void if();
+typedef if ();= void Function();
+typedef void implements();
+typedef implements ();= void Function();
+typedef void import();
+typedef import ();= void Function();
+typedef void in();
+typedef in ();= void Function();
+typedef void inout();
+typedef inout = void Function();
+typedef void interface();
+typedef interface ();= void Function();
+typedef void is();
+typedef is ();= void Function();
+typedef void late();
+typedef late ();= void Function();
+typedef void library();
+typedef library ();= void Function();
+typedef void mixin();
+typedef mixin ();= void Function();
+typedef void native();
+typedef native = void Function();
+typedef void new();
+typedef new ();= void Function();
+typedef void null();
+typedef null ();= void Function();
+typedef void of();
+typedef of = void Function();
+typedef void on();
+typedef on = void Function();
+typedef void operator();
+typedef operator ();= void Function();
+typedef void out();
+typedef out = void Function();
+typedef void part();
+typedef part ();= void Function();
+typedef void patch();
+typedef patch = void Function();
+typedef void required();
+typedef required ();= void Function();
+typedef void rethrow();
+typedef rethrow ();= void Function();
+typedef void return();
+typedef return ();= void Function();
+typedef void set();
+typedef set ();= void Function();
+typedef void show();
+typedef show = void Function();
+typedef void source();
+typedef source = void Function();
+typedef void static();
+typedef static ();= void Function();
+typedef void super();
+typedef super ();= void Function();
+typedef void switch();
+typedef switch ();= void Function();
+typedef void sync();
+typedef sync = void Function();
+typedef void this();
+typedef this ();= void Function();
+typedef void throw();
+typedef throw ();= void Function();
+typedef void true();
+typedef true ();= void Function();
+typedef void try();
+typedef try ();= void Function();
+typedef void typedef();
+typedef typedef ();= void Function();
+typedef void ();var();
+typedef ();var = ;void Function();
+typedef void ();void();
+typedef void ();= void Function();
+typedef void while();
+typedef while ();= void Function();
+typedef void with();
+typedef with ();= void Function();
+typedef void yield();
+typedef yield = void Function();
+
+
+typedef[KeywordToken] void[KeywordToken] abstract[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] abstract[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] as[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] as[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] assert[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] assert[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] async[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] async[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] await[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] await[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] break[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] break[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] case[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] case[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] catch[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] catch[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]class[KeywordToken]([BeginToken][SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]class[KeywordToken] =[SimpleToken] [SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken]void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]const[KeywordToken][SyntheticStringToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]const[KeywordToken] [SyntheticStringToken]=[SimpleToken] [SyntheticStringToken];[SyntheticToken]void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] continue[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] continue[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] covariant[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] covariant[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] default[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] default[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] deferred[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] deferred[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] do[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] do[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] dynamic[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] dynamic[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] else[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] else[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]enum[KeywordToken]([BeginToken][SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]enum[KeywordToken] =[SimpleToken] [SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken]void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] export[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] export[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] extends[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] extends[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] extension[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] extension[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] external[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] external[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] factory[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] factory[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] false[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] false[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]final[KeywordToken][SyntheticStringToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]final[KeywordToken] [SyntheticStringToken]=[SimpleToken] [SyntheticStringToken];[SyntheticToken]void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] finally[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] finally[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] for[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] for[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] Function[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] get[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] get[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] hide[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] hide[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] if[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] if[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] implements[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] implements[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] import[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] import[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] in[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] in[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] inout[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] inout[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] interface[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] interface[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] is[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] is[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] late[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] late[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] library[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] library[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] mixin[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] mixin[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] native[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] native[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] new[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] null[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] null[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] of[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] of[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] on[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] on[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] operator[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] operator[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] out[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] out[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] part[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] part[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] patch[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] patch[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] required[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] required[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] rethrow[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] rethrow[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] return[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] return[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] set[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] set[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] show[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] show[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] source[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] source[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] static[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] static[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] super[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] switch[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] switch[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] sync[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] sync[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] this[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] this[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] throw[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] throw[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] true[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] true[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] try[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] try[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] typedef[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] typedef[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]var[KeywordToken][SyntheticStringToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]var[KeywordToken] [SyntheticStringToken]=[SimpleToken] [SyntheticStringToken];[SyntheticToken]void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]void[KeywordToken][SyntheticStringToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] while[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] while[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] with[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] with[KeywordToken] ([SyntheticBeginToken])[SyntheticToken];[SyntheticToken]=[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] yield[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] yield[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.scanner.expect
new file mode 100644
index 0000000..ab05c4f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.scanner.expect
@@ -0,0 +1,279 @@
+typedef void abstract();
+typedef abstract = void Function();
+typedef void as();
+typedef as = void Function();
+typedef void assert();
+typedef assert = void Function();
+typedef void async();
+typedef async = void Function();
+typedef void await();
+typedef await = void Function();
+typedef void break();
+typedef break = void Function();
+typedef void case();
+typedef case = void Function();
+typedef void catch();
+typedef catch = void Function();
+typedef void class();
+typedef class = void Function();
+typedef void const();
+typedef const = void Function();
+typedef void continue();
+typedef continue = void Function();
+typedef void covariant();
+typedef covariant = void Function();
+typedef void default();
+typedef default = void Function();
+typedef void deferred();
+typedef deferred = void Function();
+typedef void do();
+typedef do = void Function();
+typedef void dynamic();
+typedef dynamic = void Function();
+typedef void else();
+typedef else = void Function();
+typedef void enum();
+typedef enum = void Function();
+typedef void export();
+typedef export = void Function();
+typedef void extends();
+typedef extends = void Function();
+typedef void extension();
+typedef extension = void Function();
+typedef void external();
+typedef external = void Function();
+typedef void factory();
+typedef factory = void Function();
+typedef void false();
+typedef false = void Function();
+typedef void final();
+typedef final = void Function();
+typedef void finally();
+typedef finally = void Function();
+typedef void for();
+typedef for = void Function();
+typedef void Function();
+typedef Function = void Function();
+typedef void get();
+typedef get = void Function();
+typedef void hide();
+typedef hide = void Function();
+typedef void if();
+typedef if = void Function();
+typedef void implements();
+typedef implements = void Function();
+typedef void import();
+typedef import = void Function();
+typedef void in();
+typedef in = void Function();
+typedef void inout();
+typedef inout = void Function();
+typedef void interface();
+typedef interface = void Function();
+typedef void is();
+typedef is = void Function();
+typedef void late();
+typedef late = void Function();
+typedef void library();
+typedef library = void Function();
+typedef void mixin();
+typedef mixin = void Function();
+typedef void native();
+typedef native = void Function();
+typedef void new();
+typedef new = void Function();
+typedef void null();
+typedef null = void Function();
+typedef void of();
+typedef of = void Function();
+typedef void on();
+typedef on = void Function();
+typedef void operator();
+typedef operator = void Function();
+typedef void out();
+typedef out = void Function();
+typedef void part();
+typedef part = void Function();
+typedef void patch();
+typedef patch = void Function();
+typedef void required();
+typedef required = void Function();
+typedef void rethrow();
+typedef rethrow = void Function();
+typedef void return();
+typedef return = void Function();
+typedef void set();
+typedef set = void Function();
+typedef void show();
+typedef show = void Function();
+typedef void source();
+typedef source = void Function();
+typedef void static();
+typedef static = void Function();
+typedef void super();
+typedef super = void Function();
+typedef void switch();
+typedef switch = void Function();
+typedef void sync();
+typedef sync = void Function();
+typedef void this();
+typedef this = void Function();
+typedef void throw();
+typedef throw = void Function();
+typedef void true();
+typedef true = void Function();
+typedef void try();
+typedef try = void Function();
+typedef void typedef();
+typedef typedef = void Function();
+typedef void var();
+typedef var = void Function();
+typedef void void();
+typedef void = void Function();
+typedef void while();
+typedef while = void Function();
+typedef void with();
+typedef with = void Function();
+typedef void yield();
+typedef yield = void Function();
+
+
+typedef[KeywordToken] void[KeywordToken] abstract[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] abstract[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] as[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] as[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] assert[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] assert[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] async[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] async[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] await[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] await[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] break[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] break[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] case[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] case[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] catch[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] catch[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] class[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] class[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] const[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] const[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] continue[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] continue[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] covariant[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] covariant[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] default[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] default[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] deferred[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] deferred[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] do[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] do[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] dynamic[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] dynamic[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] else[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] else[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] enum[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] enum[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] export[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] export[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] extends[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] extends[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] extension[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] extension[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] external[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] external[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] factory[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] factory[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] false[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] false[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] final[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] final[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] finally[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] finally[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] for[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] for[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] Function[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] get[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] get[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] hide[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] hide[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] if[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] if[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] implements[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] implements[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] import[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] import[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] in[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] in[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] inout[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] inout[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] interface[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] interface[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] is[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] is[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] late[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] late[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] library[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] library[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] mixin[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] mixin[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] native[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] native[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] new[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] null[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] null[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] of[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] of[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] on[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] on[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] operator[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] operator[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] out[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] out[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] part[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] part[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] patch[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] patch[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] required[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] required[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] rethrow[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] rethrow[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] return[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] return[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] set[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] set[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] show[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] show[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] source[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] source[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] static[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] static[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] super[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] switch[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] switch[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] sync[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] sync[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] this[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] this[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] throw[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] throw[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] true[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] true[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] try[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] try[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] typedef[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] typedef[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] var[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] var[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] void[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] while[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] while[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] with[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] with[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] void[KeywordToken] yield[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] yield[KeywordToken] =[SimpleToken] void[KeywordToken] Function[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_fields.dart b/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_fields.dart
deleted file mode 100644
index 30ca978..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_fields.dart
+++ /dev/null
@@ -1,35 +0,0 @@
-class WrapperClass {
-  int assert = 42;
-  int break = 42;
-  int case = 42;
-  int catch = 42;
-  int class = 42;
-  int const = 42;
-  int continue = 42;
-  int default = 42;
-  int do = 42;
-  int else = 42;
-  int enum = 42;
-  int extends = 42;
-  int false = 42;
-  int final = 42;
-  int finally = 42;
-  int for = 42;
-  int if = 42;
-  int in = 42;
-  int is = 42;
-  int new = 42;
-  int null = 42;
-  int rethrow = 42;
-  int return = 42;
-  int super = 42;
-  int switch = 42;
-  int this = 42;
-  int throw = 42;
-  int true = 42;
-  int try = 42;
-  int var = 42;
-  int void = 42;
-  int while = 42;
-  int with = 42;
-}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_fields.dart.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_fields.dart.expect
deleted file mode 100644
index 22fd6c3..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_fields.dart.expect
+++ /dev/null
@@ -1,580 +0,0 @@
-Problems reported:
-
-parser/error_recovery/reserved_words_class_fields:2:7: Expected an identifier, but got 'assert'.
-  int assert = 42;
-      ^^^^^^
-
-parser/error_recovery/reserved_words_class_fields:3:7: Expected an identifier, but got 'break'.
-  int break = 42;
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_fields:4:7: Expected an identifier, but got 'case'.
-  int case = 42;
-      ^^^^
-
-parser/error_recovery/reserved_words_class_fields:5:7: Expected an identifier, but got 'catch'.
-  int catch = 42;
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_fields:6:7: Expected an identifier, but got 'class'.
-  int class = 42;
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_fields:7:7: Expected an identifier, but got 'const'.
-  int const = 42;
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_fields:8:7: Expected an identifier, but got 'continue'.
-  int continue = 42;
-      ^^^^^^^^
-
-parser/error_recovery/reserved_words_class_fields:9:7: Expected an identifier, but got 'default'.
-  int default = 42;
-      ^^^^^^^
-
-parser/error_recovery/reserved_words_class_fields:10:7: Expected an identifier, but got 'do'.
-  int do = 42;
-      ^^
-
-parser/error_recovery/reserved_words_class_fields:11:7: Expected an identifier, but got 'else'.
-  int else = 42;
-      ^^^^
-
-parser/error_recovery/reserved_words_class_fields:12:7: Expected an identifier, but got 'enum'.
-  int enum = 42;
-      ^^^^
-
-parser/error_recovery/reserved_words_class_fields:13:7: Expected an identifier, but got 'extends'.
-  int extends = 42;
-      ^^^^^^^
-
-parser/error_recovery/reserved_words_class_fields:14:7: Expected an identifier, but got 'false'.
-  int false = 42;
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_fields:15:7: Expected an identifier, but got 'final'.
-  int final = 42;
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_fields:16:7: Expected an identifier, but got 'finally'.
-  int finally = 42;
-      ^^^^^^^
-
-parser/error_recovery/reserved_words_class_fields:17:7: Expected an identifier, but got 'for'.
-  int for = 42;
-      ^^^
-
-parser/error_recovery/reserved_words_class_fields:18:7: Expected an identifier, but got 'if'.
-  int if = 42;
-      ^^
-
-parser/error_recovery/reserved_words_class_fields:19:7: Expected an identifier, but got 'in'.
-  int in = 42;
-      ^^
-
-parser/error_recovery/reserved_words_class_fields:20:7: Expected an identifier, but got 'is'.
-  int is = 42;
-      ^^
-
-parser/error_recovery/reserved_words_class_fields:21:7: Expected an identifier, but got 'new'.
-  int new = 42;
-      ^^^
-
-parser/error_recovery/reserved_words_class_fields:22:7: Expected an identifier, but got 'null'.
-  int null = 42;
-      ^^^^
-
-parser/error_recovery/reserved_words_class_fields:23:7: Expected an identifier, but got 'rethrow'.
-  int rethrow = 42;
-      ^^^^^^^
-
-parser/error_recovery/reserved_words_class_fields:24:7: Expected an identifier, but got 'return'.
-  int return = 42;
-      ^^^^^^
-
-parser/error_recovery/reserved_words_class_fields:25:7: Expected an identifier, but got 'super'.
-  int super = 42;
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_fields:26:7: Expected an identifier, but got 'switch'.
-  int switch = 42;
-      ^^^^^^
-
-parser/error_recovery/reserved_words_class_fields:27:7: Expected an identifier, but got 'this'.
-  int this = 42;
-      ^^^^
-
-parser/error_recovery/reserved_words_class_fields:28:7: Expected an identifier, but got 'throw'.
-  int throw = 42;
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_fields:29:7: Expected an identifier, but got 'true'.
-  int true = 42;
-      ^^^^
-
-parser/error_recovery/reserved_words_class_fields:30:7: Expected an identifier, but got 'try'.
-  int try = 42;
-      ^^^
-
-parser/error_recovery/reserved_words_class_fields:31:7: Expected an identifier, but got 'var'.
-  int var = 42;
-      ^^^
-
-parser/error_recovery/reserved_words_class_fields:32:7: Expected an identifier, but got 'void'.
-  int void = 42;
-      ^^^^
-
-parser/error_recovery/reserved_words_class_fields:33:7: Expected an identifier, but got 'while'.
-  int while = 42;
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_fields:34:7: Expected an identifier, but got 'with'.
-  int with = 42;
-      ^^^^
-
-beginCompilationUnit(class)
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(WrapperClass, classOrMixinDeclaration)
-    handleNoTypeVariables({)
-    beginClassDeclaration(class, null, WrapperClass)
-      handleNoType(WrapperClass)
-      handleClassExtends(null)
-      handleClassNoWithClause()
-      handleClassOrMixinImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(assert)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
-          handleIdentifier(assert, fieldDeclaration)
-          beginFieldInitializer(=)
-            handleLiteralInt(42)
-          endFieldInitializer(=, ;)
-        endClassFields(null, null, null, null, 1, int, ;)
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        handleIdentifier(int, typeReference)
-        handleNoTypeArguments(break)
-        handleType(int, null)
-        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-        handleIdentifier(break, fieldDeclaration)
-        beginFieldInitializer(=)
-          handleLiteralInt(42)
-        endFieldInitializer(=, ;)
-      endClassFields(null, null, null, null, 1, int, ;)
-    endMember()
-    beginMetadataStar(int)
-    endMetadataStar(0)
-    beginMember()
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(case)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-      handleIdentifier(case, fieldDeclaration)
-      beginFieldInitializer(=)
-        handleLiteralInt(42)
-      endFieldInitializer(=, ;)
-    endClassFields(null, null, null, null, 1, int, ;)
-  endMember()
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginMember()
-    handleIdentifier(int, typeReference)
-    handleNoTypeArguments(catch)
-    handleType(int, null)
-    handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-    handleIdentifier(catch, fieldDeclaration)
-    beginFieldInitializer(=)
-      handleLiteralInt(42)
-    endFieldInitializer(=, ;)
-  endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-  handleIdentifier(int, typeReference)
-  handleNoTypeArguments(class)
-  handleType(int, null)
-  handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-  handleIdentifier(class, fieldDeclaration)
-  beginFieldInitializer(=)
-    handleLiteralInt(42)
-  endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(const)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
-handleIdentifier(const, fieldDeclaration)
-beginFieldInitializer(=)
-  handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(continue)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-handleIdentifier(continue, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(default)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-handleIdentifier(default, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(do)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-handleIdentifier(do, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(else)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-handleIdentifier(else, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(enum)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-handleIdentifier(enum, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(extends)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-handleIdentifier(extends, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(false)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
-handleIdentifier(false, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(final)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-handleIdentifier(final, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(finally)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-handleIdentifier(finally, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(for)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-handleIdentifier(for, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(if)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-handleIdentifier(if, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(in)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-handleIdentifier(in, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(is)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-handleIdentifier(is, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(new)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
-handleIdentifier(new, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(null)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
-handleIdentifier(null, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(rethrow)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-handleIdentifier(rethrow, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(return)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
-handleIdentifier(return, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(super)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
-handleIdentifier(super, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(switch)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-handleIdentifier(switch, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(this)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
-handleIdentifier(this, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(throw)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
-handleIdentifier(throw, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(true)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
-handleIdentifier(true, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(try)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-handleIdentifier(try, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(var)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-handleIdentifier(var, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(void)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-handleIdentifier(void, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(while)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-handleIdentifier(while, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(with)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-handleIdentifier(with, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, 1, int, ;)
-endMember()
-endClassOrMixinBody(DeclarationKind.Class, 33, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration()
-endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_fields.dart.intertwined.expect
deleted file mode 100644
index 82af82e..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_fields.dart.intertwined.expect
+++ /dev/null
@@ -1,924 +0,0 @@
-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(WrapperClass, classOrMixinDeclaration)
-        listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, WrapperClass)
-        parseClass(WrapperClass, class, class, WrapperClass)
-          parseClassHeaderOpt(WrapperClass, class, class)
-            parseClassExtendsOpt(WrapperClass)
-              listener: handleNoType(WrapperClass)
-              listener: handleClassExtends(null)
-            parseWithClauseOpt(WrapperClass)
-              listener: handleClassNoWithClause()
-            parseClassOrMixinImplementsOpt(WrapperClass)
-              listener: handleClassOrMixinImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(WrapperClass, DeclarationKind.Class, WrapperClass)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar({)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(assert)
-              indicatesMethodOrField(=)
-              parseFields({, null, null, null, null, null, {, Instance of 'SimpleType', assert, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(assert)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
-                  listener: handleIdentifier(assert, fieldDeclaration)
-                parseFieldInitializerOpt(assert, assert, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(break)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', break, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(break)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-                  listener: handleIdentifier(break, fieldDeclaration)
-                parseFieldInitializerOpt(break, break, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(case)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', case, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(case)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-                  listener: handleIdentifier(case, fieldDeclaration)
-                parseFieldInitializerOpt(case, case, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(catch)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', catch, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(catch)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-                  listener: handleIdentifier(catch, fieldDeclaration)
-                parseFieldInitializerOpt(catch, catch, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(class)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', class, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(class)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-                  listener: handleIdentifier(class, fieldDeclaration)
-                parseFieldInitializerOpt(class, class, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(const)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', const, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(const)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
-                  listener: handleIdentifier(const, fieldDeclaration)
-                parseFieldInitializerOpt(const, const, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(continue)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', continue, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(continue)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-                  listener: handleIdentifier(continue, fieldDeclaration)
-                parseFieldInitializerOpt(continue, continue, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(default)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', default, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(default)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-                  listener: handleIdentifier(default, fieldDeclaration)
-                parseFieldInitializerOpt(default, default, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(do)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', do, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(do)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-                  listener: handleIdentifier(do, fieldDeclaration)
-                parseFieldInitializerOpt(do, do, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(else)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', else, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(else)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-                  listener: handleIdentifier(else, fieldDeclaration)
-                parseFieldInitializerOpt(else, else, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(enum)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', enum, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(enum)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-                  listener: handleIdentifier(enum, fieldDeclaration)
-                parseFieldInitializerOpt(enum, enum, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(extends)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', extends, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(extends)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-                  listener: handleIdentifier(extends, fieldDeclaration)
-                parseFieldInitializerOpt(extends, extends, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(false)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', false, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(false)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
-                  listener: handleIdentifier(false, fieldDeclaration)
-                parseFieldInitializerOpt(false, false, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(final)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', final, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(final)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-                  listener: handleIdentifier(final, fieldDeclaration)
-                parseFieldInitializerOpt(final, final, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(finally)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', finally, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(finally)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-                  listener: handleIdentifier(finally, fieldDeclaration)
-                parseFieldInitializerOpt(finally, finally, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(for)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', for, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(for)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-                  listener: handleIdentifier(for, fieldDeclaration)
-                parseFieldInitializerOpt(for, for, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(if)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', if, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(if)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-                  listener: handleIdentifier(if, fieldDeclaration)
-                parseFieldInitializerOpt(if, if, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(in)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', in, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(in)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-                  listener: handleIdentifier(in, fieldDeclaration)
-                parseFieldInitializerOpt(in, in, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(is)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', is, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(is)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-                  listener: handleIdentifier(is, fieldDeclaration)
-                parseFieldInitializerOpt(is, is, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(new)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', new, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(new)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
-                  listener: handleIdentifier(new, fieldDeclaration)
-                parseFieldInitializerOpt(new, new, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(null)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(null)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
-                  listener: handleIdentifier(null, fieldDeclaration)
-                parseFieldInitializerOpt(null, null, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(rethrow)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', rethrow, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(rethrow)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-                  listener: handleIdentifier(rethrow, fieldDeclaration)
-                parseFieldInitializerOpt(rethrow, rethrow, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(return)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', return, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(return)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
-                  listener: handleIdentifier(return, fieldDeclaration)
-                parseFieldInitializerOpt(return, return, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(super)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', super, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(super)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
-                  listener: handleIdentifier(super, fieldDeclaration)
-                parseFieldInitializerOpt(super, super, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(switch)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', switch, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(switch)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-                  listener: handleIdentifier(switch, fieldDeclaration)
-                parseFieldInitializerOpt(switch, switch, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              recoverFromInvalidMember(int, ;, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
-                parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', this, DeclarationKind.Class, WrapperClass, false)
-                  listener: handleIdentifier(int, typeReference)
-                  listener: handleNoTypeArguments(this)
-                  listener: handleType(int, null)
-                  ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
-                    reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
-                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
-                    listener: handleIdentifier(this, fieldDeclaration)
-                  parseFieldInitializerOpt(this, this, null, null, DeclarationKind.Class, WrapperClass)
-                    listener: beginFieldInitializer(=)
-                    parseExpression(=)
-                      parsePrecedenceExpression(=, 1, true)
-                        parseUnaryExpression(=, true)
-                          parsePrimary(=, expression)
-                            parseLiteralInt(=)
-                              listener: handleLiteralInt(42)
-                    listener: endFieldInitializer(=, ;)
-                  listener: endClassFields(null, null, null, null, 1, int, ;)
-                listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(throw)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', throw, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(throw)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
-                  listener: handleIdentifier(throw, fieldDeclaration)
-                parseFieldInitializerOpt(throw, throw, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(true)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', true, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(true)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
-                  listener: handleIdentifier(true, fieldDeclaration)
-                parseFieldInitializerOpt(true, true, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(try)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', try, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(try)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-                  listener: handleIdentifier(try, fieldDeclaration)
-                parseFieldInitializerOpt(try, try, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(var)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', var, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(var)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-                  listener: handleIdentifier(var, fieldDeclaration)
-                parseFieldInitializerOpt(var, var, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(void)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', void, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(void)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-                  listener: handleIdentifier(void, fieldDeclaration)
-                parseFieldInitializerOpt(void, void, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(while)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', while, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(while)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-                  listener: handleIdentifier(while, fieldDeclaration)
-                parseFieldInitializerOpt(while, while, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(with)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.Class, WrapperClass, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(with)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-                  listener: handleIdentifier(with, fieldDeclaration)
-                parseFieldInitializerOpt(with, with, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 33, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration()
-  reportAllErrorTokens(class)
-  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_fields.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_fields.dart.parser.expect
deleted file mode 100644
index 99a26c4..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_fields.dart.parser.expect
+++ /dev/null
@@ -1,71 +0,0 @@
-class WrapperClass {
-int assert = 42;
-int break = 42;
-int case = 42;
-int catch = 42;
-int class = 42;
-int const = 42;
-int continue = 42;
-int default = 42;
-int do = 42;
-int else = 42;
-int enum = 42;
-int extends = 42;
-int false = 42;
-int final = 42;
-int finally = 42;
-int for = 42;
-int if = 42;
-int in = 42;
-int is = 42;
-int new = 42;
-int null = 42;
-int rethrow = 42;
-int return = 42;
-int super = 42;
-int switch = 42;
-int this = 42;
-int throw = 42;
-int true = 42;
-int try = 42;
-int var = 42;
-int void = 42;
-int while = 42;
-int with = 42;
-}
-
-class[KeywordToken] WrapperClass[StringToken] {[BeginToken]
-int[StringToken] assert[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] break[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] case[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] catch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] class[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] const[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] continue[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] default[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] do[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] else[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] enum[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] extends[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] false[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] final[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] finally[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] for[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] if[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] in[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] is[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] new[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] null[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] rethrow[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] return[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] super[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] switch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] this[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] throw[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] true[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] try[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] var[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] void[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] while[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] with[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_fields.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_fields.dart.scanner.expect
deleted file mode 100644
index 99a26c4..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_fields.dart.scanner.expect
+++ /dev/null
@@ -1,71 +0,0 @@
-class WrapperClass {
-int assert = 42;
-int break = 42;
-int case = 42;
-int catch = 42;
-int class = 42;
-int const = 42;
-int continue = 42;
-int default = 42;
-int do = 42;
-int else = 42;
-int enum = 42;
-int extends = 42;
-int false = 42;
-int final = 42;
-int finally = 42;
-int for = 42;
-int if = 42;
-int in = 42;
-int is = 42;
-int new = 42;
-int null = 42;
-int rethrow = 42;
-int return = 42;
-int super = 42;
-int switch = 42;
-int this = 42;
-int throw = 42;
-int true = 42;
-int try = 42;
-int var = 42;
-int void = 42;
-int while = 42;
-int with = 42;
-}
-
-class[KeywordToken] WrapperClass[StringToken] {[BeginToken]
-int[StringToken] assert[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] break[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] case[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] catch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] class[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] const[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] continue[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] default[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] do[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] else[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] enum[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] extends[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] false[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] final[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] finally[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] for[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] if[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] in[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] is[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] new[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] null[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] rethrow[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] return[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] super[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] switch[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] this[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] throw[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] true[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] try[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] var[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] void[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] while[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-int[StringToken] with[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
-}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_methods.dart b/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_methods.dart
deleted file mode 100644
index 0ee7ab3..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_methods.dart
+++ /dev/null
@@ -1,166 +0,0 @@
-class WrapperClass {
-  int assert(int x) {
-    if (x == 0) return 42;
-    return assert(x-1) + 1;
-  }
-
-  int break(int x) {
-    if (x == 0) return 42;
-    return break(x-1) + 1;
-  }
-
-  int case(int x) {
-    if (x == 0) return 42;
-    return case(x-1) + 1;
-  }
-
-  int catch(int x) {
-    if (x == 0) return 42;
-    return catch(x-1) + 1;
-  }
-
-  int class(int x) {
-    if (x == 0) return 42;
-    return class(x-1) + 1;
-  }
-
-  int const(int x) {
-    if (x == 0) return 42;
-    return const(x-1) + 1;
-  }
-
-  int continue(int x) {
-    if (x == 0) return 42;
-    return continue(x-1) + 1;
-  }
-
-  int default(int x) {
-    if (x == 0) return 42;
-    return default(x-1) + 1;
-  }
-
-  int do(int x) {
-    if (x == 0) return 42;
-    return do(x-1) + 1;
-  }
-
-  int else(int x) {
-    if (x == 0) return 42;
-    return else(x-1) + 1;
-  }
-
-  int enum(int x) {
-    if (x == 0) return 42;
-    return enum(x-1) + 1;
-  }
-
-  int extends(int x) {
-    if (x == 0) return 42;
-    return extends(x-1) + 1;
-  }
-
-  int false(int x) {
-    if (x == 0) return 42;
-    return false(x-1) + 1;
-  }
-
-  int final(int x) {
-    if (x == 0) return 42;
-    return final(x-1) + 1;
-  }
-
-  int finally(int x) {
-    if (x == 0) return 42;
-    return finally(x-1) + 1;
-  }
-
-  int for(int x) {
-    if (x == 0) return 42;
-    return for(x-1) + 1;
-  }
-
-  int if(int x) {
-    if (x == 0) return 42;
-    return if(x-1) + 1;
-  }
-
-  int in(int x) {
-    if (x == 0) return 42;
-    return in(x-1) + 1;
-  }
-
-  int is(int x) {
-    if (x == 0) return 42;
-    return is(x-1) + 1;
-  }
-
-  int new(int x) {
-    if (x == 0) return 42;
-    return new(x-1) + 1;
-  }
-
-  int null(int x) {
-    if (x == 0) return 42;
-    return null(x-1) + 1;
-  }
-
-  int rethrow(int x) {
-    if (x == 0) return 42;
-    return rethrow(x-1) + 1;
-  }
-
-  int return(int x) {
-    if (x == 0) return 42;
-    return return(x-1) + 1;
-  }
-
-  int super(int x) {
-    if (x == 0) return 42;
-    return super(x-1) + 1;
-  }
-
-  int switch(int x) {
-    if (x == 0) return 42;
-    return switch(x-1) + 1;
-  }
-
-  int this(int x) {
-    if (x == 0) return 42;
-    return this(x-1) + 1;
-  }
-
-  int throw(int x) {
-    if (x == 0) return 42;
-    return throw(x-1) + 1;
-  }
-
-  int true(int x) {
-    if (x == 0) return 42;
-    return true(x-1) + 1;
-  }
-
-  int try(int x) {
-    if (x == 0) return 42;
-    return try(x-1) + 1;
-  }
-
-  int var(int x) {
-    if (x == 0) return 42;
-    return var(x-1) + 1;
-  }
-
-  int void(int x) {
-    if (x == 0) return 42;
-    return void(x-1) + 1;
-  }
-
-  int while(int x) {
-    if (x == 0) return 42;
-    return while(x-1) + 1;
-  }
-
-  int with(int x) {
-    if (x == 0) return 42;
-    return with(x-1) + 1;
-  }
-}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_methods.dart.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_methods.dart.expect
deleted file mode 100644
index 5259f92..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_methods.dart.expect
+++ /dev/null
@@ -1,2660 +0,0 @@
-Problems reported:
-
-parser/error_recovery/reserved_words_class_methods:2:7: Expected an identifier, but got 'assert'.
-  int assert(int x) {
-      ^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:4:12: `assert` can't be used as an expression.
-    return assert(x-1) + 1;
-           ^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:7:7: Expected an identifier, but got 'break'.
-  int break(int x) {
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:9:12: Expected an identifier, but got 'break'.
-    return break(x-1) + 1;
-           ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:9:12: Expected ';' after this.
-    return break(x-1) + 1;
-           ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:9:12: A break statement can't be used outside of a loop or switch statement.
-    return break(x-1) + 1;
-           ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:9:12: Expected ';' after this.
-    return break(x-1) + 1;
-           ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:12:7: Expected an identifier, but got 'case'.
-  int case(int x) {
-      ^^^^
-
-parser/error_recovery/reserved_words_class_methods:14:12: Expected an identifier, but got 'case'.
-    return case(x-1) + 1;
-           ^^^^
-
-parser/error_recovery/reserved_words_class_methods:17:7: Expected an identifier, but got 'catch'.
-  int catch(int x) {
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:19:12: Expected an identifier, but got 'catch'.
-    return catch(x-1) + 1;
-           ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:22:7: Expected an identifier, but got 'class'.
-  int class(int x) {
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:24:12: Expected an identifier, but got 'class'.
-    return class(x-1) + 1;
-           ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:27:7: Expected an identifier, but got 'const'.
-  int const(int x) {
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:29:17: Expected an identifier, but got '('.
-    return const(x-1) + 1;
-                ^
-
-parser/error_recovery/reserved_words_class_methods:32:7: Expected an identifier, but got 'continue'.
-  int continue(int x) {
-      ^^^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:34:12: Expected an identifier, but got 'continue'.
-    return continue(x-1) + 1;
-           ^^^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:34:12: Expected ';' after this.
-    return continue(x-1) + 1;
-           ^^^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:34:12: A continue statement can't be used outside of a loop or switch statement.
-    return continue(x-1) + 1;
-           ^^^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:34:12: Expected ';' after this.
-    return continue(x-1) + 1;
-           ^^^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:37:7: Expected an identifier, but got 'default'.
-  int default(int x) {
-      ^^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:39:12: Expected an identifier, but got 'default'.
-    return default(x-1) + 1;
-           ^^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:42:7: Expected an identifier, but got 'do'.
-  int do(int x) {
-      ^^
-
-parser/error_recovery/reserved_words_class_methods:44:12: Expected an identifier, but got 'do'.
-    return do(x-1) + 1;
-           ^^
-
-parser/error_recovery/reserved_words_class_methods:44:12: Expected ';' after this.
-    return do(x-1) + 1;
-           ^^
-
-parser/error_recovery/reserved_words_class_methods:45:3: Expected 'while' before this.
-  }
-  ^
-
-parser/error_recovery/reserved_words_class_methods:45:3: Expected to find '('.
-  }
-  ^
-
-parser/error_recovery/reserved_words_class_methods:45:3: Expected an identifier, but got '}'.
-  }
-  ^
-
-parser/error_recovery/reserved_words_class_methods:45:3: Expected ';' after this.
-  }
-  ^
-
-parser/error_recovery/reserved_words_class_methods:47:7: Expected an identifier, but got 'else'.
-  int else(int x) {
-      ^^^^
-
-parser/error_recovery/reserved_words_class_methods:49:12: Expected an identifier, but got 'else'.
-    return else(x-1) + 1;
-           ^^^^
-
-parser/error_recovery/reserved_words_class_methods:49:12: Expected ';' after this.
-    return else(x-1) + 1;
-           ^^^^
-
-parser/error_recovery/reserved_words_class_methods:49:12: Expected an identifier, but got 'else'.
-    return else(x-1) + 1;
-           ^^^^
-
-parser/error_recovery/reserved_words_class_methods:49:12: Expected ';' after this.
-    return else(x-1) + 1;
-           ^^^^
-
-parser/error_recovery/reserved_words_class_methods:49:12: Unexpected token ';'.
-    return else(x-1) + 1;
-           ^^^^
-
-parser/error_recovery/reserved_words_class_methods:52:7: Expected an identifier, but got 'enum'.
-  int enum(int x) {
-      ^^^^
-
-parser/error_recovery/reserved_words_class_methods:54:12: Expected an identifier, but got 'enum'.
-    return enum(x-1) + 1;
-           ^^^^
-
-parser/error_recovery/reserved_words_class_methods:57:7: Expected an identifier, but got 'extends'.
-  int extends(int x) {
-      ^^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:59:12: Expected an identifier, but got 'extends'.
-    return extends(x-1) + 1;
-           ^^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:62:7: Expected an identifier, but got 'false'.
-  int false(int x) {
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:67:7: Expected an identifier, but got 'final'.
-  int final(int x) {
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:69:12: Expected an identifier, but got 'final'.
-    return final(x-1) + 1;
-           ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:69:12: Expected ';' after this.
-    return final(x-1) + 1;
-           ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:69:17: Expected an identifier, but got '('.
-    return final(x-1) + 1;
-                ^
-
-parser/error_recovery/reserved_words_class_methods:69:18: Expected ';' after this.
-    return final(x-1) + 1;
-                 ^
-
-parser/error_recovery/reserved_words_class_methods:69:20: Expected ';' after this.
-    return final(x-1) + 1;
-                   ^
-
-parser/error_recovery/reserved_words_class_methods:69:21: Expected an identifier, but got ')'.
-    return final(x-1) + 1;
-                    ^
-
-parser/error_recovery/reserved_words_class_methods:69:21: Expected ';' after this.
-    return final(x-1) + 1;
-                    ^
-
-parser/error_recovery/reserved_words_class_methods:69:21: Unexpected token ';'.
-    return final(x-1) + 1;
-                    ^
-
-parser/error_recovery/reserved_words_class_methods:69:23: '+' is not a prefix operator.
-    return final(x-1) + 1;
-                      ^
-
-parser/error_recovery/reserved_words_class_methods:72:7: Expected an identifier, but got 'finally'.
-  int finally(int x) {
-      ^^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:74:12: Expected an identifier, but got 'finally'.
-    return finally(x-1) + 1;
-           ^^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:77:7: Expected an identifier, but got 'for'.
-  int for(int x) {
-      ^^^
-
-parser/error_recovery/reserved_words_class_methods:79:12: Expected an identifier, but got 'for'.
-    return for(x-1) + 1;
-           ^^^
-
-parser/error_recovery/reserved_words_class_methods:79:12: Expected ';' after this.
-    return for(x-1) + 1;
-           ^^^
-
-parser/error_recovery/reserved_words_class_methods:79:18: Expected ';' after this.
-    return for(x-1) + 1;
-                 ^
-
-parser/error_recovery/reserved_words_class_methods:79:19: Expected an identifier, but got ')'.
-    return for(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_class_methods:79:19: Expected ';' after this.
-    return for(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_class_methods:79:21: '+' is not a prefix operator.
-    return for(x-1) + 1;
-                    ^
-
-parser/error_recovery/reserved_words_class_methods:82:7: Expected an identifier, but got 'if'.
-  int if(int x) {
-      ^^
-
-parser/error_recovery/reserved_words_class_methods:84:12: Expected an identifier, but got 'if'.
-    return if(x-1) + 1;
-           ^^
-
-parser/error_recovery/reserved_words_class_methods:84:12: Expected ';' after this.
-    return if(x-1) + 1;
-           ^^
-
-parser/error_recovery/reserved_words_class_methods:84:20: '+' is not a prefix operator.
-    return if(x-1) + 1;
-                   ^
-
-parser/error_recovery/reserved_words_class_methods:87:7: Expected an identifier, but got 'in'.
-  int in(int x) {
-      ^^
-
-parser/error_recovery/reserved_words_class_methods:89:12: Expected an identifier, but got 'in'.
-    return in(x-1) + 1;
-           ^^
-
-parser/error_recovery/reserved_words_class_methods:92:7: Expected an identifier, but got 'is'.
-  int is(int x) {
-      ^^
-
-parser/error_recovery/reserved_words_class_methods:94:12: Expected an identifier, but got 'is'.
-    return is(x-1) + 1;
-           ^^
-
-parser/error_recovery/reserved_words_class_methods:94:14: Expected a type, but got '('.
-    return is(x-1) + 1;
-             ^
-
-parser/error_recovery/reserved_words_class_methods:94:14: Expected ';' after this.
-    return is(x-1) + 1;
-             ^
-
-parser/error_recovery/reserved_words_class_methods:97:7: Expected an identifier, but got 'new'.
-  int new(int x) {
-      ^^^
-
-parser/error_recovery/reserved_words_class_methods:99:15: Expected an identifier, but got '('.
-    return new(x-1) + 1;
-              ^
-
-parser/error_recovery/reserved_words_class_methods:102:7: Expected an identifier, but got 'null'.
-  int null(int x) {
-      ^^^^
-
-parser/error_recovery/reserved_words_class_methods:107:7: Expected an identifier, but got 'rethrow'.
-  int rethrow(int x) {
-      ^^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:109:12: Expected an identifier, but got 'rethrow'.
-    return rethrow(x-1) + 1;
-           ^^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:112:7: Expected an identifier, but got 'return'.
-  int return(int x) {
-      ^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:114:12: Unexpected token 'return'.
-    return return(x-1) + 1;
-           ^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:117:7: Expected an identifier, but got 'super'.
-  int super(int x) {
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:122:7: Expected an identifier, but got 'switch'.
-  int switch(int x) {
-      ^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:124:12: Expected an identifier, but got 'switch'.
-    return switch(x-1) + 1;
-           ^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:124:12: Expected ';' after this.
-    return switch(x-1) + 1;
-           ^^^^^^
-
-parser/error_recovery/reserved_words_class_methods:124:22: A switch statement must have a body, even if it is empty.
-    return switch(x-1) + 1;
-                     ^
-
-parser/error_recovery/reserved_words_class_methods:124:24: '+' is not a prefix operator.
-    return switch(x-1) + 1;
-                       ^
-
-parser/error_recovery/reserved_words_class_methods:127:7: Expected an identifier, but got 'this'.
-  int this(int x) {
-      ^^^^
-
-parser/error_recovery/reserved_words_class_methods:127:7: Expected ';' after this.
-  int this(int x) {
-      ^^^^
-
-parser/error_recovery/reserved_words_class_methods:127:11: Expected an identifier, but got '('.
-  int this(int x) {
-          ^
-
-parser/error_recovery/reserved_words_class_methods:132:7: Expected an identifier, but got 'throw'.
-  int throw(int x) {
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:137:7: Expected an identifier, but got 'true'.
-  int true(int x) {
-      ^^^^
-
-parser/error_recovery/reserved_words_class_methods:142:7: Expected an identifier, but got 'try'.
-  int try(int x) {
-      ^^^
-
-parser/error_recovery/reserved_words_class_methods:144:12: Expected an identifier, but got 'try'.
-    return try(x-1) + 1;
-           ^^^
-
-parser/error_recovery/reserved_words_class_methods:144:12: Expected ';' after this.
-    return try(x-1) + 1;
-           ^^^
-
-parser/error_recovery/reserved_words_class_methods:144:12: A try statement must have a body, even if it is empty.
-    return try(x-1) + 1;
-           ^^^
-
-parser/error_recovery/reserved_words_class_methods:144:12: A try block must be followed by an 'on', 'catch', or 'finally' clause.
-    return try(x-1) + 1;
-           ^^^
-
-parser/error_recovery/reserved_words_class_methods:147:7: Expected an identifier, but got 'var'.
-  int var(int x) {
-      ^^^
-
-parser/error_recovery/reserved_words_class_methods:149:12: Expected an identifier, but got 'var'.
-    return var(x-1) + 1;
-           ^^^
-
-parser/error_recovery/reserved_words_class_methods:149:12: Expected ';' after this.
-    return var(x-1) + 1;
-           ^^^
-
-parser/error_recovery/reserved_words_class_methods:149:15: Expected an identifier, but got '('.
-    return var(x-1) + 1;
-              ^
-
-parser/error_recovery/reserved_words_class_methods:149:16: Expected ';' after this.
-    return var(x-1) + 1;
-               ^
-
-parser/error_recovery/reserved_words_class_methods:149:18: Expected ';' after this.
-    return var(x-1) + 1;
-                 ^
-
-parser/error_recovery/reserved_words_class_methods:149:19: Expected an identifier, but got ')'.
-    return var(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_class_methods:149:19: Expected ';' after this.
-    return var(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_class_methods:149:19: Unexpected token ';'.
-    return var(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_class_methods:149:21: '+' is not a prefix operator.
-    return var(x-1) + 1;
-                    ^
-
-parser/error_recovery/reserved_words_class_methods:152:7: Expected an identifier, but got 'void'.
-  int void(int x) {
-      ^^^^
-
-parser/error_recovery/reserved_words_class_methods:154:12: Expected an identifier, but got 'void'.
-    return void(x-1) + 1;
-           ^^^^
-
-parser/error_recovery/reserved_words_class_methods:154:12: Expected ';' after this.
-    return void(x-1) + 1;
-           ^^^^
-
-parser/error_recovery/reserved_words_class_methods:154:16: Expected an identifier, but got '('.
-    return void(x-1) + 1;
-               ^
-
-parser/error_recovery/reserved_words_class_methods:154:17: Expected ';' after this.
-    return void(x-1) + 1;
-                ^
-
-parser/error_recovery/reserved_words_class_methods:154:19: Expected ';' after this.
-    return void(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_class_methods:154:20: Expected an identifier, but got ')'.
-    return void(x-1) + 1;
-                   ^
-
-parser/error_recovery/reserved_words_class_methods:154:20: Expected ';' after this.
-    return void(x-1) + 1;
-                   ^
-
-parser/error_recovery/reserved_words_class_methods:154:20: Unexpected token ';'.
-    return void(x-1) + 1;
-                   ^
-
-parser/error_recovery/reserved_words_class_methods:154:22: '+' is not a prefix operator.
-    return void(x-1) + 1;
-                     ^
-
-parser/error_recovery/reserved_words_class_methods:157:7: Expected an identifier, but got 'while'.
-  int while(int x) {
-      ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:159:12: Expected an identifier, but got 'while'.
-    return while(x-1) + 1;
-           ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:159:12: Expected ';' after this.
-    return while(x-1) + 1;
-           ^^^^^
-
-parser/error_recovery/reserved_words_class_methods:159:23: '+' is not a prefix operator.
-    return while(x-1) + 1;
-                      ^
-
-parser/error_recovery/reserved_words_class_methods:162:7: Expected an identifier, but got 'with'.
-  int with(int x) {
-      ^^^^
-
-parser/error_recovery/reserved_words_class_methods:164:12: Expected an identifier, but got 'with'.
-    return with(x-1) + 1;
-           ^^^^
-
-beginCompilationUnit(class)
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(WrapperClass, classOrMixinDeclaration)
-    handleNoTypeVariables({)
-    beginClassDeclaration(class, null, WrapperClass)
-      handleNoType(WrapperClass)
-      handleClassExtends(null)
-      handleClassNoWithClause()
-      handleClassOrMixinImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, assert)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(assert)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
-            handleIdentifier(assert, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                beginAssert(assert, Assert.Expression)
-                  handleIdentifier(x, expression)
-                  handleNoTypeArguments(-)
-                  handleNoArguments(-)
-                  handleSend(x, -)
-                  beginBinaryExpression(-)
-                  handleLiteralInt(1)
-                  endBinaryExpression(-)
-                  handleRecoverableError(AssertAsExpression, assert, assert)
-                endAssert(assert, Assert.Expression, (, null, +)
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, break)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(break)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-            handleIdentifier(break, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-                handleIdentifier(, expression)
-                handleNoTypeArguments(break)
-                handleNoArguments(break)
-                handleSend(, break)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
-              endReturnStatement(true, return, ;)
-              handleRecoverableError(BreakOutsideOfLoop, break, break)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
-              handleBreakStatement(false, break, ;)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(-)
-              handleNoArguments(-)
-              handleSend(x, -)
-              beginBinaryExpression(-)
-              handleLiteralInt(1)
-              endBinaryExpression(-)
-              handleParenthesizedExpression(()
-              beginBinaryExpression(+)
-              handleLiteralInt(1)
-              endBinaryExpression(+)
-              handleExpressionStatement(;)
-            endBlockFunctionBody(4, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, case)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(case)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-            handleIdentifier(case, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-                handleIdentifier(case, expression)
-                handleNoTypeArguments(()
-                beginArguments(()
-                  handleIdentifier(x, expression)
-                  handleNoTypeArguments(-)
-                  handleNoArguments(-)
-                  handleSend(x, -)
-                  beginBinaryExpression(-)
-                  handleLiteralInt(1)
-                  endBinaryExpression(-)
-                endArguments(1, (, ))
-                handleSend(case, +)
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, catch)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(catch)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-            handleIdentifier(catch, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-                handleIdentifier(catch, expression)
-                handleNoTypeArguments(()
-                beginArguments(()
-                  handleIdentifier(x, expression)
-                  handleNoTypeArguments(-)
-                  handleNoArguments(-)
-                  handleSend(x, -)
-                  beginBinaryExpression(-)
-                  handleLiteralInt(1)
-                  endBinaryExpression(-)
-                endArguments(1, (, ))
-                handleSend(catch, +)
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, class)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(class)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-            handleIdentifier(class, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-                handleIdentifier(class, expression)
-                handleNoTypeArguments(()
-                beginArguments(()
-                  handleIdentifier(x, expression)
-                  handleNoTypeArguments(-)
-                  handleNoArguments(-)
-                  handleSend(x, -)
-                  beginBinaryExpression(-)
-                  handleLiteralInt(1)
-                  endBinaryExpression(-)
-                endArguments(1, (, ))
-                handleSend(class, +)
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, const)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(const)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
-            handleIdentifier(const, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                beginConstExpression(const)
-                  handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                  handleIdentifier(, constructorReference)
-                  beginConstructorReference()
-                    handleNoTypeArguments(()
-                    handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                  endConstructorReference(, null, ()
-                  beginArguments(()
-                    handleIdentifier(x, expression)
-                    handleNoTypeArguments(-)
-                    handleNoArguments(-)
-                    handleSend(x, -)
-                    beginBinaryExpression(-)
-                    handleLiteralInt(1)
-                    endBinaryExpression(-)
-                  endArguments(1, (, ))
-                endConstExpression(const)
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, continue)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(continue)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-            handleIdentifier(continue, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-                handleIdentifier(, expression)
-                handleNoTypeArguments(continue)
-                handleNoArguments(continue)
-                handleSend(, continue)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
-              endReturnStatement(true, return, ;)
-              handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
-              handleContinueStatement(false, continue, ;)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(-)
-              handleNoArguments(-)
-              handleSend(x, -)
-              beginBinaryExpression(-)
-              handleLiteralInt(1)
-              endBinaryExpression(-)
-              handleParenthesizedExpression(()
-              beginBinaryExpression(+)
-              handleLiteralInt(1)
-              endBinaryExpression(+)
-              handleExpressionStatement(;)
-            endBlockFunctionBody(4, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, default)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(default)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-            handleIdentifier(default, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-                handleIdentifier(default, expression)
-                handleNoTypeArguments(()
-                beginArguments(()
-                  handleIdentifier(x, expression)
-                  handleNoTypeArguments(-)
-                  handleNoArguments(-)
-                  handleSend(x, -)
-                  beginBinaryExpression(-)
-                  handleLiteralInt(1)
-                  endBinaryExpression(-)
-                endArguments(1, (, ))
-                handleSend(default, +)
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, do)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(do)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-            handleIdentifier(do, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-                handleIdentifier(, expression)
-                handleNoTypeArguments(do)
-                handleNoArguments(do)
-                handleSend(, do)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], do, do)
-              endReturnStatement(true, return, ;)
-              beginDoWhileStatement(do)
-                beginDoWhileStatementBody(()
-                  handleIdentifier(x, expression)
-                  handleNoTypeArguments(-)
-                  handleNoArguments(-)
-                  handleSend(x, -)
-                  beginBinaryExpression(-)
-                  handleLiteralInt(1)
-                  endBinaryExpression(-)
-                  handleParenthesizedExpression(()
-                  beginBinaryExpression(+)
-                  handleLiteralInt(1)
-                  endBinaryExpression(+)
-                  handleExpressionStatement(;)
-                endDoWhileStatementBody(;)
-                handleRecoverableError(Message[ExpectedButGot, Expected 'while' before this., null, {string: while}], }, })
-                handleRecoverableError(Message[ExpectedToken, Expected to find '('., null, {string: (}], }, })
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., null, {token: }}], }, })
-                handleIdentifier(, expression)
-                handleNoTypeArguments())
-                handleNoArguments())
-                handleSend(, ))
-                handleParenthesizedCondition(()
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
-              endDoWhileStatement(do, while, ;)
-            endBlockFunctionBody(3, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, else)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(else)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-            handleIdentifier(else, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-                handleIdentifier(, expression)
-                handleNoTypeArguments(else)
-                handleNoArguments(else)
-                handleSend(, else)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
-              endReturnStatement(true, return, ;)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-              handleIdentifier(, expression)
-              handleNoTypeArguments(else)
-              handleNoArguments(else)
-              handleSend(, else)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
-              handleExpressionStatement(;)
-              handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], else, else)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(-)
-              handleNoArguments(-)
-              handleSend(x, -)
-              beginBinaryExpression(-)
-              handleLiteralInt(1)
-              endBinaryExpression(-)
-              handleParenthesizedExpression(()
-              beginBinaryExpression(+)
-              handleLiteralInt(1)
-              endBinaryExpression(+)
-              handleExpressionStatement(;)
-            endBlockFunctionBody(4, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, enum)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(enum)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-            handleIdentifier(enum, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-                handleIdentifier(enum, expression)
-                handleNoTypeArguments(()
-                beginArguments(()
-                  handleIdentifier(x, expression)
-                  handleNoTypeArguments(-)
-                  handleNoArguments(-)
-                  handleSend(x, -)
-                  beginBinaryExpression(-)
-                  handleLiteralInt(1)
-                  endBinaryExpression(-)
-                endArguments(1, (, ))
-                handleSend(enum, +)
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, extends)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(extends)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-            handleIdentifier(extends, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-                handleIdentifier(extends, expression)
-                handleNoTypeArguments(()
-                beginArguments(()
-                  handleIdentifier(x, expression)
-                  handleNoTypeArguments(-)
-                  handleNoArguments(-)
-                  handleSend(x, -)
-                  beginBinaryExpression(-)
-                  handleLiteralInt(1)
-                  endBinaryExpression(-)
-                endArguments(1, (, ))
-                handleSend(extends, +)
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, false)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(false)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
-            handleIdentifier(false, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleLiteralBool(false)
-                handleNoTypeArguments(()
-                beginArguments(()
-                  handleIdentifier(x, expression)
-                  handleNoTypeArguments(-)
-                  handleNoArguments(-)
-                  handleSend(x, -)
-                  beginBinaryExpression(-)
-                  handleLiteralInt(1)
-                  endBinaryExpression(-)
-                endArguments(1, (, ))
-                handleSend((, ))
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, final)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(final)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-            handleIdentifier(final, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-                handleIdentifier(, expression)
-                handleNoTypeArguments(final)
-                handleNoArguments(final)
-                handleSend(, final)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
-              endReturnStatement(true, return, ;)
-              beginMetadataStar(final)
-              endMetadataStar(0)
-              handleNoType(final)
-              beginVariablesDeclaration((, null, final)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                handleIdentifier(, localVariableDeclaration)
-                beginInitializedIdentifier()
-                  handleNoVariableInitializer(x)
-                endInitializedIdentifier()
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-              endVariablesDeclaration(1, ;)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(-)
-              handleNoArguments(-)
-              handleSend(x, -)
-              beginBinaryExpression(-)
-              handleLiteralInt(1)
-              endBinaryExpression(-)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-              handleExpressionStatement(;)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-              handleIdentifier(, expression)
-              handleNoTypeArguments())
-              handleNoArguments())
-              handleSend(, ))
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-              handleExpressionStatement(;)
-              handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-              handleRecoverableError(UnsupportedPrefixPlus, +, +)
-              handleIdentifier(, expression)
-              handleNoTypeArguments(+)
-              handleNoArguments(+)
-              handleSend(, +)
-              beginBinaryExpression(+)
-              handleLiteralInt(1)
-              endBinaryExpression(+)
-              handleExpressionStatement(;)
-            endBlockFunctionBody(6, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, finally)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(finally)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-            handleIdentifier(finally, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-                handleIdentifier(finally, expression)
-                handleNoTypeArguments(()
-                beginArguments(()
-                  handleIdentifier(x, expression)
-                  handleNoTypeArguments(-)
-                  handleNoArguments(-)
-                  handleSend(x, -)
-                  beginBinaryExpression(-)
-                  handleLiteralInt(1)
-                  endBinaryExpression(-)
-                endArguments(1, (, ))
-                handleSend(finally, +)
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, for)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(for)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-            handleIdentifier(for, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-                handleIdentifier(, expression)
-                handleNoTypeArguments(for)
-                handleNoArguments(for)
-                handleSend(, for)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], for, for)
-              endReturnStatement(true, return, ;)
-              beginForStatement(for)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(-)
-                handleNoArguments(-)
-                handleSend(x, -)
-                beginBinaryExpression(-)
-                handleLiteralInt(1)
-                endBinaryExpression(-)
-                handleForInitializerExpressionStatement(1, false)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-                handleIdentifier(, expression)
-                handleNoTypeArguments())
-                handleNoArguments())
-                handleSend(, ))
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-                handleExpressionStatement(;)
-                handleForLoopParts(for, (, ;, 0)
-                beginForStatementBody(+)
-                  handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                  handleIdentifier(, expression)
-                  handleNoTypeArguments(+)
-                  handleNoArguments(+)
-                  handleSend(, +)
-                  beginBinaryExpression(+)
-                  handleLiteralInt(1)
-                  endBinaryExpression(+)
-                  handleExpressionStatement(;)
-                endForStatementBody(})
-              endForStatement(})
-            endBlockFunctionBody(3, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, if)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(if)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-            handleIdentifier(if, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-                handleIdentifier(, expression)
-                handleNoTypeArguments(if)
-                handleNoArguments(if)
-                handleSend(, if)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], if, if)
-              endReturnStatement(true, return, ;)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(-)
-                handleNoArguments(-)
-                handleSend(x, -)
-                beginBinaryExpression(-)
-                handleLiteralInt(1)
-                endBinaryExpression(-)
-                handleParenthesizedCondition(()
-                beginThenStatement(+)
-                  handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                  handleIdentifier(, expression)
-                  handleNoTypeArguments(+)
-                  handleNoArguments(+)
-                  handleSend(, +)
-                  beginBinaryExpression(+)
-                  handleLiteralInt(1)
-                  endBinaryExpression(+)
-                  handleExpressionStatement(;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-            endBlockFunctionBody(3, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, in)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(in)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-            handleIdentifier(in, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-                handleIdentifier(in, expression)
-                handleNoTypeArguments(()
-                beginArguments(()
-                  handleIdentifier(x, expression)
-                  handleNoTypeArguments(-)
-                  handleNoArguments(-)
-                  handleSend(x, -)
-                  beginBinaryExpression(-)
-                  handleLiteralInt(1)
-                  endBinaryExpression(-)
-                endArguments(1, (, ))
-                handleSend(in, +)
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, is)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(is)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-            handleIdentifier(is, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-                handleIdentifier(, expression)
-                handleNoTypeArguments(is)
-                handleNoArguments(is)
-                handleSend(, is)
-                beginIsOperatorType(is)
-                  handleRecoverableError(Message[ExpectedType, Expected a type, but got '('., null, {token: (}], (, ()
-                  handleIdentifier(, typeReference)
-                  handleNoTypeArguments(()
-                  handleType(, null)
-                endIsOperatorType(is)
-                handleIsOperator(is, null)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
-              endReturnStatement(true, return, ;)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(-)
-              handleNoArguments(-)
-              handleSend(x, -)
-              beginBinaryExpression(-)
-              handleLiteralInt(1)
-              endBinaryExpression(-)
-              handleParenthesizedExpression(()
-              beginBinaryExpression(+)
-              handleLiteralInt(1)
-              endBinaryExpression(+)
-              handleExpressionStatement(;)
-            endBlockFunctionBody(3, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, new)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(new)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
-            handleIdentifier(new, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                beginNewExpression(new)
-                  handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                  handleIdentifier(, constructorReference)
-                  beginConstructorReference()
-                    handleNoTypeArguments(()
-                    handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                  endConstructorReference(, null, ()
-                  beginArguments(()
-                    handleIdentifier(x, expression)
-                    handleNoTypeArguments(-)
-                    handleNoArguments(-)
-                    handleSend(x, -)
-                    beginBinaryExpression(-)
-                    handleLiteralInt(1)
-                    endBinaryExpression(-)
-                  endArguments(1, (, ))
-                endNewExpression(new)
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, null)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(null)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
-            handleIdentifier(null, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleLiteralNull(null)
-                handleNoTypeArguments(()
-                beginArguments(()
-                  handleIdentifier(x, expression)
-                  handleNoTypeArguments(-)
-                  handleNoArguments(-)
-                  handleSend(x, -)
-                  beginBinaryExpression(-)
-                  handleLiteralInt(1)
-                  endBinaryExpression(-)
-                endArguments(1, (, ))
-                handleSend((, ))
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, rethrow)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(rethrow)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-            handleIdentifier(rethrow, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-                handleIdentifier(rethrow, expression)
-                handleNoTypeArguments(()
-                beginArguments(()
-                  handleIdentifier(x, expression)
-                  handleNoTypeArguments(-)
-                  handleNoArguments(-)
-                  handleSend(x, -)
-                  beginBinaryExpression(-)
-                  handleLiteralInt(1)
-                  endBinaryExpression(-)
-                endArguments(1, (, ))
-                handleSend(rethrow, +)
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, return)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(return)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
-            handleIdentifier(return, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[UnexpectedToken, Unexpected token 'return'., null, {token: return}], return, return)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(-)
-                handleNoArguments(-)
-                handleSend(x, -)
-                beginBinaryExpression(-)
-                handleLiteralInt(1)
-                endBinaryExpression(-)
-                handleParenthesizedExpression(()
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, super)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(super)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
-            handleIdentifier(super, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleSuperExpression(super, expression)
-                handleNoTypeArguments(()
-                beginArguments(()
-                  handleIdentifier(x, expression)
-                  handleNoTypeArguments(-)
-                  handleNoArguments(-)
-                  handleSend(x, -)
-                  beginBinaryExpression(-)
-                  handleLiteralInt(1)
-                  endBinaryExpression(-)
-                endArguments(1, (, ))
-                handleSend(super, +)
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-              endReturnStatement(true, return, ;)
-            endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(null, null, null, null, null, switch)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(switch)
-            handleType(int, null)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-            handleIdentifier(switch, methodDeclaration)
-            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({)
-              beginIfStatement(if)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(==)
-                handleNoArguments(==)
-                handleSend(x, ==)
-                beginBinaryExpression(==)
-                handleLiteralInt(0)
-                endBinaryExpression(==)
-                handleParenthesizedCondition(()
-                beginThenStatement(return)
-                  beginReturnStatement(return)
-                    handleLiteralInt(42)
-                  endReturnStatement(true, return, ;)
-                endThenStatement(;)
-              endIfStatement(if, null)
-              beginReturnStatement(return)
-                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-                handleIdentifier(, expression)
-                handleNoTypeArguments(switch)
-                handleNoArguments(switch)
-                handleSend(, switch)
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], switch, switch)
-              endReturnStatement(true, return, ;)
-              beginSwitchStatement(switch)
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(-)
-                handleNoArguments(-)
-                handleSend(x, -)
-                beginBinaryExpression(-)
-                handleLiteralInt(1)
-                endBinaryExpression(-)
-                handleParenthesizedCondition(()
-                handleRecoverableError(Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}], ), ))
-                beginSwitchBlock({)
-                endSwitchBlock(0, {, })
-              endSwitchStatement(switch, })
-              handleRecoverableError(UnsupportedPrefixPlus, +, +)
-              handleIdentifier(, expression)
-              handleNoTypeArguments(+)
-              handleNoArguments(+)
-              handleSend(, +)
-              beginBinaryExpression(+)
-              handleLiteralInt(1)
-              endBinaryExpression(+)
-              handleExpressionStatement(;)
-            endBlockFunctionBody(4, {, })
-          endClassMethod(null, int, (, null, })
-        endMember()
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginMember()
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(this)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
-          handleIdentifier(this, fieldDeclaration)
-          handleNoFieldInitializer(()
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], this, this)
-        endClassFields(null, null, null, null, 1, int, ;)
-      endMember()
-      beginMetadataStar(()
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, ()
-          handleNoType(;)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-          handleIdentifier(, methodDeclaration)
-          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({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleThisExpression(this, expression)
-              handleNoTypeArguments(()
-              beginArguments(()
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(-)
-                handleNoArguments(-)
-                handleSend(x, -)
-                beginBinaryExpression(-)
-                handleLiteralInt(1)
-                endBinaryExpression(-)
-              endArguments(1, (, ))
-              handleSend(this, +)
-              beginBinaryExpression(+)
-              handleLiteralInt(1)
-              endBinaryExpression(+)
-            endReturnStatement(true, return, ;)
-          endBlockFunctionBody(2, {, })
-        endClassMethod(null, , (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, throw)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(throw)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
-          handleIdentifier(throw, methodDeclaration)
-          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({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(-)
-              handleNoArguments(-)
-              handleSend(x, -)
-              beginBinaryExpression(-)
-              handleLiteralInt(1)
-              endBinaryExpression(-)
-              handleParenthesizedExpression(()
-              beginBinaryExpression(+)
-              handleLiteralInt(1)
-              endBinaryExpression(+)
-              handleThrowExpression(throw, ;)
-            endReturnStatement(true, return, ;)
-          endBlockFunctionBody(2, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, true)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(true)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
-          handleIdentifier(true, methodDeclaration)
-          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({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleLiteralBool(true)
-              handleNoTypeArguments(()
-              beginArguments(()
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(-)
-                handleNoArguments(-)
-                handleSend(x, -)
-                beginBinaryExpression(-)
-                handleLiteralInt(1)
-                endBinaryExpression(-)
-              endArguments(1, (, ))
-              handleSend((, ))
-              beginBinaryExpression(+)
-              handleLiteralInt(1)
-              endBinaryExpression(+)
-            endReturnStatement(true, return, ;)
-          endBlockFunctionBody(2, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, try)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(try)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-          handleIdentifier(try, methodDeclaration)
-          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({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-              handleIdentifier(, expression)
-              handleNoTypeArguments(try)
-              handleNoArguments(try)
-              handleSend(, try)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
-            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)
-              beginBlock({, BlockKind(try statement))
-              endBlock(0, {, }, BlockKind(try statement))
-              handleRecoverableError(OnlyTry, try, try)
-            endTryStatement(0, try, null)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-            handleParenthesizedExpression(()
-            beginBinaryExpression(+)
-            handleLiteralInt(1)
-            endBinaryExpression(+)
-            handleExpressionStatement(;)
-          endBlockFunctionBody(4, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, var)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(var)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-          handleIdentifier(var, methodDeclaration)
-          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({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-              handleIdentifier(, expression)
-              handleNoTypeArguments(var)
-              handleNoArguments(var)
-              handleSend(, var)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
-            endReturnStatement(true, return, ;)
-            beginMetadataStar(var)
-            endMetadataStar(0)
-            handleNoType(var)
-            beginVariablesDeclaration((, null, var)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-              handleIdentifier(, localVariableDeclaration)
-              beginInitializedIdentifier()
-                handleNoVariableInitializer(x)
-              endInitializedIdentifier()
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-            endVariablesDeclaration(1, ;)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-            handleExpressionStatement(;)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-            handleIdentifier(, expression)
-            handleNoTypeArguments())
-            handleNoArguments())
-            handleSend(, ))
-            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-            handleExpressionStatement(;)
-            handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-            handleRecoverableError(UnsupportedPrefixPlus, +, +)
-            handleIdentifier(, expression)
-            handleNoTypeArguments(+)
-            handleNoArguments(+)
-            handleSend(, +)
-            beginBinaryExpression(+)
-            handleLiteralInt(1)
-            endBinaryExpression(+)
-            handleExpressionStatement(;)
-          endBlockFunctionBody(6, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, void)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(void)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-          handleIdentifier(void, methodDeclaration)
-          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({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-              handleIdentifier(, expression)
-              handleNoTypeArguments(void)
-              handleNoArguments(void)
-              handleSend(, void)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
-            endReturnStatement(true, return, ;)
-            beginMetadataStar(void)
-            endMetadataStar(0)
-            handleVoidKeyword(void)
-            beginVariablesDeclaration((, null, null)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-              handleIdentifier(, localVariableDeclaration)
-              beginInitializedIdentifier()
-                handleNoVariableInitializer(x)
-              endInitializedIdentifier()
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-            endVariablesDeclaration(1, ;)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-            handleExpressionStatement(;)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-            handleIdentifier(, expression)
-            handleNoTypeArguments())
-            handleNoArguments())
-            handleSend(, ))
-            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-            handleExpressionStatement(;)
-            handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-            handleRecoverableError(UnsupportedPrefixPlus, +, +)
-            handleIdentifier(, expression)
-            handleNoTypeArguments(+)
-            handleNoArguments(+)
-            handleSend(, +)
-            beginBinaryExpression(+)
-            handleLiteralInt(1)
-            endBinaryExpression(+)
-            handleExpressionStatement(;)
-          endBlockFunctionBody(6, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, while)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(while)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-          handleIdentifier(while, methodDeclaration)
-          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({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-              handleIdentifier(, expression)
-              handleNoTypeArguments(while)
-              handleNoArguments(while)
-              handleSend(, while)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
-            endReturnStatement(true, return, ;)
-            beginWhileStatement(while)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(-)
-              handleNoArguments(-)
-              handleSend(x, -)
-              beginBinaryExpression(-)
-              handleLiteralInt(1)
-              endBinaryExpression(-)
-              handleParenthesizedCondition(()
-              beginWhileStatementBody(+)
-                handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                handleIdentifier(, expression)
-                handleNoTypeArguments(+)
-                handleNoArguments(+)
-                handleSend(, +)
-                beginBinaryExpression(+)
-                handleLiteralInt(1)
-                endBinaryExpression(+)
-                handleExpressionStatement(;)
-              endWhileStatementBody(})
-            endWhileStatement(while, })
-          endBlockFunctionBody(3, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, with)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(with)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-          handleIdentifier(with, methodDeclaration)
-          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({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-              handleIdentifier(with, expression)
-              handleNoTypeArguments(()
-              beginArguments(()
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(-)
-                handleNoArguments(-)
-                handleSend(x, -)
-                beginBinaryExpression(-)
-                handleLiteralInt(1)
-                endBinaryExpression(-)
-              endArguments(1, (, ))
-              handleSend(with, +)
-              beginBinaryExpression(+)
-              handleLiteralInt(1)
-              endBinaryExpression(+)
-            endReturnStatement(true, return, ;)
-          endBlockFunctionBody(2, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-    endClassOrMixinBody(DeclarationKind.Class, 34, {, })
-  endClassDeclaration(class, })
-endTopLevelDeclaration()
-endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_methods.dart.intertwined.expect
deleted file mode 100644
index 8ad3c89..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_methods.dart.intertwined.expect
+++ /dev/null
@@ -1,5478 +0,0 @@
-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(WrapperClass, classOrMixinDeclaration)
-        listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, WrapperClass)
-        parseClass(WrapperClass, class, class, WrapperClass)
-          parseClassHeaderOpt(WrapperClass, class, class)
-            parseClassExtendsOpt(WrapperClass)
-              listener: handleNoType(WrapperClass)
-              listener: handleClassExtends(null)
-            parseWithClauseOpt(WrapperClass)
-              listener: handleClassNoWithClause()
-            parseClassOrMixinImplementsOpt(WrapperClass)
-              listener: handleClassOrMixinImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(WrapperClass, DeclarationKind.Class, WrapperClass)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar({)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(assert)
-              indicatesMethodOrField(()
-              parseMethod({, null, null, null, null, null, {, Instance of 'SimpleType', null, assert, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, assert)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(assert)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
-                  listener: handleIdentifier(assert, methodDeclaration)
-                parseQualifiedRestOpt(assert, methodDeclarationContinuation)
-                parseMethodTypeVar(assert)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(assert, assert, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(assert, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseAssert(return, Assert.Expression)
-                                  listener: beginAssert(assert, Assert.Expression)
-                                  parseExpression(()
-                                    parsePrecedenceExpression((, 1, true)
-                                      parseUnaryExpression((, true)
-                                        parsePrimary((, expression)
-                                          parseSendOrFunctionLiteral((, expression)
-                                            parseSend((, expression)
-                                              ensureIdentifier((, expression)
-                                                listener: handleIdentifier(x, expression)
-                                              listener: handleNoTypeArguments(-)
-                                              parseArgumentsOpt(x)
-                                                listener: handleNoArguments(-)
-                                              listener: handleSend(x, -)
-                                      listener: beginBinaryExpression(-)
-                                      parsePrecedenceExpression(-, 14, true)
-                                        parseUnaryExpression(-, true)
-                                          parsePrimary(-, expression)
-                                            parseLiteralInt(-)
-                                              listener: handleLiteralInt(1)
-                                      listener: endBinaryExpression(-)
-                                  reportRecoverableError(assert, AssertAsExpression)
-                                    listener: handleRecoverableError(AssertAsExpression, assert, assert)
-                                  listener: endAssert(assert, Assert.Expression, (, null, +)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(break)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, break, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, break)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(break)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-                  listener: handleIdentifier(break, methodDeclaration)
-                parseQualifiedRestOpt(break, methodDeclarationContinuation)
-                parseMethodTypeVar(break)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(break, break, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(break, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-                                    rewriter()
-                                    listener: handleIdentifier(, expression)
-                                  listener: handleNoTypeArguments(break)
-                                  parseArgumentsOpt()
-                                    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)
-                          rewriter()
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, break)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseBreakStatement(;)
-                        isBreakAllowed()
-                        reportRecoverableError(break, BreakOutsideOfLoop)
-                          listener: handleRecoverableError(BreakOutsideOfLoop, break, break)
-                        ensureSemicolon(break)
-                          reportRecoverableError(break, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
-                          rewriter()
-                        listener: handleBreakStatement(false, break, ;)
-                  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)
-                                                        ensureIdentifier((, expression)
-                                                          listener: handleIdentifier(x, expression)
-                                                        listener: handleNoTypeArguments(-)
-                                                        parseArgumentsOpt(x)
-                                                          listener: handleNoArguments(-)
-                                                        listener: handleSend(x, -)
-                                                listener: beginBinaryExpression(-)
-                                                parsePrecedenceExpression(-, 14, true)
-                                                  parseUnaryExpression(-, true)
-                                                    parsePrimary(-, expression)
-                                                      parseLiteralInt(-)
-                                                        listener: handleLiteralInt(1)
-                                                listener: endBinaryExpression(-)
-                                            ensureCloseParen(1, ()
-                                        listener: handleParenthesizedExpression(()
-                                listener: beginBinaryExpression(+)
-                                parsePrecedenceExpression(+, 14, true)
-                                  parseUnaryExpression(+, true)
-                                    parsePrimary(+, expression)
-                                      parseLiteralInt(+)
-                                        listener: handleLiteralInt(1)
-                                listener: endBinaryExpression(+)
-                            ensureSemicolon(1)
-                            listener: handleExpressionStatement(;)
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(4, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(case)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, case, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, case)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(case)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-                  listener: handleIdentifier(case, methodDeclaration)
-                parseQualifiedRestOpt(case, methodDeclarationContinuation)
-                parseMethodTypeVar(case)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(case, case, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(case, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-                                    listener: handleIdentifier(case, expression)
-                                  listener: handleNoTypeArguments(()
-                                  parseArgumentsOpt(case)
-                                    parseArguments(case)
-                                      parseArgumentsRest(()
-                                        listener: beginArguments(()
-                                        parseExpression(()
-                                          parsePrecedenceExpression((, 1, true)
-                                            parseUnaryExpression((, true)
-                                              parsePrimary((, expression)
-                                                parseSendOrFunctionLiteral((, expression)
-                                                  parseSend((, expression)
-                                                    ensureIdentifier((, expression)
-                                                      listener: handleIdentifier(x, expression)
-                                                    listener: handleNoTypeArguments(-)
-                                                    parseArgumentsOpt(x)
-                                                      listener: handleNoArguments(-)
-                                                    listener: handleSend(x, -)
-                                            listener: beginBinaryExpression(-)
-                                            parsePrecedenceExpression(-, 14, true)
-                                              parseUnaryExpression(-, true)
-                                                parsePrimary(-, expression)
-                                                  parseLiteralInt(-)
-                                                    listener: handleLiteralInt(1)
-                                            listener: endBinaryExpression(-)
-                                        listener: endArguments(1, (, ))
-                                  listener: handleSend(case, +)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(catch)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, catch, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, catch)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(catch)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-                  listener: handleIdentifier(catch, methodDeclaration)
-                parseQualifiedRestOpt(catch, methodDeclarationContinuation)
-                parseMethodTypeVar(catch)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(catch, catch, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(catch, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-                                    listener: handleIdentifier(catch, expression)
-                                  listener: handleNoTypeArguments(()
-                                  parseArgumentsOpt(catch)
-                                    parseArguments(catch)
-                                      parseArgumentsRest(()
-                                        listener: beginArguments(()
-                                        parseExpression(()
-                                          parsePrecedenceExpression((, 1, true)
-                                            parseUnaryExpression((, true)
-                                              parsePrimary((, expression)
-                                                parseSendOrFunctionLiteral((, expression)
-                                                  parseSend((, expression)
-                                                    ensureIdentifier((, expression)
-                                                      listener: handleIdentifier(x, expression)
-                                                    listener: handleNoTypeArguments(-)
-                                                    parseArgumentsOpt(x)
-                                                      listener: handleNoArguments(-)
-                                                    listener: handleSend(x, -)
-                                            listener: beginBinaryExpression(-)
-                                            parsePrecedenceExpression(-, 14, true)
-                                              parseUnaryExpression(-, true)
-                                                parsePrimary(-, expression)
-                                                  parseLiteralInt(-)
-                                                    listener: handleLiteralInt(1)
-                                            listener: endBinaryExpression(-)
-                                        listener: endArguments(1, (, ))
-                                  listener: handleSend(catch, +)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(class)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, class, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, class)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(class)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-                  listener: handleIdentifier(class, methodDeclaration)
-                parseQualifiedRestOpt(class, methodDeclarationContinuation)
-                parseMethodTypeVar(class)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(class, class, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(class, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-                                    listener: handleIdentifier(class, expression)
-                                  listener: handleNoTypeArguments(()
-                                  parseArgumentsOpt(class)
-                                    parseArguments(class)
-                                      parseArgumentsRest(()
-                                        listener: beginArguments(()
-                                        parseExpression(()
-                                          parsePrecedenceExpression((, 1, true)
-                                            parseUnaryExpression((, true)
-                                              parsePrimary((, expression)
-                                                parseSendOrFunctionLiteral((, expression)
-                                                  parseSend((, expression)
-                                                    ensureIdentifier((, expression)
-                                                      listener: handleIdentifier(x, expression)
-                                                    listener: handleNoTypeArguments(-)
-                                                    parseArgumentsOpt(x)
-                                                      listener: handleNoArguments(-)
-                                                    listener: handleSend(x, -)
-                                            listener: beginBinaryExpression(-)
-                                            parsePrecedenceExpression(-, 14, true)
-                                              parseUnaryExpression(-, true)
-                                                parsePrimary(-, expression)
-                                                  parseLiteralInt(-)
-                                                    listener: handleLiteralInt(1)
-                                            listener: endBinaryExpression(-)
-                                        listener: endArguments(1, (, ))
-                                  listener: handleSend(class, +)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(const)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, const, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, const)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(const)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
-                  listener: handleIdentifier(const, methodDeclaration)
-                parseQualifiedRestOpt(const, methodDeclarationContinuation)
-                parseMethodTypeVar(const)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(const, const, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(const, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                parseConstExpression(return)
-                                  listener: beginConstExpression(const)
-                                  parseConstructorReference(const, null)
-                                    ensureIdentifier(const, constructorReference)
-                                      insertSyntheticIdentifier(const, constructorReference, message: Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], messageOnToken: null)
-                                        reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
-                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                                        rewriter()
-                                      listener: handleIdentifier(, constructorReference)
-                                    listener: beginConstructorReference()
-                                    parseQualifiedRestOpt(, constructorReferenceContinuation)
-                                    listener: handleNoTypeArguments(()
-                                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                    listener: endConstructorReference(, null, ()
-                                  parseConstructorInvocationArguments()
-                                    parseArgumentsRest(()
-                                      listener: beginArguments(()
-                                      parseExpression(()
-                                        parsePrecedenceExpression((, 1, true)
-                                          parseUnaryExpression((, true)
-                                            parsePrimary((, expression)
-                                              parseSendOrFunctionLiteral((, expression)
-                                                parseSend((, expression)
-                                                  ensureIdentifier((, expression)
-                                                    listener: handleIdentifier(x, expression)
-                                                  listener: handleNoTypeArguments(-)
-                                                  parseArgumentsOpt(x)
-                                                    listener: handleNoArguments(-)
-                                                  listener: handleSend(x, -)
-                                          listener: beginBinaryExpression(-)
-                                          parsePrecedenceExpression(-, 14, true)
-                                            parseUnaryExpression(-, true)
-                                              parsePrimary(-, expression)
-                                                parseLiteralInt(-)
-                                                  listener: handleLiteralInt(1)
-                                          listener: endBinaryExpression(-)
-                                      listener: endArguments(1, (, ))
-                                  listener: endConstExpression(const)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(continue)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, continue, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, continue)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(continue)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-                  listener: handleIdentifier(continue, methodDeclaration)
-                parseQualifiedRestOpt(continue, methodDeclarationContinuation)
-                parseMethodTypeVar(continue)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(continue, continue, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(continue, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-                                    rewriter()
-                                    listener: handleIdentifier(, expression)
-                                  listener: handleNoTypeArguments(continue)
-                                  parseArgumentsOpt()
-                                    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)
-                          rewriter()
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, continue)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseContinueStatement(;)
-                        isContinueAllowed()
-                        reportRecoverableError(continue, ContinueOutsideOfLoop)
-                          listener: handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
-                        ensureSemicolon(continue)
-                          reportRecoverableError(continue, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
-                          rewriter()
-                        listener: handleContinueStatement(false, continue, ;)
-                  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)
-                                                        ensureIdentifier((, expression)
-                                                          listener: handleIdentifier(x, expression)
-                                                        listener: handleNoTypeArguments(-)
-                                                        parseArgumentsOpt(x)
-                                                          listener: handleNoArguments(-)
-                                                        listener: handleSend(x, -)
-                                                listener: beginBinaryExpression(-)
-                                                parsePrecedenceExpression(-, 14, true)
-                                                  parseUnaryExpression(-, true)
-                                                    parsePrimary(-, expression)
-                                                      parseLiteralInt(-)
-                                                        listener: handleLiteralInt(1)
-                                                listener: endBinaryExpression(-)
-                                            ensureCloseParen(1, ()
-                                        listener: handleParenthesizedExpression(()
-                                listener: beginBinaryExpression(+)
-                                parsePrecedenceExpression(+, 14, true)
-                                  parseUnaryExpression(+, true)
-                                    parsePrimary(+, expression)
-                                      parseLiteralInt(+)
-                                        listener: handleLiteralInt(1)
-                                listener: endBinaryExpression(+)
-                            ensureSemicolon(1)
-                            listener: handleExpressionStatement(;)
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(4, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(default)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, default, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, default)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(default)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-                  listener: handleIdentifier(default, methodDeclaration)
-                parseQualifiedRestOpt(default, methodDeclarationContinuation)
-                parseMethodTypeVar(default)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(default, default, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(default, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-                                    listener: handleIdentifier(default, expression)
-                                  listener: handleNoTypeArguments(()
-                                  parseArgumentsOpt(default)
-                                    parseArguments(default)
-                                      parseArgumentsRest(()
-                                        listener: beginArguments(()
-                                        parseExpression(()
-                                          parsePrecedenceExpression((, 1, true)
-                                            parseUnaryExpression((, true)
-                                              parsePrimary((, expression)
-                                                parseSendOrFunctionLiteral((, expression)
-                                                  parseSend((, expression)
-                                                    ensureIdentifier((, expression)
-                                                      listener: handleIdentifier(x, expression)
-                                                    listener: handleNoTypeArguments(-)
-                                                    parseArgumentsOpt(x)
-                                                      listener: handleNoArguments(-)
-                                                    listener: handleSend(x, -)
-                                            listener: beginBinaryExpression(-)
-                                            parsePrecedenceExpression(-, 14, true)
-                                              parseUnaryExpression(-, true)
-                                                parsePrimary(-, expression)
-                                                  parseLiteralInt(-)
-                                                    listener: handleLiteralInt(1)
-                                            listener: endBinaryExpression(-)
-                                        listener: endArguments(1, (, ))
-                                  listener: handleSend(default, +)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(do)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, do, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, do)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(do)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-                  listener: handleIdentifier(do, methodDeclaration)
-                parseQualifiedRestOpt(do, methodDeclarationContinuation)
-                parseMethodTypeVar(do)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(do, do, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(do, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-                                    rewriter()
-                                    listener: handleIdentifier(, expression)
-                                  listener: handleNoTypeArguments(do)
-                                  parseArgumentsOpt()
-                                    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)
-                          rewriter()
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, do)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseDoWhileStatement(;)
-                        listener: beginDoWhileStatement(do)
-                        listener: beginDoWhileStatementBody(()
-                        parseStatement(do)
-                          parseStatementX(do)
-                            parseExpressionStatementOrDeclaration(do, false)
-                              parseExpressionStatementOrDeclarationAfterModifiers(do, do, null, null, null, false)
-                                looksLikeLocalFunction(()
-                                parseExpressionStatement(do)
-                                  parseExpression(do)
-                                    parsePrecedenceExpression(do, 1, true)
-                                      parseUnaryExpression(do, true)
-                                        parsePrimary(do, expression)
-                                          parseParenthesizedExpressionOrFunctionLiteral(do)
-                                            parseParenthesizedExpression(do)
-                                              parseExpressionInParenthesis(do)
-                                                parseExpressionInParenthesisRest(()
-                                                  parseExpression(()
-                                                    parsePrecedenceExpression((, 1, true)
-                                                      parseUnaryExpression((, true)
-                                                        parsePrimary((, expression)
-                                                          parseSendOrFunctionLiteral((, expression)
-                                                            parseSend((, expression)
-                                                              ensureIdentifier((, expression)
-                                                                listener: handleIdentifier(x, expression)
-                                                              listener: handleNoTypeArguments(-)
-                                                              parseArgumentsOpt(x)
-                                                                listener: handleNoArguments(-)
-                                                              listener: handleSend(x, -)
-                                                      listener: beginBinaryExpression(-)
-                                                      parsePrecedenceExpression(-, 14, true)
-                                                        parseUnaryExpression(-, true)
-                                                          parsePrimary(-, expression)
-                                                            parseLiteralInt(-)
-                                                              listener: handleLiteralInt(1)
-                                                      listener: endBinaryExpression(-)
-                                                  ensureCloseParen(1, ()
-                                              listener: handleParenthesizedExpression(()
-                                      listener: beginBinaryExpression(+)
-                                      parsePrecedenceExpression(+, 14, true)
-                                        parseUnaryExpression(+, true)
-                                          parsePrimary(+, expression)
-                                            parseLiteralInt(+)
-                                              listener: handleLiteralInt(1)
-                                      listener: endBinaryExpression(+)
-                                  ensureSemicolon(1)
-                                  listener: handleExpressionStatement(;)
-                        listener: endDoWhileStatementBody(;)
-                        reportRecoverableError(}, Message[ExpectedButGot, Expected 'while' before this., null, {string: while}])
-                          listener: handleRecoverableError(Message[ExpectedButGot, Expected 'while' before this., null, {string: while}], }, })
-                        rewriter()
-                        ensureParenthesizedCondition(while)
-                          reportRecoverableError(}, Message[ExpectedToken, Expected to find '('., null, {string: (}])
-                            listener: handleRecoverableError(Message[ExpectedToken, Expected to find '('., null, {string: (}], }, })
-                          rewriter()
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSend((, expression)
-                                      ensureIdentifier((, expression)
-                                        reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
-                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., null, {token: }}], }, })
-                                        rewriter()
-                                        listener: handleIdentifier(, expression)
-                                      listener: handleNoTypeArguments())
-                                      parseArgumentsOpt()
-                                        listener: handleNoArguments())
-                                      listener: handleSend(, ))
-                            ensureCloseParen(, ()
-                          listener: handleParenthesizedCondition(()
-                        ensureSemicolon())
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
-                          rewriter()
-                        listener: endDoWhileStatement(do, while, ;)
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(else)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, else, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, else)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(else)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-                  listener: handleIdentifier(else, methodDeclaration)
-                parseQualifiedRestOpt(else, methodDeclarationContinuation)
-                parseMethodTypeVar(else)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(else, else, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(else, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-                                    rewriter()
-                                    listener: handleIdentifier(, expression)
-                                  listener: handleNoTypeArguments(else)
-                                  parseArgumentsOpt()
-                                    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)
-                          rewriter()
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, else)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseExpressionStatementOrDeclaration(;, false)
-                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                          looksLikeLocalFunction(else)
-                          parseExpressionStatement(;)
-                            parseExpression(;)
-                              parsePrecedenceExpression(;, 1, true)
-                                parseUnaryExpression(;, true)
-                                  parsePrimary(;, expression)
-                                    inPlainSync()
-                                    parseSend(;, expression)
-                                      ensureIdentifier(;, expression)
-                                        reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
-                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-                                        rewriter()
-                                        listener: handleIdentifier(, expression)
-                                      listener: handleNoTypeArguments(else)
-                                      parseArgumentsOpt()
-                                        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)
-                              rewriter()
-                            listener: handleExpressionStatement(;)
-                  reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
-                    listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], else, else)
-                  notEofOrValue(}, ()
-                  parseStatement(else)
-                    parseStatementX(else)
-                      parseExpressionStatementOrDeclaration(else, false)
-                        parseExpressionStatementOrDeclarationAfterModifiers(else, else, null, null, null, false)
-                          looksLikeLocalFunction(()
-                          parseExpressionStatement(else)
-                            parseExpression(else)
-                              parsePrecedenceExpression(else, 1, true)
-                                parseUnaryExpression(else, true)
-                                  parsePrimary(else, expression)
-                                    parseParenthesizedExpressionOrFunctionLiteral(else)
-                                      parseParenthesizedExpression(else)
-                                        parseExpressionInParenthesis(else)
-                                          parseExpressionInParenthesisRest(()
-                                            parseExpression(()
-                                              parsePrecedenceExpression((, 1, true)
-                                                parseUnaryExpression((, true)
-                                                  parsePrimary((, expression)
-                                                    parseSendOrFunctionLiteral((, expression)
-                                                      parseSend((, expression)
-                                                        ensureIdentifier((, expression)
-                                                          listener: handleIdentifier(x, expression)
-                                                        listener: handleNoTypeArguments(-)
-                                                        parseArgumentsOpt(x)
-                                                          listener: handleNoArguments(-)
-                                                        listener: handleSend(x, -)
-                                                listener: beginBinaryExpression(-)
-                                                parsePrecedenceExpression(-, 14, true)
-                                                  parseUnaryExpression(-, true)
-                                                    parsePrimary(-, expression)
-                                                      parseLiteralInt(-)
-                                                        listener: handleLiteralInt(1)
-                                                listener: endBinaryExpression(-)
-                                            ensureCloseParen(1, ()
-                                        listener: handleParenthesizedExpression(()
-                                listener: beginBinaryExpression(+)
-                                parsePrecedenceExpression(+, 14, true)
-                                  parseUnaryExpression(+, true)
-                                    parsePrimary(+, expression)
-                                      parseLiteralInt(+)
-                                        listener: handleLiteralInt(1)
-                                listener: endBinaryExpression(+)
-                            ensureSemicolon(1)
-                            listener: handleExpressionStatement(;)
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(4, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(enum)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, enum, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, enum)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(enum)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-                  listener: handleIdentifier(enum, methodDeclaration)
-                parseQualifiedRestOpt(enum, methodDeclarationContinuation)
-                parseMethodTypeVar(enum)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(enum, enum, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(enum, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-                                    listener: handleIdentifier(enum, expression)
-                                  listener: handleNoTypeArguments(()
-                                  parseArgumentsOpt(enum)
-                                    parseArguments(enum)
-                                      parseArgumentsRest(()
-                                        listener: beginArguments(()
-                                        parseExpression(()
-                                          parsePrecedenceExpression((, 1, true)
-                                            parseUnaryExpression((, true)
-                                              parsePrimary((, expression)
-                                                parseSendOrFunctionLiteral((, expression)
-                                                  parseSend((, expression)
-                                                    ensureIdentifier((, expression)
-                                                      listener: handleIdentifier(x, expression)
-                                                    listener: handleNoTypeArguments(-)
-                                                    parseArgumentsOpt(x)
-                                                      listener: handleNoArguments(-)
-                                                    listener: handleSend(x, -)
-                                            listener: beginBinaryExpression(-)
-                                            parsePrecedenceExpression(-, 14, true)
-                                              parseUnaryExpression(-, true)
-                                                parsePrimary(-, expression)
-                                                  parseLiteralInt(-)
-                                                    listener: handleLiteralInt(1)
-                                            listener: endBinaryExpression(-)
-                                        listener: endArguments(1, (, ))
-                                  listener: handleSend(enum, +)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(extends)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, extends, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, extends)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(extends)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-                  listener: handleIdentifier(extends, methodDeclaration)
-                parseQualifiedRestOpt(extends, methodDeclarationContinuation)
-                parseMethodTypeVar(extends)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(extends, extends, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(extends, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-                                    listener: handleIdentifier(extends, expression)
-                                  listener: handleNoTypeArguments(()
-                                  parseArgumentsOpt(extends)
-                                    parseArguments(extends)
-                                      parseArgumentsRest(()
-                                        listener: beginArguments(()
-                                        parseExpression(()
-                                          parsePrecedenceExpression((, 1, true)
-                                            parseUnaryExpression((, true)
-                                              parsePrimary((, expression)
-                                                parseSendOrFunctionLiteral((, expression)
-                                                  parseSend((, expression)
-                                                    ensureIdentifier((, expression)
-                                                      listener: handleIdentifier(x, expression)
-                                                    listener: handleNoTypeArguments(-)
-                                                    parseArgumentsOpt(x)
-                                                      listener: handleNoArguments(-)
-                                                    listener: handleSend(x, -)
-                                            listener: beginBinaryExpression(-)
-                                            parsePrecedenceExpression(-, 14, true)
-                                              parseUnaryExpression(-, true)
-                                                parsePrimary(-, expression)
-                                                  parseLiteralInt(-)
-                                                    listener: handleLiteralInt(1)
-                                            listener: endBinaryExpression(-)
-                                        listener: endArguments(1, (, ))
-                                  listener: handleSend(extends, +)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(false)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, false, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, false)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(false)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
-                  listener: handleIdentifier(false, methodDeclaration)
-                parseQualifiedRestOpt(false, methodDeclarationContinuation)
-                parseMethodTypeVar(false)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(false, false, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(false, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                parseLiteralBool(return)
-                                  listener: handleLiteralBool(false)
-                            parseArgumentOrIndexStar(false, Instance of 'NoTypeParamOrArg', false)
-                              listener: handleNoTypeArguments(()
-                              parseArguments(false)
-                                parseArgumentsRest(()
-                                  listener: beginArguments(()
-                                  parseExpression(()
-                                    parsePrecedenceExpression((, 1, true)
-                                      parseUnaryExpression((, true)
-                                        parsePrimary((, expression)
-                                          parseSendOrFunctionLiteral((, expression)
-                                            parseSend((, expression)
-                                              ensureIdentifier((, expression)
-                                                listener: handleIdentifier(x, expression)
-                                              listener: handleNoTypeArguments(-)
-                                              parseArgumentsOpt(x)
-                                                listener: handleNoArguments(-)
-                                              listener: handleSend(x, -)
-                                      listener: beginBinaryExpression(-)
-                                      parsePrecedenceExpression(-, 14, true)
-                                        parseUnaryExpression(-, true)
-                                          parsePrimary(-, expression)
-                                            parseLiteralInt(-)
-                                              listener: handleLiteralInt(1)
-                                      listener: endBinaryExpression(-)
-                                  listener: endArguments(1, (, ))
-                              listener: handleSend((, ))
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(final)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, final, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, final)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(final)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-                  listener: handleIdentifier(final, methodDeclaration)
-                parseQualifiedRestOpt(final, methodDeclarationContinuation)
-                parseMethodTypeVar(final)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(final, final, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(final, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-                                    rewriter()
-                                    listener: handleIdentifier(, expression)
-                                  listener: handleNoTypeArguments(final)
-                                  parseArgumentsOpt()
-                                    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)
-                          rewriter()
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, final)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseExpressionStatementOrDeclarationAfterModifiers(final, ;, null, final, null, false)
-                        looksLikeLocalFunction(()
-                        listener: beginMetadataStar(final)
-                        listener: endMetadataStar(0)
-                        listener: handleNoType(final)
-                        listener: beginVariablesDeclaration((, null, final)
-                        parseVariablesDeclarationRest(final, true)
-                          parseOptionallyInitializedIdentifier(final)
-                            ensureIdentifier(final, localVariableDeclaration)
-                              reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
-                                listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                              rewriter()
-                              listener: handleIdentifier(, localVariableDeclaration)
-                            listener: beginInitializedIdentifier()
-                            parseVariableInitializerOpt()
-                              listener: handleNoVariableInitializer(x)
-                            listener: endInitializedIdentifier()
-                          ensureSemicolon()
-                            reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-                            rewriter()
-                          listener: endVariablesDeclaration(1, ;)
-                  notEofOrValue(}, x)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                        looksLikeLocalFunction(x)
-                        parseExpressionStatement(;)
-                          parseExpression(;)
-                            parsePrecedenceExpression(;, 1, true)
-                              parseUnaryExpression(;, true)
-                                parsePrimary(;, expression)
-                                  parseSendOrFunctionLiteral(;, expression)
-                                    parseSend(;, expression)
-                                      ensureIdentifier(;, expression)
-                                        listener: handleIdentifier(x, expression)
-                                      listener: handleNoTypeArguments(-)
-                                      parseArgumentsOpt(x)
-                                        listener: handleNoArguments(-)
-                                      listener: handleSend(x, -)
-                              listener: beginBinaryExpression(-)
-                              parsePrecedenceExpression(-, 14, true)
-                                parseUnaryExpression(-, true)
-                                  parsePrimary(-, expression)
-                                    parseLiteralInt(-)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(-)
-                          ensureSemicolon(1)
-                            reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-                            rewriter()
-                          listener: handleExpressionStatement(;)
-                  notEofOrValue(}, ))
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseExpressionStatementOrDeclaration(;, false)
-                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                          looksLikeLocalFunction())
-                          parseExpressionStatement(;)
-                            parseExpression(;)
-                              parsePrecedenceExpression(;, 1, true)
-                                parseUnaryExpression(;, true)
-                                  parsePrimary(;, expression)
-                                    parseSend(;, expression)
-                                      ensureIdentifier(;, expression)
-                                        reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
-                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-                                        rewriter()
-                                        listener: handleIdentifier(, expression)
-                                      listener: handleNoTypeArguments())
-                                      parseArgumentsOpt()
-                                        listener: handleNoArguments())
-                                      listener: handleSend(, ))
-                            ensureSemicolon()
-                              reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-                              rewriter()
-                            listener: handleExpressionStatement(;)
-                  reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
-                    listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-                  notEofOrValue(}, +)
-                  parseStatement())
-                    parseStatementX())
-                      parseExpressionStatementOrDeclaration(), false)
-                        parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                          looksLikeLocalFunction(+)
-                          parseExpressionStatement())
-                            parseExpression())
-                              parsePrecedenceExpression(), 1, true)
-                                parseUnaryExpression(), true)
-                                  rewriteAndRecover(), UnsupportedPrefixPlus, )
-                                    reportRecoverableError(+, UnsupportedPrefixPlus)
-                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                                    rewriter()
-                                  parsePrimary(), expression)
-                                    parseSendOrFunctionLiteral(), expression)
-                                      parseSend(), expression)
-                                        ensureIdentifier(), expression)
-                                          listener: handleIdentifier(, expression)
-                                        listener: handleNoTypeArguments(+)
-                                        parseArgumentsOpt()
-                                          listener: handleNoArguments(+)
-                                        listener: handleSend(, +)
-                                listener: beginBinaryExpression(+)
-                                parsePrecedenceExpression(+, 14, true)
-                                  parseUnaryExpression(+, true)
-                                    parsePrimary(+, expression)
-                                      parseLiteralInt(+)
-                                        listener: handleLiteralInt(1)
-                                listener: endBinaryExpression(+)
-                            ensureSemicolon(1)
-                            listener: handleExpressionStatement(;)
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(6, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(finally)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, finally, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, finally)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(finally)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-                  listener: handleIdentifier(finally, methodDeclaration)
-                parseQualifiedRestOpt(finally, methodDeclarationContinuation)
-                parseMethodTypeVar(finally)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(finally, finally, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(finally, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-                                    listener: handleIdentifier(finally, expression)
-                                  listener: handleNoTypeArguments(()
-                                  parseArgumentsOpt(finally)
-                                    parseArguments(finally)
-                                      parseArgumentsRest(()
-                                        listener: beginArguments(()
-                                        parseExpression(()
-                                          parsePrecedenceExpression((, 1, true)
-                                            parseUnaryExpression((, true)
-                                              parsePrimary((, expression)
-                                                parseSendOrFunctionLiteral((, expression)
-                                                  parseSend((, expression)
-                                                    ensureIdentifier((, expression)
-                                                      listener: handleIdentifier(x, expression)
-                                                    listener: handleNoTypeArguments(-)
-                                                    parseArgumentsOpt(x)
-                                                      listener: handleNoArguments(-)
-                                                    listener: handleSend(x, -)
-                                            listener: beginBinaryExpression(-)
-                                            parsePrecedenceExpression(-, 14, true)
-                                              parseUnaryExpression(-, true)
-                                                parsePrimary(-, expression)
-                                                  parseLiteralInt(-)
-                                                    listener: handleLiteralInt(1)
-                                            listener: endBinaryExpression(-)
-                                        listener: endArguments(1, (, ))
-                                  listener: handleSend(finally, +)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(for)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, for, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, for)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(for)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-                  listener: handleIdentifier(for, methodDeclaration)
-                parseQualifiedRestOpt(for, methodDeclarationContinuation)
-                parseMethodTypeVar(for)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(for, for, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(for, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-                                    rewriter()
-                                    listener: handleIdentifier(, expression)
-                                  listener: handleNoTypeArguments(for)
-                                  parseArgumentsOpt()
-                                    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)
-                          rewriter()
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, for)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseForStatement(;, null)
-                        listener: beginForStatement(for)
-                        parseForLoopPartsStart(null, for)
-                          parseExpressionStatementOrDeclaration((, true)
-                            parseExpressionStatementOrDeclarationAfterModifiers((, (, null, null, null, true)
-                        parseForLoopPartsMid((, null, for)
-                          parseExpression(()
-                            parsePrecedenceExpression((, 1, true)
-                              parseUnaryExpression((, true)
-                                parsePrimary((, expression)
-                                  parseSendOrFunctionLiteral((, expression)
-                                    parseSend((, expression)
-                                      ensureIdentifier((, expression)
-                                        listener: handleIdentifier(x, expression)
-                                      listener: handleNoTypeArguments(-)
-                                      parseArgumentsOpt(x)
-                                        listener: handleNoArguments(-)
-                                      listener: handleSend(x, -)
-                              listener: beginBinaryExpression(-)
-                              parsePrecedenceExpression(-, 14, true)
-                                parseUnaryExpression(-, true)
-                                  parsePrimary(-, expression)
-                                    parseLiteralInt(-)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(-)
-                          listener: handleForInitializerExpressionStatement(1, false)
-                        parseForRest(null, 1, for)
-                          parseForLoopPartsRest(1, for, null)
-                            ensureSemicolon(1)
-                              reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-                              rewriter()
-                            parseExpressionStatement(;)
-                              parseExpression(;)
-                                parsePrecedenceExpression(;, 1, true)
-                                  parseUnaryExpression(;, true)
-                                    parsePrimary(;, expression)
-                                      parseSend(;, expression)
-                                        ensureIdentifier(;, expression)
-                                          reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
-                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-                                          rewriter()
-                                          listener: handleIdentifier(, expression)
-                                        listener: handleNoTypeArguments())
-                                        parseArgumentsOpt()
-                                          listener: handleNoArguments())
-                                        listener: handleSend(, ))
-                              ensureSemicolon()
-                                reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                                  listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-                                rewriter()
-                              listener: handleExpressionStatement(;)
-                            listener: handleForLoopParts(for, (, ;, 0)
-                          listener: beginForStatementBody(+)
-                          parseStatement())
-                            parseStatementX())
-                              parseExpressionStatementOrDeclaration(), false)
-                                parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                                  looksLikeLocalFunction(+)
-                                  parseExpressionStatement())
-                                    parseExpression())
-                                      parsePrecedenceExpression(), 1, true)
-                                        parseUnaryExpression(), true)
-                                          rewriteAndRecover(), UnsupportedPrefixPlus, )
-                                            reportRecoverableError(+, UnsupportedPrefixPlus)
-                                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                                            rewriter()
-                                          parsePrimary(), expression)
-                                            parseSendOrFunctionLiteral(), expression)
-                                              parseSend(), expression)
-                                                ensureIdentifier(), expression)
-                                                  listener: handleIdentifier(, expression)
-                                                listener: handleNoTypeArguments(+)
-                                                parseArgumentsOpt()
-                                                  listener: handleNoArguments(+)
-                                                listener: handleSend(, +)
-                                        listener: beginBinaryExpression(+)
-                                        parsePrecedenceExpression(+, 14, true)
-                                          parseUnaryExpression(+, true)
-                                            parsePrimary(+, expression)
-                                              parseLiteralInt(+)
-                                                listener: handleLiteralInt(1)
-                                        listener: endBinaryExpression(+)
-                                    ensureSemicolon(1)
-                                    listener: handleExpressionStatement(;)
-                          listener: endForStatementBody(})
-                          listener: endForStatement(})
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(if)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, if, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, if)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(if)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-                  listener: handleIdentifier(if, methodDeclaration)
-                parseQualifiedRestOpt(if, methodDeclarationContinuation)
-                parseMethodTypeVar(if)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(if, if, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(if, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-                                    rewriter()
-                                    listener: handleIdentifier(, expression)
-                                  listener: handleNoTypeArguments(if)
-                                  parseArgumentsOpt()
-                                    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)
-                          rewriter()
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, if)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseIfStatement(;)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(-)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(-)
-                                        listener: handleSend(x, -)
-                                listener: beginBinaryExpression(-)
-                                parsePrecedenceExpression(-, 14, true)
-                                  parseUnaryExpression(-, true)
-                                    parsePrimary(-, expression)
-                                      parseLiteralInt(-)
-                                        listener: handleLiteralInt(1)
-                                listener: endBinaryExpression(-)
-                            ensureCloseParen(1, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(+)
-                        parseStatement())
-                          parseStatementX())
-                            parseExpressionStatementOrDeclaration(), false)
-                              parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                                looksLikeLocalFunction(+)
-                                parseExpressionStatement())
-                                  parseExpression())
-                                    parsePrecedenceExpression(), 1, true)
-                                      parseUnaryExpression(), true)
-                                        rewriteAndRecover(), UnsupportedPrefixPlus, )
-                                          reportRecoverableError(+, UnsupportedPrefixPlus)
-                                            listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                                          rewriter()
-                                        parsePrimary(), expression)
-                                          parseSendOrFunctionLiteral(), expression)
-                                            parseSend(), expression)
-                                              ensureIdentifier(), expression)
-                                                listener: handleIdentifier(, expression)
-                                              listener: handleNoTypeArguments(+)
-                                              parseArgumentsOpt()
-                                                listener: handleNoArguments(+)
-                                              listener: handleSend(, +)
-                                      listener: beginBinaryExpression(+)
-                                      parsePrecedenceExpression(+, 14, true)
-                                        parseUnaryExpression(+, true)
-                                          parsePrimary(+, expression)
-                                            parseLiteralInt(+)
-                                              listener: handleLiteralInt(1)
-                                      listener: endBinaryExpression(+)
-                                  ensureSemicolon(1)
-                                  listener: handleExpressionStatement(;)
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(in)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, in, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, in)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(in)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-                  listener: handleIdentifier(in, methodDeclaration)
-                parseQualifiedRestOpt(in, methodDeclarationContinuation)
-                parseMethodTypeVar(in)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(in, in, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(in, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-                                    listener: handleIdentifier(in, expression)
-                                  listener: handleNoTypeArguments(()
-                                  parseArgumentsOpt(in)
-                                    parseArguments(in)
-                                      parseArgumentsRest(()
-                                        listener: beginArguments(()
-                                        parseExpression(()
-                                          parsePrecedenceExpression((, 1, true)
-                                            parseUnaryExpression((, true)
-                                              parsePrimary((, expression)
-                                                parseSendOrFunctionLiteral((, expression)
-                                                  parseSend((, expression)
-                                                    ensureIdentifier((, expression)
-                                                      listener: handleIdentifier(x, expression)
-                                                    listener: handleNoTypeArguments(-)
-                                                    parseArgumentsOpt(x)
-                                                      listener: handleNoArguments(-)
-                                                    listener: handleSend(x, -)
-                                            listener: beginBinaryExpression(-)
-                                            parsePrecedenceExpression(-, 14, true)
-                                              parseUnaryExpression(-, true)
-                                                parsePrimary(-, expression)
-                                                  parseLiteralInt(-)
-                                                    listener: handleLiteralInt(1)
-                                            listener: endBinaryExpression(-)
-                                        listener: endArguments(1, (, ))
-                                  listener: handleSend(in, +)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(is)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, is, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, is)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(is)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-                  listener: handleIdentifier(is, methodDeclaration)
-                parseQualifiedRestOpt(is, methodDeclarationContinuation)
-                parseMethodTypeVar(is)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(is, is, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(is, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-                                    rewriter()
-                                    listener: handleIdentifier(, expression)
-                                  listener: handleNoTypeArguments(is)
-                                  parseArgumentsOpt()
-                                    listener: handleNoArguments(is)
-                                  listener: handleSend(, is)
-                            parseIsOperatorRest()
-                              listener: beginIsOperatorType(is)
-                              computeTypeAfterIsOrAs(is)
-                              reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
-                                listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '('., null, {token: (}], (, ()
-                              rewriter()
-                              listener: handleIdentifier(, typeReference)
-                              listener: handleNoTypeArguments(()
-                              listener: handleType(, null)
-                              listener: endIsOperatorType(is)
-                              listener: handleIsOperator(is, null)
-                              skipChainedAsIsOperators()
-                        ensureSemicolon()
-                          reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
-                          rewriter()
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  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)
-                                                        ensureIdentifier((, expression)
-                                                          listener: handleIdentifier(x, expression)
-                                                        listener: handleNoTypeArguments(-)
-                                                        parseArgumentsOpt(x)
-                                                          listener: handleNoArguments(-)
-                                                        listener: handleSend(x, -)
-                                                listener: beginBinaryExpression(-)
-                                                parsePrecedenceExpression(-, 14, true)
-                                                  parseUnaryExpression(-, true)
-                                                    parsePrimary(-, expression)
-                                                      parseLiteralInt(-)
-                                                        listener: handleLiteralInt(1)
-                                                listener: endBinaryExpression(-)
-                                            ensureCloseParen(1, ()
-                                        listener: handleParenthesizedExpression(()
-                                listener: beginBinaryExpression(+)
-                                parsePrecedenceExpression(+, 14, true)
-                                  parseUnaryExpression(+, true)
-                                    parsePrimary(+, expression)
-                                      parseLiteralInt(+)
-                                        listener: handleLiteralInt(1)
-                                listener: endBinaryExpression(+)
-                            ensureSemicolon(1)
-                            listener: handleExpressionStatement(;)
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(new)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, new, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, new)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(new)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
-                  listener: handleIdentifier(new, methodDeclaration)
-                parseQualifiedRestOpt(new, methodDeclarationContinuation)
-                parseMethodTypeVar(new)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(new, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                parseNewExpression(return)
-                                  listener: beginNewExpression(new)
-                                  parseConstructorReference(new, null)
-                                    ensureIdentifier(new, constructorReference)
-                                      insertSyntheticIdentifier(new, constructorReference, message: Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], messageOnToken: null)
-                                        reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
-                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                                        rewriter()
-                                      listener: handleIdentifier(, constructorReference)
-                                    listener: beginConstructorReference()
-                                    parseQualifiedRestOpt(, constructorReferenceContinuation)
-                                    listener: handleNoTypeArguments(()
-                                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                                    listener: endConstructorReference(, null, ()
-                                  parseConstructorInvocationArguments()
-                                    parseArgumentsRest(()
-                                      listener: beginArguments(()
-                                      parseExpression(()
-                                        parsePrecedenceExpression((, 1, true)
-                                          parseUnaryExpression((, true)
-                                            parsePrimary((, expression)
-                                              parseSendOrFunctionLiteral((, expression)
-                                                parseSend((, expression)
-                                                  ensureIdentifier((, expression)
-                                                    listener: handleIdentifier(x, expression)
-                                                  listener: handleNoTypeArguments(-)
-                                                  parseArgumentsOpt(x)
-                                                    listener: handleNoArguments(-)
-                                                  listener: handleSend(x, -)
-                                          listener: beginBinaryExpression(-)
-                                          parsePrecedenceExpression(-, 14, true)
-                                            parseUnaryExpression(-, true)
-                                              parsePrimary(-, expression)
-                                                parseLiteralInt(-)
-                                                  listener: handleLiteralInt(1)
-                                          listener: endBinaryExpression(-)
-                                      listener: endArguments(1, (, ))
-                                  listener: endNewExpression(new)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(null)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, null, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, null)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(null)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
-                  listener: handleIdentifier(null, methodDeclaration)
-                parseQualifiedRestOpt(null, methodDeclarationContinuation)
-                parseMethodTypeVar(null)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(null, null, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(null, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                parseLiteralNull(return)
-                                  listener: handleLiteralNull(null)
-                            parseArgumentOrIndexStar(null, Instance of 'NoTypeParamOrArg', false)
-                              listener: handleNoTypeArguments(()
-                              parseArguments(null)
-                                parseArgumentsRest(()
-                                  listener: beginArguments(()
-                                  parseExpression(()
-                                    parsePrecedenceExpression((, 1, true)
-                                      parseUnaryExpression((, true)
-                                        parsePrimary((, expression)
-                                          parseSendOrFunctionLiteral((, expression)
-                                            parseSend((, expression)
-                                              ensureIdentifier((, expression)
-                                                listener: handleIdentifier(x, expression)
-                                              listener: handleNoTypeArguments(-)
-                                              parseArgumentsOpt(x)
-                                                listener: handleNoArguments(-)
-                                              listener: handleSend(x, -)
-                                      listener: beginBinaryExpression(-)
-                                      parsePrecedenceExpression(-, 14, true)
-                                        parseUnaryExpression(-, true)
-                                          parsePrimary(-, expression)
-                                            parseLiteralInt(-)
-                                              listener: handleLiteralInt(1)
-                                      listener: endBinaryExpression(-)
-                                  listener: endArguments(1, (, ))
-                              listener: handleSend((, ))
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(rethrow)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, rethrow, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, rethrow)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(rethrow)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-                  listener: handleIdentifier(rethrow, methodDeclaration)
-                parseQualifiedRestOpt(rethrow, methodDeclarationContinuation)
-                parseMethodTypeVar(rethrow)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(rethrow, rethrow, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(rethrow, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-                                    listener: handleIdentifier(rethrow, expression)
-                                  listener: handleNoTypeArguments(()
-                                  parseArgumentsOpt(rethrow)
-                                    parseArguments(rethrow)
-                                      parseArgumentsRest(()
-                                        listener: beginArguments(()
-                                        parseExpression(()
-                                          parsePrecedenceExpression((, 1, true)
-                                            parseUnaryExpression((, true)
-                                              parsePrimary((, expression)
-                                                parseSendOrFunctionLiteral((, expression)
-                                                  parseSend((, expression)
-                                                    ensureIdentifier((, expression)
-                                                      listener: handleIdentifier(x, expression)
-                                                    listener: handleNoTypeArguments(-)
-                                                    parseArgumentsOpt(x)
-                                                      listener: handleNoArguments(-)
-                                                    listener: handleSend(x, -)
-                                            listener: beginBinaryExpression(-)
-                                            parsePrecedenceExpression(-, 14, true)
-                                              parseUnaryExpression(-, true)
-                                                parsePrimary(-, expression)
-                                                  parseLiteralInt(-)
-                                                    listener: handleLiteralInt(1)
-                                            listener: endBinaryExpression(-)
-                                        listener: endArguments(1, (, ))
-                                  listener: handleSend(rethrow, +)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(return)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, return, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, return)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(return)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
-                  listener: handleIdentifier(return, methodDeclaration)
-                parseQualifiedRestOpt(return, methodDeclarationContinuation)
-                parseMethodTypeVar(return)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(return, return, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(return, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
-                                  listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token 'return'., null, {token: return}], return, return)
-                                parsePrimary(return, expression)
-                                  parseParenthesizedExpressionOrFunctionLiteral(return)
-                                    parseParenthesizedExpression(return)
-                                      parseExpressionInParenthesis(return)
-                                        parseExpressionInParenthesisRest(()
-                                          parseExpression(()
-                                            parsePrecedenceExpression((, 1, true)
-                                              parseUnaryExpression((, true)
-                                                parsePrimary((, expression)
-                                                  parseSendOrFunctionLiteral((, expression)
-                                                    parseSend((, expression)
-                                                      ensureIdentifier((, expression)
-                                                        listener: handleIdentifier(x, expression)
-                                                      listener: handleNoTypeArguments(-)
-                                                      parseArgumentsOpt(x)
-                                                        listener: handleNoArguments(-)
-                                                      listener: handleSend(x, -)
-                                              listener: beginBinaryExpression(-)
-                                              parsePrecedenceExpression(-, 14, true)
-                                                parseUnaryExpression(-, true)
-                                                  parsePrimary(-, expression)
-                                                    parseLiteralInt(-)
-                                                      listener: handleLiteralInt(1)
-                                              listener: endBinaryExpression(-)
-                                          ensureCloseParen(1, ()
-                                      listener: handleParenthesizedExpression(()
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(super)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, super, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, super)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(super)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
-                  listener: handleIdentifier(super, methodDeclaration)
-                parseQualifiedRestOpt(super, methodDeclarationContinuation)
-                parseMethodTypeVar(super)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(super, super, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(super, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                parseSuperExpression(return, expression)
-                                  listener: handleSuperExpression(super, expression)
-                                  listener: handleNoTypeArguments(()
-                                  parseArguments(super)
-                                    parseArgumentsRest(()
-                                      listener: beginArguments(()
-                                      parseExpression(()
-                                        parsePrecedenceExpression((, 1, true)
-                                          parseUnaryExpression((, true)
-                                            parsePrimary((, expression)
-                                              parseSendOrFunctionLiteral((, expression)
-                                                parseSend((, expression)
-                                                  ensureIdentifier((, expression)
-                                                    listener: handleIdentifier(x, expression)
-                                                  listener: handleNoTypeArguments(-)
-                                                  parseArgumentsOpt(x)
-                                                    listener: handleNoArguments(-)
-                                                  listener: handleSend(x, -)
-                                          listener: beginBinaryExpression(-)
-                                          parsePrecedenceExpression(-, 14, true)
-                                            parseUnaryExpression(-, true)
-                                              parsePrimary(-, expression)
-                                                parseLiteralInt(-)
-                                                  listener: handleLiteralInt(1)
-                                          listener: endBinaryExpression(-)
-                                      listener: endArguments(1, (, ))
-                                  listener: handleSend(super, +)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(switch)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, switch, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, switch)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(switch)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-                  listener: handleIdentifier(switch, methodDeclaration)
-                parseQualifiedRestOpt(switch, methodDeclarationContinuation)
-                parseMethodTypeVar(switch)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(switch, switch, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(switch, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-                                    rewriter()
-                                    listener: handleIdentifier(, expression)
-                                  listener: handleNoTypeArguments(switch)
-                                  parseArgumentsOpt()
-                                    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)
-                          rewriter()
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, switch)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseSwitchStatement(;)
-                        listener: beginSwitchStatement(switch)
-                        ensureParenthesizedCondition(switch)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(-)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(-)
-                                        listener: handleSend(x, -)
-                                listener: beginBinaryExpression(-)
-                                parsePrecedenceExpression(-, 14, true)
-                                  parseUnaryExpression(-, true)
-                                    parsePrimary(-, expression)
-                                      parseLiteralInt(-)
-                                        listener: handleLiteralInt(1)
-                                listener: endBinaryExpression(-)
-                            ensureCloseParen(1, ()
-                          listener: handleParenthesizedCondition(()
-                        parseSwitchBlock())
-                          ensureBlock(), null, switch statement)
-                            reportRecoverableError(), Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}])
-                              listener: handleRecoverableError(Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}], ), ))
-                            insertBlock())
-                              rewriter()
-                              rewriter()
-                          listener: beginSwitchBlock({)
-                          notEofOrValue(}, })
-                          listener: endSwitchBlock(0, {, })
-                        listener: endSwitchStatement(switch, })
-                  notEofOrValue(}, +)
-                  parseStatement(})
-                    parseStatementX(})
-                      parseExpressionStatementOrDeclaration(}, false)
-                        parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
-                          looksLikeLocalFunction(+)
-                          parseExpressionStatement(})
-                            parseExpression(})
-                              parsePrecedenceExpression(}, 1, true)
-                                parseUnaryExpression(}, true)
-                                  rewriteAndRecover(}, UnsupportedPrefixPlus, )
-                                    reportRecoverableError(+, UnsupportedPrefixPlus)
-                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                                    rewriter()
-                                  parsePrimary(}, expression)
-                                    parseSendOrFunctionLiteral(}, expression)
-                                      parseSend(}, expression)
-                                        ensureIdentifier(}, expression)
-                                          listener: handleIdentifier(, expression)
-                                        listener: handleNoTypeArguments(+)
-                                        parseArgumentsOpt()
-                                          listener: handleNoArguments(+)
-                                        listener: handleSend(, +)
-                                listener: beginBinaryExpression(+)
-                                parsePrecedenceExpression(+, 14, true)
-                                  parseUnaryExpression(+, true)
-                                    parsePrimary(+, expression)
-                                      parseLiteralInt(+)
-                                        listener: handleLiteralInt(1)
-                                listener: endBinaryExpression(+)
-                            ensureSemicolon(1)
-                            listener: handleExpressionStatement(;)
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(4, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              recoverFromInvalidMember(int, }, null, null, null, null, null, }, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
-                parseFields(}, null, null, null, null, null, }, Instance of 'SimpleType', this, DeclarationKind.Class, WrapperClass, false)
-                  listener: handleIdentifier(int, typeReference)
-                  listener: handleNoTypeArguments(this)
-                  listener: handleType(int, null)
-                  ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
-                    reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
-                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
-                    listener: handleIdentifier(this, fieldDeclaration)
-                  parseFieldInitializerOpt(this, this, null, null, DeclarationKind.Class, WrapperClass)
-                    listener: handleNoFieldInitializer(()
-                  ensureSemicolon(this)
-                    reportRecoverableError(this, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], this, this)
-                    rewriter()
-                  listener: endClassFields(null, null, null, null, 1, int, ;)
-                listener: endMember()
-            notEofOrValue(}, ()
-            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(()
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              recoverFromInvalidMember(;, ;, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, WrapperClass)
-                parseMethod(;, null, null, null, null, null, ;, Instance of 'NoType', null, (, DeclarationKind.Class, WrapperClass, false)
-                  listener: beginMethod(null, null, null, null, null, ()
-                  listener: handleNoType(;)
-                  ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
-                    insertSyntheticIdentifier(;, methodDeclaration, message: null, messageOnToken: null)
-                      reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
-                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                      rewriter()
-                    listener: handleIdentifier(, methodDeclaration)
-                  parseQualifiedRestOpt(, methodDeclarationContinuation)
-                  parseMethodTypeVar()
-                    listener: handleNoTypeVariables(()
-                  parseGetterOrFormalParameters(, (, 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(}, if)
-                    parseStatement({)
-                      parseStatementX({)
-                        parseIfStatement({)
-                          listener: beginIfStatement(if)
-                          ensureParenthesizedCondition(if)
-                            parseExpressionInParenthesisRest(()
-                              parseExpression(()
-                                parsePrecedenceExpression((, 1, true)
-                                  parseUnaryExpression((, true)
-                                    parsePrimary((, expression)
-                                      parseSendOrFunctionLiteral((, expression)
-                                        parseSend((, expression)
-                                          ensureIdentifier((, expression)
-                                            listener: handleIdentifier(x, expression)
-                                          listener: handleNoTypeArguments(==)
-                                          parseArgumentsOpt(x)
-                                            listener: handleNoArguments(==)
-                                          listener: handleSend(x, ==)
-                                  listener: beginBinaryExpression(==)
-                                  parsePrecedenceExpression(==, 8, true)
-                                    parseUnaryExpression(==, true)
-                                      parsePrimary(==, expression)
-                                        parseLiteralInt(==)
-                                          listener: handleLiteralInt(0)
-                                  listener: endBinaryExpression(==)
-                              ensureCloseParen(0, ()
-                            listener: handleParenthesizedCondition(()
-                          listener: beginThenStatement(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()
-                          listener: endThenStatement(;)
-                          listener: endIfStatement(if, null)
-                    notEofOrValue(}, return)
-                    parseStatement(;)
-                      parseStatementX(;)
-                        parseReturnStatement(;)
-                          listener: beginReturnStatement(return)
-                          parseExpression(return)
-                            parsePrecedenceExpression(return, 1, true)
-                              parseUnaryExpression(return, true)
-                                parsePrimary(return, expression)
-                                  parseThisExpression(return, expression)
-                                    listener: handleThisExpression(this, expression)
-                                    listener: handleNoTypeArguments(()
-                                    parseArguments(this)
-                                      parseArgumentsRest(()
-                                        listener: beginArguments(()
-                                        parseExpression(()
-                                          parsePrecedenceExpression((, 1, true)
-                                            parseUnaryExpression((, true)
-                                              parsePrimary((, expression)
-                                                parseSendOrFunctionLiteral((, expression)
-                                                  parseSend((, expression)
-                                                    ensureIdentifier((, expression)
-                                                      listener: handleIdentifier(x, expression)
-                                                    listener: handleNoTypeArguments(-)
-                                                    parseArgumentsOpt(x)
-                                                      listener: handleNoArguments(-)
-                                                    listener: handleSend(x, -)
-                                            listener: beginBinaryExpression(-)
-                                            parsePrecedenceExpression(-, 14, true)
-                                              parseUnaryExpression(-, true)
-                                                parsePrimary(-, expression)
-                                                  parseLiteralInt(-)
-                                                    listener: handleLiteralInt(1)
-                                            listener: endBinaryExpression(-)
-                                        listener: endArguments(1, (, ))
-                                    listener: handleSend(this, +)
-                              listener: beginBinaryExpression(+)
-                              parsePrecedenceExpression(+, 14, true)
-                                parseUnaryExpression(+, true)
-                                  parsePrimary(+, expression)
-                                    parseLiteralInt(+)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(+)
-                          ensureSemicolon(1)
-                          listener: endReturnStatement(true, return, ;)
-                          inGenerator()
-                    notEofOrValue(}, })
-                    listener: endBlockFunctionBody(2, {, })
-                  listener: endClassMethod(null, , (, null, })
-                listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(throw)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, throw, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, throw)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(throw)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
-                  listener: handleIdentifier(throw, methodDeclaration)
-                parseQualifiedRestOpt(throw, methodDeclarationContinuation)
-                parseMethodTypeVar(throw)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(throw, throw, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(throw, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parseThrowExpression(return, true)
-                            parseExpression(throw)
-                              parsePrecedenceExpression(throw, 1, true)
-                                parseUnaryExpression(throw, true)
-                                  parsePrimary(throw, expression)
-                                    parseParenthesizedExpressionOrFunctionLiteral(throw)
-                                      parseParenthesizedExpression(throw)
-                                        parseExpressionInParenthesis(throw)
-                                          parseExpressionInParenthesisRest(()
-                                            parseExpression(()
-                                              parsePrecedenceExpression((, 1, true)
-                                                parseUnaryExpression((, true)
-                                                  parsePrimary((, expression)
-                                                    parseSendOrFunctionLiteral((, expression)
-                                                      parseSend((, expression)
-                                                        ensureIdentifier((, expression)
-                                                          listener: handleIdentifier(x, expression)
-                                                        listener: handleNoTypeArguments(-)
-                                                        parseArgumentsOpt(x)
-                                                          listener: handleNoArguments(-)
-                                                        listener: handleSend(x, -)
-                                                listener: beginBinaryExpression(-)
-                                                parsePrecedenceExpression(-, 14, true)
-                                                  parseUnaryExpression(-, true)
-                                                    parsePrimary(-, expression)
-                                                      parseLiteralInt(-)
-                                                        listener: handleLiteralInt(1)
-                                                listener: endBinaryExpression(-)
-                                            ensureCloseParen(1, ()
-                                        listener: handleParenthesizedExpression(()
-                                listener: beginBinaryExpression(+)
-                                parsePrecedenceExpression(+, 14, true)
-                                  parseUnaryExpression(+, true)
-                                    parsePrimary(+, expression)
-                                      parseLiteralInt(+)
-                                        listener: handleLiteralInt(1)
-                                listener: endBinaryExpression(+)
-                            listener: handleThrowExpression(throw, ;)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(true)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, true, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, true)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(true)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
-                  listener: handleIdentifier(true, methodDeclaration)
-                parseQualifiedRestOpt(true, methodDeclarationContinuation)
-                parseMethodTypeVar(true)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(true, true, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(true, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  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)
-                            parseArgumentOrIndexStar(true, Instance of 'NoTypeParamOrArg', false)
-                              listener: handleNoTypeArguments(()
-                              parseArguments(true)
-                                parseArgumentsRest(()
-                                  listener: beginArguments(()
-                                  parseExpression(()
-                                    parsePrecedenceExpression((, 1, true)
-                                      parseUnaryExpression((, true)
-                                        parsePrimary((, expression)
-                                          parseSendOrFunctionLiteral((, expression)
-                                            parseSend((, expression)
-                                              ensureIdentifier((, expression)
-                                                listener: handleIdentifier(x, expression)
-                                              listener: handleNoTypeArguments(-)
-                                              parseArgumentsOpt(x)
-                                                listener: handleNoArguments(-)
-                                              listener: handleSend(x, -)
-                                      listener: beginBinaryExpression(-)
-                                      parsePrecedenceExpression(-, 14, true)
-                                        parseUnaryExpression(-, true)
-                                          parsePrimary(-, expression)
-                                            parseLiteralInt(-)
-                                              listener: handleLiteralInt(1)
-                                      listener: endBinaryExpression(-)
-                                  listener: endArguments(1, (, ))
-                              listener: handleSend((, ))
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(try)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, try, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, try)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(try)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-                  listener: handleIdentifier(try, methodDeclaration)
-                parseQualifiedRestOpt(try, methodDeclarationContinuation)
-                parseMethodTypeVar(try)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(try, try, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(try, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-                                    rewriter()
-                                    listener: handleIdentifier(, expression)
-                                  listener: handleNoTypeArguments(try)
-                                  parseArgumentsOpt()
-                                    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)
-                          rewriter()
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, try)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseTryStatement(;)
-                        listener: beginTryStatement(try)
-                        parseBlock(try, BlockKind(try statement))
-                          ensureBlock(try, null, try statement)
-                            reportRecoverableError(try, Message[ExpectedClassOrMixinBody, A try statement must have a body, even if it is empty., Try adding an empty body., {string: try statement}])
-                              listener: 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)
-                            insertBlock(try)
-                              rewriter()
-                              rewriter()
-                          listener: beginBlock({, BlockKind(try statement))
-                          notEofOrValue(}, })
-                          listener: endBlock(0, {, }, BlockKind(try statement))
-                        reportRecoverableError(try, OnlyTry)
-                          listener: handleRecoverableError(OnlyTry, try, try)
-                        listener: endTryStatement(0, try, null)
-                  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)
-                                                        ensureIdentifier((, expression)
-                                                          listener: handleIdentifier(x, expression)
-                                                        listener: handleNoTypeArguments(-)
-                                                        parseArgumentsOpt(x)
-                                                          listener: handleNoArguments(-)
-                                                        listener: handleSend(x, -)
-                                                listener: beginBinaryExpression(-)
-                                                parsePrecedenceExpression(-, 14, true)
-                                                  parseUnaryExpression(-, true)
-                                                    parsePrimary(-, expression)
-                                                      parseLiteralInt(-)
-                                                        listener: handleLiteralInt(1)
-                                                listener: endBinaryExpression(-)
-                                            ensureCloseParen(1, ()
-                                        listener: handleParenthesizedExpression(()
-                                listener: beginBinaryExpression(+)
-                                parsePrecedenceExpression(+, 14, true)
-                                  parseUnaryExpression(+, true)
-                                    parsePrimary(+, expression)
-                                      parseLiteralInt(+)
-                                        listener: handleLiteralInt(1)
-                                listener: endBinaryExpression(+)
-                            ensureSemicolon(1)
-                            listener: handleExpressionStatement(;)
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(4, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(var)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, var, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, var)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(var)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-                  listener: handleIdentifier(var, methodDeclaration)
-                parseQualifiedRestOpt(var, methodDeclarationContinuation)
-                parseMethodTypeVar(var)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(var, var, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(var, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-                                    rewriter()
-                                    listener: handleIdentifier(, expression)
-                                  listener: handleNoTypeArguments(var)
-                                  parseArgumentsOpt()
-                                    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)
-                          rewriter()
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, var)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, false)
-                        looksLikeLocalFunction(()
-                        listener: beginMetadataStar(var)
-                        listener: endMetadataStar(0)
-                        listener: handleNoType(var)
-                        listener: beginVariablesDeclaration((, null, var)
-                        parseVariablesDeclarationRest(var, true)
-                          parseOptionallyInitializedIdentifier(var)
-                            ensureIdentifier(var, localVariableDeclaration)
-                              reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
-                                listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                              rewriter()
-                              listener: handleIdentifier(, localVariableDeclaration)
-                            listener: beginInitializedIdentifier()
-                            parseVariableInitializerOpt()
-                              listener: handleNoVariableInitializer(x)
-                            listener: endInitializedIdentifier()
-                          ensureSemicolon()
-                            reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-                            rewriter()
-                          listener: endVariablesDeclaration(1, ;)
-                  notEofOrValue(}, x)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                        looksLikeLocalFunction(x)
-                        parseExpressionStatement(;)
-                          parseExpression(;)
-                            parsePrecedenceExpression(;, 1, true)
-                              parseUnaryExpression(;, true)
-                                parsePrimary(;, expression)
-                                  parseSendOrFunctionLiteral(;, expression)
-                                    parseSend(;, expression)
-                                      ensureIdentifier(;, expression)
-                                        listener: handleIdentifier(x, expression)
-                                      listener: handleNoTypeArguments(-)
-                                      parseArgumentsOpt(x)
-                                        listener: handleNoArguments(-)
-                                      listener: handleSend(x, -)
-                              listener: beginBinaryExpression(-)
-                              parsePrecedenceExpression(-, 14, true)
-                                parseUnaryExpression(-, true)
-                                  parsePrimary(-, expression)
-                                    parseLiteralInt(-)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(-)
-                          ensureSemicolon(1)
-                            reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-                            rewriter()
-                          listener: handleExpressionStatement(;)
-                  notEofOrValue(}, ))
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseExpressionStatementOrDeclaration(;, false)
-                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                          looksLikeLocalFunction())
-                          parseExpressionStatement(;)
-                            parseExpression(;)
-                              parsePrecedenceExpression(;, 1, true)
-                                parseUnaryExpression(;, true)
-                                  parsePrimary(;, expression)
-                                    parseSend(;, expression)
-                                      ensureIdentifier(;, expression)
-                                        reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
-                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-                                        rewriter()
-                                        listener: handleIdentifier(, expression)
-                                      listener: handleNoTypeArguments())
-                                      parseArgumentsOpt()
-                                        listener: handleNoArguments())
-                                      listener: handleSend(, ))
-                            ensureSemicolon()
-                              reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-                              rewriter()
-                            listener: handleExpressionStatement(;)
-                  reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
-                    listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-                  notEofOrValue(}, +)
-                  parseStatement())
-                    parseStatementX())
-                      parseExpressionStatementOrDeclaration(), false)
-                        parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                          looksLikeLocalFunction(+)
-                          parseExpressionStatement())
-                            parseExpression())
-                              parsePrecedenceExpression(), 1, true)
-                                parseUnaryExpression(), true)
-                                  rewriteAndRecover(), UnsupportedPrefixPlus, )
-                                    reportRecoverableError(+, UnsupportedPrefixPlus)
-                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                                    rewriter()
-                                  parsePrimary(), expression)
-                                    parseSendOrFunctionLiteral(), expression)
-                                      parseSend(), expression)
-                                        ensureIdentifier(), expression)
-                                          listener: handleIdentifier(, expression)
-                                        listener: handleNoTypeArguments(+)
-                                        parseArgumentsOpt()
-                                          listener: handleNoArguments(+)
-                                        listener: handleSend(, +)
-                                listener: beginBinaryExpression(+)
-                                parsePrecedenceExpression(+, 14, true)
-                                  parseUnaryExpression(+, true)
-                                    parsePrimary(+, expression)
-                                      parseLiteralInt(+)
-                                        listener: handleLiteralInt(1)
-                                listener: endBinaryExpression(+)
-                            ensureSemicolon(1)
-                            listener: handleExpressionStatement(;)
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(6, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(void)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, void, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, void)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(void)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-                  listener: handleIdentifier(void, methodDeclaration)
-                parseQualifiedRestOpt(void, methodDeclarationContinuation)
-                parseMethodTypeVar(void)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(void, void, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(void, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                parseSendOrFunctionLiteral(return, expression)
-                                  parseSend(return, expression)
-                                    ensureIdentifier(return, expression)
-                                      reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
-                                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-                                      rewriter()
-                                      listener: handleIdentifier(, expression)
-                                    listener: handleNoTypeArguments(void)
-                                    parseArgumentsOpt()
-                                      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)
-                          rewriter()
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, void)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseExpressionStatementOrDeclaration(;, false)
-                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                          looksLikeLocalFunction(()
-                          listener: beginMetadataStar(void)
-                          listener: endMetadataStar(0)
-                          listener: handleVoidKeyword(void)
-                          listener: beginVariablesDeclaration((, null, null)
-                          parseVariablesDeclarationRest(void, true)
-                            parseOptionallyInitializedIdentifier(void)
-                              ensureIdentifier(void, localVariableDeclaration)
-                                reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
-                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                                rewriter()
-                                listener: handleIdentifier(, localVariableDeclaration)
-                              listener: beginInitializedIdentifier()
-                              parseVariableInitializerOpt()
-                                listener: handleNoVariableInitializer(x)
-                              listener: endInitializedIdentifier()
-                            ensureSemicolon()
-                              reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-                              rewriter()
-                            listener: endVariablesDeclaration(1, ;)
-                  notEofOrValue(}, x)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                        looksLikeLocalFunction(x)
-                        parseExpressionStatement(;)
-                          parseExpression(;)
-                            parsePrecedenceExpression(;, 1, true)
-                              parseUnaryExpression(;, true)
-                                parsePrimary(;, expression)
-                                  parseSendOrFunctionLiteral(;, expression)
-                                    parseSend(;, expression)
-                                      ensureIdentifier(;, expression)
-                                        listener: handleIdentifier(x, expression)
-                                      listener: handleNoTypeArguments(-)
-                                      parseArgumentsOpt(x)
-                                        listener: handleNoArguments(-)
-                                      listener: handleSend(x, -)
-                              listener: beginBinaryExpression(-)
-                              parsePrecedenceExpression(-, 14, true)
-                                parseUnaryExpression(-, true)
-                                  parsePrimary(-, expression)
-                                    parseLiteralInt(-)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(-)
-                          ensureSemicolon(1)
-                            reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-                            rewriter()
-                          listener: handleExpressionStatement(;)
-                  notEofOrValue(}, ))
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseExpressionStatementOrDeclaration(;, false)
-                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                          looksLikeLocalFunction())
-                          parseExpressionStatement(;)
-                            parseExpression(;)
-                              parsePrecedenceExpression(;, 1, true)
-                                parseUnaryExpression(;, true)
-                                  parsePrimary(;, expression)
-                                    parseSend(;, expression)
-                                      ensureIdentifier(;, expression)
-                                        reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
-                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-                                        rewriter()
-                                        listener: handleIdentifier(, expression)
-                                      listener: handleNoTypeArguments())
-                                      parseArgumentsOpt()
-                                        listener: handleNoArguments())
-                                      listener: handleSend(, ))
-                            ensureSemicolon()
-                              reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-                              rewriter()
-                            listener: handleExpressionStatement(;)
-                  reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
-                    listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-                  notEofOrValue(}, +)
-                  parseStatement())
-                    parseStatementX())
-                      parseExpressionStatementOrDeclaration(), false)
-                        parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                          looksLikeLocalFunction(+)
-                          parseExpressionStatement())
-                            parseExpression())
-                              parsePrecedenceExpression(), 1, true)
-                                parseUnaryExpression(), true)
-                                  rewriteAndRecover(), UnsupportedPrefixPlus, )
-                                    reportRecoverableError(+, UnsupportedPrefixPlus)
-                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                                    rewriter()
-                                  parsePrimary(), expression)
-                                    parseSendOrFunctionLiteral(), expression)
-                                      parseSend(), expression)
-                                        ensureIdentifier(), expression)
-                                          listener: handleIdentifier(, expression)
-                                        listener: handleNoTypeArguments(+)
-                                        parseArgumentsOpt()
-                                          listener: handleNoArguments(+)
-                                        listener: handleSend(, +)
-                                listener: beginBinaryExpression(+)
-                                parsePrecedenceExpression(+, 14, true)
-                                  parseUnaryExpression(+, true)
-                                    parsePrimary(+, expression)
-                                      parseLiteralInt(+)
-                                        listener: handleLiteralInt(1)
-                                listener: endBinaryExpression(+)
-                            ensureSemicolon(1)
-                            listener: handleExpressionStatement(;)
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(6, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(while)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, while, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, while)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(while)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-                  listener: handleIdentifier(while, methodDeclaration)
-                parseQualifiedRestOpt(while, methodDeclarationContinuation)
-                parseMethodTypeVar(while)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(while, while, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(while, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-                                    rewriter()
-                                    listener: handleIdentifier(, expression)
-                                  listener: handleNoTypeArguments(while)
-                                  parseArgumentsOpt()
-                                    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)
-                          rewriter()
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, while)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseWhileStatement(;)
-                        listener: beginWhileStatement(while)
-                        ensureParenthesizedCondition(while)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(-)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(-)
-                                        listener: handleSend(x, -)
-                                listener: beginBinaryExpression(-)
-                                parsePrecedenceExpression(-, 14, true)
-                                  parseUnaryExpression(-, true)
-                                    parsePrimary(-, expression)
-                                      parseLiteralInt(-)
-                                        listener: handleLiteralInt(1)
-                                listener: endBinaryExpression(-)
-                            ensureCloseParen(1, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginWhileStatementBody(+)
-                        parseStatement())
-                          parseStatementX())
-                            parseExpressionStatementOrDeclaration(), false)
-                              parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                                looksLikeLocalFunction(+)
-                                parseExpressionStatement())
-                                  parseExpression())
-                                    parsePrecedenceExpression(), 1, true)
-                                      parseUnaryExpression(), true)
-                                        rewriteAndRecover(), UnsupportedPrefixPlus, )
-                                          reportRecoverableError(+, UnsupportedPrefixPlus)
-                                            listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                                          rewriter()
-                                        parsePrimary(), expression)
-                                          parseSendOrFunctionLiteral(), expression)
-                                            parseSend(), expression)
-                                              ensureIdentifier(), expression)
-                                                listener: handleIdentifier(, expression)
-                                              listener: handleNoTypeArguments(+)
-                                              parseArgumentsOpt()
-                                                listener: handleNoArguments(+)
-                                              listener: handleSend(, +)
-                                      listener: beginBinaryExpression(+)
-                                      parsePrecedenceExpression(+, 14, true)
-                                        parseUnaryExpression(+, true)
-                                          parsePrimary(+, expression)
-                                            parseLiteralInt(+)
-                                              listener: handleLiteralInt(1)
-                                      listener: endBinaryExpression(+)
-                                  ensureSemicolon(1)
-                                  listener: handleExpressionStatement(;)
-                        listener: endWhileStatementBody(})
-                        listener: endWhileStatement(while, })
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(})
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(with)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, }, Instance of 'SimpleType', null, with, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, with)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(with)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-                  listener: handleIdentifier(with, methodDeclaration)
-                parseQualifiedRestOpt(with, methodDeclarationContinuation)
-                parseMethodTypeVar(with)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(with, with, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(with, 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(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(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()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                inPlainSync()
-                                parseSend(return, expression)
-                                  ensureIdentifier(return, expression)
-                                    reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
-                                      listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-                                    listener: handleIdentifier(with, expression)
-                                  listener: handleNoTypeArguments(()
-                                  parseArgumentsOpt(with)
-                                    parseArguments(with)
-                                      parseArgumentsRest(()
-                                        listener: beginArguments(()
-                                        parseExpression(()
-                                          parsePrecedenceExpression((, 1, true)
-                                            parseUnaryExpression((, true)
-                                              parsePrimary((, expression)
-                                                parseSendOrFunctionLiteral((, expression)
-                                                  parseSend((, expression)
-                                                    ensureIdentifier((, expression)
-                                                      listener: handleIdentifier(x, expression)
-                                                    listener: handleNoTypeArguments(-)
-                                                    parseArgumentsOpt(x)
-                                                      listener: handleNoArguments(-)
-                                                    listener: handleSend(x, -)
-                                            listener: beginBinaryExpression(-)
-                                            parsePrecedenceExpression(-, 14, true)
-                                              parseUnaryExpression(-, true)
-                                                parsePrimary(-, expression)
-                                                  parseLiteralInt(-)
-                                                    listener: handleLiteralInt(1)
-                                            listener: endBinaryExpression(-)
-                                        listener: endArguments(1, (, ))
-                                  listener: handleSend(with, +)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
-            notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 34, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration()
-  reportAllErrorTokens(class)
-  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_methods.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_methods.dart.parser.expect
deleted file mode 100644
index dcf12ad..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_methods.dart.parser.expect
+++ /dev/null
@@ -1,335 +0,0 @@
-NOTICE: Stream was rewritten by parser!
-
-class WrapperClass {
-int assert(int x) {
-if (x == 0) return 42;
-return assert(x-1) + 1;
-}
-
-int break(int x) {
-if (x == 0) return 42;
-return ;break;(x-1) + 1;
-}
-
-int case(int x) {
-if (x == 0) return 42;
-return case(x-1) + 1;
-}
-
-int catch(int x) {
-if (x == 0) return 42;
-return catch(x-1) + 1;
-}
-
-int class(int x) {
-if (x == 0) return 42;
-return class(x-1) + 1;
-}
-
-int const(int x) {
-if (x == 0) return 42;
-return const(x-1) + 1;
-}
-
-int continue(int x) {
-if (x == 0) return 42;
-return ;continue;(x-1) + 1;
-}
-
-int default(int x) {
-if (x == 0) return 42;
-return default(x-1) + 1;
-}
-
-int do(int x) {
-if (x == 0) return 42;
-return ;do(x-1) + 1;
-while();}
-
-int else(int x) {
-if (x == 0) return 42;
-return ;;else(x-1) + 1;
-}
-
-int enum(int x) {
-if (x == 0) return 42;
-return enum(x-1) + 1;
-}
-
-int extends(int x) {
-if (x == 0) return 42;
-return extends(x-1) + 1;
-}
-
-int false(int x) {
-if (x == 0) return 42;
-return false(x-1) + 1;
-}
-
-int final(int x) {
-if (x == 0) return 42;
-return ;final(;x-1;;) + 1;
-}
-
-int finally(int x) {
-if (x == 0) return 42;
-return finally(x-1) + 1;
-}
-
-int for(int x) {
-if (x == 0) return 42;
-return ;for(x-1;;) + 1;
-}
-
-int if(int x) {
-if (x == 0) return 42;
-return ;if(x-1) + 1;
-}
-
-int in(int x) {
-if (x == 0) return 42;
-return in(x-1) + 1;
-}
-
-int is(int x) {
-if (x == 0) return 42;
-return is;(x-1) + 1;
-}
-
-int new(int x) {
-if (x == 0) return 42;
-return new(x-1) + 1;
-}
-
-int null(int x) {
-if (x == 0) return 42;
-return null(x-1) + 1;
-}
-
-int rethrow(int x) {
-if (x == 0) return 42;
-return rethrow(x-1) + 1;
-}
-
-int return(int x) {
-if (x == 0) return 42;
-return return(x-1) + 1;
-}
-
-int super(int x) {
-if (x == 0) return 42;
-return super(x-1) + 1;
-}
-
-int switch(int x) {
-if (x == 0) return 42;
-return ;switch(x-1) {}+ 1;
-}
-
-int this;(int x) {
-if (x == 0) return 42;
-return this(x-1) + 1;
-}
-
-int throw(int x) {
-if (x == 0) return 42;
-return throw(x-1) + 1;
-}
-
-int true(int x) {
-if (x == 0) return 42;
-return true(x-1) + 1;
-}
-
-int try(int x) {
-if (x == 0) return 42;
-return ;try{}(x-1) + 1;
-}
-
-int var(int x) {
-if (x == 0) return 42;
-return ;var(;x-1;;) + 1;
-}
-
-int void(int x) {
-if (x == 0) return 42;
-return ;void(;x-1;;) + 1;
-}
-
-int while(int x) {
-if (x == 0) return 42;
-return ;while(x-1) + 1;
-}
-
-int with(int x) {
-if (x == 0) return 42;
-return with(x-1) + 1;
-}
-}
-
-class[KeywordToken] WrapperClass[StringToken] {[BeginToken]
-int[StringToken] assert[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] assert[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] break[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]break[KeywordToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] case[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] case[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] catch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] catch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] class[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] class[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] const[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] const[KeywordToken][SyntheticStringToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] continue[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]continue[KeywordToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] default[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] default[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] do[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]do[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-while[SyntheticKeywordToken]([SyntheticBeginToken][SyntheticStringToken])[SyntheticToken];[SyntheticToken]}[SimpleToken]
-
-int[StringToken] else[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken]else[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] enum[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] enum[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] extends[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] extends[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] false[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] false[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] final[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]final[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] finally[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] finally[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] for[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]for[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] if[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]if[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] in[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] in[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] is[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken]is[KeywordToken][SyntheticStringToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] new[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] new[KeywordToken][SyntheticStringToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] null[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] null[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] rethrow[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] rethrow[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] return[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] return[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] super[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] super[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] switch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]switch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] {[SyntheticBeginToken]}[SyntheticToken][SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] this[KeywordToken];[SyntheticToken][SyntheticStringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] throw[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] throw[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] true[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] true[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] try[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]try[KeywordToken]{[SyntheticBeginToken]}[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] var[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]var[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] void[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]void[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] while[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]while[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] with[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] with[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_methods.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_methods.dart.scanner.expect
deleted file mode 100644
index 3401113..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_class_methods.dart.scanner.expect
+++ /dev/null
@@ -1,333 +0,0 @@
-class WrapperClass {
-int assert(int x) {
-if (x == 0) return 42;
-return assert(x-1) + 1;
-}
-
-int break(int x) {
-if (x == 0) return 42;
-return break(x-1) + 1;
-}
-
-int case(int x) {
-if (x == 0) return 42;
-return case(x-1) + 1;
-}
-
-int catch(int x) {
-if (x == 0) return 42;
-return catch(x-1) + 1;
-}
-
-int class(int x) {
-if (x == 0) return 42;
-return class(x-1) + 1;
-}
-
-int const(int x) {
-if (x == 0) return 42;
-return const(x-1) + 1;
-}
-
-int continue(int x) {
-if (x == 0) return 42;
-return continue(x-1) + 1;
-}
-
-int default(int x) {
-if (x == 0) return 42;
-return default(x-1) + 1;
-}
-
-int do(int x) {
-if (x == 0) return 42;
-return do(x-1) + 1;
-}
-
-int else(int x) {
-if (x == 0) return 42;
-return else(x-1) + 1;
-}
-
-int enum(int x) {
-if (x == 0) return 42;
-return enum(x-1) + 1;
-}
-
-int extends(int x) {
-if (x == 0) return 42;
-return extends(x-1) + 1;
-}
-
-int false(int x) {
-if (x == 0) return 42;
-return false(x-1) + 1;
-}
-
-int final(int x) {
-if (x == 0) return 42;
-return final(x-1) + 1;
-}
-
-int finally(int x) {
-if (x == 0) return 42;
-return finally(x-1) + 1;
-}
-
-int for(int x) {
-if (x == 0) return 42;
-return for(x-1) + 1;
-}
-
-int if(int x) {
-if (x == 0) return 42;
-return if(x-1) + 1;
-}
-
-int in(int x) {
-if (x == 0) return 42;
-return in(x-1) + 1;
-}
-
-int is(int x) {
-if (x == 0) return 42;
-return is(x-1) + 1;
-}
-
-int new(int x) {
-if (x == 0) return 42;
-return new(x-1) + 1;
-}
-
-int null(int x) {
-if (x == 0) return 42;
-return null(x-1) + 1;
-}
-
-int rethrow(int x) {
-if (x == 0) return 42;
-return rethrow(x-1) + 1;
-}
-
-int return(int x) {
-if (x == 0) return 42;
-return return(x-1) + 1;
-}
-
-int super(int x) {
-if (x == 0) return 42;
-return super(x-1) + 1;
-}
-
-int switch(int x) {
-if (x == 0) return 42;
-return switch(x-1) + 1;
-}
-
-int this(int x) {
-if (x == 0) return 42;
-return this(x-1) + 1;
-}
-
-int throw(int x) {
-if (x == 0) return 42;
-return throw(x-1) + 1;
-}
-
-int true(int x) {
-if (x == 0) return 42;
-return true(x-1) + 1;
-}
-
-int try(int x) {
-if (x == 0) return 42;
-return try(x-1) + 1;
-}
-
-int var(int x) {
-if (x == 0) return 42;
-return var(x-1) + 1;
-}
-
-int void(int x) {
-if (x == 0) return 42;
-return void(x-1) + 1;
-}
-
-int while(int x) {
-if (x == 0) return 42;
-return while(x-1) + 1;
-}
-
-int with(int x) {
-if (x == 0) return 42;
-return with(x-1) + 1;
-}
-}
-
-class[KeywordToken] WrapperClass[StringToken] {[BeginToken]
-int[StringToken] assert[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] assert[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] break[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] break[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] case[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] case[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] catch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] catch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] class[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] class[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] const[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] const[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] continue[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] continue[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] default[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] default[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] do[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] do[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] else[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] else[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] enum[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] enum[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] extends[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] extends[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] false[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] false[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] final[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] final[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] finally[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] finally[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] for[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] for[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] if[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] if[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] in[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] in[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] is[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] is[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] new[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] new[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] null[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] null[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] rethrow[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] rethrow[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] return[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] return[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] super[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] super[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] switch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] switch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] throw[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] throw[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] true[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] true[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] try[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] try[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] var[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] var[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] void[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] void[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] while[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] while[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] with[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] with[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_fields.dart b/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_fields.dart
deleted file mode 100644
index 30bed69..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_fields.dart
+++ /dev/null
@@ -1,164 +0,0 @@
-int assert(int x) {
-  if (x == 0) return 42;
-  return assert(x-1) + 1;
-}
-
-int break(int x) {
-  if (x == 0) return 42;
-  return break(x-1) + 1;
-}
-
-int case(int x) {
-  if (x == 0) return 42;
-  return case(x-1) + 1;
-}
-
-int catch(int x) {
-  if (x == 0) return 42;
-  return catch(x-1) + 1;
-}
-
-int class(int x) {
-  if (x == 0) return 42;
-  return class(x-1) + 1;
-}
-
-int const(int x) {
-  if (x == 0) return 42;
-  return const(x-1) + 1;
-}
-
-int continue(int x) {
-  if (x == 0) return 42;
-  return continue(x-1) + 1;
-}
-
-int default(int x) {
-  if (x == 0) return 42;
-  return default(x-1) + 1;
-}
-
-int do(int x) {
-  if (x == 0) return 42;
-  return do(x-1) + 1;
-}
-
-int else(int x) {
-  if (x == 0) return 42;
-  return else(x-1) + 1;
-}
-
-int enum(int x) {
-  if (x == 0) return 42;
-  return enum(x-1) + 1;
-}
-
-int extends(int x) {
-  if (x == 0) return 42;
-  return extends(x-1) + 1;
-}
-
-int false(int x) {
-  if (x == 0) return 42;
-  return false(x-1) + 1;
-}
-
-int final(int x) {
-  if (x == 0) return 42;
-  return final(x-1) + 1;
-}
-
-int finally(int x) {
-  if (x == 0) return 42;
-  return finally(x-1) + 1;
-}
-
-int for(int x) {
-  if (x == 0) return 42;
-  return for(x-1) + 1;
-}
-
-int if(int x) {
-  if (x == 0) return 42;
-  return if(x-1) + 1;
-}
-
-int in(int x) {
-  if (x == 0) return 42;
-  return in(x-1) + 1;
-}
-
-int is(int x) {
-  if (x == 0) return 42;
-  return is(x-1) + 1;
-}
-
-int new(int x) {
-  if (x == 0) return 42;
-  return new(x-1) + 1;
-}
-
-int null(int x) {
-  if (x == 0) return 42;
-  return null(x-1) + 1;
-}
-
-int rethrow(int x) {
-  if (x == 0) return 42;
-  return rethrow(x-1) + 1;
-}
-
-int return(int x) {
-  if (x == 0) return 42;
-  return return(x-1) + 1;
-}
-
-int super(int x) {
-  if (x == 0) return 42;
-  return super(x-1) + 1;
-}
-
-int switch(int x) {
-  if (x == 0) return 42;
-  return switch(x-1) + 1;
-}
-
-int this(int x) {
-  if (x == 0) return 42;
-  return this(x-1) + 1;
-}
-
-int throw(int x) {
-  if (x == 0) return 42;
-  return throw(x-1) + 1;
-}
-
-int true(int x) {
-  if (x == 0) return 42;
-  return true(x-1) + 1;
-}
-
-int try(int x) {
-  if (x == 0) return 42;
-  return try(x-1) + 1;
-}
-
-int var(int x) {
-  if (x == 0) return 42;
-  return var(x-1) + 1;
-}
-
-int void(int x) {
-  if (x == 0) return 42;
-  return void(x-1) + 1;
-}
-
-int while(int x) {
-  if (x == 0) return 42;
-  return while(x-1) + 1;
-}
-
-int with(int x) {
-  if (x == 0) return 42;
-  return with(x-1) + 1;
-}
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_fields.dart.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_fields.dart.expect
deleted file mode 100644
index 858beef..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_fields.dart.expect
+++ /dev/null
@@ -1,2594 +0,0 @@
-Problems reported:
-
-parser/error_recovery/reserved_words_top_level_fields:1:5: Expected an identifier, but got 'assert'.
-int assert(int x) {
-    ^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:3:10: `assert` can't be used as an expression.
-  return assert(x-1) + 1;
-         ^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:6:5: Expected an identifier, but got 'break'.
-int break(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:8:10: Expected an identifier, but got 'break'.
-  return break(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:8:10: Expected ';' after this.
-  return break(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:8:10: A break statement can't be used outside of a loop or switch statement.
-  return break(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:8:10: Expected ';' after this.
-  return break(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:11:5: Expected an identifier, but got 'case'.
-int case(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:13:10: Expected an identifier, but got 'case'.
-  return case(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:16:5: Expected an identifier, but got 'catch'.
-int catch(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:18:10: Expected an identifier, but got 'catch'.
-  return catch(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:21:5: Expected an identifier, but got 'class'.
-int class(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:23:10: Expected an identifier, but got 'class'.
-  return class(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:26:5: Expected an identifier, but got 'const'.
-int const(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:28:15: Expected an identifier, but got '('.
-  return const(x-1) + 1;
-              ^
-
-parser/error_recovery/reserved_words_top_level_fields:31:5: Expected an identifier, but got 'continue'.
-int continue(int x) {
-    ^^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:33:10: Expected an identifier, but got 'continue'.
-  return continue(x-1) + 1;
-         ^^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:33:10: Expected ';' after this.
-  return continue(x-1) + 1;
-         ^^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:33:10: A continue statement can't be used outside of a loop or switch statement.
-  return continue(x-1) + 1;
-         ^^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:33:10: Expected ';' after this.
-  return continue(x-1) + 1;
-         ^^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:36:5: Expected an identifier, but got 'default'.
-int default(int x) {
-    ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:38:10: Expected an identifier, but got 'default'.
-  return default(x-1) + 1;
-         ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:41:5: Expected an identifier, but got 'do'.
-int do(int x) {
-    ^^
-
-parser/error_recovery/reserved_words_top_level_fields:43:10: Expected an identifier, but got 'do'.
-  return do(x-1) + 1;
-         ^^
-
-parser/error_recovery/reserved_words_top_level_fields:43:10: Expected ';' after this.
-  return do(x-1) + 1;
-         ^^
-
-parser/error_recovery/reserved_words_top_level_fields:44:1: Expected 'while' before this.
-}
-^
-
-parser/error_recovery/reserved_words_top_level_fields:44:1: Expected to find '('.
-}
-^
-
-parser/error_recovery/reserved_words_top_level_fields:44:1: Expected an identifier, but got '}'.
-}
-^
-
-parser/error_recovery/reserved_words_top_level_fields:44:1: Expected ';' after this.
-}
-^
-
-parser/error_recovery/reserved_words_top_level_fields:46:5: Expected an identifier, but got 'else'.
-int else(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:48:10: Expected an identifier, but got 'else'.
-  return else(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:48:10: Expected ';' after this.
-  return else(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:48:10: Expected an identifier, but got 'else'.
-  return else(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:48:10: Expected ';' after this.
-  return else(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:48:10: Unexpected token ';'.
-  return else(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:51:5: Expected an identifier, but got 'enum'.
-int enum(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:53:10: Expected an identifier, but got 'enum'.
-  return enum(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:56:5: Expected an identifier, but got 'extends'.
-int extends(int x) {
-    ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:58:10: Expected an identifier, but got 'extends'.
-  return extends(x-1) + 1;
-         ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:61:5: Expected an identifier, but got 'false'.
-int false(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:66:5: Expected an identifier, but got 'final'.
-int final(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:68:10: Expected an identifier, but got 'final'.
-  return final(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:68:10: Expected ';' after this.
-  return final(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:68:15: Expected an identifier, but got '('.
-  return final(x-1) + 1;
-              ^
-
-parser/error_recovery/reserved_words_top_level_fields:68:16: Expected ';' after this.
-  return final(x-1) + 1;
-               ^
-
-parser/error_recovery/reserved_words_top_level_fields:68:18: Expected ';' after this.
-  return final(x-1) + 1;
-                 ^
-
-parser/error_recovery/reserved_words_top_level_fields:68:19: Expected an identifier, but got ')'.
-  return final(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_top_level_fields:68:19: Expected ';' after this.
-  return final(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_top_level_fields:68:19: Unexpected token ';'.
-  return final(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_top_level_fields:68:21: '+' is not a prefix operator.
-  return final(x-1) + 1;
-                    ^
-
-parser/error_recovery/reserved_words_top_level_fields:71:5: Expected an identifier, but got 'finally'.
-int finally(int x) {
-    ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:73:10: Expected an identifier, but got 'finally'.
-  return finally(x-1) + 1;
-         ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:76:5: Expected an identifier, but got 'for'.
-int for(int x) {
-    ^^^
-
-parser/error_recovery/reserved_words_top_level_fields:78:10: Expected an identifier, but got 'for'.
-  return for(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_fields:78:10: Expected ';' after this.
-  return for(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_fields:78:16: Expected ';' after this.
-  return for(x-1) + 1;
-               ^
-
-parser/error_recovery/reserved_words_top_level_fields:78:17: Expected an identifier, but got ')'.
-  return for(x-1) + 1;
-                ^
-
-parser/error_recovery/reserved_words_top_level_fields:78:17: Expected ';' after this.
-  return for(x-1) + 1;
-                ^
-
-parser/error_recovery/reserved_words_top_level_fields:78:19: '+' is not a prefix operator.
-  return for(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_top_level_fields:81:5: Expected an identifier, but got 'if'.
-int if(int x) {
-    ^^
-
-parser/error_recovery/reserved_words_top_level_fields:83:10: Expected an identifier, but got 'if'.
-  return if(x-1) + 1;
-         ^^
-
-parser/error_recovery/reserved_words_top_level_fields:83:10: Expected ';' after this.
-  return if(x-1) + 1;
-         ^^
-
-parser/error_recovery/reserved_words_top_level_fields:83:18: '+' is not a prefix operator.
-  return if(x-1) + 1;
-                 ^
-
-parser/error_recovery/reserved_words_top_level_fields:86:5: Expected an identifier, but got 'in'.
-int in(int x) {
-    ^^
-
-parser/error_recovery/reserved_words_top_level_fields:88:10: Expected an identifier, but got 'in'.
-  return in(x-1) + 1;
-         ^^
-
-parser/error_recovery/reserved_words_top_level_fields:91:5: Expected an identifier, but got 'is'.
-int is(int x) {
-    ^^
-
-parser/error_recovery/reserved_words_top_level_fields:93:10: Expected an identifier, but got 'is'.
-  return is(x-1) + 1;
-         ^^
-
-parser/error_recovery/reserved_words_top_level_fields:93:12: Expected a type, but got '('.
-  return is(x-1) + 1;
-           ^
-
-parser/error_recovery/reserved_words_top_level_fields:93:12: Expected ';' after this.
-  return is(x-1) + 1;
-           ^
-
-parser/error_recovery/reserved_words_top_level_fields:96:5: Expected an identifier, but got 'new'.
-int new(int x) {
-    ^^^
-
-parser/error_recovery/reserved_words_top_level_fields:98:13: Expected an identifier, but got '('.
-  return new(x-1) + 1;
-            ^
-
-parser/error_recovery/reserved_words_top_level_fields:101:5: Expected an identifier, but got 'null'.
-int null(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:106:5: Expected an identifier, but got 'rethrow'.
-int rethrow(int x) {
-    ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:108:10: Expected an identifier, but got 'rethrow'.
-  return rethrow(x-1) + 1;
-         ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:111:5: Expected an identifier, but got 'return'.
-int return(int x) {
-    ^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:113:10: Unexpected token 'return'.
-  return return(x-1) + 1;
-         ^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:116:5: Expected an identifier, but got 'super'.
-int super(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:121:5: Expected an identifier, but got 'switch'.
-int switch(int x) {
-    ^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:123:10: Expected an identifier, but got 'switch'.
-  return switch(x-1) + 1;
-         ^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:123:10: Expected ';' after this.
-  return switch(x-1) + 1;
-         ^^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:123:20: A switch statement must have a body, even if it is empty.
-  return switch(x-1) + 1;
-                   ^
-
-parser/error_recovery/reserved_words_top_level_fields:123:22: '+' is not a prefix operator.
-  return switch(x-1) + 1;
-                     ^
-
-parser/error_recovery/reserved_words_top_level_fields:126:5: Expected an identifier, but got 'this'.
-int this(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:131:5: Expected an identifier, but got 'throw'.
-int throw(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:136:5: Expected an identifier, but got 'true'.
-int true(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:141:5: Expected an identifier, but got 'try'.
-int try(int x) {
-    ^^^
-
-parser/error_recovery/reserved_words_top_level_fields:143:10: Expected an identifier, but got 'try'.
-  return try(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_fields:143:10: Expected ';' after this.
-  return try(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_fields:143:10: A try statement must have a body, even if it is empty.
-  return try(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_fields:143:10: A try block must be followed by an 'on', 'catch', or 'finally' clause.
-  return try(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_fields:146:5: Expected an identifier, but got 'var'.
-int var(int x) {
-    ^^^
-
-parser/error_recovery/reserved_words_top_level_fields:148:10: Expected an identifier, but got 'var'.
-  return var(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_fields:148:10: Expected ';' after this.
-  return var(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_fields:148:13: Expected an identifier, but got '('.
-  return var(x-1) + 1;
-            ^
-
-parser/error_recovery/reserved_words_top_level_fields:148:14: Expected ';' after this.
-  return var(x-1) + 1;
-             ^
-
-parser/error_recovery/reserved_words_top_level_fields:148:16: Expected ';' after this.
-  return var(x-1) + 1;
-               ^
-
-parser/error_recovery/reserved_words_top_level_fields:148:17: Expected an identifier, but got ')'.
-  return var(x-1) + 1;
-                ^
-
-parser/error_recovery/reserved_words_top_level_fields:148:17: Expected ';' after this.
-  return var(x-1) + 1;
-                ^
-
-parser/error_recovery/reserved_words_top_level_fields:148:17: Unexpected token ';'.
-  return var(x-1) + 1;
-                ^
-
-parser/error_recovery/reserved_words_top_level_fields:148:19: '+' is not a prefix operator.
-  return var(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_top_level_fields:151:5: Expected an identifier, but got 'void'.
-int void(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:153:10: Expected an identifier, but got 'void'.
-  return void(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:153:10: Expected ';' after this.
-  return void(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:153:14: Expected an identifier, but got '('.
-  return void(x-1) + 1;
-             ^
-
-parser/error_recovery/reserved_words_top_level_fields:153:15: Expected ';' after this.
-  return void(x-1) + 1;
-              ^
-
-parser/error_recovery/reserved_words_top_level_fields:153:17: Expected ';' after this.
-  return void(x-1) + 1;
-                ^
-
-parser/error_recovery/reserved_words_top_level_fields:153:18: Expected an identifier, but got ')'.
-  return void(x-1) + 1;
-                 ^
-
-parser/error_recovery/reserved_words_top_level_fields:153:18: Expected ';' after this.
-  return void(x-1) + 1;
-                 ^
-
-parser/error_recovery/reserved_words_top_level_fields:153:18: Unexpected token ';'.
-  return void(x-1) + 1;
-                 ^
-
-parser/error_recovery/reserved_words_top_level_fields:153:20: '+' is not a prefix operator.
-  return void(x-1) + 1;
-                   ^
-
-parser/error_recovery/reserved_words_top_level_fields:156:5: Expected an identifier, but got 'while'.
-int while(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:158:10: Expected an identifier, but got 'while'.
-  return while(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:158:10: Expected ';' after this.
-  return while(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:158:21: '+' is not a prefix operator.
-  return while(x-1) + 1;
-                    ^
-
-parser/error_recovery/reserved_words_top_level_fields:161:5: Expected an identifier, but got 'with'.
-int with(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_fields:163:10: Expected an identifier, but got 'with'.
-  return with(x-1) + 1;
-         ^^^^
-
-beginCompilationUnit(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(assert)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
-      handleIdentifier(assert, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          beginAssert(assert, Assert.Expression)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-            handleRecoverableError(AssertAsExpression, assert, assert)
-          endAssert(assert, Assert.Expression, (, null, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(break)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-      handleIdentifier(break, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(break)
-          handleNoArguments(break)
-          handleSend(, break)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
-        endReturnStatement(true, return, ;)
-        handleRecoverableError(BreakOutsideOfLoop, break, break)
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
-        handleBreakStatement(false, break, ;)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleParenthesizedExpression(()
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(4, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(case)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-      handleIdentifier(case, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-          handleIdentifier(case, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(case, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(catch)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-      handleIdentifier(catch, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-          handleIdentifier(catch, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(catch, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(class)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-      handleIdentifier(class, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-          handleIdentifier(class, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(class, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(const)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
-      handleIdentifier(const, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          beginConstExpression(const)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-            handleIdentifier(, constructorReference)
-            beginConstructorReference()
-              handleNoTypeArguments(()
-              handleNoConstructorReferenceContinuationAfterTypeArguments(()
-            endConstructorReference(, null, ()
-            beginArguments(()
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(-)
-              handleNoArguments(-)
-              handleSend(x, -)
-              beginBinaryExpression(-)
-              handleLiteralInt(1)
-              endBinaryExpression(-)
-            endArguments(1, (, ))
-          endConstExpression(const)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(continue)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-      handleIdentifier(continue, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(continue)
-          handleNoArguments(continue)
-          handleSend(, continue)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
-        endReturnStatement(true, return, ;)
-        handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
-        handleContinueStatement(false, continue, ;)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleParenthesizedExpression(()
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(4, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(default)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-      handleIdentifier(default, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-          handleIdentifier(default, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(default, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(do)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-      handleIdentifier(do, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(do)
-          handleNoArguments(do)
-          handleSend(, do)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], do, do)
-        endReturnStatement(true, return, ;)
-        beginDoWhileStatement(do)
-          beginDoWhileStatementBody(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-            handleParenthesizedExpression(()
-            beginBinaryExpression(+)
-            handleLiteralInt(1)
-            endBinaryExpression(+)
-            handleExpressionStatement(;)
-          endDoWhileStatementBody(;)
-          handleRecoverableError(Message[ExpectedButGot, Expected 'while' before this., null, {string: while}], }, })
-          handleRecoverableError(Message[ExpectedToken, Expected to find '('., null, {string: (}], }, })
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., null, {token: }}], }, })
-          handleIdentifier(, expression)
-          handleNoTypeArguments())
-          handleNoArguments())
-          handleSend(, ))
-          handleParenthesizedCondition(()
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
-        endDoWhileStatement(do, while, ;)
-      endBlockFunctionBody(3, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(else)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-      handleIdentifier(else, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(else)
-          handleNoArguments(else)
-          handleSend(, else)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
-        endReturnStatement(true, return, ;)
-        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-        handleIdentifier(, expression)
-        handleNoTypeArguments(else)
-        handleNoArguments(else)
-        handleSend(, else)
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
-        handleExpressionStatement(;)
-        handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], else, else)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleParenthesizedExpression(()
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(4, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(enum)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-      handleIdentifier(enum, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-          handleIdentifier(enum, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(enum, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(extends)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-      handleIdentifier(extends, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-          handleIdentifier(extends, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(extends, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(false)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
-      handleIdentifier(false, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleLiteralBool(false)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend((, ))
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(final)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-      handleIdentifier(final, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(final)
-          handleNoArguments(final)
-          handleSend(, final)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
-        endReturnStatement(true, return, ;)
-        beginMetadataStar(final)
-        endMetadataStar(0)
-        handleNoType(final)
-        beginVariablesDeclaration((, null, final)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-          handleIdentifier(, localVariableDeclaration)
-          beginInitializedIdentifier()
-            handleNoVariableInitializer(x)
-          endInitializedIdentifier()
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-        endVariablesDeclaration(1, ;)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-        handleExpressionStatement(;)
-        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-        handleIdentifier(, expression)
-        handleNoTypeArguments())
-        handleNoArguments())
-        handleSend(, ))
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-        handleExpressionStatement(;)
-        handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-        handleRecoverableError(UnsupportedPrefixPlus, +, +)
-        handleIdentifier(, expression)
-        handleNoTypeArguments(+)
-        handleNoArguments(+)
-        handleSend(, +)
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(6, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(finally)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-      handleIdentifier(finally, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-          handleIdentifier(finally, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(finally, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(for)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-      handleIdentifier(for, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(for)
-          handleNoArguments(for)
-          handleSend(, for)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], for, for)
-        endReturnStatement(true, return, ;)
-        beginForStatement(for)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(-)
-          handleNoArguments(-)
-          handleSend(x, -)
-          beginBinaryExpression(-)
-          handleLiteralInt(1)
-          endBinaryExpression(-)
-          handleForInitializerExpressionStatement(1, false)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-          handleIdentifier(, expression)
-          handleNoTypeArguments())
-          handleNoArguments())
-          handleSend(, ))
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-          handleExpressionStatement(;)
-          handleForLoopParts(for, (, ;, 0)
-          beginForStatementBody(+)
-            handleRecoverableError(UnsupportedPrefixPlus, +, +)
-            handleIdentifier(, expression)
-            handleNoTypeArguments(+)
-            handleNoArguments(+)
-            handleSend(, +)
-            beginBinaryExpression(+)
-            handleLiteralInt(1)
-            endBinaryExpression(+)
-            handleExpressionStatement(;)
-          endForStatementBody(})
-        endForStatement(})
-      endBlockFunctionBody(3, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(if)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-      handleIdentifier(if, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(if)
-          handleNoArguments(if)
-          handleSend(, if)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], if, if)
-        endReturnStatement(true, return, ;)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(-)
-          handleNoArguments(-)
-          handleSend(x, -)
-          beginBinaryExpression(-)
-          handleLiteralInt(1)
-          endBinaryExpression(-)
-          handleParenthesizedCondition(()
-          beginThenStatement(+)
-            handleRecoverableError(UnsupportedPrefixPlus, +, +)
-            handleIdentifier(, expression)
-            handleNoTypeArguments(+)
-            handleNoArguments(+)
-            handleSend(, +)
-            beginBinaryExpression(+)
-            handleLiteralInt(1)
-            endBinaryExpression(+)
-            handleExpressionStatement(;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-      endBlockFunctionBody(3, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(in)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-      handleIdentifier(in, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-          handleIdentifier(in, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(in, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(is)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-      handleIdentifier(is, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(is)
-          handleNoArguments(is)
-          handleSend(, is)
-          beginIsOperatorType(is)
-            handleRecoverableError(Message[ExpectedType, Expected a type, but got '('., null, {token: (}], (, ()
-            handleIdentifier(, typeReference)
-            handleNoTypeArguments(()
-            handleType(, null)
-          endIsOperatorType(is)
-          handleIsOperator(is, null)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
-        endReturnStatement(true, return, ;)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleParenthesizedExpression(()
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(3, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(new)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
-      handleIdentifier(new, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          beginNewExpression(new)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-            handleIdentifier(, constructorReference)
-            beginConstructorReference()
-              handleNoTypeArguments(()
-              handleNoConstructorReferenceContinuationAfterTypeArguments(()
-            endConstructorReference(, null, ()
-            beginArguments(()
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(-)
-              handleNoArguments(-)
-              handleSend(x, -)
-              beginBinaryExpression(-)
-              handleLiteralInt(1)
-              endBinaryExpression(-)
-            endArguments(1, (, ))
-          endNewExpression(new)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(null)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
-      handleIdentifier(null, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleLiteralNull(null)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend((, ))
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(rethrow)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-      handleIdentifier(rethrow, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-          handleIdentifier(rethrow, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(rethrow, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(return)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
-      handleIdentifier(return, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[UnexpectedToken, Unexpected token 'return'., null, {token: return}], return, return)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(-)
-          handleNoArguments(-)
-          handleSend(x, -)
-          beginBinaryExpression(-)
-          handleLiteralInt(1)
-          endBinaryExpression(-)
-          handleParenthesizedExpression(()
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(super)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
-      handleIdentifier(super, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleSuperExpression(super, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(super, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(switch)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-      handleIdentifier(switch, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(switch)
-          handleNoArguments(switch)
-          handleSend(, switch)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], switch, switch)
-        endReturnStatement(true, return, ;)
-        beginSwitchStatement(switch)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(-)
-          handleNoArguments(-)
-          handleSend(x, -)
-          beginBinaryExpression(-)
-          handleLiteralInt(1)
-          endBinaryExpression(-)
-          handleParenthesizedCondition(()
-          handleRecoverableError(Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}], ), ))
-          beginSwitchBlock({)
-          endSwitchBlock(0, {, })
-        endSwitchStatement(switch, })
-        handleRecoverableError(UnsupportedPrefixPlus, +, +)
-        handleIdentifier(, expression)
-        handleNoTypeArguments(+)
-        handleNoArguments(+)
-        handleSend(, +)
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(4, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(this)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
-      handleIdentifier(this, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleThisExpression(this, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(this, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(throw)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
-      handleIdentifier(throw, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(-)
-          handleNoArguments(-)
-          handleSend(x, -)
-          beginBinaryExpression(-)
-          handleLiteralInt(1)
-          endBinaryExpression(-)
-          handleParenthesizedExpression(()
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-          handleThrowExpression(throw, ;)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(true)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
-      handleIdentifier(true, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleLiteralBool(true)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend((, ))
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(try)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-      handleIdentifier(try, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(try)
-          handleNoArguments(try)
-          handleSend(, try)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
-        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)
-          beginBlock({, BlockKind(try statement))
-          endBlock(0, {, }, BlockKind(try statement))
-          handleRecoverableError(OnlyTry, try, try)
-        endTryStatement(0, try, null)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleParenthesizedExpression(()
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(4, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(var)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-      handleIdentifier(var, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(var)
-          handleNoArguments(var)
-          handleSend(, var)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
-        endReturnStatement(true, return, ;)
-        beginMetadataStar(var)
-        endMetadataStar(0)
-        handleNoType(var)
-        beginVariablesDeclaration((, null, var)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-          handleIdentifier(, localVariableDeclaration)
-          beginInitializedIdentifier()
-            handleNoVariableInitializer(x)
-          endInitializedIdentifier()
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-        endVariablesDeclaration(1, ;)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-        handleExpressionStatement(;)
-        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-        handleIdentifier(, expression)
-        handleNoTypeArguments())
-        handleNoArguments())
-        handleSend(, ))
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-        handleExpressionStatement(;)
-        handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-        handleRecoverableError(UnsupportedPrefixPlus, +, +)
-        handleIdentifier(, expression)
-        handleNoTypeArguments(+)
-        handleNoArguments(+)
-        handleSend(, +)
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(6, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(void)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-      handleIdentifier(void, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(void)
-          handleNoArguments(void)
-          handleSend(, void)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
-        endReturnStatement(true, return, ;)
-        beginMetadataStar(void)
-        endMetadataStar(0)
-        handleVoidKeyword(void)
-        beginVariablesDeclaration((, null, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-          handleIdentifier(, localVariableDeclaration)
-          beginInitializedIdentifier()
-            handleNoVariableInitializer(x)
-          endInitializedIdentifier()
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-        endVariablesDeclaration(1, ;)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-        handleExpressionStatement(;)
-        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-        handleIdentifier(, expression)
-        handleNoTypeArguments())
-        handleNoArguments())
-        handleSend(, ))
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-        handleExpressionStatement(;)
-        handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-        handleRecoverableError(UnsupportedPrefixPlus, +, +)
-        handleIdentifier(, expression)
-        handleNoTypeArguments(+)
-        handleNoArguments(+)
-        handleSend(, +)
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(6, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(while)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-      handleIdentifier(while, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(while)
-          handleNoArguments(while)
-          handleSend(, while)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
-        endReturnStatement(true, return, ;)
-        beginWhileStatement(while)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(-)
-          handleNoArguments(-)
-          handleSend(x, -)
-          beginBinaryExpression(-)
-          handleLiteralInt(1)
-          endBinaryExpression(-)
-          handleParenthesizedCondition(()
-          beginWhileStatementBody(+)
-            handleRecoverableError(UnsupportedPrefixPlus, +, +)
-            handleIdentifier(, expression)
-            handleNoTypeArguments(+)
-            handleNoArguments(+)
-            handleSend(, +)
-            beginBinaryExpression(+)
-            handleLiteralInt(1)
-            endBinaryExpression(+)
-            handleExpressionStatement(;)
-          endWhileStatementBody(})
-        endWhileStatement(while, })
-      endBlockFunctionBody(3, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(with)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-      handleIdentifier(with, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-          handleIdentifier(with, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(with, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration()
-endCompilationUnit(33, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_fields.dart.intertwined.expect
deleted file mode 100644
index 3325638..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_fields.dart.intertwined.expect
+++ /dev/null
@@ -1,5294 +0,0 @@
-parseUnit(int)
-  skipErrorTokens(int)
-  listener: beginCompilationUnit(int)
-  syntheticPreviousToken(int)
-  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
-    parseMetadataStar()
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl()
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(assert)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(, null, , Instance of 'SimpleType', null, assert, true)
-        listener: beginTopLevelMethod(, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(assert)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
-          listener: handleIdentifier(assert, topLevelFunctionDeclaration)
-        parseMethodTypeVar(assert)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(assert, assert, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(assert, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseAssert(return, Assert.Expression)
-                          listener: beginAssert(assert, Assert.Expression)
-                          parseExpression(()
-                            parsePrecedenceExpression((, 1, true)
-                              parseUnaryExpression((, true)
-                                parsePrimary((, expression)
-                                  parseSendOrFunctionLiteral((, expression)
-                                    parseSend((, expression)
-                                      ensureIdentifier((, expression)
-                                        listener: handleIdentifier(x, expression)
-                                      listener: handleNoTypeArguments(-)
-                                      parseArgumentsOpt(x)
-                                        listener: handleNoArguments(-)
-                                      listener: handleSend(x, -)
-                              listener: beginBinaryExpression(-)
-                              parsePrecedenceExpression(-, 14, true)
-                                parseUnaryExpression(-, true)
-                                  parsePrimary(-, expression)
-                                    parseLiteralInt(-)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(-)
-                          reportRecoverableError(assert, AssertAsExpression)
-                            listener: handleRecoverableError(AssertAsExpression, assert, assert)
-                          listener: endAssert(assert, Assert.Expression, (, null, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(break)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, break, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(break)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-          listener: handleIdentifier(break, topLevelFunctionDeclaration)
-        parseMethodTypeVar(break)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(break, break, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(break, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(break)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, break)
-          parseStatement(;)
-            parseStatementX(;)
-              parseBreakStatement(;)
-                isBreakAllowed()
-                reportRecoverableError(break, BreakOutsideOfLoop)
-                  listener: handleRecoverableError(BreakOutsideOfLoop, break, break)
-                ensureSemicolon(break)
-                  reportRecoverableError(break, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
-                  rewriter()
-                listener: handleBreakStatement(false, break, ;)
-          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)
-                                                ensureIdentifier((, expression)
-                                                  listener: handleIdentifier(x, expression)
-                                                listener: handleNoTypeArguments(-)
-                                                parseArgumentsOpt(x)
-                                                  listener: handleNoArguments(-)
-                                                listener: handleSend(x, -)
-                                        listener: beginBinaryExpression(-)
-                                        parsePrecedenceExpression(-, 14, true)
-                                          parseUnaryExpression(-, true)
-                                            parsePrimary(-, expression)
-                                              parseLiteralInt(-)
-                                                listener: handleLiteralInt(1)
-                                        listener: endBinaryExpression(-)
-                                    ensureCloseParen(1, ()
-                                listener: handleParenthesizedExpression(()
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(4, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(case)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, case, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(case)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-          listener: handleIdentifier(case, topLevelFunctionDeclaration)
-        parseMethodTypeVar(case)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(case, case, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(case, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-                            listener: handleIdentifier(case, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(case)
-                            parseArguments(case)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(case, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(catch)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, catch, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(catch)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-          listener: handleIdentifier(catch, topLevelFunctionDeclaration)
-        parseMethodTypeVar(catch)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(catch, catch, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(catch, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-                            listener: handleIdentifier(catch, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(catch)
-                            parseArguments(catch)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(catch, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(class)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, class, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(class)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-          listener: handleIdentifier(class, topLevelFunctionDeclaration)
-        parseMethodTypeVar(class)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(class, class, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(class, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-                            listener: handleIdentifier(class, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(class)
-                            parseArguments(class)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(class, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(const)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, const, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(const)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
-          listener: handleIdentifier(const, topLevelFunctionDeclaration)
-        parseMethodTypeVar(const)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(const, const, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(const, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        parseConstExpression(return)
-                          listener: beginConstExpression(const)
-                          parseConstructorReference(const, null)
-                            ensureIdentifier(const, constructorReference)
-                              insertSyntheticIdentifier(const, constructorReference, message: Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], messageOnToken: null)
-                                reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
-                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                                rewriter()
-                              listener: handleIdentifier(, constructorReference)
-                            listener: beginConstructorReference()
-                            parseQualifiedRestOpt(, constructorReferenceContinuation)
-                            listener: handleNoTypeArguments(()
-                            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                            listener: endConstructorReference(, null, ()
-                          parseConstructorInvocationArguments()
-                            parseArgumentsRest(()
-                              listener: beginArguments(()
-                              parseExpression(()
-                                parsePrecedenceExpression((, 1, true)
-                                  parseUnaryExpression((, true)
-                                    parsePrimary((, expression)
-                                      parseSendOrFunctionLiteral((, expression)
-                                        parseSend((, expression)
-                                          ensureIdentifier((, expression)
-                                            listener: handleIdentifier(x, expression)
-                                          listener: handleNoTypeArguments(-)
-                                          parseArgumentsOpt(x)
-                                            listener: handleNoArguments(-)
-                                          listener: handleSend(x, -)
-                                  listener: beginBinaryExpression(-)
-                                  parsePrecedenceExpression(-, 14, true)
-                                    parseUnaryExpression(-, true)
-                                      parsePrimary(-, expression)
-                                        parseLiteralInt(-)
-                                          listener: handleLiteralInt(1)
-                                  listener: endBinaryExpression(-)
-                              listener: endArguments(1, (, ))
-                          listener: endConstExpression(const)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(continue)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, continue, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(continue)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-          listener: handleIdentifier(continue, topLevelFunctionDeclaration)
-        parseMethodTypeVar(continue)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(continue, continue, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(continue, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(continue)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, continue)
-          parseStatement(;)
-            parseStatementX(;)
-              parseContinueStatement(;)
-                isContinueAllowed()
-                reportRecoverableError(continue, ContinueOutsideOfLoop)
-                  listener: handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
-                ensureSemicolon(continue)
-                  reportRecoverableError(continue, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
-                  rewriter()
-                listener: handleContinueStatement(false, continue, ;)
-          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)
-                                                ensureIdentifier((, expression)
-                                                  listener: handleIdentifier(x, expression)
-                                                listener: handleNoTypeArguments(-)
-                                                parseArgumentsOpt(x)
-                                                  listener: handleNoArguments(-)
-                                                listener: handleSend(x, -)
-                                        listener: beginBinaryExpression(-)
-                                        parsePrecedenceExpression(-, 14, true)
-                                          parseUnaryExpression(-, true)
-                                            parsePrimary(-, expression)
-                                              parseLiteralInt(-)
-                                                listener: handleLiteralInt(1)
-                                        listener: endBinaryExpression(-)
-                                    ensureCloseParen(1, ()
-                                listener: handleParenthesizedExpression(()
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(4, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(default)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, default, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(default)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-          listener: handleIdentifier(default, topLevelFunctionDeclaration)
-        parseMethodTypeVar(default)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(default, default, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(default, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-                            listener: handleIdentifier(default, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(default)
-                            parseArguments(default)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(default, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(do)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, do, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(do)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-          listener: handleIdentifier(do, topLevelFunctionDeclaration)
-        parseMethodTypeVar(do)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(do, do, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(do, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(do)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, do)
-          parseStatement(;)
-            parseStatementX(;)
-              parseDoWhileStatement(;)
-                listener: beginDoWhileStatement(do)
-                listener: beginDoWhileStatementBody(()
-                parseStatement(do)
-                  parseStatementX(do)
-                    parseExpressionStatementOrDeclaration(do, false)
-                      parseExpressionStatementOrDeclarationAfterModifiers(do, do, null, null, null, false)
-                        looksLikeLocalFunction(()
-                        parseExpressionStatement(do)
-                          parseExpression(do)
-                            parsePrecedenceExpression(do, 1, true)
-                              parseUnaryExpression(do, true)
-                                parsePrimary(do, expression)
-                                  parseParenthesizedExpressionOrFunctionLiteral(do)
-                                    parseParenthesizedExpression(do)
-                                      parseExpressionInParenthesis(do)
-                                        parseExpressionInParenthesisRest(()
-                                          parseExpression(()
-                                            parsePrecedenceExpression((, 1, true)
-                                              parseUnaryExpression((, true)
-                                                parsePrimary((, expression)
-                                                  parseSendOrFunctionLiteral((, expression)
-                                                    parseSend((, expression)
-                                                      ensureIdentifier((, expression)
-                                                        listener: handleIdentifier(x, expression)
-                                                      listener: handleNoTypeArguments(-)
-                                                      parseArgumentsOpt(x)
-                                                        listener: handleNoArguments(-)
-                                                      listener: handleSend(x, -)
-                                              listener: beginBinaryExpression(-)
-                                              parsePrecedenceExpression(-, 14, true)
-                                                parseUnaryExpression(-, true)
-                                                  parsePrimary(-, expression)
-                                                    parseLiteralInt(-)
-                                                      listener: handleLiteralInt(1)
-                                              listener: endBinaryExpression(-)
-                                          ensureCloseParen(1, ()
-                                      listener: handleParenthesizedExpression(()
-                              listener: beginBinaryExpression(+)
-                              parsePrecedenceExpression(+, 14, true)
-                                parseUnaryExpression(+, true)
-                                  parsePrimary(+, expression)
-                                    parseLiteralInt(+)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(+)
-                          ensureSemicolon(1)
-                          listener: handleExpressionStatement(;)
-                listener: endDoWhileStatementBody(;)
-                reportRecoverableError(}, Message[ExpectedButGot, Expected 'while' before this., null, {string: while}])
-                  listener: handleRecoverableError(Message[ExpectedButGot, Expected 'while' before this., null, {string: while}], }, })
-                rewriter()
-                ensureParenthesizedCondition(while)
-                  reportRecoverableError(}, Message[ExpectedToken, Expected to find '('., null, {string: (}])
-                    listener: handleRecoverableError(Message[ExpectedToken, Expected to find '('., null, {string: (}], }, })
-                  rewriter()
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSend((, expression)
-                              ensureIdentifier((, expression)
-                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
-                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., null, {token: }}], }, })
-                                rewriter()
-                                listener: handleIdentifier(, expression)
-                              listener: handleNoTypeArguments())
-                              parseArgumentsOpt()
-                                listener: handleNoArguments())
-                              listener: handleSend(, ))
-                    ensureCloseParen(, ()
-                  listener: handleParenthesizedCondition(()
-                ensureSemicolon())
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
-                  rewriter()
-                listener: endDoWhileStatement(do, while, ;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(3, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(else)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, else, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(else)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-          listener: handleIdentifier(else, topLevelFunctionDeclaration)
-        parseMethodTypeVar(else)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(else, else, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(else, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(else)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, else)
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclaration(;, false)
-                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                  looksLikeLocalFunction(else)
-                  parseExpressionStatement(;)
-                    parseExpression(;)
-                      parsePrecedenceExpression(;, 1, true)
-                        parseUnaryExpression(;, true)
-                          parsePrimary(;, expression)
-                            inPlainSync()
-                            parseSend(;, expression)
-                              ensureIdentifier(;, expression)
-                                reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
-                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-                                rewriter()
-                                listener: handleIdentifier(, expression)
-                              listener: handleNoTypeArguments(else)
-                              parseArgumentsOpt()
-                                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)
-                      rewriter()
-                    listener: handleExpressionStatement(;)
-          reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
-            listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], else, else)
-          notEofOrValue(}, ()
-          parseStatement(else)
-            parseStatementX(else)
-              parseExpressionStatementOrDeclaration(else, false)
-                parseExpressionStatementOrDeclarationAfterModifiers(else, else, null, null, null, false)
-                  looksLikeLocalFunction(()
-                  parseExpressionStatement(else)
-                    parseExpression(else)
-                      parsePrecedenceExpression(else, 1, true)
-                        parseUnaryExpression(else, true)
-                          parsePrimary(else, expression)
-                            parseParenthesizedExpressionOrFunctionLiteral(else)
-                              parseParenthesizedExpression(else)
-                                parseExpressionInParenthesis(else)
-                                  parseExpressionInParenthesisRest(()
-                                    parseExpression(()
-                                      parsePrecedenceExpression((, 1, true)
-                                        parseUnaryExpression((, true)
-                                          parsePrimary((, expression)
-                                            parseSendOrFunctionLiteral((, expression)
-                                              parseSend((, expression)
-                                                ensureIdentifier((, expression)
-                                                  listener: handleIdentifier(x, expression)
-                                                listener: handleNoTypeArguments(-)
-                                                parseArgumentsOpt(x)
-                                                  listener: handleNoArguments(-)
-                                                listener: handleSend(x, -)
-                                        listener: beginBinaryExpression(-)
-                                        parsePrecedenceExpression(-, 14, true)
-                                          parseUnaryExpression(-, true)
-                                            parsePrimary(-, expression)
-                                              parseLiteralInt(-)
-                                                listener: handleLiteralInt(1)
-                                        listener: endBinaryExpression(-)
-                                    ensureCloseParen(1, ()
-                                listener: handleParenthesizedExpression(()
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(4, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(enum)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, enum, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(enum)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-          listener: handleIdentifier(enum, topLevelFunctionDeclaration)
-        parseMethodTypeVar(enum)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(enum, enum, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(enum, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-                            listener: handleIdentifier(enum, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(enum)
-                            parseArguments(enum)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(enum, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(extends)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, extends, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(extends)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-          listener: handleIdentifier(extends, topLevelFunctionDeclaration)
-        parseMethodTypeVar(extends)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(extends, extends, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(extends, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-                            listener: handleIdentifier(extends, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(extends)
-                            parseArguments(extends)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(extends, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(false)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, false, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(false)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
-          listener: handleIdentifier(false, topLevelFunctionDeclaration)
-        parseMethodTypeVar(false)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(false, false, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(false, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        parseLiteralBool(return)
-                          listener: handleLiteralBool(false)
-                    parseArgumentOrIndexStar(false, Instance of 'NoTypeParamOrArg', false)
-                      listener: handleNoTypeArguments(()
-                      parseArguments(false)
-                        parseArgumentsRest(()
-                          listener: beginArguments(()
-                          parseExpression(()
-                            parsePrecedenceExpression((, 1, true)
-                              parseUnaryExpression((, true)
-                                parsePrimary((, expression)
-                                  parseSendOrFunctionLiteral((, expression)
-                                    parseSend((, expression)
-                                      ensureIdentifier((, expression)
-                                        listener: handleIdentifier(x, expression)
-                                      listener: handleNoTypeArguments(-)
-                                      parseArgumentsOpt(x)
-                                        listener: handleNoArguments(-)
-                                      listener: handleSend(x, -)
-                              listener: beginBinaryExpression(-)
-                              parsePrecedenceExpression(-, 14, true)
-                                parseUnaryExpression(-, true)
-                                  parsePrimary(-, expression)
-                                    parseLiteralInt(-)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(-)
-                          listener: endArguments(1, (, ))
-                      listener: handleSend((, ))
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(final)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, final, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(final)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-          listener: handleIdentifier(final, topLevelFunctionDeclaration)
-        parseMethodTypeVar(final)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(final, final, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(final, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(final)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, final)
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclarationAfterModifiers(final, ;, null, final, null, false)
-                looksLikeLocalFunction(()
-                listener: beginMetadataStar(final)
-                listener: endMetadataStar(0)
-                listener: handleNoType(final)
-                listener: beginVariablesDeclaration((, null, final)
-                parseVariablesDeclarationRest(final, true)
-                  parseOptionallyInitializedIdentifier(final)
-                    ensureIdentifier(final, localVariableDeclaration)
-                      reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
-                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                      rewriter()
-                      listener: handleIdentifier(, localVariableDeclaration)
-                    listener: beginInitializedIdentifier()
-                    parseVariableInitializerOpt()
-                      listener: handleNoVariableInitializer(x)
-                    listener: endInitializedIdentifier()
-                  ensureSemicolon()
-                    reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-                    rewriter()
-                  listener: endVariablesDeclaration(1, ;)
-          notEofOrValue(}, x)
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                looksLikeLocalFunction(x)
-                parseExpressionStatement(;)
-                  parseExpression(;)
-                    parsePrecedenceExpression(;, 1, true)
-                      parseUnaryExpression(;, true)
-                        parsePrimary(;, expression)
-                          parseSendOrFunctionLiteral(;, expression)
-                            parseSend(;, expression)
-                              ensureIdentifier(;, expression)
-                                listener: handleIdentifier(x, expression)
-                              listener: handleNoTypeArguments(-)
-                              parseArgumentsOpt(x)
-                                listener: handleNoArguments(-)
-                              listener: handleSend(x, -)
-                      listener: beginBinaryExpression(-)
-                      parsePrecedenceExpression(-, 14, true)
-                        parseUnaryExpression(-, true)
-                          parsePrimary(-, expression)
-                            parseLiteralInt(-)
-                              listener: handleLiteralInt(1)
-                      listener: endBinaryExpression(-)
-                  ensureSemicolon(1)
-                    reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-                    rewriter()
-                  listener: handleExpressionStatement(;)
-          notEofOrValue(}, ))
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclaration(;, false)
-                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                  looksLikeLocalFunction())
-                  parseExpressionStatement(;)
-                    parseExpression(;)
-                      parsePrecedenceExpression(;, 1, true)
-                        parseUnaryExpression(;, true)
-                          parsePrimary(;, expression)
-                            parseSend(;, expression)
-                              ensureIdentifier(;, expression)
-                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
-                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-                                rewriter()
-                                listener: handleIdentifier(, expression)
-                              listener: handleNoTypeArguments())
-                              parseArgumentsOpt()
-                                listener: handleNoArguments())
-                              listener: handleSend(, ))
-                    ensureSemicolon()
-                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-                      rewriter()
-                    listener: handleExpressionStatement(;)
-          reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
-            listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-          notEofOrValue(}, +)
-          parseStatement())
-            parseStatementX())
-              parseExpressionStatementOrDeclaration(), false)
-                parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                  looksLikeLocalFunction(+)
-                  parseExpressionStatement())
-                    parseExpression())
-                      parsePrecedenceExpression(), 1, true)
-                        parseUnaryExpression(), true)
-                          rewriteAndRecover(), UnsupportedPrefixPlus, )
-                            reportRecoverableError(+, UnsupportedPrefixPlus)
-                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                            rewriter()
-                          parsePrimary(), expression)
-                            parseSendOrFunctionLiteral(), expression)
-                              parseSend(), expression)
-                                ensureIdentifier(), expression)
-                                  listener: handleIdentifier(, expression)
-                                listener: handleNoTypeArguments(+)
-                                parseArgumentsOpt()
-                                  listener: handleNoArguments(+)
-                                listener: handleSend(, +)
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(6, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(finally)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, finally, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(finally)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-          listener: handleIdentifier(finally, topLevelFunctionDeclaration)
-        parseMethodTypeVar(finally)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(finally, finally, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(finally, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-                            listener: handleIdentifier(finally, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(finally)
-                            parseArguments(finally)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(finally, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(for)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, for, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(for)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-          listener: handleIdentifier(for, topLevelFunctionDeclaration)
-        parseMethodTypeVar(for)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(for, for, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(for, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(for)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, for)
-          parseStatement(;)
-            parseStatementX(;)
-              parseForStatement(;, null)
-                listener: beginForStatement(for)
-                parseForLoopPartsStart(null, for)
-                  parseExpressionStatementOrDeclaration((, true)
-                    parseExpressionStatementOrDeclarationAfterModifiers((, (, null, null, null, true)
-                parseForLoopPartsMid((, null, for)
-                  parseExpression(()
-                    parsePrecedenceExpression((, 1, true)
-                      parseUnaryExpression((, true)
-                        parsePrimary((, expression)
-                          parseSendOrFunctionLiteral((, expression)
-                            parseSend((, expression)
-                              ensureIdentifier((, expression)
-                                listener: handleIdentifier(x, expression)
-                              listener: handleNoTypeArguments(-)
-                              parseArgumentsOpt(x)
-                                listener: handleNoArguments(-)
-                              listener: handleSend(x, -)
-                      listener: beginBinaryExpression(-)
-                      parsePrecedenceExpression(-, 14, true)
-                        parseUnaryExpression(-, true)
-                          parsePrimary(-, expression)
-                            parseLiteralInt(-)
-                              listener: handleLiteralInt(1)
-                      listener: endBinaryExpression(-)
-                  listener: handleForInitializerExpressionStatement(1, false)
-                parseForRest(null, 1, for)
-                  parseForLoopPartsRest(1, for, null)
-                    ensureSemicolon(1)
-                      reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-                      rewriter()
-                    parseExpressionStatement(;)
-                      parseExpression(;)
-                        parsePrecedenceExpression(;, 1, true)
-                          parseUnaryExpression(;, true)
-                            parsePrimary(;, expression)
-                              parseSend(;, expression)
-                                ensureIdentifier(;, expression)
-                                  reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
-                                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-                                  rewriter()
-                                  listener: handleIdentifier(, expression)
-                                listener: handleNoTypeArguments())
-                                parseArgumentsOpt()
-                                  listener: handleNoArguments())
-                                listener: handleSend(, ))
-                      ensureSemicolon()
-                        reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                          listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-                        rewriter()
-                      listener: handleExpressionStatement(;)
-                    listener: handleForLoopParts(for, (, ;, 0)
-                  listener: beginForStatementBody(+)
-                  parseStatement())
-                    parseStatementX())
-                      parseExpressionStatementOrDeclaration(), false)
-                        parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                          looksLikeLocalFunction(+)
-                          parseExpressionStatement())
-                            parseExpression())
-                              parsePrecedenceExpression(), 1, true)
-                                parseUnaryExpression(), true)
-                                  rewriteAndRecover(), UnsupportedPrefixPlus, )
-                                    reportRecoverableError(+, UnsupportedPrefixPlus)
-                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                                    rewriter()
-                                  parsePrimary(), expression)
-                                    parseSendOrFunctionLiteral(), expression)
-                                      parseSend(), expression)
-                                        ensureIdentifier(), expression)
-                                          listener: handleIdentifier(, expression)
-                                        listener: handleNoTypeArguments(+)
-                                        parseArgumentsOpt()
-                                          listener: handleNoArguments(+)
-                                        listener: handleSend(, +)
-                                listener: beginBinaryExpression(+)
-                                parsePrecedenceExpression(+, 14, true)
-                                  parseUnaryExpression(+, true)
-                                    parsePrimary(+, expression)
-                                      parseLiteralInt(+)
-                                        listener: handleLiteralInt(1)
-                                listener: endBinaryExpression(+)
-                            ensureSemicolon(1)
-                            listener: handleExpressionStatement(;)
-                  listener: endForStatementBody(})
-                  listener: endForStatement(})
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(3, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(if)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, if, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(if)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-          listener: handleIdentifier(if, topLevelFunctionDeclaration)
-        parseMethodTypeVar(if)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(if, if, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(if, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(if)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, if)
-          parseStatement(;)
-            parseStatementX(;)
-              parseIfStatement(;)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(-)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(-)
-                                listener: handleSend(x, -)
-                        listener: beginBinaryExpression(-)
-                        parsePrecedenceExpression(-, 14, true)
-                          parseUnaryExpression(-, true)
-                            parsePrimary(-, expression)
-                              parseLiteralInt(-)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(-)
-                    ensureCloseParen(1, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(+)
-                parseStatement())
-                  parseStatementX())
-                    parseExpressionStatementOrDeclaration(), false)
-                      parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                        looksLikeLocalFunction(+)
-                        parseExpressionStatement())
-                          parseExpression())
-                            parsePrecedenceExpression(), 1, true)
-                              parseUnaryExpression(), true)
-                                rewriteAndRecover(), UnsupportedPrefixPlus, )
-                                  reportRecoverableError(+, UnsupportedPrefixPlus)
-                                    listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                                  rewriter()
-                                parsePrimary(), expression)
-                                  parseSendOrFunctionLiteral(), expression)
-                                    parseSend(), expression)
-                                      ensureIdentifier(), expression)
-                                        listener: handleIdentifier(, expression)
-                                      listener: handleNoTypeArguments(+)
-                                      parseArgumentsOpt()
-                                        listener: handleNoArguments(+)
-                                      listener: handleSend(, +)
-                              listener: beginBinaryExpression(+)
-                              parsePrecedenceExpression(+, 14, true)
-                                parseUnaryExpression(+, true)
-                                  parsePrimary(+, expression)
-                                    parseLiteralInt(+)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(+)
-                          ensureSemicolon(1)
-                          listener: handleExpressionStatement(;)
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(3, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(in)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, in, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(in)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-          listener: handleIdentifier(in, topLevelFunctionDeclaration)
-        parseMethodTypeVar(in)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(in, in, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(in, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-                            listener: handleIdentifier(in, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(in)
-                            parseArguments(in)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(in, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(is)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, is, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(is)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-          listener: handleIdentifier(is, topLevelFunctionDeclaration)
-        parseMethodTypeVar(is)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(is, is, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(is, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(is)
-                          parseArgumentsOpt()
-                            listener: handleNoArguments(is)
-                          listener: handleSend(, is)
-                    parseIsOperatorRest()
-                      listener: beginIsOperatorType(is)
-                      computeTypeAfterIsOrAs(is)
-                      reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
-                        listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '('., null, {token: (}], (, ()
-                      rewriter()
-                      listener: handleIdentifier(, typeReference)
-                      listener: handleNoTypeArguments(()
-                      listener: handleType(, null)
-                      listener: endIsOperatorType(is)
-                      listener: handleIsOperator(is, null)
-                      skipChainedAsIsOperators()
-                ensureSemicolon()
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          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)
-                                                ensureIdentifier((, expression)
-                                                  listener: handleIdentifier(x, expression)
-                                                listener: handleNoTypeArguments(-)
-                                                parseArgumentsOpt(x)
-                                                  listener: handleNoArguments(-)
-                                                listener: handleSend(x, -)
-                                        listener: beginBinaryExpression(-)
-                                        parsePrecedenceExpression(-, 14, true)
-                                          parseUnaryExpression(-, true)
-                                            parsePrimary(-, expression)
-                                              parseLiteralInt(-)
-                                                listener: handleLiteralInt(1)
-                                        listener: endBinaryExpression(-)
-                                    ensureCloseParen(1, ()
-                                listener: handleParenthesizedExpression(()
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(3, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(new)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, new, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(new)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
-          listener: handleIdentifier(new, topLevelFunctionDeclaration)
-        parseMethodTypeVar(new)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(new, new, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(new, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        parseNewExpression(return)
-                          listener: beginNewExpression(new)
-                          parseConstructorReference(new, null)
-                            ensureIdentifier(new, constructorReference)
-                              insertSyntheticIdentifier(new, constructorReference, message: Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], messageOnToken: null)
-                                reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
-                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                                rewriter()
-                              listener: handleIdentifier(, constructorReference)
-                            listener: beginConstructorReference()
-                            parseQualifiedRestOpt(, constructorReferenceContinuation)
-                            listener: handleNoTypeArguments(()
-                            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                            listener: endConstructorReference(, null, ()
-                          parseConstructorInvocationArguments()
-                            parseArgumentsRest(()
-                              listener: beginArguments(()
-                              parseExpression(()
-                                parsePrecedenceExpression((, 1, true)
-                                  parseUnaryExpression((, true)
-                                    parsePrimary((, expression)
-                                      parseSendOrFunctionLiteral((, expression)
-                                        parseSend((, expression)
-                                          ensureIdentifier((, expression)
-                                            listener: handleIdentifier(x, expression)
-                                          listener: handleNoTypeArguments(-)
-                                          parseArgumentsOpt(x)
-                                            listener: handleNoArguments(-)
-                                          listener: handleSend(x, -)
-                                  listener: beginBinaryExpression(-)
-                                  parsePrecedenceExpression(-, 14, true)
-                                    parseUnaryExpression(-, true)
-                                      parsePrimary(-, expression)
-                                        parseLiteralInt(-)
-                                          listener: handleLiteralInt(1)
-                                  listener: endBinaryExpression(-)
-                              listener: endArguments(1, (, ))
-                          listener: endNewExpression(new)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(null)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, null, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(null)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
-          listener: handleIdentifier(null, topLevelFunctionDeclaration)
-        parseMethodTypeVar(null)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(null, null, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(null, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        parseLiteralNull(return)
-                          listener: handleLiteralNull(null)
-                    parseArgumentOrIndexStar(null, Instance of 'NoTypeParamOrArg', false)
-                      listener: handleNoTypeArguments(()
-                      parseArguments(null)
-                        parseArgumentsRest(()
-                          listener: beginArguments(()
-                          parseExpression(()
-                            parsePrecedenceExpression((, 1, true)
-                              parseUnaryExpression((, true)
-                                parsePrimary((, expression)
-                                  parseSendOrFunctionLiteral((, expression)
-                                    parseSend((, expression)
-                                      ensureIdentifier((, expression)
-                                        listener: handleIdentifier(x, expression)
-                                      listener: handleNoTypeArguments(-)
-                                      parseArgumentsOpt(x)
-                                        listener: handleNoArguments(-)
-                                      listener: handleSend(x, -)
-                              listener: beginBinaryExpression(-)
-                              parsePrecedenceExpression(-, 14, true)
-                                parseUnaryExpression(-, true)
-                                  parsePrimary(-, expression)
-                                    parseLiteralInt(-)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(-)
-                          listener: endArguments(1, (, ))
-                      listener: handleSend((, ))
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(rethrow)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, rethrow, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(rethrow)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-          listener: handleIdentifier(rethrow, topLevelFunctionDeclaration)
-        parseMethodTypeVar(rethrow)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(rethrow, rethrow, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(rethrow, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-                            listener: handleIdentifier(rethrow, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(rethrow)
-                            parseArguments(rethrow)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(rethrow, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(return)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, return, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(return)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
-          listener: handleIdentifier(return, topLevelFunctionDeclaration)
-        parseMethodTypeVar(return)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(return, return, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(return, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
-                          listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token 'return'., null, {token: return}], return, return)
-                        parsePrimary(return, expression)
-                          parseParenthesizedExpressionOrFunctionLiteral(return)
-                            parseParenthesizedExpression(return)
-                              parseExpressionInParenthesis(return)
-                                parseExpressionInParenthesisRest(()
-                                  parseExpression(()
-                                    parsePrecedenceExpression((, 1, true)
-                                      parseUnaryExpression((, true)
-                                        parsePrimary((, expression)
-                                          parseSendOrFunctionLiteral((, expression)
-                                            parseSend((, expression)
-                                              ensureIdentifier((, expression)
-                                                listener: handleIdentifier(x, expression)
-                                              listener: handleNoTypeArguments(-)
-                                              parseArgumentsOpt(x)
-                                                listener: handleNoArguments(-)
-                                              listener: handleSend(x, -)
-                                      listener: beginBinaryExpression(-)
-                                      parsePrecedenceExpression(-, 14, true)
-                                        parseUnaryExpression(-, true)
-                                          parsePrimary(-, expression)
-                                            parseLiteralInt(-)
-                                              listener: handleLiteralInt(1)
-                                      listener: endBinaryExpression(-)
-                                  ensureCloseParen(1, ()
-                              listener: handleParenthesizedExpression(()
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(super)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, super, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(super)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
-          listener: handleIdentifier(super, topLevelFunctionDeclaration)
-        parseMethodTypeVar(super)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(super, super, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(super, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        parseSuperExpression(return, expression)
-                          listener: handleSuperExpression(super, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArguments(super)
-                            parseArgumentsRest(()
-                              listener: beginArguments(()
-                              parseExpression(()
-                                parsePrecedenceExpression((, 1, true)
-                                  parseUnaryExpression((, true)
-                                    parsePrimary((, expression)
-                                      parseSendOrFunctionLiteral((, expression)
-                                        parseSend((, expression)
-                                          ensureIdentifier((, expression)
-                                            listener: handleIdentifier(x, expression)
-                                          listener: handleNoTypeArguments(-)
-                                          parseArgumentsOpt(x)
-                                            listener: handleNoArguments(-)
-                                          listener: handleSend(x, -)
-                                  listener: beginBinaryExpression(-)
-                                  parsePrecedenceExpression(-, 14, true)
-                                    parseUnaryExpression(-, true)
-                                      parsePrimary(-, expression)
-                                        parseLiteralInt(-)
-                                          listener: handleLiteralInt(1)
-                                  listener: endBinaryExpression(-)
-                              listener: endArguments(1, (, ))
-                          listener: handleSend(super, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(switch)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, switch, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(switch)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-          listener: handleIdentifier(switch, topLevelFunctionDeclaration)
-        parseMethodTypeVar(switch)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(switch, switch, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(switch, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(switch)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, switch)
-          parseStatement(;)
-            parseStatementX(;)
-              parseSwitchStatement(;)
-                listener: beginSwitchStatement(switch)
-                ensureParenthesizedCondition(switch)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(-)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(-)
-                                listener: handleSend(x, -)
-                        listener: beginBinaryExpression(-)
-                        parsePrecedenceExpression(-, 14, true)
-                          parseUnaryExpression(-, true)
-                            parsePrimary(-, expression)
-                              parseLiteralInt(-)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(-)
-                    ensureCloseParen(1, ()
-                  listener: handleParenthesizedCondition(()
-                parseSwitchBlock())
-                  ensureBlock(), null, switch statement)
-                    reportRecoverableError(), Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}])
-                      listener: handleRecoverableError(Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}], ), ))
-                    insertBlock())
-                      rewriter()
-                      rewriter()
-                  listener: beginSwitchBlock({)
-                  notEofOrValue(}, })
-                  listener: endSwitchBlock(0, {, })
-                listener: endSwitchStatement(switch, })
-          notEofOrValue(}, +)
-          parseStatement(})
-            parseStatementX(})
-              parseExpressionStatementOrDeclaration(}, false)
-                parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
-                  looksLikeLocalFunction(+)
-                  parseExpressionStatement(})
-                    parseExpression(})
-                      parsePrecedenceExpression(}, 1, true)
-                        parseUnaryExpression(}, true)
-                          rewriteAndRecover(}, UnsupportedPrefixPlus, )
-                            reportRecoverableError(+, UnsupportedPrefixPlus)
-                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                            rewriter()
-                          parsePrimary(}, expression)
-                            parseSendOrFunctionLiteral(}, expression)
-                              parseSend(}, expression)
-                                ensureIdentifier(}, expression)
-                                  listener: handleIdentifier(, expression)
-                                listener: handleNoTypeArguments(+)
-                                parseArgumentsOpt()
-                                  listener: handleNoArguments(+)
-                                listener: handleSend(, +)
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(4, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, this, false)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(this)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
-          reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
-          listener: handleIdentifier(this, topLevelFunctionDeclaration)
-        parseMethodTypeVar(this)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(this, this, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(this, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        parseThisExpression(return, expression)
-                          listener: handleThisExpression(this, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArguments(this)
-                            parseArgumentsRest(()
-                              listener: beginArguments(()
-                              parseExpression(()
-                                parsePrecedenceExpression((, 1, true)
-                                  parseUnaryExpression((, true)
-                                    parsePrimary((, expression)
-                                      parseSendOrFunctionLiteral((, expression)
-                                        parseSend((, expression)
-                                          ensureIdentifier((, expression)
-                                            listener: handleIdentifier(x, expression)
-                                          listener: handleNoTypeArguments(-)
-                                          parseArgumentsOpt(x)
-                                            listener: handleNoArguments(-)
-                                          listener: handleSend(x, -)
-                                  listener: beginBinaryExpression(-)
-                                  parsePrecedenceExpression(-, 14, true)
-                                    parseUnaryExpression(-, true)
-                                      parsePrimary(-, expression)
-                                        parseLiteralInt(-)
-                                          listener: handleLiteralInt(1)
-                                  listener: endBinaryExpression(-)
-                              listener: endArguments(1, (, ))
-                          listener: handleSend(this, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(throw)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, throw, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(throw)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
-          listener: handleIdentifier(throw, topLevelFunctionDeclaration)
-        parseMethodTypeVar(throw)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(throw, throw, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(throw, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parseThrowExpression(return, true)
-                    parseExpression(throw)
-                      parsePrecedenceExpression(throw, 1, true)
-                        parseUnaryExpression(throw, true)
-                          parsePrimary(throw, expression)
-                            parseParenthesizedExpressionOrFunctionLiteral(throw)
-                              parseParenthesizedExpression(throw)
-                                parseExpressionInParenthesis(throw)
-                                  parseExpressionInParenthesisRest(()
-                                    parseExpression(()
-                                      parsePrecedenceExpression((, 1, true)
-                                        parseUnaryExpression((, true)
-                                          parsePrimary((, expression)
-                                            parseSendOrFunctionLiteral((, expression)
-                                              parseSend((, expression)
-                                                ensureIdentifier((, expression)
-                                                  listener: handleIdentifier(x, expression)
-                                                listener: handleNoTypeArguments(-)
-                                                parseArgumentsOpt(x)
-                                                  listener: handleNoArguments(-)
-                                                listener: handleSend(x, -)
-                                        listener: beginBinaryExpression(-)
-                                        parsePrecedenceExpression(-, 14, true)
-                                          parseUnaryExpression(-, true)
-                                            parsePrimary(-, expression)
-                                              parseLiteralInt(-)
-                                                listener: handleLiteralInt(1)
-                                        listener: endBinaryExpression(-)
-                                    ensureCloseParen(1, ()
-                                listener: handleParenthesizedExpression(()
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    listener: handleThrowExpression(throw, ;)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(true)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, true, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(true)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
-          listener: handleIdentifier(true, topLevelFunctionDeclaration)
-        parseMethodTypeVar(true)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(true, true, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(true, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          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)
-                    parseArgumentOrIndexStar(true, Instance of 'NoTypeParamOrArg', false)
-                      listener: handleNoTypeArguments(()
-                      parseArguments(true)
-                        parseArgumentsRest(()
-                          listener: beginArguments(()
-                          parseExpression(()
-                            parsePrecedenceExpression((, 1, true)
-                              parseUnaryExpression((, true)
-                                parsePrimary((, expression)
-                                  parseSendOrFunctionLiteral((, expression)
-                                    parseSend((, expression)
-                                      ensureIdentifier((, expression)
-                                        listener: handleIdentifier(x, expression)
-                                      listener: handleNoTypeArguments(-)
-                                      parseArgumentsOpt(x)
-                                        listener: handleNoArguments(-)
-                                      listener: handleSend(x, -)
-                              listener: beginBinaryExpression(-)
-                              parsePrecedenceExpression(-, 14, true)
-                                parseUnaryExpression(-, true)
-                                  parsePrimary(-, expression)
-                                    parseLiteralInt(-)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(-)
-                          listener: endArguments(1, (, ))
-                      listener: handleSend((, ))
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(try)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, try, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(try)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-          listener: handleIdentifier(try, topLevelFunctionDeclaration)
-        parseMethodTypeVar(try)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(try, try, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(try, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(try)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, try)
-          parseStatement(;)
-            parseStatementX(;)
-              parseTryStatement(;)
-                listener: beginTryStatement(try)
-                parseBlock(try, BlockKind(try statement))
-                  ensureBlock(try, null, try statement)
-                    reportRecoverableError(try, Message[ExpectedClassOrMixinBody, A try statement must have a body, even if it is empty., Try adding an empty body., {string: try statement}])
-                      listener: 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)
-                    insertBlock(try)
-                      rewriter()
-                      rewriter()
-                  listener: beginBlock({, BlockKind(try statement))
-                  notEofOrValue(}, })
-                  listener: endBlock(0, {, }, BlockKind(try statement))
-                reportRecoverableError(try, OnlyTry)
-                  listener: handleRecoverableError(OnlyTry, try, try)
-                listener: endTryStatement(0, try, null)
-          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)
-                                                ensureIdentifier((, expression)
-                                                  listener: handleIdentifier(x, expression)
-                                                listener: handleNoTypeArguments(-)
-                                                parseArgumentsOpt(x)
-                                                  listener: handleNoArguments(-)
-                                                listener: handleSend(x, -)
-                                        listener: beginBinaryExpression(-)
-                                        parsePrecedenceExpression(-, 14, true)
-                                          parseUnaryExpression(-, true)
-                                            parsePrimary(-, expression)
-                                              parseLiteralInt(-)
-                                                listener: handleLiteralInt(1)
-                                        listener: endBinaryExpression(-)
-                                    ensureCloseParen(1, ()
-                                listener: handleParenthesizedExpression(()
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(4, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(var)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, var, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(var)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-          listener: handleIdentifier(var, topLevelFunctionDeclaration)
-        parseMethodTypeVar(var)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(var, var, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(var, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(var)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, var)
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, false)
-                looksLikeLocalFunction(()
-                listener: beginMetadataStar(var)
-                listener: endMetadataStar(0)
-                listener: handleNoType(var)
-                listener: beginVariablesDeclaration((, null, var)
-                parseVariablesDeclarationRest(var, true)
-                  parseOptionallyInitializedIdentifier(var)
-                    ensureIdentifier(var, localVariableDeclaration)
-                      reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
-                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                      rewriter()
-                      listener: handleIdentifier(, localVariableDeclaration)
-                    listener: beginInitializedIdentifier()
-                    parseVariableInitializerOpt()
-                      listener: handleNoVariableInitializer(x)
-                    listener: endInitializedIdentifier()
-                  ensureSemicolon()
-                    reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-                    rewriter()
-                  listener: endVariablesDeclaration(1, ;)
-          notEofOrValue(}, x)
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                looksLikeLocalFunction(x)
-                parseExpressionStatement(;)
-                  parseExpression(;)
-                    parsePrecedenceExpression(;, 1, true)
-                      parseUnaryExpression(;, true)
-                        parsePrimary(;, expression)
-                          parseSendOrFunctionLiteral(;, expression)
-                            parseSend(;, expression)
-                              ensureIdentifier(;, expression)
-                                listener: handleIdentifier(x, expression)
-                              listener: handleNoTypeArguments(-)
-                              parseArgumentsOpt(x)
-                                listener: handleNoArguments(-)
-                              listener: handleSend(x, -)
-                      listener: beginBinaryExpression(-)
-                      parsePrecedenceExpression(-, 14, true)
-                        parseUnaryExpression(-, true)
-                          parsePrimary(-, expression)
-                            parseLiteralInt(-)
-                              listener: handleLiteralInt(1)
-                      listener: endBinaryExpression(-)
-                  ensureSemicolon(1)
-                    reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-                    rewriter()
-                  listener: handleExpressionStatement(;)
-          notEofOrValue(}, ))
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclaration(;, false)
-                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                  looksLikeLocalFunction())
-                  parseExpressionStatement(;)
-                    parseExpression(;)
-                      parsePrecedenceExpression(;, 1, true)
-                        parseUnaryExpression(;, true)
-                          parsePrimary(;, expression)
-                            parseSend(;, expression)
-                              ensureIdentifier(;, expression)
-                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
-                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-                                rewriter()
-                                listener: handleIdentifier(, expression)
-                              listener: handleNoTypeArguments())
-                              parseArgumentsOpt()
-                                listener: handleNoArguments())
-                              listener: handleSend(, ))
-                    ensureSemicolon()
-                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-                      rewriter()
-                    listener: handleExpressionStatement(;)
-          reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
-            listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-          notEofOrValue(}, +)
-          parseStatement())
-            parseStatementX())
-              parseExpressionStatementOrDeclaration(), false)
-                parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                  looksLikeLocalFunction(+)
-                  parseExpressionStatement())
-                    parseExpression())
-                      parsePrecedenceExpression(), 1, true)
-                        parseUnaryExpression(), true)
-                          rewriteAndRecover(), UnsupportedPrefixPlus, )
-                            reportRecoverableError(+, UnsupportedPrefixPlus)
-                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                            rewriter()
-                          parsePrimary(), expression)
-                            parseSendOrFunctionLiteral(), expression)
-                              parseSend(), expression)
-                                ensureIdentifier(), expression)
-                                  listener: handleIdentifier(, expression)
-                                listener: handleNoTypeArguments(+)
-                                parseArgumentsOpt()
-                                  listener: handleNoArguments(+)
-                                listener: handleSend(, +)
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(6, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(void)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, void, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(void)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-          listener: handleIdentifier(void, topLevelFunctionDeclaration)
-        parseMethodTypeVar(void)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(void, void, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(void, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        parseSendOrFunctionLiteral(return, expression)
-                          parseSend(return, expression)
-                            ensureIdentifier(return, expression)
-                              reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
-                                listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-                              rewriter()
-                              listener: handleIdentifier(, expression)
-                            listener: handleNoTypeArguments(void)
-                            parseArgumentsOpt()
-                              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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, void)
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclaration(;, false)
-                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                  looksLikeLocalFunction(()
-                  listener: beginMetadataStar(void)
-                  listener: endMetadataStar(0)
-                  listener: handleVoidKeyword(void)
-                  listener: beginVariablesDeclaration((, null, null)
-                  parseVariablesDeclarationRest(void, true)
-                    parseOptionallyInitializedIdentifier(void)
-                      ensureIdentifier(void, localVariableDeclaration)
-                        reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
-                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                        rewriter()
-                        listener: handleIdentifier(, localVariableDeclaration)
-                      listener: beginInitializedIdentifier()
-                      parseVariableInitializerOpt()
-                        listener: handleNoVariableInitializer(x)
-                      listener: endInitializedIdentifier()
-                    ensureSemicolon()
-                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-                      rewriter()
-                    listener: endVariablesDeclaration(1, ;)
-          notEofOrValue(}, x)
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                looksLikeLocalFunction(x)
-                parseExpressionStatement(;)
-                  parseExpression(;)
-                    parsePrecedenceExpression(;, 1, true)
-                      parseUnaryExpression(;, true)
-                        parsePrimary(;, expression)
-                          parseSendOrFunctionLiteral(;, expression)
-                            parseSend(;, expression)
-                              ensureIdentifier(;, expression)
-                                listener: handleIdentifier(x, expression)
-                              listener: handleNoTypeArguments(-)
-                              parseArgumentsOpt(x)
-                                listener: handleNoArguments(-)
-                              listener: handleSend(x, -)
-                      listener: beginBinaryExpression(-)
-                      parsePrecedenceExpression(-, 14, true)
-                        parseUnaryExpression(-, true)
-                          parsePrimary(-, expression)
-                            parseLiteralInt(-)
-                              listener: handleLiteralInt(1)
-                      listener: endBinaryExpression(-)
-                  ensureSemicolon(1)
-                    reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-                    rewriter()
-                  listener: handleExpressionStatement(;)
-          notEofOrValue(}, ))
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclaration(;, false)
-                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                  looksLikeLocalFunction())
-                  parseExpressionStatement(;)
-                    parseExpression(;)
-                      parsePrecedenceExpression(;, 1, true)
-                        parseUnaryExpression(;, true)
-                          parsePrimary(;, expression)
-                            parseSend(;, expression)
-                              ensureIdentifier(;, expression)
-                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
-                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-                                rewriter()
-                                listener: handleIdentifier(, expression)
-                              listener: handleNoTypeArguments())
-                              parseArgumentsOpt()
-                                listener: handleNoArguments())
-                              listener: handleSend(, ))
-                    ensureSemicolon()
-                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-                      rewriter()
-                    listener: handleExpressionStatement(;)
-          reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
-            listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-          notEofOrValue(}, +)
-          parseStatement())
-            parseStatementX())
-              parseExpressionStatementOrDeclaration(), false)
-                parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                  looksLikeLocalFunction(+)
-                  parseExpressionStatement())
-                    parseExpression())
-                      parsePrecedenceExpression(), 1, true)
-                        parseUnaryExpression(), true)
-                          rewriteAndRecover(), UnsupportedPrefixPlus, )
-                            reportRecoverableError(+, UnsupportedPrefixPlus)
-                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                            rewriter()
-                          parsePrimary(), expression)
-                            parseSendOrFunctionLiteral(), expression)
-                              parseSend(), expression)
-                                ensureIdentifier(), expression)
-                                  listener: handleIdentifier(, expression)
-                                listener: handleNoTypeArguments(+)
-                                parseArgumentsOpt()
-                                  listener: handleNoArguments(+)
-                                listener: handleSend(, +)
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(6, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(while)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, while, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(while)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-          listener: handleIdentifier(while, topLevelFunctionDeclaration)
-        parseMethodTypeVar(while)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(while, while, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(while, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(while)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, while)
-          parseStatement(;)
-            parseStatementX(;)
-              parseWhileStatement(;)
-                listener: beginWhileStatement(while)
-                ensureParenthesizedCondition(while)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(-)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(-)
-                                listener: handleSend(x, -)
-                        listener: beginBinaryExpression(-)
-                        parsePrecedenceExpression(-, 14, true)
-                          parseUnaryExpression(-, true)
-                            parsePrimary(-, expression)
-                              parseLiteralInt(-)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(-)
-                    ensureCloseParen(1, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginWhileStatementBody(+)
-                parseStatement())
-                  parseStatementX())
-                    parseExpressionStatementOrDeclaration(), false)
-                      parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                        looksLikeLocalFunction(+)
-                        parseExpressionStatement())
-                          parseExpression())
-                            parsePrecedenceExpression(), 1, true)
-                              parseUnaryExpression(), true)
-                                rewriteAndRecover(), UnsupportedPrefixPlus, )
-                                  reportRecoverableError(+, UnsupportedPrefixPlus)
-                                    listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                                  rewriter()
-                                parsePrimary(), expression)
-                                  parseSendOrFunctionLiteral(), expression)
-                                    parseSend(), expression)
-                                      ensureIdentifier(), expression)
-                                        listener: handleIdentifier(, expression)
-                                      listener: handleNoTypeArguments(+)
-                                      parseArgumentsOpt()
-                                        listener: handleNoArguments(+)
-                                      listener: handleSend(, +)
-                              listener: beginBinaryExpression(+)
-                              parsePrecedenceExpression(+, 14, true)
-                                parseUnaryExpression(+, true)
-                                  parsePrimary(+, expression)
-                                    parseLiteralInt(+)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(+)
-                          ensureSemicolon(1)
-                          listener: handleExpressionStatement(;)
-                listener: endWhileStatementBody(})
-                listener: endWhileStatement(while, })
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(3, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(with)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, with, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(with)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-          listener: handleIdentifier(with, topLevelFunctionDeclaration)
-        parseMethodTypeVar(with)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(with, with, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(with, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-                            listener: handleIdentifier(with, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(with)
-                            parseArguments(with)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(with, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration()
-  reportAllErrorTokens(int)
-  listener: endCompilationUnit(33, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_fields.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_fields.dart.parser.expect
deleted file mode 100644
index 7e86c51..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_fields.dart.parser.expect
+++ /dev/null
@@ -1,333 +0,0 @@
-NOTICE: Stream was rewritten by parser!
-
-int assert(int x) {
-if (x == 0) return 42;
-return assert(x-1) + 1;
-}
-
-int break(int x) {
-if (x == 0) return 42;
-return ;break;(x-1) + 1;
-}
-
-int case(int x) {
-if (x == 0) return 42;
-return case(x-1) + 1;
-}
-
-int catch(int x) {
-if (x == 0) return 42;
-return catch(x-1) + 1;
-}
-
-int class(int x) {
-if (x == 0) return 42;
-return class(x-1) + 1;
-}
-
-int const(int x) {
-if (x == 0) return 42;
-return const(x-1) + 1;
-}
-
-int continue(int x) {
-if (x == 0) return 42;
-return ;continue;(x-1) + 1;
-}
-
-int default(int x) {
-if (x == 0) return 42;
-return default(x-1) + 1;
-}
-
-int do(int x) {
-if (x == 0) return 42;
-return ;do(x-1) + 1;
-while();}
-
-int else(int x) {
-if (x == 0) return 42;
-return ;;else(x-1) + 1;
-}
-
-int enum(int x) {
-if (x == 0) return 42;
-return enum(x-1) + 1;
-}
-
-int extends(int x) {
-if (x == 0) return 42;
-return extends(x-1) + 1;
-}
-
-int false(int x) {
-if (x == 0) return 42;
-return false(x-1) + 1;
-}
-
-int final(int x) {
-if (x == 0) return 42;
-return ;final(;x-1;;) + 1;
-}
-
-int finally(int x) {
-if (x == 0) return 42;
-return finally(x-1) + 1;
-}
-
-int for(int x) {
-if (x == 0) return 42;
-return ;for(x-1;;) + 1;
-}
-
-int if(int x) {
-if (x == 0) return 42;
-return ;if(x-1) + 1;
-}
-
-int in(int x) {
-if (x == 0) return 42;
-return in(x-1) + 1;
-}
-
-int is(int x) {
-if (x == 0) return 42;
-return is;(x-1) + 1;
-}
-
-int new(int x) {
-if (x == 0) return 42;
-return new(x-1) + 1;
-}
-
-int null(int x) {
-if (x == 0) return 42;
-return null(x-1) + 1;
-}
-
-int rethrow(int x) {
-if (x == 0) return 42;
-return rethrow(x-1) + 1;
-}
-
-int return(int x) {
-if (x == 0) return 42;
-return return(x-1) + 1;
-}
-
-int super(int x) {
-if (x == 0) return 42;
-return super(x-1) + 1;
-}
-
-int switch(int x) {
-if (x == 0) return 42;
-return ;switch(x-1) {}+ 1;
-}
-
-int this(int x) {
-if (x == 0) return 42;
-return this(x-1) + 1;
-}
-
-int throw(int x) {
-if (x == 0) return 42;
-return throw(x-1) + 1;
-}
-
-int true(int x) {
-if (x == 0) return 42;
-return true(x-1) + 1;
-}
-
-int try(int x) {
-if (x == 0) return 42;
-return ;try{}(x-1) + 1;
-}
-
-int var(int x) {
-if (x == 0) return 42;
-return ;var(;x-1;;) + 1;
-}
-
-int void(int x) {
-if (x == 0) return 42;
-return ;void(;x-1;;) + 1;
-}
-
-int while(int x) {
-if (x == 0) return 42;
-return ;while(x-1) + 1;
-}
-
-int with(int x) {
-if (x == 0) return 42;
-return with(x-1) + 1;
-}
-
-
-int[StringToken] assert[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] assert[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] break[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]break[KeywordToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] case[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] case[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] catch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] catch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] class[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] class[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] const[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] const[KeywordToken][SyntheticStringToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] continue[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]continue[KeywordToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] default[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] default[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] do[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]do[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-while[SyntheticKeywordToken]([SyntheticBeginToken][SyntheticStringToken])[SyntheticToken];[SyntheticToken]}[SimpleToken]
-
-int[StringToken] else[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken]else[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] enum[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] enum[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] extends[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] extends[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] false[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] false[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] final[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]final[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] finally[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] finally[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] for[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]for[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] if[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]if[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] in[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] in[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] is[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken]is[KeywordToken][SyntheticStringToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] new[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] new[KeywordToken][SyntheticStringToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] null[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] null[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] rethrow[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] rethrow[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] return[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] return[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] super[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] super[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] switch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]switch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] {[SyntheticBeginToken]}[SyntheticToken][SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] throw[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] throw[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] true[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] true[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] try[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]try[KeywordToken]{[SyntheticBeginToken]}[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] var[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]var[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] void[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]void[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] while[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]while[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] with[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] with[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_fields.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_fields.dart.scanner.expect
deleted file mode 100644
index 896ca86..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_fields.dart.scanner.expect
+++ /dev/null
@@ -1,331 +0,0 @@
-int assert(int x) {
-if (x == 0) return 42;
-return assert(x-1) + 1;
-}
-
-int break(int x) {
-if (x == 0) return 42;
-return break(x-1) + 1;
-}
-
-int case(int x) {
-if (x == 0) return 42;
-return case(x-1) + 1;
-}
-
-int catch(int x) {
-if (x == 0) return 42;
-return catch(x-1) + 1;
-}
-
-int class(int x) {
-if (x == 0) return 42;
-return class(x-1) + 1;
-}
-
-int const(int x) {
-if (x == 0) return 42;
-return const(x-1) + 1;
-}
-
-int continue(int x) {
-if (x == 0) return 42;
-return continue(x-1) + 1;
-}
-
-int default(int x) {
-if (x == 0) return 42;
-return default(x-1) + 1;
-}
-
-int do(int x) {
-if (x == 0) return 42;
-return do(x-1) + 1;
-}
-
-int else(int x) {
-if (x == 0) return 42;
-return else(x-1) + 1;
-}
-
-int enum(int x) {
-if (x == 0) return 42;
-return enum(x-1) + 1;
-}
-
-int extends(int x) {
-if (x == 0) return 42;
-return extends(x-1) + 1;
-}
-
-int false(int x) {
-if (x == 0) return 42;
-return false(x-1) + 1;
-}
-
-int final(int x) {
-if (x == 0) return 42;
-return final(x-1) + 1;
-}
-
-int finally(int x) {
-if (x == 0) return 42;
-return finally(x-1) + 1;
-}
-
-int for(int x) {
-if (x == 0) return 42;
-return for(x-1) + 1;
-}
-
-int if(int x) {
-if (x == 0) return 42;
-return if(x-1) + 1;
-}
-
-int in(int x) {
-if (x == 0) return 42;
-return in(x-1) + 1;
-}
-
-int is(int x) {
-if (x == 0) return 42;
-return is(x-1) + 1;
-}
-
-int new(int x) {
-if (x == 0) return 42;
-return new(x-1) + 1;
-}
-
-int null(int x) {
-if (x == 0) return 42;
-return null(x-1) + 1;
-}
-
-int rethrow(int x) {
-if (x == 0) return 42;
-return rethrow(x-1) + 1;
-}
-
-int return(int x) {
-if (x == 0) return 42;
-return return(x-1) + 1;
-}
-
-int super(int x) {
-if (x == 0) return 42;
-return super(x-1) + 1;
-}
-
-int switch(int x) {
-if (x == 0) return 42;
-return switch(x-1) + 1;
-}
-
-int this(int x) {
-if (x == 0) return 42;
-return this(x-1) + 1;
-}
-
-int throw(int x) {
-if (x == 0) return 42;
-return throw(x-1) + 1;
-}
-
-int true(int x) {
-if (x == 0) return 42;
-return true(x-1) + 1;
-}
-
-int try(int x) {
-if (x == 0) return 42;
-return try(x-1) + 1;
-}
-
-int var(int x) {
-if (x == 0) return 42;
-return var(x-1) + 1;
-}
-
-int void(int x) {
-if (x == 0) return 42;
-return void(x-1) + 1;
-}
-
-int while(int x) {
-if (x == 0) return 42;
-return while(x-1) + 1;
-}
-
-int with(int x) {
-if (x == 0) return 42;
-return with(x-1) + 1;
-}
-
-
-int[StringToken] assert[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] assert[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] break[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] break[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] case[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] case[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] catch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] catch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] class[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] class[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] const[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] const[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] continue[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] continue[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] default[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] default[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] do[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] do[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] else[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] else[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] enum[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] enum[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] extends[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] extends[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] false[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] false[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] final[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] final[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] finally[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] finally[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] for[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] for[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] if[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] if[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] in[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] in[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] is[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] is[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] new[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] new[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] null[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] null[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] rethrow[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] rethrow[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] return[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] return[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] super[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] super[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] switch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] switch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] throw[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] throw[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] true[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] true[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] try[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] try[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] var[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] var[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] void[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] void[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] while[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] while[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] with[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] with[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_methods.dart b/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_methods.dart
deleted file mode 100644
index 30bed69..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_methods.dart
+++ /dev/null
@@ -1,164 +0,0 @@
-int assert(int x) {
-  if (x == 0) return 42;
-  return assert(x-1) + 1;
-}
-
-int break(int x) {
-  if (x == 0) return 42;
-  return break(x-1) + 1;
-}
-
-int case(int x) {
-  if (x == 0) return 42;
-  return case(x-1) + 1;
-}
-
-int catch(int x) {
-  if (x == 0) return 42;
-  return catch(x-1) + 1;
-}
-
-int class(int x) {
-  if (x == 0) return 42;
-  return class(x-1) + 1;
-}
-
-int const(int x) {
-  if (x == 0) return 42;
-  return const(x-1) + 1;
-}
-
-int continue(int x) {
-  if (x == 0) return 42;
-  return continue(x-1) + 1;
-}
-
-int default(int x) {
-  if (x == 0) return 42;
-  return default(x-1) + 1;
-}
-
-int do(int x) {
-  if (x == 0) return 42;
-  return do(x-1) + 1;
-}
-
-int else(int x) {
-  if (x == 0) return 42;
-  return else(x-1) + 1;
-}
-
-int enum(int x) {
-  if (x == 0) return 42;
-  return enum(x-1) + 1;
-}
-
-int extends(int x) {
-  if (x == 0) return 42;
-  return extends(x-1) + 1;
-}
-
-int false(int x) {
-  if (x == 0) return 42;
-  return false(x-1) + 1;
-}
-
-int final(int x) {
-  if (x == 0) return 42;
-  return final(x-1) + 1;
-}
-
-int finally(int x) {
-  if (x == 0) return 42;
-  return finally(x-1) + 1;
-}
-
-int for(int x) {
-  if (x == 0) return 42;
-  return for(x-1) + 1;
-}
-
-int if(int x) {
-  if (x == 0) return 42;
-  return if(x-1) + 1;
-}
-
-int in(int x) {
-  if (x == 0) return 42;
-  return in(x-1) + 1;
-}
-
-int is(int x) {
-  if (x == 0) return 42;
-  return is(x-1) + 1;
-}
-
-int new(int x) {
-  if (x == 0) return 42;
-  return new(x-1) + 1;
-}
-
-int null(int x) {
-  if (x == 0) return 42;
-  return null(x-1) + 1;
-}
-
-int rethrow(int x) {
-  if (x == 0) return 42;
-  return rethrow(x-1) + 1;
-}
-
-int return(int x) {
-  if (x == 0) return 42;
-  return return(x-1) + 1;
-}
-
-int super(int x) {
-  if (x == 0) return 42;
-  return super(x-1) + 1;
-}
-
-int switch(int x) {
-  if (x == 0) return 42;
-  return switch(x-1) + 1;
-}
-
-int this(int x) {
-  if (x == 0) return 42;
-  return this(x-1) + 1;
-}
-
-int throw(int x) {
-  if (x == 0) return 42;
-  return throw(x-1) + 1;
-}
-
-int true(int x) {
-  if (x == 0) return 42;
-  return true(x-1) + 1;
-}
-
-int try(int x) {
-  if (x == 0) return 42;
-  return try(x-1) + 1;
-}
-
-int var(int x) {
-  if (x == 0) return 42;
-  return var(x-1) + 1;
-}
-
-int void(int x) {
-  if (x == 0) return 42;
-  return void(x-1) + 1;
-}
-
-int while(int x) {
-  if (x == 0) return 42;
-  return while(x-1) + 1;
-}
-
-int with(int x) {
-  if (x == 0) return 42;
-  return with(x-1) + 1;
-}
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_methods.dart.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_methods.dart.expect
deleted file mode 100644
index 577ef81..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_methods.dart.expect
+++ /dev/null
@@ -1,2594 +0,0 @@
-Problems reported:
-
-parser/error_recovery/reserved_words_top_level_methods:1:5: Expected an identifier, but got 'assert'.
-int assert(int x) {
-    ^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:3:10: `assert` can't be used as an expression.
-  return assert(x-1) + 1;
-         ^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:6:5: Expected an identifier, but got 'break'.
-int break(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:8:10: Expected an identifier, but got 'break'.
-  return break(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:8:10: Expected ';' after this.
-  return break(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:8:10: A break statement can't be used outside of a loop or switch statement.
-  return break(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:8:10: Expected ';' after this.
-  return break(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:11:5: Expected an identifier, but got 'case'.
-int case(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:13:10: Expected an identifier, but got 'case'.
-  return case(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:16:5: Expected an identifier, but got 'catch'.
-int catch(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:18:10: Expected an identifier, but got 'catch'.
-  return catch(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:21:5: Expected an identifier, but got 'class'.
-int class(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:23:10: Expected an identifier, but got 'class'.
-  return class(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:26:5: Expected an identifier, but got 'const'.
-int const(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:28:15: Expected an identifier, but got '('.
-  return const(x-1) + 1;
-              ^
-
-parser/error_recovery/reserved_words_top_level_methods:31:5: Expected an identifier, but got 'continue'.
-int continue(int x) {
-    ^^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:33:10: Expected an identifier, but got 'continue'.
-  return continue(x-1) + 1;
-         ^^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:33:10: Expected ';' after this.
-  return continue(x-1) + 1;
-         ^^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:33:10: A continue statement can't be used outside of a loop or switch statement.
-  return continue(x-1) + 1;
-         ^^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:33:10: Expected ';' after this.
-  return continue(x-1) + 1;
-         ^^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:36:5: Expected an identifier, but got 'default'.
-int default(int x) {
-    ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:38:10: Expected an identifier, but got 'default'.
-  return default(x-1) + 1;
-         ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:41:5: Expected an identifier, but got 'do'.
-int do(int x) {
-    ^^
-
-parser/error_recovery/reserved_words_top_level_methods:43:10: Expected an identifier, but got 'do'.
-  return do(x-1) + 1;
-         ^^
-
-parser/error_recovery/reserved_words_top_level_methods:43:10: Expected ';' after this.
-  return do(x-1) + 1;
-         ^^
-
-parser/error_recovery/reserved_words_top_level_methods:44:1: Expected 'while' before this.
-}
-^
-
-parser/error_recovery/reserved_words_top_level_methods:44:1: Expected to find '('.
-}
-^
-
-parser/error_recovery/reserved_words_top_level_methods:44:1: Expected an identifier, but got '}'.
-}
-^
-
-parser/error_recovery/reserved_words_top_level_methods:44:1: Expected ';' after this.
-}
-^
-
-parser/error_recovery/reserved_words_top_level_methods:46:5: Expected an identifier, but got 'else'.
-int else(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:48:10: Expected an identifier, but got 'else'.
-  return else(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:48:10: Expected ';' after this.
-  return else(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:48:10: Expected an identifier, but got 'else'.
-  return else(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:48:10: Expected ';' after this.
-  return else(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:48:10: Unexpected token ';'.
-  return else(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:51:5: Expected an identifier, but got 'enum'.
-int enum(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:53:10: Expected an identifier, but got 'enum'.
-  return enum(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:56:5: Expected an identifier, but got 'extends'.
-int extends(int x) {
-    ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:58:10: Expected an identifier, but got 'extends'.
-  return extends(x-1) + 1;
-         ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:61:5: Expected an identifier, but got 'false'.
-int false(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:66:5: Expected an identifier, but got 'final'.
-int final(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:68:10: Expected an identifier, but got 'final'.
-  return final(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:68:10: Expected ';' after this.
-  return final(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:68:15: Expected an identifier, but got '('.
-  return final(x-1) + 1;
-              ^
-
-parser/error_recovery/reserved_words_top_level_methods:68:16: Expected ';' after this.
-  return final(x-1) + 1;
-               ^
-
-parser/error_recovery/reserved_words_top_level_methods:68:18: Expected ';' after this.
-  return final(x-1) + 1;
-                 ^
-
-parser/error_recovery/reserved_words_top_level_methods:68:19: Expected an identifier, but got ')'.
-  return final(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_top_level_methods:68:19: Expected ';' after this.
-  return final(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_top_level_methods:68:19: Unexpected token ';'.
-  return final(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_top_level_methods:68:21: '+' is not a prefix operator.
-  return final(x-1) + 1;
-                    ^
-
-parser/error_recovery/reserved_words_top_level_methods:71:5: Expected an identifier, but got 'finally'.
-int finally(int x) {
-    ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:73:10: Expected an identifier, but got 'finally'.
-  return finally(x-1) + 1;
-         ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:76:5: Expected an identifier, but got 'for'.
-int for(int x) {
-    ^^^
-
-parser/error_recovery/reserved_words_top_level_methods:78:10: Expected an identifier, but got 'for'.
-  return for(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_methods:78:10: Expected ';' after this.
-  return for(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_methods:78:16: Expected ';' after this.
-  return for(x-1) + 1;
-               ^
-
-parser/error_recovery/reserved_words_top_level_methods:78:17: Expected an identifier, but got ')'.
-  return for(x-1) + 1;
-                ^
-
-parser/error_recovery/reserved_words_top_level_methods:78:17: Expected ';' after this.
-  return for(x-1) + 1;
-                ^
-
-parser/error_recovery/reserved_words_top_level_methods:78:19: '+' is not a prefix operator.
-  return for(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_top_level_methods:81:5: Expected an identifier, but got 'if'.
-int if(int x) {
-    ^^
-
-parser/error_recovery/reserved_words_top_level_methods:83:10: Expected an identifier, but got 'if'.
-  return if(x-1) + 1;
-         ^^
-
-parser/error_recovery/reserved_words_top_level_methods:83:10: Expected ';' after this.
-  return if(x-1) + 1;
-         ^^
-
-parser/error_recovery/reserved_words_top_level_methods:83:18: '+' is not a prefix operator.
-  return if(x-1) + 1;
-                 ^
-
-parser/error_recovery/reserved_words_top_level_methods:86:5: Expected an identifier, but got 'in'.
-int in(int x) {
-    ^^
-
-parser/error_recovery/reserved_words_top_level_methods:88:10: Expected an identifier, but got 'in'.
-  return in(x-1) + 1;
-         ^^
-
-parser/error_recovery/reserved_words_top_level_methods:91:5: Expected an identifier, but got 'is'.
-int is(int x) {
-    ^^
-
-parser/error_recovery/reserved_words_top_level_methods:93:10: Expected an identifier, but got 'is'.
-  return is(x-1) + 1;
-         ^^
-
-parser/error_recovery/reserved_words_top_level_methods:93:12: Expected a type, but got '('.
-  return is(x-1) + 1;
-           ^
-
-parser/error_recovery/reserved_words_top_level_methods:93:12: Expected ';' after this.
-  return is(x-1) + 1;
-           ^
-
-parser/error_recovery/reserved_words_top_level_methods:96:5: Expected an identifier, but got 'new'.
-int new(int x) {
-    ^^^
-
-parser/error_recovery/reserved_words_top_level_methods:98:13: Expected an identifier, but got '('.
-  return new(x-1) + 1;
-            ^
-
-parser/error_recovery/reserved_words_top_level_methods:101:5: Expected an identifier, but got 'null'.
-int null(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:106:5: Expected an identifier, but got 'rethrow'.
-int rethrow(int x) {
-    ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:108:10: Expected an identifier, but got 'rethrow'.
-  return rethrow(x-1) + 1;
-         ^^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:111:5: Expected an identifier, but got 'return'.
-int return(int x) {
-    ^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:113:10: Unexpected token 'return'.
-  return return(x-1) + 1;
-         ^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:116:5: Expected an identifier, but got 'super'.
-int super(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:121:5: Expected an identifier, but got 'switch'.
-int switch(int x) {
-    ^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:123:10: Expected an identifier, but got 'switch'.
-  return switch(x-1) + 1;
-         ^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:123:10: Expected ';' after this.
-  return switch(x-1) + 1;
-         ^^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:123:20: A switch statement must have a body, even if it is empty.
-  return switch(x-1) + 1;
-                   ^
-
-parser/error_recovery/reserved_words_top_level_methods:123:22: '+' is not a prefix operator.
-  return switch(x-1) + 1;
-                     ^
-
-parser/error_recovery/reserved_words_top_level_methods:126:5: Expected an identifier, but got 'this'.
-int this(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:131:5: Expected an identifier, but got 'throw'.
-int throw(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:136:5: Expected an identifier, but got 'true'.
-int true(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:141:5: Expected an identifier, but got 'try'.
-int try(int x) {
-    ^^^
-
-parser/error_recovery/reserved_words_top_level_methods:143:10: Expected an identifier, but got 'try'.
-  return try(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_methods:143:10: Expected ';' after this.
-  return try(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_methods:143:10: A try statement must have a body, even if it is empty.
-  return try(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_methods:143:10: A try block must be followed by an 'on', 'catch', or 'finally' clause.
-  return try(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_methods:146:5: Expected an identifier, but got 'var'.
-int var(int x) {
-    ^^^
-
-parser/error_recovery/reserved_words_top_level_methods:148:10: Expected an identifier, but got 'var'.
-  return var(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_methods:148:10: Expected ';' after this.
-  return var(x-1) + 1;
-         ^^^
-
-parser/error_recovery/reserved_words_top_level_methods:148:13: Expected an identifier, but got '('.
-  return var(x-1) + 1;
-            ^
-
-parser/error_recovery/reserved_words_top_level_methods:148:14: Expected ';' after this.
-  return var(x-1) + 1;
-             ^
-
-parser/error_recovery/reserved_words_top_level_methods:148:16: Expected ';' after this.
-  return var(x-1) + 1;
-               ^
-
-parser/error_recovery/reserved_words_top_level_methods:148:17: Expected an identifier, but got ')'.
-  return var(x-1) + 1;
-                ^
-
-parser/error_recovery/reserved_words_top_level_methods:148:17: Expected ';' after this.
-  return var(x-1) + 1;
-                ^
-
-parser/error_recovery/reserved_words_top_level_methods:148:17: Unexpected token ';'.
-  return var(x-1) + 1;
-                ^
-
-parser/error_recovery/reserved_words_top_level_methods:148:19: '+' is not a prefix operator.
-  return var(x-1) + 1;
-                  ^
-
-parser/error_recovery/reserved_words_top_level_methods:151:5: Expected an identifier, but got 'void'.
-int void(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:153:10: Expected an identifier, but got 'void'.
-  return void(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:153:10: Expected ';' after this.
-  return void(x-1) + 1;
-         ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:153:14: Expected an identifier, but got '('.
-  return void(x-1) + 1;
-             ^
-
-parser/error_recovery/reserved_words_top_level_methods:153:15: Expected ';' after this.
-  return void(x-1) + 1;
-              ^
-
-parser/error_recovery/reserved_words_top_level_methods:153:17: Expected ';' after this.
-  return void(x-1) + 1;
-                ^
-
-parser/error_recovery/reserved_words_top_level_methods:153:18: Expected an identifier, but got ')'.
-  return void(x-1) + 1;
-                 ^
-
-parser/error_recovery/reserved_words_top_level_methods:153:18: Expected ';' after this.
-  return void(x-1) + 1;
-                 ^
-
-parser/error_recovery/reserved_words_top_level_methods:153:18: Unexpected token ';'.
-  return void(x-1) + 1;
-                 ^
-
-parser/error_recovery/reserved_words_top_level_methods:153:20: '+' is not a prefix operator.
-  return void(x-1) + 1;
-                   ^
-
-parser/error_recovery/reserved_words_top_level_methods:156:5: Expected an identifier, but got 'while'.
-int while(int x) {
-    ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:158:10: Expected an identifier, but got 'while'.
-  return while(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:158:10: Expected ';' after this.
-  return while(x-1) + 1;
-         ^^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:158:21: '+' is not a prefix operator.
-  return while(x-1) + 1;
-                    ^
-
-parser/error_recovery/reserved_words_top_level_methods:161:5: Expected an identifier, but got 'with'.
-int with(int x) {
-    ^^^^
-
-parser/error_recovery/reserved_words_top_level_methods:163:10: Expected an identifier, but got 'with'.
-  return with(x-1) + 1;
-         ^^^^
-
-beginCompilationUnit(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(assert)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
-      handleIdentifier(assert, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          beginAssert(assert, Assert.Expression)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-            handleRecoverableError(AssertAsExpression, assert, assert)
-          endAssert(assert, Assert.Expression, (, null, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(break)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-      handleIdentifier(break, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(break)
-          handleNoArguments(break)
-          handleSend(, break)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
-        endReturnStatement(true, return, ;)
-        handleRecoverableError(BreakOutsideOfLoop, break, break)
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
-        handleBreakStatement(false, break, ;)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleParenthesizedExpression(()
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(4, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(case)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-      handleIdentifier(case, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-          handleIdentifier(case, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(case, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(catch)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-      handleIdentifier(catch, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-          handleIdentifier(catch, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(catch, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(class)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-      handleIdentifier(class, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-          handleIdentifier(class, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(class, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(const)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
-      handleIdentifier(const, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          beginConstExpression(const)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-            handleIdentifier(, constructorReference)
-            beginConstructorReference()
-              handleNoTypeArguments(()
-              handleNoConstructorReferenceContinuationAfterTypeArguments(()
-            endConstructorReference(, null, ()
-            beginArguments(()
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(-)
-              handleNoArguments(-)
-              handleSend(x, -)
-              beginBinaryExpression(-)
-              handleLiteralInt(1)
-              endBinaryExpression(-)
-            endArguments(1, (, ))
-          endConstExpression(const)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(continue)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-      handleIdentifier(continue, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(continue)
-          handleNoArguments(continue)
-          handleSend(, continue)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
-        endReturnStatement(true, return, ;)
-        handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
-        handleContinueStatement(false, continue, ;)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleParenthesizedExpression(()
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(4, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(default)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-      handleIdentifier(default, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-          handleIdentifier(default, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(default, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(do)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-      handleIdentifier(do, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(do)
-          handleNoArguments(do)
-          handleSend(, do)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], do, do)
-        endReturnStatement(true, return, ;)
-        beginDoWhileStatement(do)
-          beginDoWhileStatementBody(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-            handleParenthesizedExpression(()
-            beginBinaryExpression(+)
-            handleLiteralInt(1)
-            endBinaryExpression(+)
-            handleExpressionStatement(;)
-          endDoWhileStatementBody(;)
-          handleRecoverableError(Message[ExpectedButGot, Expected 'while' before this., null, {string: while}], }, })
-          handleRecoverableError(Message[ExpectedToken, Expected to find '('., null, {string: (}], }, })
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., null, {token: }}], }, })
-          handleIdentifier(, expression)
-          handleNoTypeArguments())
-          handleNoArguments())
-          handleSend(, ))
-          handleParenthesizedCondition(()
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
-        endDoWhileStatement(do, while, ;)
-      endBlockFunctionBody(3, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(else)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-      handleIdentifier(else, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(else)
-          handleNoArguments(else)
-          handleSend(, else)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
-        endReturnStatement(true, return, ;)
-        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-        handleIdentifier(, expression)
-        handleNoTypeArguments(else)
-        handleNoArguments(else)
-        handleSend(, else)
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
-        handleExpressionStatement(;)
-        handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], else, else)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleParenthesizedExpression(()
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(4, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(enum)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-      handleIdentifier(enum, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-          handleIdentifier(enum, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(enum, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(extends)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-      handleIdentifier(extends, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-          handleIdentifier(extends, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(extends, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(false)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
-      handleIdentifier(false, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleLiteralBool(false)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend((, ))
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(final)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-      handleIdentifier(final, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(final)
-          handleNoArguments(final)
-          handleSend(, final)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
-        endReturnStatement(true, return, ;)
-        beginMetadataStar(final)
-        endMetadataStar(0)
-        handleNoType(final)
-        beginVariablesDeclaration((, null, final)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-          handleIdentifier(, localVariableDeclaration)
-          beginInitializedIdentifier()
-            handleNoVariableInitializer(x)
-          endInitializedIdentifier()
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-        endVariablesDeclaration(1, ;)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-        handleExpressionStatement(;)
-        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-        handleIdentifier(, expression)
-        handleNoTypeArguments())
-        handleNoArguments())
-        handleSend(, ))
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-        handleExpressionStatement(;)
-        handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-        handleRecoverableError(UnsupportedPrefixPlus, +, +)
-        handleIdentifier(, expression)
-        handleNoTypeArguments(+)
-        handleNoArguments(+)
-        handleSend(, +)
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(6, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(finally)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-      handleIdentifier(finally, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-          handleIdentifier(finally, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(finally, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(for)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-      handleIdentifier(for, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(for)
-          handleNoArguments(for)
-          handleSend(, for)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], for, for)
-        endReturnStatement(true, return, ;)
-        beginForStatement(for)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(-)
-          handleNoArguments(-)
-          handleSend(x, -)
-          beginBinaryExpression(-)
-          handleLiteralInt(1)
-          endBinaryExpression(-)
-          handleForInitializerExpressionStatement(1, false)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-          handleIdentifier(, expression)
-          handleNoTypeArguments())
-          handleNoArguments())
-          handleSend(, ))
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-          handleExpressionStatement(;)
-          handleForLoopParts(for, (, ;, 0)
-          beginForStatementBody(+)
-            handleRecoverableError(UnsupportedPrefixPlus, +, +)
-            handleIdentifier(, expression)
-            handleNoTypeArguments(+)
-            handleNoArguments(+)
-            handleSend(, +)
-            beginBinaryExpression(+)
-            handleLiteralInt(1)
-            endBinaryExpression(+)
-            handleExpressionStatement(;)
-          endForStatementBody(})
-        endForStatement(})
-      endBlockFunctionBody(3, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(if)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-      handleIdentifier(if, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(if)
-          handleNoArguments(if)
-          handleSend(, if)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], if, if)
-        endReturnStatement(true, return, ;)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(-)
-          handleNoArguments(-)
-          handleSend(x, -)
-          beginBinaryExpression(-)
-          handleLiteralInt(1)
-          endBinaryExpression(-)
-          handleParenthesizedCondition(()
-          beginThenStatement(+)
-            handleRecoverableError(UnsupportedPrefixPlus, +, +)
-            handleIdentifier(, expression)
-            handleNoTypeArguments(+)
-            handleNoArguments(+)
-            handleSend(, +)
-            beginBinaryExpression(+)
-            handleLiteralInt(1)
-            endBinaryExpression(+)
-            handleExpressionStatement(;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-      endBlockFunctionBody(3, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(in)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-      handleIdentifier(in, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-          handleIdentifier(in, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(in, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(is)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-      handleIdentifier(is, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(is)
-          handleNoArguments(is)
-          handleSend(, is)
-          beginIsOperatorType(is)
-            handleRecoverableError(Message[ExpectedType, Expected a type, but got '('., null, {token: (}], (, ()
-            handleIdentifier(, typeReference)
-            handleNoTypeArguments(()
-            handleType(, null)
-          endIsOperatorType(is)
-          handleIsOperator(is, null)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
-        endReturnStatement(true, return, ;)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleParenthesizedExpression(()
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(3, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(new)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
-      handleIdentifier(new, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          beginNewExpression(new)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-            handleIdentifier(, constructorReference)
-            beginConstructorReference()
-              handleNoTypeArguments(()
-              handleNoConstructorReferenceContinuationAfterTypeArguments(()
-            endConstructorReference(, null, ()
-            beginArguments(()
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(-)
-              handleNoArguments(-)
-              handleSend(x, -)
-              beginBinaryExpression(-)
-              handleLiteralInt(1)
-              endBinaryExpression(-)
-            endArguments(1, (, ))
-          endNewExpression(new)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(null)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
-      handleIdentifier(null, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleLiteralNull(null)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend((, ))
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(rethrow)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-      handleIdentifier(rethrow, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-          handleIdentifier(rethrow, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(rethrow, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(return)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
-      handleIdentifier(return, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[UnexpectedToken, Unexpected token 'return'., null, {token: return}], return, return)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(-)
-          handleNoArguments(-)
-          handleSend(x, -)
-          beginBinaryExpression(-)
-          handleLiteralInt(1)
-          endBinaryExpression(-)
-          handleParenthesizedExpression(()
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(super)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
-      handleIdentifier(super, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleSuperExpression(super, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(super, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(switch)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-      handleIdentifier(switch, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(switch)
-          handleNoArguments(switch)
-          handleSend(, switch)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], switch, switch)
-        endReturnStatement(true, return, ;)
-        beginSwitchStatement(switch)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(-)
-          handleNoArguments(-)
-          handleSend(x, -)
-          beginBinaryExpression(-)
-          handleLiteralInt(1)
-          endBinaryExpression(-)
-          handleParenthesizedCondition(()
-          handleRecoverableError(Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}], ), ))
-          beginSwitchBlock({)
-          endSwitchBlock(0, {, })
-        endSwitchStatement(switch, })
-        handleRecoverableError(UnsupportedPrefixPlus, +, +)
-        handleIdentifier(, expression)
-        handleNoTypeArguments(+)
-        handleNoArguments(+)
-        handleSend(, +)
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(4, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(this)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
-      handleIdentifier(this, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleThisExpression(this, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(this, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(throw)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
-      handleIdentifier(throw, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(-)
-          handleNoArguments(-)
-          handleSend(x, -)
-          beginBinaryExpression(-)
-          handleLiteralInt(1)
-          endBinaryExpression(-)
-          handleParenthesizedExpression(()
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-          handleThrowExpression(throw, ;)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(true)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
-      handleIdentifier(true, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleLiteralBool(true)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend((, ))
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(try)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-      handleIdentifier(try, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(try)
-          handleNoArguments(try)
-          handleSend(, try)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
-        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)
-          beginBlock({, BlockKind(try statement))
-          endBlock(0, {, }, BlockKind(try statement))
-          handleRecoverableError(OnlyTry, try, try)
-        endTryStatement(0, try, null)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleParenthesizedExpression(()
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(4, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(var)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-      handleIdentifier(var, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(var)
-          handleNoArguments(var)
-          handleSend(, var)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
-        endReturnStatement(true, return, ;)
-        beginMetadataStar(var)
-        endMetadataStar(0)
-        handleNoType(var)
-        beginVariablesDeclaration((, null, var)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-          handleIdentifier(, localVariableDeclaration)
-          beginInitializedIdentifier()
-            handleNoVariableInitializer(x)
-          endInitializedIdentifier()
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-        endVariablesDeclaration(1, ;)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-        handleExpressionStatement(;)
-        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-        handleIdentifier(, expression)
-        handleNoTypeArguments())
-        handleNoArguments())
-        handleSend(, ))
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-        handleExpressionStatement(;)
-        handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-        handleRecoverableError(UnsupportedPrefixPlus, +, +)
-        handleIdentifier(, expression)
-        handleNoTypeArguments(+)
-        handleNoArguments(+)
-        handleSend(, +)
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(6, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(void)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-      handleIdentifier(void, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(void)
-          handleNoArguments(void)
-          handleSend(, void)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
-        endReturnStatement(true, return, ;)
-        beginMetadataStar(void)
-        endMetadataStar(0)
-        handleVoidKeyword(void)
-        beginVariablesDeclaration((, null, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-          handleIdentifier(, localVariableDeclaration)
-          beginInitializedIdentifier()
-            handleNoVariableInitializer(x)
-          endInitializedIdentifier()
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-        endVariablesDeclaration(1, ;)
-        handleIdentifier(x, expression)
-        handleNoTypeArguments(-)
-        handleNoArguments(-)
-        handleSend(x, -)
-        beginBinaryExpression(-)
-        handleLiteralInt(1)
-        endBinaryExpression(-)
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-        handleExpressionStatement(;)
-        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-        handleIdentifier(, expression)
-        handleNoTypeArguments())
-        handleNoArguments())
-        handleSend(, ))
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-        handleExpressionStatement(;)
-        handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-        handleRecoverableError(UnsupportedPrefixPlus, +, +)
-        handleIdentifier(, expression)
-        handleNoTypeArguments(+)
-        handleNoArguments(+)
-        handleSend(, +)
-        beginBinaryExpression(+)
-        handleLiteralInt(1)
-        endBinaryExpression(+)
-        handleExpressionStatement(;)
-      endBlockFunctionBody(6, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(while)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-      handleIdentifier(while, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-          handleIdentifier(, expression)
-          handleNoTypeArguments(while)
-          handleNoArguments(while)
-          handleSend(, while)
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
-        endReturnStatement(true, return, ;)
-        beginWhileStatement(while)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(-)
-          handleNoArguments(-)
-          handleSend(x, -)
-          beginBinaryExpression(-)
-          handleLiteralInt(1)
-          endBinaryExpression(-)
-          handleParenthesizedCondition(()
-          beginWhileStatementBody(+)
-            handleRecoverableError(UnsupportedPrefixPlus, +, +)
-            handleIdentifier(, expression)
-            handleNoTypeArguments(+)
-            handleNoArguments(+)
-            handleSend(, +)
-            beginBinaryExpression(+)
-            handleLiteralInt(1)
-            endBinaryExpression(+)
-            handleExpressionStatement(;)
-          endWhileStatementBody(})
-        endWhileStatement(while, })
-      endBlockFunctionBody(3, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration(int)
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(with)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-      handleIdentifier(with, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(int)
-        endMetadataStar(0)
-        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-        beginIfStatement(if)
-          handleIdentifier(x, expression)
-          handleNoTypeArguments(==)
-          handleNoArguments(==)
-          handleSend(x, ==)
-          beginBinaryExpression(==)
-          handleLiteralInt(0)
-          endBinaryExpression(==)
-          handleParenthesizedCondition(()
-          beginThenStatement(return)
-            beginReturnStatement(return)
-              handleLiteralInt(42)
-            endReturnStatement(true, return, ;)
-          endThenStatement(;)
-        endIfStatement(if, null)
-        beginReturnStatement(return)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-          handleIdentifier(with, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-          endArguments(1, (, ))
-          handleSend(with, +)
-          beginBinaryExpression(+)
-          handleLiteralInt(1)
-          endBinaryExpression(+)
-        endReturnStatement(true, return, ;)
-      endBlockFunctionBody(2, {, })
-    endTopLevelMethod(int, null, })
-  endTopLevelDeclaration()
-endCompilationUnit(33, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_methods.dart.intertwined.expect
deleted file mode 100644
index 3325638..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_methods.dart.intertwined.expect
+++ /dev/null
@@ -1,5294 +0,0 @@
-parseUnit(int)
-  skipErrorTokens(int)
-  listener: beginCompilationUnit(int)
-  syntheticPreviousToken(int)
-  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
-    parseMetadataStar()
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl()
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(assert)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(, null, , Instance of 'SimpleType', null, assert, true)
-        listener: beginTopLevelMethod(, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(assert)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
-          listener: handleIdentifier(assert, topLevelFunctionDeclaration)
-        parseMethodTypeVar(assert)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(assert, assert, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(assert, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseAssert(return, Assert.Expression)
-                          listener: beginAssert(assert, Assert.Expression)
-                          parseExpression(()
-                            parsePrecedenceExpression((, 1, true)
-                              parseUnaryExpression((, true)
-                                parsePrimary((, expression)
-                                  parseSendOrFunctionLiteral((, expression)
-                                    parseSend((, expression)
-                                      ensureIdentifier((, expression)
-                                        listener: handleIdentifier(x, expression)
-                                      listener: handleNoTypeArguments(-)
-                                      parseArgumentsOpt(x)
-                                        listener: handleNoArguments(-)
-                                      listener: handleSend(x, -)
-                              listener: beginBinaryExpression(-)
-                              parsePrecedenceExpression(-, 14, true)
-                                parseUnaryExpression(-, true)
-                                  parsePrimary(-, expression)
-                                    parseLiteralInt(-)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(-)
-                          reportRecoverableError(assert, AssertAsExpression)
-                            listener: handleRecoverableError(AssertAsExpression, assert, assert)
-                          listener: endAssert(assert, Assert.Expression, (, null, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(break)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, break, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(break)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-          listener: handleIdentifier(break, topLevelFunctionDeclaration)
-        parseMethodTypeVar(break)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(break, break, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(break, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(break)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, break)
-          parseStatement(;)
-            parseStatementX(;)
-              parseBreakStatement(;)
-                isBreakAllowed()
-                reportRecoverableError(break, BreakOutsideOfLoop)
-                  listener: handleRecoverableError(BreakOutsideOfLoop, break, break)
-                ensureSemicolon(break)
-                  reportRecoverableError(break, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
-                  rewriter()
-                listener: handleBreakStatement(false, break, ;)
-          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)
-                                                ensureIdentifier((, expression)
-                                                  listener: handleIdentifier(x, expression)
-                                                listener: handleNoTypeArguments(-)
-                                                parseArgumentsOpt(x)
-                                                  listener: handleNoArguments(-)
-                                                listener: handleSend(x, -)
-                                        listener: beginBinaryExpression(-)
-                                        parsePrecedenceExpression(-, 14, true)
-                                          parseUnaryExpression(-, true)
-                                            parsePrimary(-, expression)
-                                              parseLiteralInt(-)
-                                                listener: handleLiteralInt(1)
-                                        listener: endBinaryExpression(-)
-                                    ensureCloseParen(1, ()
-                                listener: handleParenthesizedExpression(()
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(4, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(case)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, case, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(case)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-          listener: handleIdentifier(case, topLevelFunctionDeclaration)
-        parseMethodTypeVar(case)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(case, case, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(case, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-                            listener: handleIdentifier(case, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(case)
-                            parseArguments(case)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(case, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(catch)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, catch, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(catch)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-          listener: handleIdentifier(catch, topLevelFunctionDeclaration)
-        parseMethodTypeVar(catch)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(catch, catch, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(catch, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-                            listener: handleIdentifier(catch, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(catch)
-                            parseArguments(catch)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(catch, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(class)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, class, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(class)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-          listener: handleIdentifier(class, topLevelFunctionDeclaration)
-        parseMethodTypeVar(class)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(class, class, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(class, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-                            listener: handleIdentifier(class, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(class)
-                            parseArguments(class)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(class, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(const)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, const, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(const)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
-          listener: handleIdentifier(const, topLevelFunctionDeclaration)
-        parseMethodTypeVar(const)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(const, const, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(const, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        parseConstExpression(return)
-                          listener: beginConstExpression(const)
-                          parseConstructorReference(const, null)
-                            ensureIdentifier(const, constructorReference)
-                              insertSyntheticIdentifier(const, constructorReference, message: Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], messageOnToken: null)
-                                reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
-                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                                rewriter()
-                              listener: handleIdentifier(, constructorReference)
-                            listener: beginConstructorReference()
-                            parseQualifiedRestOpt(, constructorReferenceContinuation)
-                            listener: handleNoTypeArguments(()
-                            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                            listener: endConstructorReference(, null, ()
-                          parseConstructorInvocationArguments()
-                            parseArgumentsRest(()
-                              listener: beginArguments(()
-                              parseExpression(()
-                                parsePrecedenceExpression((, 1, true)
-                                  parseUnaryExpression((, true)
-                                    parsePrimary((, expression)
-                                      parseSendOrFunctionLiteral((, expression)
-                                        parseSend((, expression)
-                                          ensureIdentifier((, expression)
-                                            listener: handleIdentifier(x, expression)
-                                          listener: handleNoTypeArguments(-)
-                                          parseArgumentsOpt(x)
-                                            listener: handleNoArguments(-)
-                                          listener: handleSend(x, -)
-                                  listener: beginBinaryExpression(-)
-                                  parsePrecedenceExpression(-, 14, true)
-                                    parseUnaryExpression(-, true)
-                                      parsePrimary(-, expression)
-                                        parseLiteralInt(-)
-                                          listener: handleLiteralInt(1)
-                                  listener: endBinaryExpression(-)
-                              listener: endArguments(1, (, ))
-                          listener: endConstExpression(const)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(continue)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, continue, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(continue)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-          listener: handleIdentifier(continue, topLevelFunctionDeclaration)
-        parseMethodTypeVar(continue)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(continue, continue, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(continue, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(continue)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, continue)
-          parseStatement(;)
-            parseStatementX(;)
-              parseContinueStatement(;)
-                isContinueAllowed()
-                reportRecoverableError(continue, ContinueOutsideOfLoop)
-                  listener: handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
-                ensureSemicolon(continue)
-                  reportRecoverableError(continue, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
-                  rewriter()
-                listener: handleContinueStatement(false, continue, ;)
-          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)
-                                                ensureIdentifier((, expression)
-                                                  listener: handleIdentifier(x, expression)
-                                                listener: handleNoTypeArguments(-)
-                                                parseArgumentsOpt(x)
-                                                  listener: handleNoArguments(-)
-                                                listener: handleSend(x, -)
-                                        listener: beginBinaryExpression(-)
-                                        parsePrecedenceExpression(-, 14, true)
-                                          parseUnaryExpression(-, true)
-                                            parsePrimary(-, expression)
-                                              parseLiteralInt(-)
-                                                listener: handleLiteralInt(1)
-                                        listener: endBinaryExpression(-)
-                                    ensureCloseParen(1, ()
-                                listener: handleParenthesizedExpression(()
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(4, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(default)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, default, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(default)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-          listener: handleIdentifier(default, topLevelFunctionDeclaration)
-        parseMethodTypeVar(default)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(default, default, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(default, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-                            listener: handleIdentifier(default, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(default)
-                            parseArguments(default)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(default, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(do)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, do, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(do)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-          listener: handleIdentifier(do, topLevelFunctionDeclaration)
-        parseMethodTypeVar(do)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(do, do, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(do, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(do)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, do)
-          parseStatement(;)
-            parseStatementX(;)
-              parseDoWhileStatement(;)
-                listener: beginDoWhileStatement(do)
-                listener: beginDoWhileStatementBody(()
-                parseStatement(do)
-                  parseStatementX(do)
-                    parseExpressionStatementOrDeclaration(do, false)
-                      parseExpressionStatementOrDeclarationAfterModifiers(do, do, null, null, null, false)
-                        looksLikeLocalFunction(()
-                        parseExpressionStatement(do)
-                          parseExpression(do)
-                            parsePrecedenceExpression(do, 1, true)
-                              parseUnaryExpression(do, true)
-                                parsePrimary(do, expression)
-                                  parseParenthesizedExpressionOrFunctionLiteral(do)
-                                    parseParenthesizedExpression(do)
-                                      parseExpressionInParenthesis(do)
-                                        parseExpressionInParenthesisRest(()
-                                          parseExpression(()
-                                            parsePrecedenceExpression((, 1, true)
-                                              parseUnaryExpression((, true)
-                                                parsePrimary((, expression)
-                                                  parseSendOrFunctionLiteral((, expression)
-                                                    parseSend((, expression)
-                                                      ensureIdentifier((, expression)
-                                                        listener: handleIdentifier(x, expression)
-                                                      listener: handleNoTypeArguments(-)
-                                                      parseArgumentsOpt(x)
-                                                        listener: handleNoArguments(-)
-                                                      listener: handleSend(x, -)
-                                              listener: beginBinaryExpression(-)
-                                              parsePrecedenceExpression(-, 14, true)
-                                                parseUnaryExpression(-, true)
-                                                  parsePrimary(-, expression)
-                                                    parseLiteralInt(-)
-                                                      listener: handleLiteralInt(1)
-                                              listener: endBinaryExpression(-)
-                                          ensureCloseParen(1, ()
-                                      listener: handleParenthesizedExpression(()
-                              listener: beginBinaryExpression(+)
-                              parsePrecedenceExpression(+, 14, true)
-                                parseUnaryExpression(+, true)
-                                  parsePrimary(+, expression)
-                                    parseLiteralInt(+)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(+)
-                          ensureSemicolon(1)
-                          listener: handleExpressionStatement(;)
-                listener: endDoWhileStatementBody(;)
-                reportRecoverableError(}, Message[ExpectedButGot, Expected 'while' before this., null, {string: while}])
-                  listener: handleRecoverableError(Message[ExpectedButGot, Expected 'while' before this., null, {string: while}], }, })
-                rewriter()
-                ensureParenthesizedCondition(while)
-                  reportRecoverableError(}, Message[ExpectedToken, Expected to find '('., null, {string: (}])
-                    listener: handleRecoverableError(Message[ExpectedToken, Expected to find '('., null, {string: (}], }, })
-                  rewriter()
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSend((, expression)
-                              ensureIdentifier((, expression)
-                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
-                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., null, {token: }}], }, })
-                                rewriter()
-                                listener: handleIdentifier(, expression)
-                              listener: handleNoTypeArguments())
-                              parseArgumentsOpt()
-                                listener: handleNoArguments())
-                              listener: handleSend(, ))
-                    ensureCloseParen(, ()
-                  listener: handleParenthesizedCondition(()
-                ensureSemicolon())
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
-                  rewriter()
-                listener: endDoWhileStatement(do, while, ;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(3, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(else)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, else, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(else)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-          listener: handleIdentifier(else, topLevelFunctionDeclaration)
-        parseMethodTypeVar(else)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(else, else, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(else, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(else)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, else)
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclaration(;, false)
-                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                  looksLikeLocalFunction(else)
-                  parseExpressionStatement(;)
-                    parseExpression(;)
-                      parsePrecedenceExpression(;, 1, true)
-                        parseUnaryExpression(;, true)
-                          parsePrimary(;, expression)
-                            inPlainSync()
-                            parseSend(;, expression)
-                              ensureIdentifier(;, expression)
-                                reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
-                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-                                rewriter()
-                                listener: handleIdentifier(, expression)
-                              listener: handleNoTypeArguments(else)
-                              parseArgumentsOpt()
-                                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)
-                      rewriter()
-                    listener: handleExpressionStatement(;)
-          reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
-            listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], else, else)
-          notEofOrValue(}, ()
-          parseStatement(else)
-            parseStatementX(else)
-              parseExpressionStatementOrDeclaration(else, false)
-                parseExpressionStatementOrDeclarationAfterModifiers(else, else, null, null, null, false)
-                  looksLikeLocalFunction(()
-                  parseExpressionStatement(else)
-                    parseExpression(else)
-                      parsePrecedenceExpression(else, 1, true)
-                        parseUnaryExpression(else, true)
-                          parsePrimary(else, expression)
-                            parseParenthesizedExpressionOrFunctionLiteral(else)
-                              parseParenthesizedExpression(else)
-                                parseExpressionInParenthesis(else)
-                                  parseExpressionInParenthesisRest(()
-                                    parseExpression(()
-                                      parsePrecedenceExpression((, 1, true)
-                                        parseUnaryExpression((, true)
-                                          parsePrimary((, expression)
-                                            parseSendOrFunctionLiteral((, expression)
-                                              parseSend((, expression)
-                                                ensureIdentifier((, expression)
-                                                  listener: handleIdentifier(x, expression)
-                                                listener: handleNoTypeArguments(-)
-                                                parseArgumentsOpt(x)
-                                                  listener: handleNoArguments(-)
-                                                listener: handleSend(x, -)
-                                        listener: beginBinaryExpression(-)
-                                        parsePrecedenceExpression(-, 14, true)
-                                          parseUnaryExpression(-, true)
-                                            parsePrimary(-, expression)
-                                              parseLiteralInt(-)
-                                                listener: handleLiteralInt(1)
-                                        listener: endBinaryExpression(-)
-                                    ensureCloseParen(1, ()
-                                listener: handleParenthesizedExpression(()
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(4, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(enum)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, enum, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(enum)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-          listener: handleIdentifier(enum, topLevelFunctionDeclaration)
-        parseMethodTypeVar(enum)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(enum, enum, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(enum, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-                            listener: handleIdentifier(enum, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(enum)
-                            parseArguments(enum)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(enum, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(extends)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, extends, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(extends)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-          listener: handleIdentifier(extends, topLevelFunctionDeclaration)
-        parseMethodTypeVar(extends)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(extends, extends, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(extends, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-                            listener: handleIdentifier(extends, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(extends)
-                            parseArguments(extends)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(extends, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(false)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, false, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(false)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
-          listener: handleIdentifier(false, topLevelFunctionDeclaration)
-        parseMethodTypeVar(false)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(false, false, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(false, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        parseLiteralBool(return)
-                          listener: handleLiteralBool(false)
-                    parseArgumentOrIndexStar(false, Instance of 'NoTypeParamOrArg', false)
-                      listener: handleNoTypeArguments(()
-                      parseArguments(false)
-                        parseArgumentsRest(()
-                          listener: beginArguments(()
-                          parseExpression(()
-                            parsePrecedenceExpression((, 1, true)
-                              parseUnaryExpression((, true)
-                                parsePrimary((, expression)
-                                  parseSendOrFunctionLiteral((, expression)
-                                    parseSend((, expression)
-                                      ensureIdentifier((, expression)
-                                        listener: handleIdentifier(x, expression)
-                                      listener: handleNoTypeArguments(-)
-                                      parseArgumentsOpt(x)
-                                        listener: handleNoArguments(-)
-                                      listener: handleSend(x, -)
-                              listener: beginBinaryExpression(-)
-                              parsePrecedenceExpression(-, 14, true)
-                                parseUnaryExpression(-, true)
-                                  parsePrimary(-, expression)
-                                    parseLiteralInt(-)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(-)
-                          listener: endArguments(1, (, ))
-                      listener: handleSend((, ))
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(final)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, final, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(final)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-          listener: handleIdentifier(final, topLevelFunctionDeclaration)
-        parseMethodTypeVar(final)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(final, final, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(final, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(final)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, final)
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclarationAfterModifiers(final, ;, null, final, null, false)
-                looksLikeLocalFunction(()
-                listener: beginMetadataStar(final)
-                listener: endMetadataStar(0)
-                listener: handleNoType(final)
-                listener: beginVariablesDeclaration((, null, final)
-                parseVariablesDeclarationRest(final, true)
-                  parseOptionallyInitializedIdentifier(final)
-                    ensureIdentifier(final, localVariableDeclaration)
-                      reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
-                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                      rewriter()
-                      listener: handleIdentifier(, localVariableDeclaration)
-                    listener: beginInitializedIdentifier()
-                    parseVariableInitializerOpt()
-                      listener: handleNoVariableInitializer(x)
-                    listener: endInitializedIdentifier()
-                  ensureSemicolon()
-                    reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-                    rewriter()
-                  listener: endVariablesDeclaration(1, ;)
-          notEofOrValue(}, x)
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                looksLikeLocalFunction(x)
-                parseExpressionStatement(;)
-                  parseExpression(;)
-                    parsePrecedenceExpression(;, 1, true)
-                      parseUnaryExpression(;, true)
-                        parsePrimary(;, expression)
-                          parseSendOrFunctionLiteral(;, expression)
-                            parseSend(;, expression)
-                              ensureIdentifier(;, expression)
-                                listener: handleIdentifier(x, expression)
-                              listener: handleNoTypeArguments(-)
-                              parseArgumentsOpt(x)
-                                listener: handleNoArguments(-)
-                              listener: handleSend(x, -)
-                      listener: beginBinaryExpression(-)
-                      parsePrecedenceExpression(-, 14, true)
-                        parseUnaryExpression(-, true)
-                          parsePrimary(-, expression)
-                            parseLiteralInt(-)
-                              listener: handleLiteralInt(1)
-                      listener: endBinaryExpression(-)
-                  ensureSemicolon(1)
-                    reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-                    rewriter()
-                  listener: handleExpressionStatement(;)
-          notEofOrValue(}, ))
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclaration(;, false)
-                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                  looksLikeLocalFunction())
-                  parseExpressionStatement(;)
-                    parseExpression(;)
-                      parsePrecedenceExpression(;, 1, true)
-                        parseUnaryExpression(;, true)
-                          parsePrimary(;, expression)
-                            parseSend(;, expression)
-                              ensureIdentifier(;, expression)
-                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
-                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-                                rewriter()
-                                listener: handleIdentifier(, expression)
-                              listener: handleNoTypeArguments())
-                              parseArgumentsOpt()
-                                listener: handleNoArguments())
-                              listener: handleSend(, ))
-                    ensureSemicolon()
-                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-                      rewriter()
-                    listener: handleExpressionStatement(;)
-          reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
-            listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-          notEofOrValue(}, +)
-          parseStatement())
-            parseStatementX())
-              parseExpressionStatementOrDeclaration(), false)
-                parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                  looksLikeLocalFunction(+)
-                  parseExpressionStatement())
-                    parseExpression())
-                      parsePrecedenceExpression(), 1, true)
-                        parseUnaryExpression(), true)
-                          rewriteAndRecover(), UnsupportedPrefixPlus, )
-                            reportRecoverableError(+, UnsupportedPrefixPlus)
-                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                            rewriter()
-                          parsePrimary(), expression)
-                            parseSendOrFunctionLiteral(), expression)
-                              parseSend(), expression)
-                                ensureIdentifier(), expression)
-                                  listener: handleIdentifier(, expression)
-                                listener: handleNoTypeArguments(+)
-                                parseArgumentsOpt()
-                                  listener: handleNoArguments(+)
-                                listener: handleSend(, +)
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(6, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(finally)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, finally, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(finally)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-          listener: handleIdentifier(finally, topLevelFunctionDeclaration)
-        parseMethodTypeVar(finally)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(finally, finally, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(finally, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-                            listener: handleIdentifier(finally, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(finally)
-                            parseArguments(finally)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(finally, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(for)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, for, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(for)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-          listener: handleIdentifier(for, topLevelFunctionDeclaration)
-        parseMethodTypeVar(for)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(for, for, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(for, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(for)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, for)
-          parseStatement(;)
-            parseStatementX(;)
-              parseForStatement(;, null)
-                listener: beginForStatement(for)
-                parseForLoopPartsStart(null, for)
-                  parseExpressionStatementOrDeclaration((, true)
-                    parseExpressionStatementOrDeclarationAfterModifiers((, (, null, null, null, true)
-                parseForLoopPartsMid((, null, for)
-                  parseExpression(()
-                    parsePrecedenceExpression((, 1, true)
-                      parseUnaryExpression((, true)
-                        parsePrimary((, expression)
-                          parseSendOrFunctionLiteral((, expression)
-                            parseSend((, expression)
-                              ensureIdentifier((, expression)
-                                listener: handleIdentifier(x, expression)
-                              listener: handleNoTypeArguments(-)
-                              parseArgumentsOpt(x)
-                                listener: handleNoArguments(-)
-                              listener: handleSend(x, -)
-                      listener: beginBinaryExpression(-)
-                      parsePrecedenceExpression(-, 14, true)
-                        parseUnaryExpression(-, true)
-                          parsePrimary(-, expression)
-                            parseLiteralInt(-)
-                              listener: handleLiteralInt(1)
-                      listener: endBinaryExpression(-)
-                  listener: handleForInitializerExpressionStatement(1, false)
-                parseForRest(null, 1, for)
-                  parseForLoopPartsRest(1, for, null)
-                    ensureSemicolon(1)
-                      reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-                      rewriter()
-                    parseExpressionStatement(;)
-                      parseExpression(;)
-                        parsePrecedenceExpression(;, 1, true)
-                          parseUnaryExpression(;, true)
-                            parsePrimary(;, expression)
-                              parseSend(;, expression)
-                                ensureIdentifier(;, expression)
-                                  reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
-                                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-                                  rewriter()
-                                  listener: handleIdentifier(, expression)
-                                listener: handleNoTypeArguments())
-                                parseArgumentsOpt()
-                                  listener: handleNoArguments())
-                                listener: handleSend(, ))
-                      ensureSemicolon()
-                        reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                          listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-                        rewriter()
-                      listener: handleExpressionStatement(;)
-                    listener: handleForLoopParts(for, (, ;, 0)
-                  listener: beginForStatementBody(+)
-                  parseStatement())
-                    parseStatementX())
-                      parseExpressionStatementOrDeclaration(), false)
-                        parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                          looksLikeLocalFunction(+)
-                          parseExpressionStatement())
-                            parseExpression())
-                              parsePrecedenceExpression(), 1, true)
-                                parseUnaryExpression(), true)
-                                  rewriteAndRecover(), UnsupportedPrefixPlus, )
-                                    reportRecoverableError(+, UnsupportedPrefixPlus)
-                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                                    rewriter()
-                                  parsePrimary(), expression)
-                                    parseSendOrFunctionLiteral(), expression)
-                                      parseSend(), expression)
-                                        ensureIdentifier(), expression)
-                                          listener: handleIdentifier(, expression)
-                                        listener: handleNoTypeArguments(+)
-                                        parseArgumentsOpt()
-                                          listener: handleNoArguments(+)
-                                        listener: handleSend(, +)
-                                listener: beginBinaryExpression(+)
-                                parsePrecedenceExpression(+, 14, true)
-                                  parseUnaryExpression(+, true)
-                                    parsePrimary(+, expression)
-                                      parseLiteralInt(+)
-                                        listener: handleLiteralInt(1)
-                                listener: endBinaryExpression(+)
-                            ensureSemicolon(1)
-                            listener: handleExpressionStatement(;)
-                  listener: endForStatementBody(})
-                  listener: endForStatement(})
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(3, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(if)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, if, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(if)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-          listener: handleIdentifier(if, topLevelFunctionDeclaration)
-        parseMethodTypeVar(if)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(if, if, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(if, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(if)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, if)
-          parseStatement(;)
-            parseStatementX(;)
-              parseIfStatement(;)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(-)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(-)
-                                listener: handleSend(x, -)
-                        listener: beginBinaryExpression(-)
-                        parsePrecedenceExpression(-, 14, true)
-                          parseUnaryExpression(-, true)
-                            parsePrimary(-, expression)
-                              parseLiteralInt(-)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(-)
-                    ensureCloseParen(1, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(+)
-                parseStatement())
-                  parseStatementX())
-                    parseExpressionStatementOrDeclaration(), false)
-                      parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                        looksLikeLocalFunction(+)
-                        parseExpressionStatement())
-                          parseExpression())
-                            parsePrecedenceExpression(), 1, true)
-                              parseUnaryExpression(), true)
-                                rewriteAndRecover(), UnsupportedPrefixPlus, )
-                                  reportRecoverableError(+, UnsupportedPrefixPlus)
-                                    listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                                  rewriter()
-                                parsePrimary(), expression)
-                                  parseSendOrFunctionLiteral(), expression)
-                                    parseSend(), expression)
-                                      ensureIdentifier(), expression)
-                                        listener: handleIdentifier(, expression)
-                                      listener: handleNoTypeArguments(+)
-                                      parseArgumentsOpt()
-                                        listener: handleNoArguments(+)
-                                      listener: handleSend(, +)
-                              listener: beginBinaryExpression(+)
-                              parsePrecedenceExpression(+, 14, true)
-                                parseUnaryExpression(+, true)
-                                  parsePrimary(+, expression)
-                                    parseLiteralInt(+)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(+)
-                          ensureSemicolon(1)
-                          listener: handleExpressionStatement(;)
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(3, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(in)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, in, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(in)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-          listener: handleIdentifier(in, topLevelFunctionDeclaration)
-        parseMethodTypeVar(in)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(in, in, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(in, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-                            listener: handleIdentifier(in, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(in)
-                            parseArguments(in)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(in, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(is)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, is, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(is)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-          listener: handleIdentifier(is, topLevelFunctionDeclaration)
-        parseMethodTypeVar(is)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(is, is, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(is, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(is)
-                          parseArgumentsOpt()
-                            listener: handleNoArguments(is)
-                          listener: handleSend(, is)
-                    parseIsOperatorRest()
-                      listener: beginIsOperatorType(is)
-                      computeTypeAfterIsOrAs(is)
-                      reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
-                        listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '('., null, {token: (}], (, ()
-                      rewriter()
-                      listener: handleIdentifier(, typeReference)
-                      listener: handleNoTypeArguments(()
-                      listener: handleType(, null)
-                      listener: endIsOperatorType(is)
-                      listener: handleIsOperator(is, null)
-                      skipChainedAsIsOperators()
-                ensureSemicolon()
-                  reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          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)
-                                                ensureIdentifier((, expression)
-                                                  listener: handleIdentifier(x, expression)
-                                                listener: handleNoTypeArguments(-)
-                                                parseArgumentsOpt(x)
-                                                  listener: handleNoArguments(-)
-                                                listener: handleSend(x, -)
-                                        listener: beginBinaryExpression(-)
-                                        parsePrecedenceExpression(-, 14, true)
-                                          parseUnaryExpression(-, true)
-                                            parsePrimary(-, expression)
-                                              parseLiteralInt(-)
-                                                listener: handleLiteralInt(1)
-                                        listener: endBinaryExpression(-)
-                                    ensureCloseParen(1, ()
-                                listener: handleParenthesizedExpression(()
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(3, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(new)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, new, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(new)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
-          listener: handleIdentifier(new, topLevelFunctionDeclaration)
-        parseMethodTypeVar(new)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(new, new, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(new, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        parseNewExpression(return)
-                          listener: beginNewExpression(new)
-                          parseConstructorReference(new, null)
-                            ensureIdentifier(new, constructorReference)
-                              insertSyntheticIdentifier(new, constructorReference, message: Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], messageOnToken: null)
-                                reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}])
-                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                                rewriter()
-                              listener: handleIdentifier(, constructorReference)
-                            listener: beginConstructorReference()
-                            parseQualifiedRestOpt(, constructorReferenceContinuation)
-                            listener: handleNoTypeArguments(()
-                            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-                            listener: endConstructorReference(, null, ()
-                          parseConstructorInvocationArguments()
-                            parseArgumentsRest(()
-                              listener: beginArguments(()
-                              parseExpression(()
-                                parsePrecedenceExpression((, 1, true)
-                                  parseUnaryExpression((, true)
-                                    parsePrimary((, expression)
-                                      parseSendOrFunctionLiteral((, expression)
-                                        parseSend((, expression)
-                                          ensureIdentifier((, expression)
-                                            listener: handleIdentifier(x, expression)
-                                          listener: handleNoTypeArguments(-)
-                                          parseArgumentsOpt(x)
-                                            listener: handleNoArguments(-)
-                                          listener: handleSend(x, -)
-                                  listener: beginBinaryExpression(-)
-                                  parsePrecedenceExpression(-, 14, true)
-                                    parseUnaryExpression(-, true)
-                                      parsePrimary(-, expression)
-                                        parseLiteralInt(-)
-                                          listener: handleLiteralInt(1)
-                                  listener: endBinaryExpression(-)
-                              listener: endArguments(1, (, ))
-                          listener: endNewExpression(new)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(null)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, null, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(null)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
-          listener: handleIdentifier(null, topLevelFunctionDeclaration)
-        parseMethodTypeVar(null)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(null, null, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(null, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        parseLiteralNull(return)
-                          listener: handleLiteralNull(null)
-                    parseArgumentOrIndexStar(null, Instance of 'NoTypeParamOrArg', false)
-                      listener: handleNoTypeArguments(()
-                      parseArguments(null)
-                        parseArgumentsRest(()
-                          listener: beginArguments(()
-                          parseExpression(()
-                            parsePrecedenceExpression((, 1, true)
-                              parseUnaryExpression((, true)
-                                parsePrimary((, expression)
-                                  parseSendOrFunctionLiteral((, expression)
-                                    parseSend((, expression)
-                                      ensureIdentifier((, expression)
-                                        listener: handleIdentifier(x, expression)
-                                      listener: handleNoTypeArguments(-)
-                                      parseArgumentsOpt(x)
-                                        listener: handleNoArguments(-)
-                                      listener: handleSend(x, -)
-                              listener: beginBinaryExpression(-)
-                              parsePrecedenceExpression(-, 14, true)
-                                parseUnaryExpression(-, true)
-                                  parsePrimary(-, expression)
-                                    parseLiteralInt(-)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(-)
-                          listener: endArguments(1, (, ))
-                      listener: handleSend((, ))
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(rethrow)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, rethrow, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(rethrow)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-          listener: handleIdentifier(rethrow, topLevelFunctionDeclaration)
-        parseMethodTypeVar(rethrow)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(rethrow, rethrow, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(rethrow, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-                            listener: handleIdentifier(rethrow, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(rethrow)
-                            parseArguments(rethrow)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(rethrow, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(return)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, return, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(return)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
-          listener: handleIdentifier(return, topLevelFunctionDeclaration)
-        parseMethodTypeVar(return)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(return, return, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(return, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
-                          listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token 'return'., null, {token: return}], return, return)
-                        parsePrimary(return, expression)
-                          parseParenthesizedExpressionOrFunctionLiteral(return)
-                            parseParenthesizedExpression(return)
-                              parseExpressionInParenthesis(return)
-                                parseExpressionInParenthesisRest(()
-                                  parseExpression(()
-                                    parsePrecedenceExpression((, 1, true)
-                                      parseUnaryExpression((, true)
-                                        parsePrimary((, expression)
-                                          parseSendOrFunctionLiteral((, expression)
-                                            parseSend((, expression)
-                                              ensureIdentifier((, expression)
-                                                listener: handleIdentifier(x, expression)
-                                              listener: handleNoTypeArguments(-)
-                                              parseArgumentsOpt(x)
-                                                listener: handleNoArguments(-)
-                                              listener: handleSend(x, -)
-                                      listener: beginBinaryExpression(-)
-                                      parsePrecedenceExpression(-, 14, true)
-                                        parseUnaryExpression(-, true)
-                                          parsePrimary(-, expression)
-                                            parseLiteralInt(-)
-                                              listener: handleLiteralInt(1)
-                                      listener: endBinaryExpression(-)
-                                  ensureCloseParen(1, ()
-                              listener: handleParenthesizedExpression(()
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(super)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, super, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(super)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
-          listener: handleIdentifier(super, topLevelFunctionDeclaration)
-        parseMethodTypeVar(super)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(super, super, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(super, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        parseSuperExpression(return, expression)
-                          listener: handleSuperExpression(super, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArguments(super)
-                            parseArgumentsRest(()
-                              listener: beginArguments(()
-                              parseExpression(()
-                                parsePrecedenceExpression((, 1, true)
-                                  parseUnaryExpression((, true)
-                                    parsePrimary((, expression)
-                                      parseSendOrFunctionLiteral((, expression)
-                                        parseSend((, expression)
-                                          ensureIdentifier((, expression)
-                                            listener: handleIdentifier(x, expression)
-                                          listener: handleNoTypeArguments(-)
-                                          parseArgumentsOpt(x)
-                                            listener: handleNoArguments(-)
-                                          listener: handleSend(x, -)
-                                  listener: beginBinaryExpression(-)
-                                  parsePrecedenceExpression(-, 14, true)
-                                    parseUnaryExpression(-, true)
-                                      parsePrimary(-, expression)
-                                        parseLiteralInt(-)
-                                          listener: handleLiteralInt(1)
-                                  listener: endBinaryExpression(-)
-                              listener: endArguments(1, (, ))
-                          listener: handleSend(super, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(switch)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, switch, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(switch)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-          listener: handleIdentifier(switch, topLevelFunctionDeclaration)
-        parseMethodTypeVar(switch)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(switch, switch, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(switch, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(switch)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, switch)
-          parseStatement(;)
-            parseStatementX(;)
-              parseSwitchStatement(;)
-                listener: beginSwitchStatement(switch)
-                ensureParenthesizedCondition(switch)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(-)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(-)
-                                listener: handleSend(x, -)
-                        listener: beginBinaryExpression(-)
-                        parsePrecedenceExpression(-, 14, true)
-                          parseUnaryExpression(-, true)
-                            parsePrimary(-, expression)
-                              parseLiteralInt(-)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(-)
-                    ensureCloseParen(1, ()
-                  listener: handleParenthesizedCondition(()
-                parseSwitchBlock())
-                  ensureBlock(), null, switch statement)
-                    reportRecoverableError(), Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}])
-                      listener: handleRecoverableError(Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}], ), ))
-                    insertBlock())
-                      rewriter()
-                      rewriter()
-                  listener: beginSwitchBlock({)
-                  notEofOrValue(}, })
-                  listener: endSwitchBlock(0, {, })
-                listener: endSwitchStatement(switch, })
-          notEofOrValue(}, +)
-          parseStatement(})
-            parseStatementX(})
-              parseExpressionStatementOrDeclaration(}, false)
-                parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
-                  looksLikeLocalFunction(+)
-                  parseExpressionStatement(})
-                    parseExpression(})
-                      parsePrecedenceExpression(}, 1, true)
-                        parseUnaryExpression(}, true)
-                          rewriteAndRecover(}, UnsupportedPrefixPlus, )
-                            reportRecoverableError(+, UnsupportedPrefixPlus)
-                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                            rewriter()
-                          parsePrimary(}, expression)
-                            parseSendOrFunctionLiteral(}, expression)
-                              parseSend(}, expression)
-                                ensureIdentifier(}, expression)
-                                  listener: handleIdentifier(, expression)
-                                listener: handleNoTypeArguments(+)
-                                parseArgumentsOpt()
-                                  listener: handleNoArguments(+)
-                                listener: handleSend(, +)
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(4, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, this, false)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(this)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
-          reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
-          listener: handleIdentifier(this, topLevelFunctionDeclaration)
-        parseMethodTypeVar(this)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(this, this, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(this, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        parseThisExpression(return, expression)
-                          listener: handleThisExpression(this, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArguments(this)
-                            parseArgumentsRest(()
-                              listener: beginArguments(()
-                              parseExpression(()
-                                parsePrecedenceExpression((, 1, true)
-                                  parseUnaryExpression((, true)
-                                    parsePrimary((, expression)
-                                      parseSendOrFunctionLiteral((, expression)
-                                        parseSend((, expression)
-                                          ensureIdentifier((, expression)
-                                            listener: handleIdentifier(x, expression)
-                                          listener: handleNoTypeArguments(-)
-                                          parseArgumentsOpt(x)
-                                            listener: handleNoArguments(-)
-                                          listener: handleSend(x, -)
-                                  listener: beginBinaryExpression(-)
-                                  parsePrecedenceExpression(-, 14, true)
-                                    parseUnaryExpression(-, true)
-                                      parsePrimary(-, expression)
-                                        parseLiteralInt(-)
-                                          listener: handleLiteralInt(1)
-                                  listener: endBinaryExpression(-)
-                              listener: endArguments(1, (, ))
-                          listener: handleSend(this, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(throw)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, throw, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(throw)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
-          listener: handleIdentifier(throw, topLevelFunctionDeclaration)
-        parseMethodTypeVar(throw)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(throw, throw, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(throw, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parseThrowExpression(return, true)
-                    parseExpression(throw)
-                      parsePrecedenceExpression(throw, 1, true)
-                        parseUnaryExpression(throw, true)
-                          parsePrimary(throw, expression)
-                            parseParenthesizedExpressionOrFunctionLiteral(throw)
-                              parseParenthesizedExpression(throw)
-                                parseExpressionInParenthesis(throw)
-                                  parseExpressionInParenthesisRest(()
-                                    parseExpression(()
-                                      parsePrecedenceExpression((, 1, true)
-                                        parseUnaryExpression((, true)
-                                          parsePrimary((, expression)
-                                            parseSendOrFunctionLiteral((, expression)
-                                              parseSend((, expression)
-                                                ensureIdentifier((, expression)
-                                                  listener: handleIdentifier(x, expression)
-                                                listener: handleNoTypeArguments(-)
-                                                parseArgumentsOpt(x)
-                                                  listener: handleNoArguments(-)
-                                                listener: handleSend(x, -)
-                                        listener: beginBinaryExpression(-)
-                                        parsePrecedenceExpression(-, 14, true)
-                                          parseUnaryExpression(-, true)
-                                            parsePrimary(-, expression)
-                                              parseLiteralInt(-)
-                                                listener: handleLiteralInt(1)
-                                        listener: endBinaryExpression(-)
-                                    ensureCloseParen(1, ()
-                                listener: handleParenthesizedExpression(()
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    listener: handleThrowExpression(throw, ;)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(true)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, true, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(true)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
-          listener: handleIdentifier(true, topLevelFunctionDeclaration)
-        parseMethodTypeVar(true)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(true, true, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(true, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          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)
-                    parseArgumentOrIndexStar(true, Instance of 'NoTypeParamOrArg', false)
-                      listener: handleNoTypeArguments(()
-                      parseArguments(true)
-                        parseArgumentsRest(()
-                          listener: beginArguments(()
-                          parseExpression(()
-                            parsePrecedenceExpression((, 1, true)
-                              parseUnaryExpression((, true)
-                                parsePrimary((, expression)
-                                  parseSendOrFunctionLiteral((, expression)
-                                    parseSend((, expression)
-                                      ensureIdentifier((, expression)
-                                        listener: handleIdentifier(x, expression)
-                                      listener: handleNoTypeArguments(-)
-                                      parseArgumentsOpt(x)
-                                        listener: handleNoArguments(-)
-                                      listener: handleSend(x, -)
-                              listener: beginBinaryExpression(-)
-                              parsePrecedenceExpression(-, 14, true)
-                                parseUnaryExpression(-, true)
-                                  parsePrimary(-, expression)
-                                    parseLiteralInt(-)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(-)
-                          listener: endArguments(1, (, ))
-                      listener: handleSend((, ))
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(try)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, try, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(try)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-          listener: handleIdentifier(try, topLevelFunctionDeclaration)
-        parseMethodTypeVar(try)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(try, try, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(try, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(try)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, try)
-          parseStatement(;)
-            parseStatementX(;)
-              parseTryStatement(;)
-                listener: beginTryStatement(try)
-                parseBlock(try, BlockKind(try statement))
-                  ensureBlock(try, null, try statement)
-                    reportRecoverableError(try, Message[ExpectedClassOrMixinBody, A try statement must have a body, even if it is empty., Try adding an empty body., {string: try statement}])
-                      listener: 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)
-                    insertBlock(try)
-                      rewriter()
-                      rewriter()
-                  listener: beginBlock({, BlockKind(try statement))
-                  notEofOrValue(}, })
-                  listener: endBlock(0, {, }, BlockKind(try statement))
-                reportRecoverableError(try, OnlyTry)
-                  listener: handleRecoverableError(OnlyTry, try, try)
-                listener: endTryStatement(0, try, null)
-          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)
-                                                ensureIdentifier((, expression)
-                                                  listener: handleIdentifier(x, expression)
-                                                listener: handleNoTypeArguments(-)
-                                                parseArgumentsOpt(x)
-                                                  listener: handleNoArguments(-)
-                                                listener: handleSend(x, -)
-                                        listener: beginBinaryExpression(-)
-                                        parsePrecedenceExpression(-, 14, true)
-                                          parseUnaryExpression(-, true)
-                                            parsePrimary(-, expression)
-                                              parseLiteralInt(-)
-                                                listener: handleLiteralInt(1)
-                                        listener: endBinaryExpression(-)
-                                    ensureCloseParen(1, ()
-                                listener: handleParenthesizedExpression(()
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(4, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(var)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, var, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(var)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-          listener: handleIdentifier(var, topLevelFunctionDeclaration)
-        parseMethodTypeVar(var)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(var, var, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(var, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(var)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, var)
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, false)
-                looksLikeLocalFunction(()
-                listener: beginMetadataStar(var)
-                listener: endMetadataStar(0)
-                listener: handleNoType(var)
-                listener: beginVariablesDeclaration((, null, var)
-                parseVariablesDeclarationRest(var, true)
-                  parseOptionallyInitializedIdentifier(var)
-                    ensureIdentifier(var, localVariableDeclaration)
-                      reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
-                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                      rewriter()
-                      listener: handleIdentifier(, localVariableDeclaration)
-                    listener: beginInitializedIdentifier()
-                    parseVariableInitializerOpt()
-                      listener: handleNoVariableInitializer(x)
-                    listener: endInitializedIdentifier()
-                  ensureSemicolon()
-                    reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-                    rewriter()
-                  listener: endVariablesDeclaration(1, ;)
-          notEofOrValue(}, x)
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                looksLikeLocalFunction(x)
-                parseExpressionStatement(;)
-                  parseExpression(;)
-                    parsePrecedenceExpression(;, 1, true)
-                      parseUnaryExpression(;, true)
-                        parsePrimary(;, expression)
-                          parseSendOrFunctionLiteral(;, expression)
-                            parseSend(;, expression)
-                              ensureIdentifier(;, expression)
-                                listener: handleIdentifier(x, expression)
-                              listener: handleNoTypeArguments(-)
-                              parseArgumentsOpt(x)
-                                listener: handleNoArguments(-)
-                              listener: handleSend(x, -)
-                      listener: beginBinaryExpression(-)
-                      parsePrecedenceExpression(-, 14, true)
-                        parseUnaryExpression(-, true)
-                          parsePrimary(-, expression)
-                            parseLiteralInt(-)
-                              listener: handleLiteralInt(1)
-                      listener: endBinaryExpression(-)
-                  ensureSemicolon(1)
-                    reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-                    rewriter()
-                  listener: handleExpressionStatement(;)
-          notEofOrValue(}, ))
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclaration(;, false)
-                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                  looksLikeLocalFunction())
-                  parseExpressionStatement(;)
-                    parseExpression(;)
-                      parsePrecedenceExpression(;, 1, true)
-                        parseUnaryExpression(;, true)
-                          parsePrimary(;, expression)
-                            parseSend(;, expression)
-                              ensureIdentifier(;, expression)
-                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
-                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-                                rewriter()
-                                listener: handleIdentifier(, expression)
-                              listener: handleNoTypeArguments())
-                              parseArgumentsOpt()
-                                listener: handleNoArguments())
-                              listener: handleSend(, ))
-                    ensureSemicolon()
-                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-                      rewriter()
-                    listener: handleExpressionStatement(;)
-          reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
-            listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-          notEofOrValue(}, +)
-          parseStatement())
-            parseStatementX())
-              parseExpressionStatementOrDeclaration(), false)
-                parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                  looksLikeLocalFunction(+)
-                  parseExpressionStatement())
-                    parseExpression())
-                      parsePrecedenceExpression(), 1, true)
-                        parseUnaryExpression(), true)
-                          rewriteAndRecover(), UnsupportedPrefixPlus, )
-                            reportRecoverableError(+, UnsupportedPrefixPlus)
-                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                            rewriter()
-                          parsePrimary(), expression)
-                            parseSendOrFunctionLiteral(), expression)
-                              parseSend(), expression)
-                                ensureIdentifier(), expression)
-                                  listener: handleIdentifier(, expression)
-                                listener: handleNoTypeArguments(+)
-                                parseArgumentsOpt()
-                                  listener: handleNoArguments(+)
-                                listener: handleSend(, +)
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(6, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(void)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, void, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(void)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-          listener: handleIdentifier(void, topLevelFunctionDeclaration)
-        parseMethodTypeVar(void)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(void, void, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(void, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        parseSendOrFunctionLiteral(return, expression)
-                          parseSend(return, expression)
-                            ensureIdentifier(return, expression)
-                              reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
-                                listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-                              rewriter()
-                              listener: handleIdentifier(, expression)
-                            listener: handleNoTypeArguments(void)
-                            parseArgumentsOpt()
-                              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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, void)
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclaration(;, false)
-                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                  looksLikeLocalFunction(()
-                  listener: beginMetadataStar(void)
-                  listener: endMetadataStar(0)
-                  listener: handleVoidKeyword(void)
-                  listener: beginVariablesDeclaration((, null, null)
-                  parseVariablesDeclarationRest(void, true)
-                    parseOptionallyInitializedIdentifier(void)
-                      ensureIdentifier(void, localVariableDeclaration)
-                        reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
-                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-                        rewriter()
-                        listener: handleIdentifier(, localVariableDeclaration)
-                      listener: beginInitializedIdentifier()
-                      parseVariableInitializerOpt()
-                        listener: handleNoVariableInitializer(x)
-                      listener: endInitializedIdentifier()
-                    ensureSemicolon()
-                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-                      rewriter()
-                    listener: endVariablesDeclaration(1, ;)
-          notEofOrValue(}, x)
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                looksLikeLocalFunction(x)
-                parseExpressionStatement(;)
-                  parseExpression(;)
-                    parsePrecedenceExpression(;, 1, true)
-                      parseUnaryExpression(;, true)
-                        parsePrimary(;, expression)
-                          parseSendOrFunctionLiteral(;, expression)
-                            parseSend(;, expression)
-                              ensureIdentifier(;, expression)
-                                listener: handleIdentifier(x, expression)
-                              listener: handleNoTypeArguments(-)
-                              parseArgumentsOpt(x)
-                                listener: handleNoArguments(-)
-                              listener: handleSend(x, -)
-                      listener: beginBinaryExpression(-)
-                      parsePrecedenceExpression(-, 14, true)
-                        parseUnaryExpression(-, true)
-                          parsePrimary(-, expression)
-                            parseLiteralInt(-)
-                              listener: handleLiteralInt(1)
-                      listener: endBinaryExpression(-)
-                  ensureSemicolon(1)
-                    reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-                    rewriter()
-                  listener: handleExpressionStatement(;)
-          notEofOrValue(}, ))
-          parseStatement(;)
-            parseStatementX(;)
-              parseExpressionStatementOrDeclaration(;, false)
-                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
-                  looksLikeLocalFunction())
-                  parseExpressionStatement(;)
-                    parseExpression(;)
-                      parsePrecedenceExpression(;, 1, true)
-                        parseUnaryExpression(;, true)
-                          parsePrimary(;, expression)
-                            parseSend(;, expression)
-                              ensureIdentifier(;, expression)
-                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
-                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-                                rewriter()
-                                listener: handleIdentifier(, expression)
-                              listener: handleNoTypeArguments())
-                              parseArgumentsOpt()
-                                listener: handleNoArguments())
-                              listener: handleSend(, ))
-                    ensureSemicolon()
-                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-                      rewriter()
-                    listener: handleExpressionStatement(;)
-          reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}])
-            listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-          notEofOrValue(}, +)
-          parseStatement())
-            parseStatementX())
-              parseExpressionStatementOrDeclaration(), false)
-                parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                  looksLikeLocalFunction(+)
-                  parseExpressionStatement())
-                    parseExpression())
-                      parsePrecedenceExpression(), 1, true)
-                        parseUnaryExpression(), true)
-                          rewriteAndRecover(), UnsupportedPrefixPlus, )
-                            reportRecoverableError(+, UnsupportedPrefixPlus)
-                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                            rewriter()
-                          parsePrimary(), expression)
-                            parseSendOrFunctionLiteral(), expression)
-                              parseSend(), expression)
-                                ensureIdentifier(), expression)
-                                  listener: handleIdentifier(, expression)
-                                listener: handleNoTypeArguments(+)
-                                parseArgumentsOpt()
-                                  listener: handleNoArguments(+)
-                                listener: handleSend(, +)
-                        listener: beginBinaryExpression(+)
-                        parsePrecedenceExpression(+, 14, true)
-                          parseUnaryExpression(+, true)
-                            parsePrimary(+, expression)
-                              parseLiteralInt(+)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(+)
-                    ensureSemicolon(1)
-                    listener: handleExpressionStatement(;)
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(6, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(while)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, while, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(while)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-          listener: handleIdentifier(while, topLevelFunctionDeclaration)
-        parseMethodTypeVar(while)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(while, while, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(while, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-                            rewriter()
-                            listener: handleIdentifier(, expression)
-                          listener: handleNoTypeArguments(while)
-                          parseArgumentsOpt()
-                            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)
-                  rewriter()
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, while)
-          parseStatement(;)
-            parseStatementX(;)
-              parseWhileStatement(;)
-                listener: beginWhileStatement(while)
-                ensureParenthesizedCondition(while)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(-)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(-)
-                                listener: handleSend(x, -)
-                        listener: beginBinaryExpression(-)
-                        parsePrecedenceExpression(-, 14, true)
-                          parseUnaryExpression(-, true)
-                            parsePrimary(-, expression)
-                              parseLiteralInt(-)
-                                listener: handleLiteralInt(1)
-                        listener: endBinaryExpression(-)
-                    ensureCloseParen(1, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginWhileStatementBody(+)
-                parseStatement())
-                  parseStatementX())
-                    parseExpressionStatementOrDeclaration(), false)
-                      parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, false)
-                        looksLikeLocalFunction(+)
-                        parseExpressionStatement())
-                          parseExpression())
-                            parsePrecedenceExpression(), 1, true)
-                              parseUnaryExpression(), true)
-                                rewriteAndRecover(), UnsupportedPrefixPlus, )
-                                  reportRecoverableError(+, UnsupportedPrefixPlus)
-                                    listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
-                                  rewriter()
-                                parsePrimary(), expression)
-                                  parseSendOrFunctionLiteral(), expression)
-                                    parseSend(), expression)
-                                      ensureIdentifier(), expression)
-                                        listener: handleIdentifier(, expression)
-                                      listener: handleNoTypeArguments(+)
-                                      parseArgumentsOpt()
-                                        listener: handleNoArguments(+)
-                                      listener: handleSend(, +)
-                              listener: beginBinaryExpression(+)
-                              parsePrecedenceExpression(+, 14, true)
-                                parseUnaryExpression(+, true)
-                                  parsePrimary(+, expression)
-                                    parseLiteralInt(+)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(+)
-                          ensureSemicolon(1)
-                          listener: handleExpressionStatement(;)
-                listener: endWhileStatementBody(})
-                listener: endWhileStatement(while, })
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(3, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration(int)
-  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
-    parseMetadataStar(})
-      listener: beginMetadataStar(int)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl(})
-      listener: beginTopLevelMember(int)
-      isReservedKeyword(with)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, with, true)
-        listener: beginTopLevelMethod(}, null)
-        listener: handleIdentifier(int, typeReference)
-        listener: handleNoTypeArguments(with)
-        listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
-          reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
-            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-          listener: handleIdentifier(with, topLevelFunctionDeclaration)
-        parseMethodTypeVar(with)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(with, with, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(with, 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(x)
-                listener: handleType(int, null)
-                ensureIdentifier(int, formalParameterDeclaration)
-                  listener: handleIdentifier(x, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrValue(}, if)
-          parseStatement({)
-            parseStatementX({)
-              parseIfStatement({)
-                listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if)
-                  parseExpressionInParenthesisRest(()
-                    parseExpression(()
-                      parsePrecedenceExpression((, 1, true)
-                        parseUnaryExpression((, true)
-                          parsePrimary((, expression)
-                            parseSendOrFunctionLiteral((, expression)
-                              parseSend((, expression)
-                                ensureIdentifier((, expression)
-                                  listener: handleIdentifier(x, expression)
-                                listener: handleNoTypeArguments(==)
-                                parseArgumentsOpt(x)
-                                  listener: handleNoArguments(==)
-                                listener: handleSend(x, ==)
-                        listener: beginBinaryExpression(==)
-                        parsePrecedenceExpression(==, 8, true)
-                          parseUnaryExpression(==, true)
-                            parsePrimary(==, expression)
-                              parseLiteralInt(==)
-                                listener: handleLiteralInt(0)
-                        listener: endBinaryExpression(==)
-                    ensureCloseParen(0, ()
-                  listener: handleParenthesizedCondition(()
-                listener: beginThenStatement(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()
-                listener: endThenStatement(;)
-                listener: endIfStatement(if, null)
-          notEofOrValue(}, return)
-          parseStatement(;)
-            parseStatementX(;)
-              parseReturnStatement(;)
-                listener: beginReturnStatement(return)
-                parseExpression(return)
-                  parsePrecedenceExpression(return, 1, true)
-                    parseUnaryExpression(return, true)
-                      parsePrimary(return, expression)
-                        inPlainSync()
-                        parseSend(return, expression)
-                          ensureIdentifier(return, expression)
-                            reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
-                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-                            listener: handleIdentifier(with, expression)
-                          listener: handleNoTypeArguments(()
-                          parseArgumentsOpt(with)
-                            parseArguments(with)
-                              parseArgumentsRest(()
-                                listener: beginArguments(()
-                                parseExpression(()
-                                  parsePrecedenceExpression((, 1, true)
-                                    parseUnaryExpression((, true)
-                                      parsePrimary((, expression)
-                                        parseSendOrFunctionLiteral((, expression)
-                                          parseSend((, expression)
-                                            ensureIdentifier((, expression)
-                                              listener: handleIdentifier(x, expression)
-                                            listener: handleNoTypeArguments(-)
-                                            parseArgumentsOpt(x)
-                                              listener: handleNoArguments(-)
-                                            listener: handleSend(x, -)
-                                    listener: beginBinaryExpression(-)
-                                    parsePrecedenceExpression(-, 14, true)
-                                      parseUnaryExpression(-, true)
-                                        parsePrimary(-, expression)
-                                          parseLiteralInt(-)
-                                            listener: handleLiteralInt(1)
-                                    listener: endBinaryExpression(-)
-                                listener: endArguments(1, (, ))
-                          listener: handleSend(with, +)
-                    listener: beginBinaryExpression(+)
-                    parsePrecedenceExpression(+, 14, true)
-                      parseUnaryExpression(+, true)
-                        parsePrimary(+, expression)
-                          parseLiteralInt(+)
-                            listener: handleLiteralInt(1)
-                    listener: endBinaryExpression(+)
-                ensureSemicolon(1)
-                listener: endReturnStatement(true, return, ;)
-                inGenerator()
-          notEofOrValue(}, })
-          listener: endBlockFunctionBody(2, {, })
-        listener: endTopLevelMethod(int, null, })
-  listener: endTopLevelDeclaration()
-  reportAllErrorTokens(int)
-  listener: endCompilationUnit(33, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_methods.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_methods.dart.parser.expect
deleted file mode 100644
index 7e86c51..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_methods.dart.parser.expect
+++ /dev/null
@@ -1,333 +0,0 @@
-NOTICE: Stream was rewritten by parser!
-
-int assert(int x) {
-if (x == 0) return 42;
-return assert(x-1) + 1;
-}
-
-int break(int x) {
-if (x == 0) return 42;
-return ;break;(x-1) + 1;
-}
-
-int case(int x) {
-if (x == 0) return 42;
-return case(x-1) + 1;
-}
-
-int catch(int x) {
-if (x == 0) return 42;
-return catch(x-1) + 1;
-}
-
-int class(int x) {
-if (x == 0) return 42;
-return class(x-1) + 1;
-}
-
-int const(int x) {
-if (x == 0) return 42;
-return const(x-1) + 1;
-}
-
-int continue(int x) {
-if (x == 0) return 42;
-return ;continue;(x-1) + 1;
-}
-
-int default(int x) {
-if (x == 0) return 42;
-return default(x-1) + 1;
-}
-
-int do(int x) {
-if (x == 0) return 42;
-return ;do(x-1) + 1;
-while();}
-
-int else(int x) {
-if (x == 0) return 42;
-return ;;else(x-1) + 1;
-}
-
-int enum(int x) {
-if (x == 0) return 42;
-return enum(x-1) + 1;
-}
-
-int extends(int x) {
-if (x == 0) return 42;
-return extends(x-1) + 1;
-}
-
-int false(int x) {
-if (x == 0) return 42;
-return false(x-1) + 1;
-}
-
-int final(int x) {
-if (x == 0) return 42;
-return ;final(;x-1;;) + 1;
-}
-
-int finally(int x) {
-if (x == 0) return 42;
-return finally(x-1) + 1;
-}
-
-int for(int x) {
-if (x == 0) return 42;
-return ;for(x-1;;) + 1;
-}
-
-int if(int x) {
-if (x == 0) return 42;
-return ;if(x-1) + 1;
-}
-
-int in(int x) {
-if (x == 0) return 42;
-return in(x-1) + 1;
-}
-
-int is(int x) {
-if (x == 0) return 42;
-return is;(x-1) + 1;
-}
-
-int new(int x) {
-if (x == 0) return 42;
-return new(x-1) + 1;
-}
-
-int null(int x) {
-if (x == 0) return 42;
-return null(x-1) + 1;
-}
-
-int rethrow(int x) {
-if (x == 0) return 42;
-return rethrow(x-1) + 1;
-}
-
-int return(int x) {
-if (x == 0) return 42;
-return return(x-1) + 1;
-}
-
-int super(int x) {
-if (x == 0) return 42;
-return super(x-1) + 1;
-}
-
-int switch(int x) {
-if (x == 0) return 42;
-return ;switch(x-1) {}+ 1;
-}
-
-int this(int x) {
-if (x == 0) return 42;
-return this(x-1) + 1;
-}
-
-int throw(int x) {
-if (x == 0) return 42;
-return throw(x-1) + 1;
-}
-
-int true(int x) {
-if (x == 0) return 42;
-return true(x-1) + 1;
-}
-
-int try(int x) {
-if (x == 0) return 42;
-return ;try{}(x-1) + 1;
-}
-
-int var(int x) {
-if (x == 0) return 42;
-return ;var(;x-1;;) + 1;
-}
-
-int void(int x) {
-if (x == 0) return 42;
-return ;void(;x-1;;) + 1;
-}
-
-int while(int x) {
-if (x == 0) return 42;
-return ;while(x-1) + 1;
-}
-
-int with(int x) {
-if (x == 0) return 42;
-return with(x-1) + 1;
-}
-
-
-int[StringToken] assert[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] assert[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] break[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]break[KeywordToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] case[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] case[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] catch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] catch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] class[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] class[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] const[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] const[KeywordToken][SyntheticStringToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] continue[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]continue[KeywordToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] default[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] default[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] do[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]do[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-while[SyntheticKeywordToken]([SyntheticBeginToken][SyntheticStringToken])[SyntheticToken];[SyntheticToken]}[SimpleToken]
-
-int[StringToken] else[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken]else[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] enum[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] enum[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] extends[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] extends[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] false[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] false[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] final[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]final[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] finally[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] finally[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] for[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]for[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] if[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]if[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] in[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] in[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] is[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken]is[KeywordToken][SyntheticStringToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] new[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] new[KeywordToken][SyntheticStringToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] null[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] null[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] rethrow[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] rethrow[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] return[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] return[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] super[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] super[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] switch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]switch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] {[SyntheticBeginToken]}[SyntheticToken][SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] throw[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] throw[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] true[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] true[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] try[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]try[KeywordToken]{[SyntheticBeginToken]}[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] var[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]var[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] void[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]void[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] while[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] [SyntheticStringToken];[SyntheticToken]while[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] with[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] with[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_methods.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_methods.dart.scanner.expect
deleted file mode 100644
index 896ca86..0000000
--- a/pkg/front_end/parser_testcases/error_recovery/reserved_words_top_level_methods.dart.scanner.expect
+++ /dev/null
@@ -1,331 +0,0 @@
-int assert(int x) {
-if (x == 0) return 42;
-return assert(x-1) + 1;
-}
-
-int break(int x) {
-if (x == 0) return 42;
-return break(x-1) + 1;
-}
-
-int case(int x) {
-if (x == 0) return 42;
-return case(x-1) + 1;
-}
-
-int catch(int x) {
-if (x == 0) return 42;
-return catch(x-1) + 1;
-}
-
-int class(int x) {
-if (x == 0) return 42;
-return class(x-1) + 1;
-}
-
-int const(int x) {
-if (x == 0) return 42;
-return const(x-1) + 1;
-}
-
-int continue(int x) {
-if (x == 0) return 42;
-return continue(x-1) + 1;
-}
-
-int default(int x) {
-if (x == 0) return 42;
-return default(x-1) + 1;
-}
-
-int do(int x) {
-if (x == 0) return 42;
-return do(x-1) + 1;
-}
-
-int else(int x) {
-if (x == 0) return 42;
-return else(x-1) + 1;
-}
-
-int enum(int x) {
-if (x == 0) return 42;
-return enum(x-1) + 1;
-}
-
-int extends(int x) {
-if (x == 0) return 42;
-return extends(x-1) + 1;
-}
-
-int false(int x) {
-if (x == 0) return 42;
-return false(x-1) + 1;
-}
-
-int final(int x) {
-if (x == 0) return 42;
-return final(x-1) + 1;
-}
-
-int finally(int x) {
-if (x == 0) return 42;
-return finally(x-1) + 1;
-}
-
-int for(int x) {
-if (x == 0) return 42;
-return for(x-1) + 1;
-}
-
-int if(int x) {
-if (x == 0) return 42;
-return if(x-1) + 1;
-}
-
-int in(int x) {
-if (x == 0) return 42;
-return in(x-1) + 1;
-}
-
-int is(int x) {
-if (x == 0) return 42;
-return is(x-1) + 1;
-}
-
-int new(int x) {
-if (x == 0) return 42;
-return new(x-1) + 1;
-}
-
-int null(int x) {
-if (x == 0) return 42;
-return null(x-1) + 1;
-}
-
-int rethrow(int x) {
-if (x == 0) return 42;
-return rethrow(x-1) + 1;
-}
-
-int return(int x) {
-if (x == 0) return 42;
-return return(x-1) + 1;
-}
-
-int super(int x) {
-if (x == 0) return 42;
-return super(x-1) + 1;
-}
-
-int switch(int x) {
-if (x == 0) return 42;
-return switch(x-1) + 1;
-}
-
-int this(int x) {
-if (x == 0) return 42;
-return this(x-1) + 1;
-}
-
-int throw(int x) {
-if (x == 0) return 42;
-return throw(x-1) + 1;
-}
-
-int true(int x) {
-if (x == 0) return 42;
-return true(x-1) + 1;
-}
-
-int try(int x) {
-if (x == 0) return 42;
-return try(x-1) + 1;
-}
-
-int var(int x) {
-if (x == 0) return 42;
-return var(x-1) + 1;
-}
-
-int void(int x) {
-if (x == 0) return 42;
-return void(x-1) + 1;
-}
-
-int while(int x) {
-if (x == 0) return 42;
-return while(x-1) + 1;
-}
-
-int with(int x) {
-if (x == 0) return 42;
-return with(x-1) + 1;
-}
-
-
-int[StringToken] assert[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] assert[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] break[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] break[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] case[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] case[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] catch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] catch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] class[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] class[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] const[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] const[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] continue[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] continue[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] default[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] default[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] do[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] do[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] else[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] else[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] enum[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] enum[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] extends[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] extends[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] false[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] false[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] final[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] final[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] finally[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] finally[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] for[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] for[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] if[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] if[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] in[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] in[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] is[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] is[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] new[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] new[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] null[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] null[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] rethrow[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] rethrow[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] return[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] return[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] super[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] super[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] switch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] switch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] throw[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] throw[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] true[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] true[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] try[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] try[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] var[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] var[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] void[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] void[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] while[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] while[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-
-int[StringToken] with[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
-if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
-return[KeywordToken] with[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
-}[SimpleToken]
-[SimpleToken]
diff --git a/pkg/front_end/test/extensions/extensions_test.dart b/pkg/front_end/test/extensions/extensions_test.dart
index fdb1fc7..9cf6d7e 100644
--- a/pkg/front_end/test/extensions/extensions_test.dart
+++ b/pkg/front_end/test/extensions/extensions_test.dart
@@ -5,6 +5,7 @@
 import 'dart:io' show Directory, Platform;
 import 'package:_fe_analyzer_shared/src/testing/id.dart';
 import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
+import 'package:front_end/src/api_prototype/experimental_flags.dart';
 
 import 'package:front_end/src/fasta/builder/class_builder.dart';
 import 'package:front_end/src/fasta/builder/extension_builder.dart';
@@ -28,7 +29,8 @@
       onFailure: onFailure,
       runTest: runTestFor(const ExtensionsDataComputer(), [
         new TestConfig(cfeMarker, 'cfe',
-            librariesSpecificationUri: createUriForFileName('libraries.json'))
+            librariesSpecificationUri: createUriForFileName('libraries.json'),
+            allowedExperimentalFlags: const AllowedExperimentalFlags())
       ]));
 }
 
diff --git a/pkg/front_end/test/fasta/expression_suite.dart b/pkg/front_end/test/fasta/expression_suite.dart
index 43c3679..7ca9e56 100644
--- a/pkg/front_end/test/fasta/expression_suite.dart
+++ b/pkg/front_end/test/fasta/expression_suite.dart
@@ -14,6 +14,7 @@
 
 import "package:front_end/src/api_prototype/compiler_options.dart"
     show CompilerOptions, DiagnosticMessage;
+import 'package:front_end/src/api_prototype/experimental_flags.dart';
 
 import "package:front_end/src/api_prototype/memory_file_system.dart"
     show MemoryFileSystem;
@@ -409,7 +410,8 @@
       printDiagnosticMessage(message, print);
       errors.add(message);
     }
-    ..environmentDefines = const {};
+    ..environmentDefines = const {}
+    ..allowedExperimentalFlags = const AllowedExperimentalFlags();
 
   final ProcessedOptions options =
       new ProcessedOptions(options: optionBuilder, inputs: [entryPoint]);
diff --git a/pkg/front_end/test/fasta/parser/parser.status b/pkg/front_end/test/fasta/parser/parser.status
index 821a4ba..07063b9 100644
--- a/pkg/front_end/test/fasta/parser/parser.status
+++ b/pkg/front_end/test/fasta/parser/parser.status
@@ -1540,15 +1540,6 @@
 tests/co19/src/WebPlatformTest/dom/nodes/Document-createElement_t01: Fail
 tests/co19/src/WebPlatformTest/dom/nodes/DOMImplementation-createHTMLDocument_t01: Fail
 tests/co19/src/WebPlatformTest/dom/nodes/Element-childElementCount-nochild_t01: Fail
-tests/compiler/dart2js_extra/deferred_custom_loader_test: Fail
-tests/compiler/dart2js_extra/empty_negative_test: Fail
-tests/compiler/dart2js_extra/invalid_annotation_test: Fail
-tests/compiler/dart2js_extra/invalid_annotation2_test: Fail
-tests/compiler/dart2js_extra/invalid_length_negative_test: Fail
-tests/compiler/dart2js_extra/LayoutTests_fast_mediastream_getusermedia_t01_test: Fail
-tests/compiler/dart2js_extra/switch_test: Fail
-tests/compiler/dart2js_extra/timer_negative_test: Fail
-tests/compiler/dart2js_extra/typed_locals_test: Fail
 tests/compiler/dart2js_native/abstract_class_test: Fail
 tests/compiler/dart2js_native/bound_closure_test: Fail
 tests/compiler/dart2js_native/browser_compat_1_prepatched_test: Fail
@@ -1650,6 +1641,15 @@
 tests/corelib/from_environment_const_type_test: Fail
 tests/corelib/from_environment_const_type_undefined_test: Fail
 tests/corelib/symbol_reserved_word_test: Fail
+tests/dart2js_2/deferred_custom_loader_test: Fail
+tests/dart2js_2/empty_negative_test: Fail
+tests/dart2js_2/invalid_annotation_test: Fail
+tests/dart2js_2/invalid_annotation2_test: Fail
+tests/dart2js_2/invalid_length_negative_test: Fail
+tests/dart2js_2/LayoutTests_fast_mediastream_getusermedia_t01_test: Fail
+tests/dart2js_2/switch_test: Fail
+tests/dart2js_2/timer_negative_test: Fail
+tests/dart2js_2/typed_locals_test: Fail
 tests/language_2/abstract_syntax_test: Fail
 tests/language_2/arg_param_trailing_comma_test: Fail
 tests/language_strong/argument_definition_test: Fail
diff --git a/pkg/front_end/test/fasta/scanner/scanner.status b/pkg/front_end/test/fasta/scanner/scanner.status
index 4cdc798..1fa275a 100644
--- a/pkg/front_end/test/fasta/scanner/scanner.status
+++ b/pkg/front_end/test/fasta/scanner/scanner.status
@@ -3,9 +3,9 @@
 # BSD-style license that can be found in the LICENSE.md file.
 
 pkg/testing/test/dart_sdk_negative_test: Fail
-tests/compiler/dart2js_extra/empty_negative_test: Fail
-tests/compiler/dart2js_extra/invalid_length_negative_test: Fail
-tests/compiler/dart2js_extra/timer_negative_test: Fail
+tests/dart2js_2/empty_negative_test: Fail
+tests/dart2js_2/invalid_length_negative_test: Fail
+tests/dart2js_2/timer_negative_test: Fail
 tests/language_strong/assign_instance_method_negative_test: Fail
 tests/language_strong/bad_initializer1_negative_test: Fail
 tests/language_strong/bad_initializer2_negative_test: Fail
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index c6c5b75..4b03080 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -23,7 +23,7 @@
     show CompilerOptions, DiagnosticMessage;
 
 import 'package:front_end/src/api_prototype/experimental_flags.dart'
-    show ExperimentalFlag, defaultExperimentalFlags;
+    show ExperimentalFlag, defaultExperimentalFlags, isExperimentEnabled;
 
 import 'package:front_end/src/api_prototype/standard_file_system.dart'
     show StandardFileSystem;
@@ -617,7 +617,9 @@
     TestOptions testOptions = context.computeTestOptions(description);
     Map<ExperimentalFlag, bool> experimentalFlags =
         testOptions.computeExperimentalFlags(context.experimentalFlags);
-    NnbdMode nnbdMode = context.weak
+    NnbdMode nnbdMode = context.weak ||
+            !isExperimentEnabled(ExperimentalFlag.nonNullable,
+                experimentalFlags: experimentalFlags)
         ? NnbdMode.Weak
         : (testOptions.nnbdAgnosticMode ? NnbdMode.Agnostic : NnbdMode.Strong);
     List<Uri> inputs = <Uri>[description.uri];
diff --git a/pkg/front_end/test/patching/patching_test.dart b/pkg/front_end/test/patching/patching_test.dart
index 3e4a103..4cce8c0 100644
--- a/pkg/front_end/test/patching/patching_test.dart
+++ b/pkg/front_end/test/patching/patching_test.dart
@@ -28,11 +28,13 @@
       runTest: runTestFor(const PatchingDataComputer(), [
         new TestConfigWithLanguageVersion(
             cfeMarker, 'cfe with libraries specification',
-            librariesSpecificationUri: createUriForFileName('libraries.json')),
+            librariesSpecificationUri: createUriForFileName('libraries.json'),
+            allowedExperimentalFlags: const AllowedExperimentalFlags()),
         new TestConfigWithLanguageVersion(cfeWithNnbdMarker,
             'cfe with libraries specification and non-nullable',
             librariesSpecificationUri: createUriForFileName('libraries.json'),
-            experimentalFlags: {ExperimentalFlag.nonNullable: true})
+            experimentalFlags: {ExperimentalFlag.nonNullable: true},
+            allowedExperimentalFlags: const AllowedExperimentalFlags())
       ]),
       skipMap: {
         cfeMarker: [
@@ -47,10 +49,12 @@
 class TestConfigWithLanguageVersion extends TestConfig {
   TestConfigWithLanguageVersion(String marker, String name,
       {Uri librariesSpecificationUri,
-      Map<ExperimentalFlag, bool> experimentalFlags = const {}})
+      Map<ExperimentalFlag, bool> experimentalFlags = const {},
+      AllowedExperimentalFlags allowedExperimentalFlags})
       : super(marker, name,
             librariesSpecificationUri: librariesSpecificationUri,
-            experimentalFlags: experimentalFlags);
+            experimentalFlags: experimentalFlags,
+            allowedExperimentalFlags: allowedExperimentalFlags);
 
   @override
   void customizeCompilerOptions(CompilerOptions options, TestData testData) {
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index b63f5aad..a942ecd2 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -1205,6 +1205,7 @@
 watcher
 wb
 wc
+weakened
 weakener
 weird
 weren't
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index 7b80392..4a9c1b6 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -181,6 +181,7 @@
 err
 everytime
 evicting
+exceed
 excess
 exe
 execute
@@ -363,6 +364,7 @@
 negatable
 newest
 newworld
+nil
 ninja
 nondefault
 nonexisting
@@ -472,6 +474,7 @@
 spent
 splay
 splitting
+spurious
 sqrt
 squared
 sssp
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart b/pkg/front_end/testcases/nnbd/issue41602.dart
new file mode 100644
index 0000000..1e38ba0
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart
@@ -0,0 +1,18 @@
+// 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.
+
+Future<void> returnFutureOfVoid() async {}
+
+void returnVoid() {}
+
+void returnVoidAsync() async {}
+
+test() async {
+  await returnVoid(); // error
+  await returnVoidAsync(); // error
+}
+
+main() async {
+  await returnFutureOfVoid(); // ok
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.outline.expect
new file mode 100644
index 0000000..6933297
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.outline.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+
+static method returnFutureOfVoid() → asy::Future<void>
+  ;
+static method returnVoid() → void
+  ;
+static method returnVoidAsync() → void
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.strong.expect
new file mode 100644
index 0000000..d7d296d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.strong.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41602.dart:12:9: Error: This expression has type 'void' and can't be used.
+//   await returnVoid(); // error
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue41602.dart:13:9: Error: This expression has type 'void' and can't be used.
+//   await returnVoidAsync(); // error
+//         ^
+//
+import self as self;
+import "dart:async" as asy;
+
+static method returnFutureOfVoid() → asy::Future<void> async {}
+static method returnVoid() → void {}
+static method returnVoidAsync() → void async {}
+static method test() → dynamic async {
+  await self::returnVoid();
+  await self::returnVoidAsync();
+}
+static method main() → dynamic async {
+  await self::returnFutureOfVoid();
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect
new file mode 100644
index 0000000..40f6682
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect
@@ -0,0 +1,124 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41602.dart:12:9: Error: This expression has type 'void' and can't be used.
+//   await returnVoid(); // error
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue41602.dart:13:9: Error: This expression has type 'void' and can't be used.
+//   await returnVoidAsync(); // error
+//         ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method returnFutureOfVoid() → asy::Future<void> /* originally async */ {
+  final asy::_AsyncAwaitCompleter<void> :async_completer = new asy::_AsyncAwaitCompleter::•<void>();
+  asy::FutureOr<void>? :return_value;
+  dynamic :async_stack_trace;
+  (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::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      :async_completer.{asy::Completer::completeError}(exception, stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.{asy::_AsyncAwaitCompleter::start}(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method returnVoid() → void {}
+static method returnVoidAsync() → void /* originally async */ {
+  final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+  asy::FutureOr<dynamic>? :return_value;
+  dynamic :async_stack_trace;
+  (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:
+      {}
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      :async_completer.{asy::Completer::completeError}(exception, stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.{asy::_AsyncAwaitCompleter::start}(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method test() → dynamic /* originally async */ {
+  final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+  asy::FutureOr<dynamic>? :return_value;
+  dynamic :async_stack_trace;
+  (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 {
+      #L3:
+      {
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error, :async_op) in null;
+        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error, :async_op) in null;
+        _in::unsafeCast<void>(:result);
+      }
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      :async_completer.{asy::Completer::completeError}(exception, stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.{asy::_AsyncAwaitCompleter::start}(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method main() → dynamic /* originally async */ {
+  final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+  asy::FutureOr<dynamic>? :return_value;
+  dynamic :async_stack_trace;
+  (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 {
+      #L4:
+      {
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error, :async_op) in null;
+        _in::unsafeCast<void>(:result);
+      }
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      :async_completer.{asy::Completer::completeError}(exception, stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.{asy::_AsyncAwaitCompleter::start}(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.textual_outline.expect
new file mode 100644
index 0000000..1650ff1
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+Future<void> returnFutureOfVoid() async {}
+void returnVoid() {}
+void returnVoidAsync() async {}
+test() async {}
+main() async {}
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..49c7a80
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+Future<void> returnFutureOfVoid() async {}
+main() async {}
+test() async {}
+void returnVoid() {}
+void returnVoidAsync() async {}
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.expect
new file mode 100644
index 0000000..d7d296d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41602.dart:12:9: Error: This expression has type 'void' and can't be used.
+//   await returnVoid(); // error
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue41602.dart:13:9: Error: This expression has type 'void' and can't be used.
+//   await returnVoidAsync(); // error
+//         ^
+//
+import self as self;
+import "dart:async" as asy;
+
+static method returnFutureOfVoid() → asy::Future<void> async {}
+static method returnVoid() → void {}
+static method returnVoidAsync() → void async {}
+static method test() → dynamic async {
+  await self::returnVoid();
+  await self::returnVoidAsync();
+}
+static method main() → dynamic async {
+  await self::returnFutureOfVoid();
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect
new file mode 100644
index 0000000..40f6682
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect
@@ -0,0 +1,124 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41602.dart:12:9: Error: This expression has type 'void' and can't be used.
+//   await returnVoid(); // error
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue41602.dart:13:9: Error: This expression has type 'void' and can't be used.
+//   await returnVoidAsync(); // error
+//         ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method returnFutureOfVoid() → asy::Future<void> /* originally async */ {
+  final asy::_AsyncAwaitCompleter<void> :async_completer = new asy::_AsyncAwaitCompleter::•<void>();
+  asy::FutureOr<void>? :return_value;
+  dynamic :async_stack_trace;
+  (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::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      :async_completer.{asy::Completer::completeError}(exception, stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.{asy::_AsyncAwaitCompleter::start}(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method returnVoid() → void {}
+static method returnVoidAsync() → void /* originally async */ {
+  final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+  asy::FutureOr<dynamic>? :return_value;
+  dynamic :async_stack_trace;
+  (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:
+      {}
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      :async_completer.{asy::Completer::completeError}(exception, stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.{asy::_AsyncAwaitCompleter::start}(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method test() → dynamic /* originally async */ {
+  final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+  asy::FutureOr<dynamic>? :return_value;
+  dynamic :async_stack_trace;
+  (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 {
+      #L3:
+      {
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error, :async_op) in null;
+        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error, :async_op) in null;
+        _in::unsafeCast<void>(:result);
+      }
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      :async_completer.{asy::Completer::completeError}(exception, stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.{asy::_AsyncAwaitCompleter::start}(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method main() → dynamic /* originally async */ {
+  final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+  asy::FutureOr<dynamic>? :return_value;
+  dynamic :async_stack_trace;
+  (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 {
+      #L4:
+      {
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error, :async_op) in null;
+        _in::unsafeCast<void>(:result);
+      }
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      :async_completer.{asy::Completer::completeError}(exception, stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.{asy::_AsyncAwaitCompleter::start}(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
diff --git a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/libraries.json b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/libraries.json
index 154c73c..98a1772 100644
--- a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/libraries.json
+++ b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/libraries.json
@@ -3,7 +3,8 @@
     "libraries": {
       "test": {
         "patches": [
-          "patch_lib.dart"
+          "patch_lib.dart",
+          "patch_lib2.dart"
         ],
         "uri": "origin_lib.dart"
       }
diff --git a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.outline.expect b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.outline.expect
index 0e4e5af..461cb26 100644
--- a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.outline.expect
@@ -7,6 +7,13 @@
   ;
 
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:32:14: Error: Field 'staticField' should be initialized because its type 'int' doesn't allow null.
+//   static int staticField;
+//              ^^^^^^^^^^^
+//
 import self as self2;
 import "dart:_internal" as _in;
 import "dart:core" as core;
@@ -15,13 +22,14 @@
 
 @_in::patch
 class Class1 extends core::Object {
-  field core::int field /* from org-dartlang-testcase:///patch_lib.dart */;
+  field core::int field /* from org-dartlang-testcase:///patch_lib2.dart */;
+  static field core::int staticField /* from org-dartlang-testcase:///patch_lib2.dart */;
   synthetic constructor •() → self2::Class1
     ;
 }
 @_in::patch
 class Class2 extends core::Object {
-  field core::int field /* from org-dartlang-testcase:///patch_lib.dart */;
+  field core::int field /* from org-dartlang-testcase:///patch_lib2.dart */;
   constructor constructor2(core::int field) → self2::Class2
     ;
   constructor constructor1() → self2::Class2
diff --git a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.strong.expect b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.strong.expect
index d823eb3..873a553 100644
--- a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.strong.expect
@@ -13,11 +13,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:10:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:32:14: Error: Field 'staticField' should be initialized because its type 'int' doesn't allow null.
+//   static int staticField;
+//              ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:30:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
 //   int field;
 //       ^^^^^
 //
-// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:15:7: Error: This constructor should initialize field 'field' because its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:37:7: Error: This constructor should initialize field 'field' because its type 'int' doesn't allow null.
 //   int field;
 //       ^^^^^
 //
@@ -29,14 +33,15 @@
 
 @#C1
 class Class1 extends core::Object {
-  field core::int field = null /* from org-dartlang-testcase:///patch_lib.dart */;
+  field core::int field = null /* from org-dartlang-testcase:///patch_lib2.dart */;
+  static field core::int staticField = null /* from org-dartlang-testcase:///patch_lib2.dart */;
   synthetic constructor •() → test::Class1
     : super core::Object::•()
     ;
 }
 @#C1
 class Class2 extends core::Object {
-  field core::int field /* from org-dartlang-testcase:///patch_lib.dart */;
+  field core::int field /* from org-dartlang-testcase:///patch_lib2.dart */;
   constructor constructor2(core::int field) → test::Class2
     : test::Class2::field = field, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.strong.transformed.expect
index d823eb3..873a553 100644
--- a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.strong.transformed.expect
@@ -13,11 +13,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:10:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:32:14: Error: Field 'staticField' should be initialized because its type 'int' doesn't allow null.
+//   static int staticField;
+//              ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:30:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
 //   int field;
 //       ^^^^^
 //
-// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:15:7: Error: This constructor should initialize field 'field' because its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:37:7: Error: This constructor should initialize field 'field' because its type 'int' doesn't allow null.
 //   int field;
 //       ^^^^^
 //
@@ -29,14 +33,15 @@
 
 @#C1
 class Class1 extends core::Object {
-  field core::int field = null /* from org-dartlang-testcase:///patch_lib.dart */;
+  field core::int field = null /* from org-dartlang-testcase:///patch_lib2.dart */;
+  static field core::int staticField = null /* from org-dartlang-testcase:///patch_lib2.dart */;
   synthetic constructor •() → test::Class1
     : super core::Object::•()
     ;
 }
 @#C1
 class Class2 extends core::Object {
-  field core::int field /* from org-dartlang-testcase:///patch_lib.dart */;
+  field core::int field /* from org-dartlang-testcase:///patch_lib2.dart */;
   constructor constructor2(core::int field) → test::Class2
     : test::Class2::field = field, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.expect b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.expect
index d823eb3..873a553 100644
--- a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.expect
@@ -13,11 +13,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:10:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:32:14: Error: Field 'staticField' should be initialized because its type 'int' doesn't allow null.
+//   static int staticField;
+//              ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:30:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
 //   int field;
 //       ^^^^^
 //
-// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:15:7: Error: This constructor should initialize field 'field' because its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:37:7: Error: This constructor should initialize field 'field' because its type 'int' doesn't allow null.
 //   int field;
 //       ^^^^^
 //
@@ -29,14 +33,15 @@
 
 @#C1
 class Class1 extends core::Object {
-  field core::int field = null /* from org-dartlang-testcase:///patch_lib.dart */;
+  field core::int field = null /* from org-dartlang-testcase:///patch_lib2.dart */;
+  static field core::int staticField = null /* from org-dartlang-testcase:///patch_lib2.dart */;
   synthetic constructor •() → test::Class1
     : super core::Object::•()
     ;
 }
 @#C1
 class Class2 extends core::Object {
-  field core::int field /* from org-dartlang-testcase:///patch_lib.dart */;
+  field core::int field /* from org-dartlang-testcase:///patch_lib2.dart */;
   constructor constructor2(core::int field) → test::Class2
     : test::Class2::field = field, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.transformed.expect
index d823eb3..873a553 100644
--- a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.transformed.expect
@@ -13,11 +13,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:10:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:32:14: Error: Field 'staticField' should be initialized because its type 'int' doesn't allow null.
+//   static int staticField;
+//              ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:30:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
 //   int field;
 //       ^^^^^
 //
-// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:15:7: Error: This constructor should initialize field 'field' because its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:37:7: Error: This constructor should initialize field 'field' because its type 'int' doesn't allow null.
 //   int field;
 //       ^^^^^
 //
@@ -29,14 +33,15 @@
 
 @#C1
 class Class1 extends core::Object {
-  field core::int field = null /* from org-dartlang-testcase:///patch_lib.dart */;
+  field core::int field = null /* from org-dartlang-testcase:///patch_lib2.dart */;
+  static field core::int staticField = null /* from org-dartlang-testcase:///patch_lib2.dart */;
   synthetic constructor •() → test::Class1
     : super core::Object::•()
     ;
 }
 @#C1
 class Class2 extends core::Object {
-  field core::int field /* from org-dartlang-testcase:///patch_lib.dart */;
+  field core::int field /* from org-dartlang-testcase:///patch_lib2.dart */;
   constructor constructor2(core::int field) → test::Class2
     : test::Class2::field = field, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart
index 4a93691..308e3e8 100644
--- a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart
+++ b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart
@@ -4,15 +4,3 @@
 
 // ignore: import_internal_library
 import 'dart:_internal';
-
-@patch
-class Class1 {
-  int field;
-}
-
-@patch
-class Class2 {
-  int field;
-
-  Class2.constructor2(this.field);
-}
diff --git a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart
new file mode 100644
index 0000000..33a1805
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart
@@ -0,0 +1,40 @@
+// 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.
+
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+// Comment to make offset in patch_lib2.dart exceed the range of patch_lib.dart.
+
+@patch
+class Class1 {
+  int field;
+
+  static int staticField;
+}
+
+@patch
+class Class2 {
+  int field;
+
+  Class2.constructor2(this.field);
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue39666.dart b/pkg/front_end/testcases/nnbd_mixed/issue39666.dart
new file mode 100644
index 0000000..40500b2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue39666.dart
@@ -0,0 +1,10 @@
+// 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 'issue39666_lib.dart';
+
+class A<X extends FutureOr<List>> {}
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue39666.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue39666.dart.textual_outline.expect
new file mode 100644
index 0000000..d0676cc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue39666.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+import 'dart:async';
+import 'issue39666_lib.dart';
+
+class A<X extends FutureOr<List>> {}
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue39666.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/issue39666.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d0676cc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue39666.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+import 'dart:async';
+import 'issue39666_lib.dart';
+
+class A<X extends FutureOr<List>> {}
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue39666.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue39666.dart.weak.expect
new file mode 100644
index 0000000..b1a5732
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue39666.dart.weak.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+import "org-dartlang-testcase:///issue39666_lib.dart";
+
+class A<X extends asy::FutureOr<core::List<dynamic>> = asy::FutureOr<core::List<dynamic>>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+static method main() → void {}
+
+library;
+import self as self2;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+class A<X extends asy::FutureOr<core::List<dynamic>*>* = asy::FutureOr<core::List<dynamic>*>*> extends core::Object {
+  synthetic constructor •() → self2::A<self2::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*;
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*;
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*;
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*;
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*;
+  abstract member-signature operator ==(dynamic other) → core::bool*;
+  abstract member-signature get hashCode() → core::int*;
+  abstract member-signature method toString() → core::String*;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic;
+  abstract member-signature get runtimeType() → core::Type*;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue39666.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue39666.dart.weak.transformed.expect
new file mode 100644
index 0000000..b1a5732
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue39666.dart.weak.transformed.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+import "org-dartlang-testcase:///issue39666_lib.dart";
+
+class A<X extends asy::FutureOr<core::List<dynamic>> = asy::FutureOr<core::List<dynamic>>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+static method main() → void {}
+
+library;
+import self as self2;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+class A<X extends asy::FutureOr<core::List<dynamic>*>* = asy::FutureOr<core::List<dynamic>*>*> extends core::Object {
+  synthetic constructor •() → self2::A<self2::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*;
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*;
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*;
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*;
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*;
+  abstract member-signature operator ==(dynamic other) → core::bool*;
+  abstract member-signature get hashCode() → core::int*;
+  abstract member-signature method toString() → core::String*;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic;
+  abstract member-signature get runtimeType() → core::Type*;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue39666_lib.dart b/pkg/front_end/testcases/nnbd_mixed/issue39666_lib.dart
new file mode 100644
index 0000000..a2df0ca
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue39666_lib.dart
@@ -0,0 +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.6
+
+import 'dart:async';
+
+class A<X extends FutureOr<List>> {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41435.dart b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart
new file mode 100644
index 0000000..d3d09a9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart=2.7
+import 'issue41435_lib.dart';
+
+void main() {
+  Null nil;
+  x = null;
+  x = nil;
+  takesNever(null);
+  takesNever(nil);
+  takesTakesNull(takesNever);
+  f = (Never x) {};
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.textual_outline.expect
new file mode 100644
index 0000000..d02b6ab
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+// @dart = 2.7
+import 'issue41435_lib.dart';
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d02b6ab
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+// @dart = 2.7
+import 'issue41435_lib.dart';
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.expect
new file mode 100644
index 0000000..4fa35c5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.expect
@@ -0,0 +1,29 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "issue41435_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue41435_lib.dart";
+
+static method main() → void {
+  core::Null? nil;
+  iss::x = null as{TypeError} Never;
+  iss::x = nil as{TypeError} Never;
+  iss::takesNever(null as{TypeError} Never);
+  iss::takesNever(nil as{TypeError} Never);
+  iss::takesTakesNull(#C1);
+  iss::f = (Never* x) → core::Null? {};
+}
+
+library /*isNonNullableByDefault*/;
+import self as iss;
+import "dart:core" as core;
+
+static field Never x = throw "Unreachable";
+static field (core::Null?) → void f = (core::Object? n) → core::Null? {};
+static method takesNever(Never x) → void {}
+static method takesTakesNull((core::Null?) → void f) → void {}
+
+constants  {
+  #C1 = tearoff iss::takesNever
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.transformed.expect
new file mode 100644
index 0000000..4fa35c5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.transformed.expect
@@ -0,0 +1,29 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "issue41435_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue41435_lib.dart";
+
+static method main() → void {
+  core::Null? nil;
+  iss::x = null as{TypeError} Never;
+  iss::x = nil as{TypeError} Never;
+  iss::takesNever(null as{TypeError} Never);
+  iss::takesNever(nil as{TypeError} Never);
+  iss::takesTakesNull(#C1);
+  iss::f = (Never* x) → core::Null? {};
+}
+
+library /*isNonNullableByDefault*/;
+import self as iss;
+import "dart:core" as core;
+
+static field Never x = throw "Unreachable";
+static field (core::Null?) → void f = (core::Object? n) → core::Null? {};
+static method takesNever(Never x) → void {}
+static method takesTakesNull((core::Null?) → void f) → void {}
+
+constants  {
+  #C1 = tearoff iss::takesNever
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41435_lib.dart b/pkg/front_end/testcases/nnbd_mixed/issue41435_lib.dart
new file mode 100644
index 0000000..c068837
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41435_lib.dart
@@ -0,0 +1,8 @@
+// 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.
+
+Never x = throw "Unreachable";
+void takesNever(Never x) {}
+void takesTakesNull(void Function(Null) f) {}
+void Function(Null) f = (n) {};
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart
new file mode 100644
index 0000000..38b608f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart
@@ -0,0 +1,17 @@
+// 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.7
+
+Future<void> returnFutureOfVoid() async {}
+
+void returnVoid() {}
+
+void returnVoidAsync() async {}
+
+main() async {
+  await returnVoid(); // ok since this library is opted out.
+  await returnFutureOfVoid(); // ok
+  await returnVoidAsync(); // ok since this library is opted out.
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.textual_outline.expect
new file mode 100644
index 0000000..2643744
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+// @dart = 2.7
+Future<void> returnFutureOfVoid() async {}
+void returnVoid() {}
+void returnVoidAsync() async {}
+main() async {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4ba9dba
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+// @dart = 2.7
+Future<void> returnFutureOfVoid() async {}
+main() async {}
+void returnVoid() {}
+void returnVoidAsync() async {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.expect
new file mode 100644
index 0000000..fd8e4a3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:async" as asy;
+
+static method returnFutureOfVoid() → asy::Future<void>* async {}
+static method returnVoid() → void {}
+static method returnVoidAsync() → void async {}
+static method main() → dynamic async {
+  await self::returnVoid();
+  await self::returnFutureOfVoid();
+  await self::returnVoidAsync();
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect
new file mode 100644
index 0000000..5c57233
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect
@@ -0,0 +1,87 @@
+library;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method returnFutureOfVoid() → asy::Future<void>* /* originally async */ {
+  final asy::_AsyncAwaitCompleter<void>* :async_completer = new asy::_AsyncAwaitCompleter::•<void>();
+  asy::FutureOr<void>* :return_value;
+  dynamic :async_stack_trace;
+  (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::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+      :async_completer.{asy::Completer::completeError}(exception, stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.{asy::_AsyncAwaitCompleter::start}(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method returnVoid() → void {}
+static method returnVoidAsync() → void /* originally async */ {
+  final asy::_AsyncAwaitCompleter<dynamic>* :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+  asy::FutureOr<dynamic>* :return_value;
+  dynamic :async_stack_trace;
+  (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:
+      {}
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+      :async_completer.{asy::Completer::completeError}(exception, stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.{asy::_AsyncAwaitCompleter::start}(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method main() → dynamic /* originally async */ {
+  final asy::_AsyncAwaitCompleter<dynamic>* :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+  asy::FutureOr<dynamic>* :return_value;
+  dynamic :async_stack_trace;
+  (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 {
+      #L3:
+      {
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error, :async_op) in null;
+        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error, :async_op) in null;
+        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error, :async_op) in null;
+        _in::unsafeCast<void>(:result);
+      }
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+      :async_completer.{asy::Completer::completeError}(exception, stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.{asy::_AsyncAwaitCompleter::start}(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index f8257ff..84ef1b0 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -409,7 +409,7 @@
       "command-lines": [
         "--checked dart2js",
         "-cdart2js -rd8 --exclude-suite=observatory_ui",
-        "-cdart2js -rd8 dart2js_extra dart2js_native"
+        "-cdart2js -rd8 dart2js_2 dart2js_native"
       ]
     },
     {
@@ -436,7 +436,7 @@
         "-t240 --checked pkg/(kernel|front_end|fasta) dart2js",
         "-cdartk -rvm",
         "-cdart2js -rd8 --exclude-suite=observatory_ui",
-        "-cdart2js -rd8 dart2js_extra dart2js_native"
+        "-cdart2js -rd8 dart2js_2 dart2js_native"
       ]
     },
     {
@@ -447,7 +447,7 @@
       "mode": "release",
       "common": "--dart2js-batch --time -pcolor --report -ax64 -mrelease --write-result-log",
       "command-lines": [
-        "-cdart2js -rd8 --use-sdk --minified language language_2 dart2js_extra dart2js_native corelib corelib_2"
+        "-cdart2js -rd8 --use-sdk --minified language language_2 dart2js_2 dart2js_native corelib corelib_2"
       ]
     }
   ],
diff --git a/pkg/front_end/tool/_fasta/generate_experimental_flags.dart b/pkg/front_end/tool/_fasta/generate_experimental_flags.dart
index 5b1356b..8978f14 100644
--- a/pkg/front_end/tool/_fasta/generate_experimental_flags.dart
+++ b/pkg/front_end/tool/_fasta/generate_experimental_flags.dart
@@ -7,6 +7,8 @@
 import 'package:_fe_analyzer_shared/src/scanner/characters.dart'
     show $A, $MINUS, $a, $z;
 
+import 'package:_fe_analyzer_shared/src/sdk/allowed_experiments.dart';
+
 import 'package:dart_style/dart_style.dart' show DartFormatter;
 
 import 'package:yaml/yaml.dart' show YamlMap, loadYaml;
@@ -20,7 +22,7 @@
 
 Uri computeCfeGeneratedFile() {
   return Platform.script
-      .resolve("../../lib/src/api_prototype/experimental_flags.dart");
+      .resolve("../../lib/src/api_prototype/experimental_flags_generated.dart");
 }
 
 Uri computeKernelGeneratedFile() {
@@ -33,6 +35,11 @@
       .resolve("../../../../tools/experimental_features.yaml");
 }
 
+Uri computeAllowListFile() {
+  return Platform.script
+      .resolve("../../../../sdk_nnbd/lib/_internal/allowed_experiments.json");
+}
+
 String generateKernelFile() {
   Uri yamlFile = computeYamlFile();
   Map<dynamic, dynamic> yaml =
@@ -57,7 +64,7 @@
 // NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
 //
 // Instead modify 'tools/experimental_features.yaml' and run
-// 'pkg/front_end/tool/fasta generate-experimental-flags' to update.
+// 'dart pkg/front_end/tool/fasta.dart generate-experimental-flags' to update.
 
 import "ast.dart";
 
@@ -84,16 +91,16 @@
   StringBuffer sb = new StringBuffer();
 
   sb.write('''
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
 // NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
 //
 // Instead modify 'tools/experimental_features.yaml' and run
-// 'pkg/front_end/tool/fasta generate-experimental-flags' to update.
+// 'dart pkg/front_end/tool/fasta.dart generate-experimental-flags' to update.
 
-import 'package:kernel/kernel.dart' show Version;
+part of 'experimental_flags.dart';
 ''');
 
   Map<dynamic, dynamic> features = yaml['features'];
@@ -164,7 +171,45 @@
     bool expired = (features[key] as YamlMap)['expired'] == true;
     sb.writeln('  ExperimentalFlag.${keyToIdentifier(key)}: ${expired},');
   }
-  sb.writeln('};');
+  sb.write('''
+};
+  
+''');
+
+  Uri allowListFile = computeAllowListFile();
+  AllowedExperiments allowedExperiments = parseAllowedExperiments(
+      new File.fromUri(allowListFile).readAsStringSync());
+
+  sb.write('''
+const AllowedExperimentalFlags defaultAllowedExperimentalFlags =
+    const AllowedExperimentalFlags(
+''');
+  sb.writeln('sdkDefaultExperiments: {');
+  for (String sdkDefaultExperiment
+      in allowedExperiments.sdkDefaultExperiments) {
+    sb.writeln('ExperimentalFlag.${keyToIdentifier(sdkDefaultExperiment)},');
+  }
+  sb.writeln('},');
+  sb.writeln('sdkLibraryExperiments: {');
+  allowedExperiments.sdkLibraryExperiments
+      .forEach((String library, List<String> experiments) {
+    sb.writeln('"$library": {');
+    for (String experiment in experiments) {
+      sb.writeln('ExperimentalFlag.${keyToIdentifier(experiment)},');
+    }
+    sb.writeln('},');
+  });
+  sb.writeln('},');
+  sb.writeln('packageExperiments: {');
+  allowedExperiments.packageExperiments
+      .forEach((String package, List<String> experiments) {
+    sb.writeln('"$package": {');
+    for (String experiment in experiments) {
+      sb.writeln('ExperimentalFlag.${keyToIdentifier(experiment)},');
+    }
+    sb.writeln('},');
+  });
+  sb.writeln('});');
 
   return new DartFormatter().format("$sb");
 }
diff --git a/pkg/front_end/tool/_fasta/generate_experimental_flags_test.dart b/pkg/front_end/tool/_fasta/generate_experimental_flags_test.dart
index 1249933..d826ea5 100644
--- a/pkg/front_end/tool/_fasta/generate_experimental_flags_test.dart
+++ b/pkg/front_end/tool/_fasta/generate_experimental_flags_test.dart
@@ -37,7 +37,7 @@
   ${generatedFile.path}
 
 is out of date. To regenerate the file, run
-  pkg/front_end/tool/fasta generate-experimental-flags
+  dart pkg/front_end/tool/fasta.dart generate-experimental-flags
 
 ------------------------
 """);
diff --git a/pkg/front_end/tool/smoke_test_quick.dart b/pkg/front_end/tool/smoke_test_quick.dart
index b6bd887..4956e04 100644
--- a/pkg/front_end/tool/smoke_test_quick.dart
+++ b/pkg/front_end/tool/smoke_test_quick.dart
@@ -26,6 +26,9 @@
   futures.add(
       run("pkg/front_end/test/lint_suite.dart", ["--", "lint/front_end/..."]));
   futures.add(run("pkg/front_end/test/deps_test.dart", [], filter: false));
+  futures.add(run(
+      "pkg/front_end/tool/_fasta/generate_experimental_flags_test.dart", [],
+      filter: false));
   await Future.wait(futures);
   print("\n-----------------------\n");
   print("Done with exitcode $exitCode in ${stopwatch.elapsedMilliseconds} ms");
diff --git a/pkg/kernel/bin/transform.dart b/pkg/kernel/bin/transform.dart
index c0b9d02..bec347f 100755
--- a/pkg/kernel/bin/transform.dart
+++ b/pkg/kernel/bin/transform.dart
@@ -100,12 +100,8 @@
       break;
     case 'constants':
       final VmConstantsBackend backend = new VmConstantsBackend(coreTypes);
-      component = constants.transformComponent(
-          component,
-          backend,
-          defines,
-          const constants.SimpleErrorReporter(),
-          constants.EvaluationMode.legacy);
+      component = constants.transformComponent(component, backend, defines,
+          const constants.SimpleErrorReporter(), constants.EvaluationMode.weak);
       break;
     case 'empty':
       component = empty.transformComponent(component);
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 7a8b245..616045f 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -738,10 +738,21 @@
           NonNullableByDefaultCompiledMode.Agnostic) {
         // Keep as-is.
       } else {
-        // Mixed mode where agnostic isn't involved.
-        throw new CompilationModeError(
-            "Mixed compilation mode found: $compilationMode "
-            "and ${index.compiledMode}.");
+        if ((compilationMode == NonNullableByDefaultCompiledMode.Disabled ||
+                index.compiledMode ==
+                    NonNullableByDefaultCompiledMode.Disabled) &&
+            (compilationMode == NonNullableByDefaultCompiledMode.Weak ||
+                index.compiledMode == NonNullableByDefaultCompiledMode.Weak)) {
+          // One is disabled and one is weak.
+          // => We allow that and "merge" them as disabled.
+          compilationMode = NonNullableByDefaultCompiledMode.Disabled;
+        } else {
+          // Mixed mode where agnostic isn't involved and it's not
+          // disabled + weak.
+          throw new CompilationModeError(
+              "Mixed compilation mode found: $compilationMode "
+              "and ${index.compiledMode}.");
+        }
       }
     }
 
diff --git a/pkg/kernel/lib/default_language_version.dart b/pkg/kernel/lib/default_language_version.dart
index 4aa2488..cd5308e 100644
--- a/pkg/kernel/lib/default_language_version.dart
+++ b/pkg/kernel/lib/default_language_version.dart
@@ -5,7 +5,7 @@
 // NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
 //
 // Instead modify 'tools/experimental_features.yaml' and run
-// 'pkg/front_end/tool/fasta generate-experimental-flags' to update.
+// 'dart pkg/front_end/tool/fasta.dart generate-experimental-flags' to update.
 
 import "ast.dart";
 
diff --git a/pkg/kernel/test/binary/component_mode_test.dart b/pkg/kernel/test/binary/component_mode_test.dart
index d30c99d..b41e2ef 100644
--- a/pkg/kernel/test/binary/component_mode_test.dart
+++ b/pkg/kernel/test/binary/component_mode_test.dart
@@ -128,6 +128,12 @@
   if (c1Mode == c2Mode) return true;
   if (c1Mode == NonNullableByDefaultCompiledMode.Agnostic) return true;
   if (c2Mode == NonNullableByDefaultCompiledMode.Agnostic) return true;
+  if ((c1Mode == NonNullableByDefaultCompiledMode.Disabled ||
+          c1Mode == NonNullableByDefaultCompiledMode.Weak) &&
+      (c2Mode == NonNullableByDefaultCompiledMode.Disabled ||
+          c2Mode == NonNullableByDefaultCompiledMode.Weak)) {
+    return true;
+  }
   return false;
 }
 
@@ -136,6 +142,9 @@
     NonNullableByDefaultCompiledMode c2Mode) {
   if (isOK(c1Mode, c2Mode)) {
     if (c1Mode == NonNullableByDefaultCompiledMode.Agnostic) return c2Mode;
+    if (c2Mode == NonNullableByDefaultCompiledMode.Agnostic) return c1Mode;
+    if (c1Mode == NonNullableByDefaultCompiledMode.Disabled) return c1Mode;
+    if (c2Mode == NonNullableByDefaultCompiledMode.Disabled) return c2Mode;
     return c1Mode;
   }
   throw "Not OK combination: $c1Mode and $c2Mode";
diff --git a/pkg/nnbd_migration/CHANGELOG.md b/pkg/nnbd_migration/CHANGELOG.md
index aea8052..66aeb13 100644
--- a/pkg/nnbd_migration/CHANGELOG.md
+++ b/pkg/nnbd_migration/CHANGELOG.md
@@ -1,2 +1,2 @@
-## 0.1.0-dev (not yet published)
+## 0.1.0
 * Separated from analysis_server project.
diff --git a/pkg/nnbd_migration/README.md b/pkg/nnbd_migration/README.md
index f777eee..9719fda 100644
--- a/pkg/nnbd_migration/README.md
+++ b/pkg/nnbd_migration/README.md
@@ -1,9 +1,13 @@
 # Null Safety Migration Tooling
 
-Note: the null safety migration tooling is in an early state and may have bugs
-and other issues.
+**Note**:
 
-For best results, use SDK version 2.9.0-10.0.dev or higher.
+  * The null safety migration tooling is in an early state and may have bugs and
+    other issues.
+  * As null safety is still in preview, we recommend only doing trial
+    migrations. The final migration of apps and packages, should not be done
+    until the feature is more complete.
+  * For best results, use SDK version 2.9.0-10.0.dev or higher.
 
 ## How Migration Works
 
@@ -12,7 +16,7 @@
 
 Typical code migration tools are designed to be run once, handle most cases, and
 let the developer do manual cleanup on the result. This does **not work well**
-for Null-Safety and attempting this workflow will result in a lot more manual
+for null safety and attempting this workflow will result in a lot more manual
 work. Similarly, after your migration has been applied, the migration **cannot
 be rerun** without first reverting it.
 
@@ -27,7 +31,7 @@
 
 Nulls are traced through your program as far as they can go, and types are
 marked nullable in this process. If the tool makes a single mistake or choice
-you disagree with, it can lead many excess nullable types.
+you disagree with, it can lead to many excess nullable types.
 
 ### Interactive feedback to the tool
 
@@ -38,12 +42,12 @@
 quality.
 
 The high level workflow of the tool is therefore driven through an interactive
-web UI. After running `dart migrate`, open the resulting url in a browser. Scan
+web UI. After running `dart migrate`, open the resulting URL in a browser. Scan
 through the changes, use the "nullability trace" feature to find the best place
 to add a nullability hint (adding a hint in the best place can prevent dozens of
 types from being made nullable). Rerun the migration and repeat, committing the
 hints as you go. When the output is correct and acceptable, apply the migration
-and publish your null safe code!
+and publish your null-safe code!
 
 For example,
 
@@ -70,7 +74,7 @@
 
 ```dart
 List<int?> ints = const [0, null];
-int/*?*/ zero = ints[0]!; // Just add /*?*/ here, the migration tool does the rest!
+int/*!*/ zero = ints[0]!; // Just add /*!*/ here, the migration tool does the rest!
 int one = zero + 1;
 List<int> zeroOne = <int>[zero, one];
 ```
@@ -90,22 +94,22 @@
 
 ## Migrating a package
 
-- select a package to work on
-- run `pub get` for the package
+1. Select a package to work on, and open a command terminal in the top-level of
+   the package directory.
+2. Run `pub get` in order to make available all dependencies of the package.
+3. Run the migration tool from the top-level of the package directory:
 
-Then, run the migration tool from the top-level of the package directory:
+   ```
+   dart migrate
+   ```
 
-```
-dart migrate
-```
-
-The migration tool will run and display a url for the web UI. Open that url from
-a browser to view, analyze, and improve the proposed null-safe migration.
+The migration tool will display a URL for the web interface. Open that URL in a
+browser to view, analyze, and improve the proposed null-safe migration.
 
 ## Using the tool
 
 1. Run the tool (see above).
-2. Once analysis and migration is complete, open the indicated url in a browser.
+2. Once analysis and migration is complete, open the indicated URL in a browser.
 3. Start with an important or interesting file in your package on the left side
    by clicking on it.
 4. Look at the proposed edits in the upper right, and click on them in turn.
@@ -121,7 +125,12 @@
 6. Once you are satisfied with the proposed migration:
     1. Save your work using git or other means. Applying the migration will
        overwrite the existing files on disk.
-    2. Rerun the migration by clicking the `Apply Migration` button in the
+       * Note: In addition to making edits to the Dart source code in
+         the package, applying the migration edits the package's `pubspec.yaml`
+         file, in order to change the Dart SDK version constraints, under the
+         `environment` field, and the "Package Config" file, located in the
+         package's `.dart_tool` directory, named `package_config.json`.
+    2. Apply the migration by clicking the `Apply Migration` button in the
        interface.
     3. Tip: leaving the web UI open may help you if you later have test failures
        or analysis errors.
@@ -130,7 +139,7 @@
        what went wrong.
     2. If large changes are required, revert the migration, and go back to step
        one.
-8. Commit and/or publish your migrated null-safe code
+8. Commit and/or publish your migrated null-safe code.
 
 ## Providing feedback
 
diff --git a/pkg/nnbd_migration/bin/migrate.dart b/pkg/nnbd_migration/bin/migrate.dart
index f8abb42..d6202e2 100644
--- a/pkg/nnbd_migration/bin/migrate.dart
+++ b/pkg/nnbd_migration/bin/migrate.dart
@@ -16,5 +16,5 @@
     cli.handleArgParsingException(e);
   }
   if (cli.exitCode == null) await cli.run(argResults);
-  exit(cli.exitCode ?? 0);
+  exitCode = cli.exitCode;
 }
diff --git a/pkg/nnbd_migration/lib/migration_cli.dart b/pkg/nnbd_migration/lib/migration_cli.dart
index d1883c0..3a0a4af 100644
--- a/pkg/nnbd_migration/lib/migration_cli.dart
+++ b/pkg/nnbd_migration/lib/migration_cli.dart
@@ -27,6 +27,7 @@
 import 'package:nnbd_migration/src/front_end/dartfix_listener.dart';
 import 'package:nnbd_migration/src/front_end/driver_provider_impl.dart';
 import 'package:nnbd_migration/src/front_end/non_nullable_fix.dart';
+import 'package:nnbd_migration/src/utilities/json.dart' as json;
 import 'package:nnbd_migration/src/utilities/source_edit_diff_formatter.dart';
 import 'package:path/path.dart' show Context;
 
@@ -102,32 +103,33 @@
     try {
       if ((result.stderr as String).isNotEmpty) {
         throw FormatException(
-            '`$_pubName outdated --mode=null-safety` exited with exit code '
+            '`pub outdated --mode=null-safety` exited with exit code '
             '${result.exitCode} and stderr:\n\n${result.stderr}');
       }
       var outdatedOutput = jsonDecode(result.stdout as String);
-      var outdatedMap = _expectType<Map>(outdatedOutput, 'root');
-      var packageList = _expectType<List>(outdatedMap['packages'], 'packages');
+      var outdatedMap = json.expectType<Map>(outdatedOutput, 'root');
+      var packageList =
+          json.expectType<List>(outdatedMap['packages'], 'packages');
       for (var package_ in packageList) {
-        var package = _expectType<Map>(package_, '');
-        var current_ = _expectKey(package, 'current');
+        var package = json.expectType<Map>(package_, '');
+        var current_ = json.expectKey(package, 'current');
         if (current_ == null) {
           continue;
         }
-        var current = _expectType<Map>(current_, 'current');
-        if (_expectType<bool>(current['nullSafety'], 'nullSafety')) {
+        var current = json.expectType<Map>(current_, 'current');
+        if (json.expectType<bool>(current['nullSafety'], 'nullSafety')) {
           // For whatever reason, there is no "current" version of this package.
           // TODO(srawlins): We may want to report this to the user. But it may
           // be inconsequential.
           continue;
         }
 
-        _expectKey(package, 'package');
-        _expectKey(current, 'version');
-        var name = _expectType<String>(package['package'], 'package');
+        json.expectKey(package, 'package');
+        json.expectKey(current, 'version');
+        var name = json.expectType<String>(package['package'], 'package');
         // A version will be given, even if a package was provided with a local
         // or git path.
-        var version = _expectType<String>(current['version'], 'version');
+        var version = json.expectType<String>(current['version'], 'version');
         preNullSafetyPackages[name] = version;
       }
     } on FormatException catch (e) {
@@ -148,33 +150,17 @@
       _logger.stderr('');
       _logger.stderr('It is highly recommended to upgrade all dependencies to '
           'versions which have migrated. Use `$_pubName outdated '
-          '--mode=null-safety` to check the status of dependencies. Visit '
-          'https://dart.dev/tools/pub/cmd/pub-outdated for more information.');
+          '--mode=null-safety` to check the status of dependencies.');
       _logger.stderr('');
-      _logger.stderr('Force migration with --skip-outdated-dependencies-check '
-          '(not recommended)');
+      _logger.stderr('Visit https://dart.dev/tools/pub/cmd/pub-outdated for '
+          'more information.');
+      _logger.stderr('');
+      _logger.stderr('Force migration with '
+          '--${CommandLineOptions.skipPubOutdatedFlag} (not recommended)');
       return false;
     }
     return true;
   }
-
-  dynamic _expectKey(Map<Object, Object> map, String key) {
-    if (map.containsKey(key)) {
-      return map[key];
-    }
-    throw FormatException(
-        'Unexpected `$_pubName outdated` JSON output: missing key ($key)', map);
-  }
-
-  T _expectType<T>(Object object, String errorKey) {
-    if (object is T) {
-      return object;
-    }
-    throw FormatException(
-        'Unexpected `$_pubName outdated` JSON output: expected a '
-        '$T at "$errorKey", but got a ${object.runtimeType}',
-        object);
-  }
 }
 
 class MigrateCommand extends Command<dynamic> {
@@ -804,7 +790,7 @@
     _progressBar = _ProgressBar(pathsToProcess.length * _task.numPhases);
 
     // Process package
-    await _task.processPackage(context.contextRoot.root);
+    _task.processPackage(context.contextRoot.root);
 
     // Process each source file.
     await processResources((ResolvedUnitResult result) async {
diff --git a/pkg/nnbd_migration/lib/src/front_end/non_nullable_fix.dart b/pkg/nnbd_migration/lib/src/front_end/non_nullable_fix.dart
index 5148f75..001ee1f 100644
--- a/pkg/nnbd_migration/lib/src/front_end/non_nullable_fix.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/non_nullable_fix.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'dart:convert' show jsonDecode, JsonEncoder;
+
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/file_system/file_system.dart';
@@ -15,6 +17,7 @@
 import 'package:nnbd_migration/src/front_end/migration_state.dart';
 import 'package:nnbd_migration/src/front_end/migration_summary.dart';
 import 'package:nnbd_migration/src/preview/http_preview_server.dart';
+import 'package:nnbd_migration/src/utilities/json.dart' as json;
 import 'package:pub_semver/pub_semver.dart';
 import 'package:source_span/source_span.dart';
 import 'package:yaml/yaml.dart';
@@ -31,6 +34,9 @@
   //  `Feature.non_nullable.firstSupportedVersion` when this becomes non-null.
   static const String _intendedMinimumSdkVersion = '2.9.0';
 
+  // In the package_config.json file, the patch number is omitted.
+  static const String _intendedLanguageVersion = '2.9';
+
   static const String _intendedSdkVersionConstraint =
       '>=$_intendedMinimumSdkVersion <2.10.0';
 
@@ -120,101 +126,36 @@
     }
   }
 
-  /// Update the pubspec.yaml file to specify a minimum Dart SDK version which
-  /// enables the Null Safety feature.
-  Future<void> processPackage(Folder pkgFolder) async {
+  /// Processes the non-source files of the package rooted at [pkgFolder].
+  ///
+  /// This means updating the pubspec.yaml file and the package_config.json
+  /// file, if necessary.
+  void processPackage(Folder pkgFolder) {
     if (!_packageIsNNBD) {
       return;
     }
 
     var pubspecFile = pkgFolder.getChildAssumingFile('pubspec.yaml');
-    String pubspecContent;
-    YamlNode pubspecMap;
     if (!pubspecFile.exists) {
       // TODO(srawlins): Handle other package types, such as Bazel.
       return;
     }
 
+    _Pubspec pubspec;
     try {
-      pubspecContent = pubspecFile.readAsStringSync();
+      pubspec = _Pubspec.parseFrom(pubspecFile);
     } on FileSystemException catch (e) {
-      processYamlException('read', pubspecFile.path, e);
+      _processPubspecException('read', pubspecFile.path, e);
       return;
-    }
-    try {
-      pubspecMap = loadYaml(pubspecContent) as YamlNode;
-    } on YamlException catch (e) {
-      processYamlException('parse', pubspecFile.path, e);
+    } on FormatException catch (e) {
+      _processPubspecException('parse', pubspecFile.path, e);
       return;
     }
 
-    /// Inserts [content] into [pubspecFile], immediately after [parentSpan].
-    void insertAfterParent(SourceSpan parentSpan, String content) {
-      var line = parentSpan.end.line;
-      var offset = parentSpan.end.offset;
-      // Walk [offset] and [line] back to the first non-whitespace character
-      // before [offset].
-      while (offset > 0) {
-        var ch = pubspecContent.codeUnitAt(offset - 1);
-        if (ch == $space || ch == $cr) {
-          --offset;
-        } else if (ch == $lf) {
-          --offset;
-          --line;
-        } else {
-          break;
-        }
-      }
-      var edit = SourceEdit(offset, 0, content);
-      listener.addSourceFileEdit(
-          'enable Null Safety language feature',
-          Location(pubspecFile.path, offset, content.length, line, 0),
-          SourceFileEdit(pubspecFile.path, 0, edits: [edit]));
-    }
+    var updated = _processPubspec(pubspec);
 
-    void replaceSpan(SourceSpan span, String content) {
-      var line = span.start.line;
-      var offset = span.start.offset;
-      var edit = SourceEdit(offset, span.length, content);
-      listener.addSourceFileEdit(
-          'enable Null Safety language feature',
-          Location(pubspecFile.path, offset, content.length, line, 0),
-          SourceFileEdit(pubspecFile.path, 0, edits: [edit]));
-    }
-
-    YamlNode environmentOptions;
-    if (pubspecMap is YamlMap) {
-      environmentOptions = pubspecMap.nodes['environment'];
-    }
-    if (environmentOptions == null) {
-      var start = SourceLocation(0, line: 0, column: 0);
-      var content = '''
-environment:
-  sdk: '$_intendedSdkVersionConstraint'
-
-''';
-      insertAfterParent(SourceSpan(start, start, ''), content);
-    } else if (environmentOptions is YamlMap) {
-      var sdk = environmentOptions.nodes['sdk'];
-      if (sdk == null) {
-        var content = """
-
-  sdk: '$_intendedSdkVersionConstraint'""";
-        insertAfterParent(environmentOptions.span, content);
-      } else if (sdk is YamlScalar) {
-        var currentConstraint = VersionConstraint.parse(sdk.value as String);
-        var minimumVersion = Version.parse(_intendedMinimumSdkVersion);
-        if (currentConstraint is VersionRange &&
-            currentConstraint.min >= minimumVersion) {
-          // The current SDK version constraint already enables Null Safety.
-          return;
-        } else {
-          // TODO(srawlins): This overwrites the current maximum version. In
-          // the uncommon situation that the maximum is not '<3.0.0', it should
-          // not.
-          replaceSpan(sdk.span, "'$_intendedSdkVersionConstraint'");
-        }
-      }
+    if (updated) {
+      _processConfigFile(pkgFolder, pubspec);
     }
   }
 
@@ -237,20 +178,6 @@
     }
   }
 
-  void processYamlException(String action, String optionsFilePath, error) {
-    listener.addRecommendation('''Failed to $action options file
-  $optionsFilePath
-  $error
-
-  Manually update this file to enable the Null Safety language feature by
-  adding:
-
-    environment:
-      sdk: '$_intendedSdkVersionConstraint';
-''');
-    _packageIsNNBD = false;
-  }
-
   Future<MigrationState> rerun() async {
     reset();
     await rerunFunction();
@@ -275,6 +202,188 @@
     _server?.close();
   }
 
+  /// Updates the Package Config file to specify a minimum Dart SDK version
+  /// which enables the Null Safety feature.
+  void _processConfigFile(Folder pkgFolder, _Pubspec pubspec) {
+    if (!_packageIsNNBD) {
+      return;
+    }
+
+    var packageName = pubspec._getName();
+    if (packageName == null) {}
+
+    var packageConfigFile = pkgFolder
+        .getChildAssumingFolder('.dart_tool')
+        .getChildAssumingFile('package_config.json');
+
+    if (!packageConfigFile.exists) {
+      _processPackageConfigException(
+          'Warning: Could not find the package configuration file.',
+          packageConfigFile.path);
+      return;
+    }
+    try {
+      var configText = packageConfigFile.readAsStringSync();
+      var configMap = json.expectType<Map>(jsonDecode(configText), 'root');
+      json.expectKey(configMap, 'configVersion');
+      var configVersion =
+          json.expectType<int>(configMap['configVersion'], 'configVersion');
+      if (configVersion != 2) {
+        _processPackageConfigException(
+            'Warning: Unexpected package configuration file version '
+            '$configVersion (expected version 2). Cannot update this file.',
+            packageConfigFile.path);
+        return;
+      }
+      json.expectKey(configMap, 'packages');
+      var packagesList =
+          json.expectType<List>(configMap['packages'], 'packages');
+      for (var package in packagesList) {
+        var packageMap = json.expectType<Map>(package, 'package');
+        json.expectKey(packageMap, 'name');
+        var name = json.expectType<String>(packageMap['name'], 'name');
+        if (name != packageName) {
+          continue;
+        }
+        json.expectKey(packageMap, 'languageVersion');
+        packageMap['languageVersion'] = _intendedLanguageVersion;
+        // Pub appears to always use a two-space indent. This will minimize the
+        // diff between the previous text and the new text.
+        var newText = JsonEncoder.withIndent('  ').convert(configMap) + '\n';
+
+        // TODO(srawlins): This is inelegant. We add an "edit" which replaces
+        // the entire content of the package config file with new content, while
+        // it is likely that only 1 character has changed. I do not know of a
+        // JSON parser that yields SourceSpans, so that I may know the proper
+        // index. One idea, another hack, would be to write a magic string in
+        // place of the version number, encode to JSON, and find the index of
+        // the magic string.
+        var line = 0;
+        var offset = 0;
+        var edit = SourceEdit(offset, configText.length, newText);
+        listener.addSourceFileEdit(
+            'enable Null Safety language feature',
+            Location(packageConfigFile.path, offset, newText.length, line, 0),
+            SourceFileEdit(packageConfigFile.path, 0, edits: [edit]));
+      }
+    } on FormatException catch (e) {
+      _processPackageConfigException(
+          'Warning: Encountered an error parsing the package configuration '
+          'file: $e\n\nCannot update this file.',
+          packageConfigFile.path);
+    }
+  }
+
+  void _processPackageConfigException(String prefix, String packageConfigPath,
+      [Object error = '']) {
+    // TODO(#42138): This should use [listener.addRecommendation] when that
+    // function is implemented.
+    print('''$prefix
+  $packageConfigPath
+  $error
+
+  Be sure to run `pub get` before examining the results of the migration.
+''');
+  }
+
+  /// Updates the pubspec.yaml file to specify a minimum Dart SDK version which
+  /// enables the Null Safety feature.
+  bool _processPubspec(_Pubspec pubspec) {
+    /// Inserts [content] into [pubspecFile], immediately after [parentSpan].
+    void insertAfterParent(SourceSpan parentSpan, String content) {
+      var line = parentSpan.end.line;
+      var offset = parentSpan.end.offset;
+      // Walk [offset] and [line] back to the first non-whitespace character
+      // before [offset].
+      while (offset > 0) {
+        var ch = pubspec.textContent.codeUnitAt(offset - 1);
+        if (ch == $space || ch == $cr) {
+          --offset;
+        } else if (ch == $lf) {
+          --offset;
+          --line;
+        } else {
+          break;
+        }
+      }
+      var edit = SourceEdit(offset, 0, content);
+      listener.addSourceFileEdit(
+          'enable Null Safety language feature',
+          Location(pubspec.path, offset, content.length, line, 0),
+          SourceFileEdit(pubspec.path, 0, edits: [edit]));
+    }
+
+    void replaceSpan(SourceSpan span, String content) {
+      var line = span.start.line;
+      var offset = span.start.offset;
+      var edit = SourceEdit(offset, span.length, content);
+      listener.addSourceFileEdit(
+          'enable Null Safety language feature',
+          Location(pubspec.path, offset, content.length, line, 0),
+          SourceFileEdit(pubspec.path, 0, edits: [edit]));
+    }
+
+    var pubspecMap = pubspec.content;
+    YamlNode environmentOptions;
+    if (pubspecMap is YamlMap) {
+      environmentOptions = pubspecMap.nodes['environment'];
+    }
+    if (environmentOptions == null) {
+      var start = SourceLocation(0, line: 0, column: 0);
+      var content = '''
+environment:
+  sdk: '$_intendedSdkVersionConstraint'
+
+''';
+      insertAfterParent(SourceSpan(start, start, ''), content);
+    } else if (environmentOptions is YamlMap) {
+      var sdk = environmentOptions.nodes['sdk'];
+      if (sdk == null) {
+        var content = """
+
+  sdk: '$_intendedSdkVersionConstraint'""";
+        insertAfterParent(environmentOptions.span, content);
+      } else if (sdk is YamlScalar) {
+        VersionConstraint currentConstraint;
+        if (sdk.value is String) {
+          currentConstraint = VersionConstraint.parse(sdk.value as String);
+          var minimumVersion = Version.parse(_intendedMinimumSdkVersion);
+          if (currentConstraint is VersionRange &&
+              currentConstraint.min >= minimumVersion) {
+            // The current SDK version constraint already enables Null Safety.
+            // Do not edit pubspec.yaml, nor package_config.json.
+            return false;
+          } else {
+            // TODO(srawlins): This overwrites the current maximum version. In
+            // the uncommon situation that the maximum is not '<3.0.0', it
+            // should not.
+            replaceSpan(sdk.span, "'$_intendedSdkVersionConstraint'");
+          }
+        } else {
+          // Something is odd with the SDK constraint we've found in
+          // pubspec.yaml; Best to leave it alone.
+          return false;
+        }
+      }
+    }
+
+    return true;
+  }
+
+  void _processPubspecException(String action, String pubspecPath, error) {
+    listener.addRecommendation('''Failed to $action pubspec file
+  $pubspecPath
+  $error
+
+  Manually update this file to enable the Null Safety language feature by
+  adding:
+
+    environment:
+      sdk: '$_intendedSdkVersionConstraint';
+''');
+    _packageIsNNBD = false;
+  }
+
   /// Allows unit tests to shut down any rogue servers that have been started,
   /// so that unit testing can complete.
   @visibleForTesting
@@ -341,3 +450,37 @@
 $stackTrace''');
   }
 }
+
+class _Pubspec {
+  final String path;
+  final String textContent;
+  final YamlNode content;
+
+  factory _Pubspec.parseFrom(File file) {
+    var textContent = file.readAsStringSync();
+    var content = loadYaml(textContent);
+    if (content is YamlNode) {
+      return _Pubspec._(file.path, textContent, content);
+    } else {
+      throw FormatException('pubspec.yaml is not a YAML map.');
+    }
+  }
+
+  _Pubspec._(this.path, this.textContent, this.content);
+
+  String _getName() {
+    YamlNode packageNameNode;
+
+    if (content is YamlMap) {
+      packageNameNode = (content as YamlMap).nodes['name'];
+    } else {
+      return null;
+    }
+
+    if (packageNameNode is YamlScalar && packageNameNode.value is String) {
+      return packageNameNode.value as String;
+    } else {
+      return null;
+    }
+  }
+}
diff --git a/pkg/nnbd_migration/lib/src/front_end/unit_renderer.dart b/pkg/nnbd_migration/lib/src/front_end/unit_renderer.dart
index 2eaa081..c75973b 100644
--- a/pkg/nnbd_migration/lib/src/front_end/unit_renderer.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/unit_renderer.dart
@@ -227,7 +227,7 @@
     }
 
     var previousOffset = 0;
-    regions.write('<table data-path="${unit.path}"><tbody>');
+    regions.write('<table data-path="${pathMapper.map(unit.path)}"><tbody>');
     regions.write('<tr><td class="line-no">$lineNumber</td><td>');
     for (var region in unitInfo.regions) {
       var offset = region.offset;
diff --git a/pkg/nnbd_migration/lib/src/preview/preview_site.dart b/pkg/nnbd_migration/lib/src/preview/preview_site.dart
index 45d8cca..d561cda 100644
--- a/pkg/nnbd_migration/lib/src/preview/preview_site.dart
+++ b/pkg/nnbd_migration/lib/src/preview/preview_site.dart
@@ -261,18 +261,12 @@
       throw StateError('Cannot perform edit. Relevant code has been deleted by'
           ' a previous hint action. Rerun the migration and try again.');
     }
-    final insertionOnly = offset == end;
-    if (insertionOnly) {
-      unitInfo.handleSourceEdit(SourceEdit(offset, 0, replacement));
-      migrationState.needsRerun = true;
-    }
+    unitInfo.handleSourceEdit(SourceEdit(offset, end - offset, replacement));
+    migrationState.needsRerun = true;
     var newContent =
         diskContent.replaceRange(diskOffsetStart, diskOffsetEnd, replacement);
     file.writeAsStringSync(newContent);
     unitInfo.diskContent = newContent;
-    if (!insertionOnly) {
-      await rerunMigration();
-    }
   }
 
   /// Perform the edit indicated by the [uri].
diff --git a/pkg/nnbd_migration/lib/src/utilities/json.dart b/pkg/nnbd_migration/lib/src/utilities/json.dart
new file mode 100644
index 0000000..36fd728
--- /dev/null
+++ b/pkg/nnbd_migration/lib/src/utilities/json.dart
@@ -0,0 +1,29 @@
+/// Utilities for handling parsed JSON.
+///
+/// It is recommended to import this library with a prefix.
+
+/// Expects [map] to contain [key], a String key.
+///
+/// If [map] has key [key], return the value paired with [key]; otherwise throw
+/// a FormatException.
+dynamic expectKey(Map<Object, Object> map, String key) {
+  if (map.containsKey(key)) {
+    return map[key];
+  }
+  throw FormatException(
+      'Unexpected `pub outdated` JSON output: missing key ($key)', map);
+}
+
+/// Expects [object] to be of type [T].
+///
+/// If [object] is of type [T], return it; otherwise throw a FormatException
+/// with [errorKey] in the message.
+T expectType<T>(Object object, String errorKey) {
+  if (object is T) {
+    return object;
+  }
+  throw FormatException(
+      'Unexpected `pub outdated` JSON output: expected a '
+      '$T at "$errorKey", but got a ${object.runtimeType}',
+      object);
+}
diff --git a/pkg/nnbd_migration/pubspec.yaml b/pkg/nnbd_migration/pubspec.yaml
index f55ed27..1c84a36 100644
--- a/pkg/nnbd_migration/pubspec.yaml
+++ b/pkg/nnbd_migration/pubspec.yaml
@@ -1,14 +1,25 @@
 name: nnbd_migration
-publish_to: none
+description: Null Safety Migration Tooling
+homepage: https://github.com/dart-lang/sdk/blob/master/pkg/nnbd_migration/README.md
+version: 0.1.0
 environment:
   sdk: '>=2.6.0 <3.0.0'
 dependencies:
-  _fe_analyzer_shared: ^2.0.0
-  analyzer: ^0.37.0
-  analyzer_plugin: ^0.2.2
+  _fe_analyzer_shared: ^4.0.0
+  analyzer: ^0.39.9
+  analyzer_plugin: ^0.2.4
+  args: ^1.4.4
+  charcode: ^1.1.2
   cli_util: ^0.1.4
+  collection: ^1.14.11
+  crypto: ^2.0.6
+  meta: ^1.1.6
   path: ^1.6.2
-  stream_channel: any
-  yaml: any
+  pub_semver: ^1.4.2
+  source_span: ^1.4.1
+  yaml: ^2.1.15
 dev_dependencies:
-  args: ^1.5.2
+  http: '>=0.11.3+17 <0.13.0'
+  test: ^1.6.4
+  test_core: '>=0.2.6 <0.4.0'
+  test_reflective_loader: ^0.1.8
diff --git a/pkg/nnbd_migration/test/migration_cli_test.dart b/pkg/nnbd_migration/test/migration_cli_test.dart
index bcd1c0d..f86b9a9 100644
--- a/pkg/nnbd_migration/test/migration_cli_test.dart
+++ b/pkg/nnbd_migration/test/migration_cli_test.dart
@@ -208,13 +208,32 @@
     resourceProvider.newFolder(resourceProvider.pathContext.current);
   }
 
-  Map<String, String> simpleProject({bool migrated: false, String sourceText}) {
+  Map<String, String> simpleProject(
+      {bool migrated: false,
+      String sourceText,
+      String pubspecText,
+      String packageConfigText}) {
     return {
-      'pubspec.yaml': '''
+      'pubspec.yaml': pubspecText ??
+          '''
 name: test
 environment:
   sdk: '${migrated ? '>=2.9.0 <2.10.0' : '>=2.6.0 <3.0.0'}'
 ''',
+      '.dart_tool/package_config.json': packageConfigText ??
+          '''
+{
+  "configVersion": 2,
+  "packages": [
+    {
+      "name": "test",
+      "rootUri": "../",
+      "packageUri": "lib/",
+      "languageVersion": "${migrated ? '2.9' : '2.6'}"
+    }
+  ]
+}
+''',
       'lib/test.dart': sourceText ??
           '''
 int${migrated ? '?' : ''} f() => null;
@@ -563,6 +582,38 @@
     });
   }
 
+  test_lifecycle_preview_region_table_path() async {
+    var projectContents = simpleProject(sourceText: 'int x;');
+    var projectDir = await createProjectDir(projectContents);
+    var cli = _createCli();
+    await runWithPreviewServer(cli, [projectDir], (url) async {
+      expect(
+          logger.stdoutBuffer.toString(), contains('No analysis issues found'));
+      await assertPreviewServerResponsive(url);
+      final uri = Uri.parse(url);
+      final authToken = uri.queryParameters['authToken'];
+      final fileResponse = await http.get(
+          uri.replace(
+              path: resourceProvider.pathContext
+                  .toUri(resourceProvider.pathContext
+                      .join(projectDir, 'lib', 'test.dart'))
+                  .path,
+              queryParameters: {'inline': 'true', 'authToken': authToken}),
+          headers: {'Content-Type': 'application/json; charset=UTF-8'});
+      final fileJson = FileDetails.fromJson(jsonDecode(fileResponse.body));
+      final regions = fileJson.regions;
+      final regionsPathRegex = RegExp(r'<table data-path="([^"]+)">');
+      expect(regionsPathRegex.hasMatch(regions), true);
+      final regionsPath = regionsPathRegex.matchAsPrefix(regions).group(1);
+      final contentsResponse = await http.get(
+          uri.replace(
+              path: Uri.parse(regionsPath).path,
+              queryParameters: {'inline': 'true', 'authToken': authToken}),
+          headers: {'Content-Type': 'application/json; charset=UTF-8'});
+      assertHttpSuccess(contentsResponse);
+    });
+  }
+
   test_lifecycle_preview_rerun() async {
     var origSourceText = 'void f() {}';
     var projectContents = simpleProject(sourceText: origSourceText);
@@ -963,6 +1014,85 @@
             'Could not find an option named "this-option-does-not-exist"'));
   }
 
+  test_package_config_does_not_exist() async {
+    var projectContents = simpleProject()
+      ..remove('.dart_tool/package_config.json');
+    var projectDir = await createProjectDir(projectContents);
+    var cli = _createCli();
+    await cli
+        .run(_parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
+    // The Dart source code should still be migrated.
+    assertProjectContents(
+        projectDir,
+        simpleProject(migrated: true)
+          ..remove('.dart_tool/package_config.json'));
+  }
+
+  test_package_config_is_missing_languageVersion() async {
+    var packageConfigText = '''
+{
+  "configVersion": 3,
+  "packages": [
+    {
+      "name": "test",
+      "rootUri": "../",
+      "packageUri": "lib/"
+    }
+  ]
+}
+''';
+    var projectContents = simpleProject(packageConfigText: packageConfigText);
+    var projectDir = await createProjectDir(projectContents);
+    var cli = _createCli();
+    await cli
+        .run(_parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
+    // The Dart source code should still be migrated.
+    assertProjectContents(projectDir,
+        simpleProject(migrated: true, packageConfigText: packageConfigText));
+  }
+
+  test_package_config_is_missing_this_package() async {
+    var packageConfigText = '''
+{
+  "configVersion": 3,
+  "packages": [
+  ]
+}
+''';
+    var projectContents = simpleProject(packageConfigText: packageConfigText);
+    var projectDir = await createProjectDir(projectContents);
+    var cli = _createCli();
+    await cli
+        .run(_parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
+    // The Dart source code should still be migrated.
+    assertProjectContents(projectDir,
+        simpleProject(migrated: true, packageConfigText: packageConfigText));
+  }
+
+  test_package_config_is_wrong_version() async {
+    var packageConfigText = '''
+{
+  "configVersion": 3,
+  "packages": [
+    {
+      "name": "test",
+      "rootUri": "../",
+      "packageUri": "lib/",
+      "languageVersion": "2.6"
+    }
+  ]
+}
+''';
+    var projectContents = simpleProject(packageConfigText: packageConfigText);
+    var projectDir = await createProjectDir(projectContents);
+    var cli = _createCli();
+    await cli
+        .run(_parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
+    // The Dart source code should still be migrated.
+    assertProjectContents(projectDir,
+        simpleProject(migrated: true, packageConfigText: packageConfigText));
+  }
+
   test_pub_outdated_has_malformed_json() {
     assertPubOutdatedSuccess(pubOutdatedStdout: '{ "packages": }');
     expect(logger.stderrBuffer.toString(), startsWith('Warning:'));
@@ -1091,6 +1221,105 @@
     expect(logger.stderrBuffer.toString(), startsWith('Warning:'));
   }
 
+  test_pubspec_does_not_exist() async {
+    var projectContents = simpleProject()
+      ..remove('pubspec.yaml')
+      ..remove('.dart_tool/package_config.json');
+    var projectDir = await createProjectDir(projectContents);
+    var cli = _createCli();
+    await cli
+        .run(_parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
+    // The Dart source code should still be migrated.
+    assertProjectContents(
+        projectDir,
+        simpleProject(migrated: true)
+          ..remove('pubspec.yaml')
+          ..remove('.dart_tool/package_config.json'));
+  }
+
+  test_pubspec_environment_is_missing_sdk() async {
+    var projectContents = simpleProject(pubspecText: '''
+name: test
+environment:
+  foo: 1
+''');
+    var projectDir = await createProjectDir(projectContents);
+    var cli = _createCli();
+    await cli
+        .run(_parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
+    // The Dart source code should still be migrated.
+    assertProjectContents(
+        projectDir, simpleProject(migrated: true, pubspecText: '''
+name: test
+environment:
+  foo: 1
+  sdk: '>=2.9.0 <2.10.0'
+'''));
+  }
+
+  test_pubspec_environment_is_not_a_map() async {
+    var pubspecText = '''
+name: test
+environment: 1
+''';
+    var projectContents = simpleProject(pubspecText: pubspecText);
+    var projectDir = await createProjectDir(projectContents);
+    var cli = _createCli();
+    await cli
+        .run(_parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
+    // The Dart source code should still be migrated.
+    assertProjectContents(
+        projectDir, simpleProject(migrated: true, pubspecText: pubspecText));
+  }
+
+  test_pubspec_environment_sdk_is_not_string() async {
+    var pubspecText = '''
+name: test
+environment:
+  sdk: 1
+''';
+    var projectContents = simpleProject(pubspecText: pubspecText)
+      ..remove('.dart_tool/package_config.json');
+    var projectDir = await createProjectDir(projectContents);
+    var cli = _createCli();
+    await cli
+        .run(_parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
+    // The Dart source code should still be migrated.
+    assertProjectContents(
+        projectDir,
+        simpleProject(migrated: true, pubspecText: pubspecText)
+          ..remove('.dart_tool/package_config.json'));
+  }
+
+  test_pubspec_is_missing_environment() async {
+    var projectContents = simpleProject(pubspecText: '''
+name: test
+''');
+    var projectDir = await createProjectDir(projectContents);
+    var cli = _createCli();
+    await cli
+        .run(_parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
+    // The Dart source code should still be migrated.
+    assertProjectContents(projectDir, simpleProject(migrated: true, pubspecText:
+        // This is strange-looking, but valid.
+        '''
+environment:
+  sdk: '>=2.9.0 <2.10.0'
+
+name: test
+'''));
+  }
+
+  test_pubspec_is_not_a_map() async {
+    var projectContents = simpleProject(pubspecText: 'not-a-map');
+    var projectDir = await createProjectDir(projectContents);
+    var cli = _createCli();
+    expect(
+        () async => await cli.run(
+            _parseArgs(['--no-web-preview', '--apply-changes', projectDir])),
+        throwsUnsupportedError);
+  }
+
   test_uses_physical_resource_provider_by_default() {
     var cli = MigrationCli(binaryName: 'nnbd_migration');
     expect(cli.resourceProvider, same(PhysicalResourceProvider.INSTANCE));
diff --git a/pkg/test_runner/lib/src/test_configurations.dart b/pkg/test_runner/lib/src/test_configurations.dart
index c1af470..4107748 100644
--- a/pkg/test_runner/lib/src/test_configurations.dart
+++ b/pkg/test_runner/lib/src/test_configurations.dart
@@ -32,11 +32,11 @@
   Path('runtime/observatory/tests/observatory_ui'),
   Path('samples'),
   Path('samples-dev'),
-  Path('tests/compiler/dart2js_extra'),
   Path('tests/compiler/dart2js_native'),
   Path('tests/compiler/dartdevc_native'),
   Path('tests/corelib'),
   Path('tests/corelib_2'),
+  Path('tests/dart2js_2'),
   Path('tests/kernel'),
   Path('tests/language'),
   Path('tests/language_2'),
diff --git a/runtime/bin/main_options.cc b/runtime/bin/main_options.cc
index d72e5a8..aceeeca 100644
--- a/runtime/bin/main_options.cc
+++ b/runtime/bin/main_options.cc
@@ -379,6 +379,16 @@
   return true;
 }
 
+static void ResolveDartDevSnapshotPath(const char* script,
+                                       char** snapshot_path) {
+  if (!DartDevUtils::TryResolveDartDevSnapshotPath(snapshot_path)) {
+    Syslog::PrintErr(
+        "Could not find DartDev snapshot and '%s' is not a valid script.\n",
+        script);
+    Platform::Exit(kErrorExitCode);
+  }
+}
+
 int Options::ParseArguments(int argc,
                             char** argv,
                             bool vm_run_app_snapshot,
@@ -398,8 +408,12 @@
 
   CommandLineOptions temp_vm_options(vm_options->max_count());
 
+  bool enable_dartdev_analytics = false;
+  bool disable_dartdev_analytics = false;
+
   // Parse out the vm options.
   while (i < argc) {
+    bool skipVmOption = false;
     if (OptionProcessor::TryProcess(argv[i], &temp_vm_options)) {
       i++;
     } else {
@@ -413,6 +427,14 @@
       const char* kPrintFlags2 = "--print_flags";
       const char* kVerboseDebug1 = "--verbose_debug";
       const char* kVerboseDebug2 = "--verbose-debug";
+
+      // The following two flags are processed as DartDev flags and are not to
+      // be treated as if they are VM flags.
+      const char* kEnableDartDevAnalytics1 = "--enable-analytics";
+      const char* kEnableDartDevAnalytics2 = "--enable_analytics";
+      const char* kDisableDartDevAnalytics1 = "--disable-analytics";
+      const char* kDisableDartDevAnalytics2 = "--disable_analytics";
+
       if ((strncmp(argv[i], kPrintFlags1, strlen(kPrintFlags1)) == 0) ||
           (strncmp(argv[i], kPrintFlags2, strlen(kPrintFlags2)) == 0)) {
         *print_flags_seen = true;
@@ -421,8 +443,22 @@
                  (strncmp(argv[i], kVerboseDebug2, strlen(kVerboseDebug2)) ==
                   0)) {
         *verbose_debug_seen = true;
+      } else if ((strncmp(argv[i], kEnableDartDevAnalytics1,
+                          strlen(kEnableDartDevAnalytics1)) == 0) ||
+                 (strncmp(argv[i], kEnableDartDevAnalytics2,
+                          strlen(kEnableDartDevAnalytics2)) == 0)) {
+        enable_dartdev_analytics = true;
+        skipVmOption = true;
+      } else if ((strncmp(argv[i], kDisableDartDevAnalytics1,
+                          strlen(kDisableDartDevAnalytics1)) == 0) ||
+                 (strncmp(argv[i], kDisableDartDevAnalytics2,
+                          strlen(kDisableDartDevAnalytics2)) == 0)) {
+        disable_dartdev_analytics = true;
+        skipVmOption = true;
       }
-      temp_vm_options.AddArgument(argv[i]);
+      if (!skipVmOption) {
+        temp_vm_options.AddArgument(argv[i]);
+      }
       i++;
     }
   }
@@ -470,11 +506,8 @@
       *script_name = strdup(argv[i]);
       run_script = true;
       i++;
-    } else if (!DartDevUtils::TryResolveDartDevSnapshotPath(script_name)) {
-      Syslog::PrintErr(
-          "Could not find DartDev snapshot and '%s' is not a valid script.\n",
-          argv[i]);
-      Platform::Exit(kErrorExitCode);
+    } else {
+      ResolveDartDevSnapshotPath(argv[i], script_name);
     }
     // Handle the special case where the user is running a Dart program without
     // using a DartDev command and wants to use the VM service. Here we'll run
@@ -491,6 +524,19 @@
     // Let DartDev handle the default help message.
     dart_options->AddArgument("help");
     return 0;
+  } 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.
+    ResolveDartDevSnapshotPath(argv[i], script_name);
+
+    if (enable_dartdev_analytics) {
+      dart_options->AddArgument("--enable-analytics");
+    }
+    if (disable_dartdev_analytics) {
+      dart_options->AddArgument("--disable-analytics");
+    }
+    return 0;
   } else {
     return -1;
   }
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 66221bf..6a1a401 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -489,6 +489,9 @@
 DART_EXPORT void Dart_DeleteWeakPersistentHandle(
     Dart_WeakPersistentHandle object);
 
+DART_EXPORT void Dart_UpdateExternalSize(Dart_WeakPersistentHandle object,
+                                         intptr_t external_allocation_size);
+
 /*
  * ==========================
  * Initialization and Globals
@@ -3351,16 +3354,6 @@
   const char* uri;
   const char* source;
 } Dart_SourceFile;
-DART_EXPORT Dart_KernelCompilationResult
-Dart_CompileSourcesToKernel(const char* script_uri,
-                            const uint8_t* platform_kernel,
-                            intptr_t platform_kernel_size,
-                            int source_files_count,
-                            Dart_SourceFile source_files[],
-                            bool incremental_compile,
-                            const char* package_config,
-                            const char* multiroot_filepaths,
-                            const char* multiroot_scheme);
 
 DART_EXPORT Dart_KernelCompilationResult Dart_KernelListDependencies();
 
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index 7aa88bb..c16feab 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -29,6 +29,9 @@
 [ $mode == product ]
 *: SkipByDesign
 
+[ $system == android ]
+string_escaping_test: Skip # Issue http://dartbug.com/42094
+
 [ $system == windows ]
 *: Slow
 async_generator_breakpoint_test: Skip # Issue 29145
diff --git a/runtime/tests/vm/dart/appjit_load_static_licm_test_body.dart b/runtime/tests/vm/dart/appjit_load_static_licm_test_body.dart
index 4006853..93c85f6 100644
--- a/runtime/tests/vm/dart/appjit_load_static_licm_test_body.dart
+++ b/runtime/tests/vm/dart/appjit_load_static_licm_test_body.dart
@@ -2,8 +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.
 
-// Verify that LoadStaticField IL instruction can't be hoisted above
-// InitStaticField instruction.
+// Verify that field load can't be hoisted above field initialization.
 
 import 'package:expect/expect.dart';
 
diff --git a/runtime/tests/vm/dart/causal_stacks/utils.dart b/runtime/tests/vm/dart/causal_stacks/utils.dart
index a7df656..c1bd59f 100644
--- a/runtime/tests/vm/dart/causal_stacks/utils.dart
+++ b/runtime/tests/vm/dart/causal_stacks/utils.dart
@@ -155,7 +155,7 @@
 final _lineRE = RegExp(r'^(?:#(?<number>\d+)|<asynchronous suspension>)');
 
 void assertStack(List<String> expects, StackTrace stackTrace,
-    [String debugInfoFilename]) async {
+    [String? debugInfoFilename]) async {
   final original = await Stream.value(stackTrace.toString())
       .transform(const LineSplitter())
       .toList();
@@ -166,7 +166,7 @@
   final decodeTrace = frames.first.startsWith('Warning:');
   if (decodeTrace) {
     Expect.isNotNull(debugInfoFilename);
-    final dwarf = Dwarf.fromFile(debugInfoFilename);
+    final dwarf = Dwarf.fromFile(debugInfoFilename!);
     frames = await Stream.fromIterable(original)
         .transform(DwarfStackTraceDecoder(dwarf))
         .where(_lineRE.hasMatch)
@@ -218,7 +218,7 @@
 }
 
 Future<void> doTestAwait(Future f(), List<String> expectedStack,
-    [String debugInfoFilename]) async {
+    [String? debugInfoFilename]) async {
   // Caller catches exception.
   try {
     await f();
@@ -229,7 +229,7 @@
 }
 
 Future<void> doTestAwaitThen(Future f(), List<String> expectedStack,
-    [String debugInfoFilename]) async {
+    [String? debugInfoFilename]) async {
   // Caller catches but a then is set.
   try {
     await f().then((e) {
@@ -242,9 +242,9 @@
 }
 
 Future<void> doTestAwaitCatchError(Future f(), List<String> expectedStack,
-    [String debugInfoFilename]) async {
+    [String? debugInfoFilename]) async {
   // Caller doesn't catch, but we have a catchError set.
-  StackTrace stackTrace;
+  late StackTrace stackTrace;
   await f().catchError((e, s) {
     stackTrace = s;
   });
@@ -256,7 +256,7 @@
 // ----
 
 // For: --causal-async-stacks
-Future<void> doTestsCausal([String debugInfoFilename]) async {
+Future<void> doTestsCausal([String? debugInfoFilename]) async {
   final allYieldExpected = const <String>[
     r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
     r'^#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
@@ -641,7 +641,7 @@
 }
 
 // For: --no-causal-async-stacks --no-lazy-async-stacks
-Future<void> doTestsNoCausalNoLazy([String debugInfoFilename]) async {
+Future<void> doTestsNoCausalNoLazy([String? debugInfoFilename]) async {
   final allYieldExpected = const <String>[
     r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
     r'^#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
@@ -960,7 +960,7 @@
 }
 
 // For: --lazy-async-stacks
-Future<void> doTestsLazy([String debugInfoFilename]) async {
+Future<void> doTestsLazy([String? debugInfoFilename]) async {
   final allYieldExpected = const <String>[
     r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
     r'^#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
diff --git a/runtime/tests/vm/dart/data_uri_spawn_test.dart b/runtime/tests/vm/dart/data_uri_spawn_test.dart
index 3e045a9..cd7d3cd 100644
--- a/runtime/tests/vm/dart/data_uri_spawn_test.dart
+++ b/runtime/tests/vm/dart/data_uri_spawn_test.dart
@@ -20,7 +20,7 @@
 }
 """;
 
-  RawReceivePort receivePort;
+  late RawReceivePort receivePort;
   asyncStart();
   receivePort = new RawReceivePort((message) {
     Expect.equals(message, 42);
diff --git a/runtime/tests/vm/dart/dylib_utils.dart b/runtime/tests/vm/dart/dylib_utils.dart
index 75ba33b..3ac9c3f 100644
--- a/runtime/tests/vm/dart/dylib_utils.dart
+++ b/runtime/tests/vm/dart/dylib_utils.dart
@@ -5,8 +5,7 @@
 import 'dart:ffi' as ffi;
 import 'dart:io' show Platform;
 
-String _platformPath(String name, {String path}) {
-  if (path == null) path = "";
+String _platformPath(String name, {String path = ""}) {
   if (Platform.isLinux || Platform.isAndroid)
     return path + "lib" + name + ".so";
   if (Platform.isMacOS) return path + "lib" + name + ".dylib";
@@ -14,7 +13,7 @@
   throw Exception("Platform not implemented");
 }
 
-ffi.DynamicLibrary dlopenPlatformSpecific(String name, {String path}) {
+ffi.DynamicLibrary dlopenPlatformSpecific(String name, {String path = ""}) {
   String fullPath = _platformPath(name, path: path);
   return ffi.DynamicLibrary.open(fullPath);
 }
diff --git a/runtime/tests/vm/dart/entrypoints/common.dart b/runtime/tests/vm/dart/entrypoints/common.dart
index bc8822a..0d41ddc 100644
--- a/runtime/tests/vm/dart/entrypoints/common.dart
+++ b/runtime/tests/vm/dart/entrypoints/common.dart
@@ -8,13 +8,13 @@
 // We accomplish this by using VM options in the yes-inlining variant to set the
 // "enable_inlining" constant variable to true. This maximizes code sharing
 // between the two variants, which are otherwise identical.
-const pragma NeverInline = const bool.fromEnvironment("enable_inlining")
+const pragma? NeverInline = const bool.fromEnvironment("enable_inlining")
     ? null
     : pragma('vm:never-inline');
 
 // In AOT we need to force some functions to be inlined since we only build the
 // unchecked entry-point when inlining.
-const pragma AlwaysInline = const bool.fromEnvironment("enable_inlining")
+const pragma? AlwaysInline = const bool.fromEnvironment("enable_inlining")
     ? pragma('vm:prefer-inline')
     : null;
 
@@ -45,7 +45,7 @@
 TargetCalls entryPoint = TargetCalls();
 TargetCalls tearoffEntryPoint = TargetCalls();
 
-_validateHelper(int ep, TargetCalls calls) {
+_validateHelper(int ep, TargetCalls? calls) {
   calls ??= entryPoint;
 
   if (ep < 0 || ep > 2) {
diff --git a/runtime/tests/vm/dart/entrypoints/jit/polymorphic_optional_this_test.dart b/runtime/tests/vm/dart/entrypoints/jit/polymorphic_optional_this_test.dart
index 3599dba..cd53c43 100644
--- a/runtime/tests/vm/dart/entrypoints/jit/polymorphic_optional_this_test.dart
+++ b/runtime/tests/vm/dart/entrypoints/jit/polymorphic_optional_this_test.dart
@@ -19,14 +19,14 @@
     samir2(x, y: "hi");
   }
 
-  void samir2(T x, {String y});
+  void samir2(T x, {required String y});
 }
 
 class D<T> extends C<T> {
   @NeverInline
   @pragma("vm:testing.unsafe.trace-entrypoints-fn", validate)
   @pragma("vm:entry-point")
-  void samir2(T x, {String y}) {
+  void samir2(T x, {required String y}) {
     Expect.notEquals(x, -1);
     Expect.equals(y, "hi");
   }
@@ -36,7 +36,7 @@
   @NeverInline
   @pragma("vm:testing.unsafe.trace-entrypoints-fn", validate)
   @pragma("vm:entry-point")
-  void samir2(T x, {String y}) {
+  void samir2(T x, {required String y}) {
     Expect.notEquals(x, -1);
     Expect.equals(y, "hi");
   }
diff --git a/runtime/tests/vm/dart/error_messages_in_null_checks_test.dart b/runtime/tests/vm/dart/error_messages_in_null_checks_test.dart
index bd114cb..2a64885 100644
--- a/runtime/tests/vm/dart/error_messages_in_null_checks_test.dart
+++ b/runtime/tests/vm/dart/error_messages_in_null_checks_test.dart
@@ -25,9 +25,9 @@
   }
 }
 
-A myNull;
-double doubleNull;
-int intNull;
+dynamic myNull;
+dynamic doubleNull;
+dynamic intNull;
 
 main(List<String> args) {
   // Make sure value of `myNull` is not a compile-time null and
@@ -64,7 +64,13 @@
       (e) =>
           e is NoSuchMethodError &&
           e.toString().startsWith(
-              'NoSuchMethodError: The getter \'bar\' was called on null.'));
+              'NoSuchMethodError: The method \'bar\' was called on null.'));
+
+  Expect.throws(
+      () => myNull!,
+      (e) =>
+          e is TypeError &&
+          e.toString().contains('Null check operator used on a null value'));
 
   Expect.throws(() {
     myNull.bazz = 3;
@@ -83,14 +89,15 @@
 
   Expect.throws(
       () => 9.81 - doubleNull,
-      (e) =>
-          e is NoSuchMethodError &&
-          // If '-' is specialized.
-          (e.toString().startsWith(
-                  'NoSuchMethodError: The method \'-\' was called on null.') ||
-              // If '-' is not specialized, it calls toDouble() internally.
-              e.toString().startsWith(
-                  'NoSuchMethodError: The method \'toDouble\' was called on null.')));
+      (e) => isWeakMode
+          ? (e is NoSuchMethodError &&
+              // If '-' is specialized.
+              (e.toString().startsWith(
+                      'NoSuchMethodError: The method \'-\' was called on null.') ||
+                  // If '-' is not specialized, it calls toDouble() internally.
+                  e.toString().startsWith(
+                      'NoSuchMethodError: The method \'toDouble\' was called on null.')))
+          : (e is TypeError));
 
   Expect.throws(
       () => intNull * 7,
diff --git a/runtime/tests/vm/dart/error_stacktrace_test.dart b/runtime/tests/vm/dart/error_stacktrace_test.dart
index 533aed5..76560a6 100644
--- a/runtime/tests/vm/dart/error_stacktrace_test.dart
+++ b/runtime/tests/vm/dart/error_stacktrace_test.dart
@@ -21,11 +21,11 @@
   } catch (e, s) {
     print(e);
     print("###");
-    print(e.stackTrace);
+    print((e as dynamic).stackTrace);
     print("###");
     print(s);
     print("###");
     Expect.isTrue(e is NoSuchMethodError);
-    Expect.stringEquals(e.stackTrace.toString(), s.toString());
+    Expect.stringEquals((e as dynamic).stackTrace.toString(), s.toString());
   }
 }
diff --git a/runtime/tests/vm/dart/fuzz3608420507_regression_test.dart b/runtime/tests/vm/dart/fuzz3608420507_regression_test.dart
index 198ba7c..3e4d1d7 100644
--- a/runtime/tests/vm/dart/fuzz3608420507_regression_test.dart
+++ b/runtime/tests/vm/dart/fuzz3608420507_regression_test.dart
@@ -98,7 +98,7 @@
   Map<int, String> fld2_1 = { 0 : '\u{1f600}\u2665F8', 1 : '\u{1f600}Kd', 2 : 'CW6e@d' };
   Map<int, String> fld2_2 = { 0 : 'MM3Ogd\u{1f600}', 1 : 'D', 2 : 'I\u{1f600}2kH4\u{1f600}' };
 
-  List<int> foo2_0(String par1, double par2, int par3) {
+  List<int>? foo2_0(String par1, double par2, int par3) {
     var6 ??= ({ 0 : 'hVMi', 1 : '', 2 : 'S' } ?? { 0 : '9c\u{1f600}\u{1f600}\u{1f600}dW', 1 : 'g(Fu\u{1f600}bX', 2 : 'Pi2Z\u{1f600}', 3 : 'O\u2665' });
     for (int loc0 = 0; loc0 < 84; loc0++) {
       return (((!((!(var1)))) ? false : false) ? var5 : (false ? var5 : [ -9223372030412324864 ]));
@@ -119,7 +119,7 @@
     }
   }
 
-  double foo2_3(List<int> par1) {
+  double? foo2_3(List<int> par1) {
     var6 = foo2_2();
     if (var1) {
       print({ 0 : 'K\u{1f600}\u{1f600}\u2665\u{1f600}', 1 : 'lh34LP' });
@@ -133,7 +133,7 @@
             { double loc2 = var3;
               { int loc3 = foo1({ 0 : 'G(', 1 : '\u{1f600}&a9t', 2 : '\u{1f600}TF', 3 : '\u2665m-' }, true);
                 var4 ??= (loc0).substring(((((par1 ?? [ -9223372034707292159, 44, -1, 2147483648 ])).remove((false ? -9223372032559808511 : (((++loc3) ~/ (2147483649 | 54))).ceil())) || false) ? (~((loc3++))) : (foo1(fld2_1, (var6 == { 0 : '', 1 : 'KP8' })) >> 50)));
-                if ((true != ((!(loc1)) ? ((-(40)) >= -32) : foo2_1(9223372034707292159, (foo2_2()).remove((((-((loc3).abs())) ~/ 42)).toSigned(-27)))))) {
+                if ((true != ((!(loc1)) ? ((-(40)) >= -32) : foo2_1(9223372034707292159, (foo2_2()).remove((((-((loc3).abs())) ~/ 42)).toSigned(-27))!)))) {
                   if (loc1) {
                     return loc2;
                   }
@@ -184,7 +184,7 @@
     }
   }
 
-  List<int> foo3_2(List<int> par1, List<int> par2) {
+  List<int>? foo3_2(List<int> par1, List<int> par2) {
     for (int loc0 = 0; loc0 < 68; loc0++) {
       { String loc1 = foo2();
         var2 -= (~((false ? (~((false ? loc0 : -9223372034707292161))) : (var2--))));
@@ -204,9 +204,9 @@
     }
   }
 
-  bool foo3_3(List<int> par1, Map<int, String> par2, Map<int, String> par3) {
+  bool? foo3_3(List<int> par1, Map<int, String> par2, Map<int, String> par3) {
     for (int loc0 = 0; loc0 < 16; loc0++) {
-      if (foo3_0((-((var0 ? 8589934591 : 65))), foo3_2(fld3_0, (fld3_0).sublist((true ? (0.23821360229648214).toInt() : var2))))) {
+      if (foo3_0((-((var0 ? 8589934591 : 65))), foo3_2(fld3_0, (fld3_0).sublist((true ? (0.23821360229648214).toInt() : var2)))!)) {
         par1 ??= (((var4 == '&Tze') ? ([ -27, 23, -40 ] != par1) : true) ? [ 23, 21, 4294967295 ] : fld3_0);
         print((par2 ?? { 0 : '\u{1f600}\u2665\u{1f600}Jpj&', 1 : '', 2 : '', 3 : '' }));
         var4 = var4;
@@ -214,7 +214,7 @@
       }
       for (int loc1 = 0; loc1 < 93; loc1++) {
         var4 = 'gngT';
-        return (foo3_0(((((var3 * (loc1).ceilToDouble()) - ((0.6230577340230226 > var3) ? (var3 - var3) : double.maxFinite)) - double.nan)).ceil(), [ 0 ]) ? ((!(var0)) && foo3_0((-(-59)), [ 8, 1, 12, -9223372030412324863 ])) : foo3_0(foo3_1(foo3_2([ 2, -33, -72 ], [ 30, 58, 0 ]), loc1, (!(var1))), var5));
+        return (foo3_0(((((var3 * (loc1).ceilToDouble()) - ((0.6230577340230226 > var3) ? (var3 - var3) : double.maxFinite)) - double.nan)).ceil(), [ 0 ]) ? ((!(var0)) && foo3_0((-(-59)), [ 8, 1, 12, -9223372030412324863 ])) : foo3_0(foo3_1(foo3_2([ 2, -33, -72 ], [ 30, 58, 0 ])!, loc1, (!(var1))), var5));
       }
     }
   }
diff --git a/runtime/tests/vm/dart/hello_fuchsia_test.dart b/runtime/tests/vm/dart/hello_fuchsia_test.dart
index 818ee25..cbe0ceb 100644
--- a/runtime/tests/vm/dart/hello_fuchsia_test.dart
+++ b/runtime/tests/vm/dart/hello_fuchsia_test.dart
@@ -73,7 +73,7 @@
     int bytesRead = 0;
     int bytesWritten = 0;
     bool closedEventReceived = false;
-    List<int> data = new List<int>(messageSize);
+    List<int> data = new List<int>.filled(messageSize, -1);
     bool doneReading = false;
 
     client.writeEventsEnabled = false;
@@ -86,7 +86,7 @@
           print("client READ event bytesRead = $bytesRead");
           assert(bytesWritten == 0);
           assert(client.available() > 0);
-          var buffer = client.read(200);
+          var buffer = client.read(200)!;
           print("client READ event: read ${buffer.length} more bytes");
           data.setRange(bytesRead, bytesRead + buffer.length, buffer);
           bytesRead += buffer.length;
@@ -142,7 +142,7 @@
         case RawSocketEvent.READ:
           assert(socket.available() > 0);
           print("server READ event: ${bytesRead} read");
-          var buffer = socket.read();
+          var buffer = socket.read()!;
           print("server READ event: read ${buffer.length} more bytes");
           data.setRange(bytesRead, bytesRead + buffer.length, buffer);
           bytesRead += buffer.length;
@@ -161,7 +161,7 @@
             socket.writeEventsEnabled = true;
           } else {
             print("server WRITE event: done writing");
-            data = new List<int>(messageSize);
+            data = new List<int>.filled(messageSize, -1);
           }
           break;
         case RawSocketEvent.READ_CLOSED:
@@ -188,7 +188,7 @@
   }
 }
 
-testSimpleReadWriteShutdown({bool dropReads}) async {
+testSimpleReadWriteShutdown({required bool dropReads}) async {
   // This test creates a server and a client connects. The client then
   // writes and the server echos. When the server has finished its
   // echo it half-closes. When the client gets the close event is
@@ -215,7 +215,7 @@
     int bytesRead = 0;
     int bytesWritten = 0;
     bool closedEventReceived = false;
-    List<int> data = new List<int>(messageSize);
+    List<int> data = new List<int>.filled(messageSize, -1);
     bool doneReading = false;
 
     client.writeEventsEnabled = false;
@@ -236,7 +236,7 @@
           print("client READ event bytesRead = $bytesRead");
           assert(bytesWritten == 0);
           assert(client.available() > 0);
-          var buffer = client.read(200);
+          var buffer = client.read(200)!;
           print("client READ event: read ${buffer.length} more bytes");
           data.setRange(bytesRead, bytesRead + buffer.length, buffer);
           bytesRead += buffer.length;
@@ -298,7 +298,7 @@
             }
           }
           print("server READ event: ${bytesRead} read");
-          var buffer = socket.read();
+          var buffer = socket.read()!;
           print("server READ event: read ${buffer.length} more bytes");
           data.setRange(bytesRead, bytesRead + buffer.length, buffer);
           bytesRead += buffer.length;
@@ -313,7 +313,7 @@
             socket.writeEventsEnabled = true;
           } else {
             print("server WRITE event: done writing");
-            data = new List<int>(messageSize);
+            data = new List<int>.filled(messageSize, -1);
           }
           break;
         case RawSocketEvent.READ_CLOSED:
@@ -377,7 +377,7 @@
 void testPlatformEnvironment() {
   Map<String, String> env = Platform.environment;
   for (String k in env.keys) {
-    String v = env[k];
+    String v = env[k]!;
     print("$k = '$v'");
   }
 }
@@ -431,8 +431,8 @@
     return true;
   } catch (e) {
     print("Unexpected Exception: $e");
-    return false;
   }
+  return false;
 }
 
 
diff --git a/runtime/tests/vm/dart/inline_stack_frame_test.dart b/runtime/tests/vm/dart/inline_stack_frame_test.dart
index 68c8584..6143571 100644
--- a/runtime/tests/vm/dart/inline_stack_frame_test.dart
+++ b/runtime/tests/vm/dart/inline_stack_frame_test.dart
@@ -25,7 +25,7 @@
       }
       return "";
     } catch (e, stacktrace) {
-      var result = e + "\n" + stacktrace.toString();
+      var result = e.toString() + "\n" + stacktrace.toString();
       return result;
     }
   }
diff --git a/runtime/tests/vm/dart/isolate_send_function_types_test.dart b/runtime/tests/vm/dart/isolate_send_function_types_test.dart
index e45e045..1129e87 100644
--- a/runtime/tests/vm/dart/isolate_send_function_types_test.dart
+++ b/runtime/tests/vm/dart/isolate_send_function_types_test.dart
@@ -25,7 +25,7 @@
         "(function types are not supported yet)");
   }
 
-  void genericFunc<T>() async {
+  Future<void> genericFunc<T>() async {
     final y = A<void Function(T)>();
     final caughtErrorCompleter = Completer<String>();
     await runZoned(() {
diff --git a/runtime/tests/vm/dart/isolates/internal.dart b/runtime/tests/vm/dart/isolates/internal.dart
index 961f23f..0d63ccc 100644
--- a/runtime/tests/vm/dart/isolates/internal.dart
+++ b/runtime/tests/vm/dart/isolates/internal.dart
@@ -9,14 +9,13 @@
 
 /// 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;
+    {SendPort? onExit,
+    SendPort? onError,
+    bool newIsolateGroup = false,
+    String? debugName}) async {
   final packageConfig = null;
   final paused = false;
-  final bool errorsAreFatal = null;
+  final bool errorsAreFatal = true;
   final readyPort = new RawReceivePort();
   try {
     dart_internal.spawnFunction(
@@ -66,8 +65,8 @@
 /// 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]);
+    {SendPort? onExit, SendPort? onError}) {
+  return _IG0([staticClosure, message]);
 }
 
 // This is the isolate group of "main". We spawn another one.
diff --git a/runtime/tests/vm/dart/isolates/test_utils.dart b/runtime/tests/vm/dart/isolates/test_utils.dart
index 67b84d8..b2ffa76 100644
--- a/runtime/tests/vm/dart/isolates/test_utils.dart
+++ b/runtime/tests/vm/dart/isolates/test_utils.dart
@@ -179,8 +179,8 @@
 
 class Tree {
   final int value;
-  final Tree left;
-  final Tree right;
+  final Tree? left;
+  final Tree? right;
 
   Tree(this.value, this.left, this.right);
 
diff --git a/runtime/tests/vm/dart/issue_31959_31960_test.dart b/runtime/tests/vm/dart/issue_31959_31960_test.dart
index d63a16f..3ca1be2 100644
--- a/runtime/tests/vm/dart/issue_31959_31960_test.dart
+++ b/runtime/tests/vm/dart/issue_31959_31960_test.dart
@@ -24,7 +24,9 @@
 void validateReceivedList(final int expectedSize, final list) {
   Expect.equals(expectedSize, list.length);
   // probe few elements
-  for (int i = 0; i < list.length; i += max<num>(1, expectedSize ~/ 1000)) {
+  for (int i = 0;
+      i < list.length;
+      i += max<num>(1, expectedSize ~/ 1000) as int) {
     Expect.equals(i % 243, list[i]);
   }
 }
diff --git a/runtime/tests/vm/dart/named_params_shaking_test.dart b/runtime/tests/vm/dart/named_params_shaking_test.dart
index b941651..d2bc22a 100644
--- a/runtime/tests/vm/dart/named_params_shaking_test.dart
+++ b/runtime/tests/vm/dart/named_params_shaking_test.dart
@@ -15,7 +15,7 @@
 // When converting named parameters to positional parameters, we
 // follow alphabetical order. Ensure that argument evaluation order
 // is unchanged.
-void testNamedOrder(int w, {int z, int y, int x}) {
+void testNamedOrder(int w, {int? z, int? y, int? x}) {
   Expect.equals(w, 1);
   Expect.equals(z, 2);
   Expect.equals(y, 3);
@@ -23,7 +23,7 @@
 }
 
 class TestNamedOrderBase {
-  TestNamedOrderBase(w, {int z, int y, int x}) {
+  TestNamedOrderBase(w, {int? z, int? y, int? x}) {
     testNamedOrder(w, z: z, y: y, x: x);
   }
 }
diff --git a/runtime/tests/vm/dart/null_checks_with_dwarf_stack_traces_test.dart b/runtime/tests/vm/dart/null_checks_with_dwarf_stack_traces_test.dart
index e8dfe76..b508ea8 100644
--- a/runtime/tests/vm/dart/null_checks_with_dwarf_stack_traces_test.dart
+++ b/runtime/tests/vm/dart/null_checks_with_dwarf_stack_traces_test.dart
@@ -23,9 +23,9 @@
   }
 }
 
-A myNull;
-double doubleNull;
-int intNull;
+dynamic myNull;
+dynamic doubleNull;
+dynamic intNull;
 
 main(List<String> args) {
   // Make sure value of `myNull` is not a compile-time null and
@@ -36,6 +36,8 @@
     intNull = 2;
   }
 
+  Expect.throws(() => myNull!, (e) => e is TypeError);
+
   Expect.throws(() => myNull.foo(), (e) => e is NoSuchMethodError);
 
   Expect.throws(() => myNull.foo, (e) => e is NoSuchMethodError);
@@ -50,7 +52,8 @@
 
   Expect.throws(() => doubleNull + 2.17, (e) => e is NoSuchMethodError);
 
-  Expect.throws(() => 9.81 - doubleNull, (e) => e is NoSuchMethodError);
+  Expect.throws(() => 9.81 - doubleNull,
+      (e) => isWeakMode ? (e is NoSuchMethodError) : (e is TypeError));
 
   Expect.throws(() => intNull * 7, (e) => e is NoSuchMethodError);
 }
diff --git a/runtime/tests/vm/dart/regress32597_2_test.dart b/runtime/tests/vm/dart/regress32597_2_test.dart
index 9081470..caa6660 100644
--- a/runtime/tests/vm/dart/regress32597_2_test.dart
+++ b/runtime/tests/vm/dart/regress32597_2_test.dart
@@ -10,7 +10,7 @@
 import "package:expect/expect.dart";
 
 class Token {
-  Token next;
+  Token? next;
 }
 
 class StringToken extends Token {}
@@ -22,7 +22,7 @@
 void foo(Token tokens, {bool x: false}) {
   dynamic v;
   {
-    Token current = tokens;
+    Token? current = tokens;
     while (current is ErrorToken) {
       failed = true;
       current = null;
diff --git a/runtime/tests/vm/dart/regress32597_test.dart b/runtime/tests/vm/dart/regress32597_test.dart
index 969af09..56710c2 100644
--- a/runtime/tests/vm/dart/regress32597_test.dart
+++ b/runtime/tests/vm/dart/regress32597_test.dart
@@ -8,7 +8,7 @@
 // VMOptions=--optimization_counter_threshold=10 --no-background-compilation
 
 class Token {
-  Token next;
+  Token? next;
 }
 
 class StringToken extends Token {}
@@ -16,7 +16,7 @@
 class ErrorToken extends Token {}
 
 void foo(Token tokens) {
-  Token current = tokens;
+  Token? current = tokens;
   for (int i = 0; i < 1; i++) {
     while (current is ErrorToken) {
       ErrorToken first = current;
@@ -25,7 +25,7 @@
       // assigned to phi.
       print(first);
     }
-    current = current.next;
+    current = current!.next;
   }
 }
 
diff --git a/runtime/tests/vm/dart/regress38654_test.dart b/runtime/tests/vm/dart/regress38654_test.dart
index 4aed202..e053804 100644
--- a/runtime/tests/vm/dart/regress38654_test.dart
+++ b/runtime/tests/vm/dart/regress38654_test.dart
@@ -80,7 +80,7 @@
                     var7[-12],
                     ((((27 + var1)).isInfinite
                             ? var3
-                            : (var3 ? (var9[var7[-88]]).isEmpty : var3))
+                            : (var3 ? (var9[var7[-88]])!.isEmpty : var3))
                         ? -4294934528
                         : var1),
                     -40,
@@ -257,7 +257,7 @@
        */
       var7 ??= (((((-(var7[-2]))).toString() ?? foo0()) ??
               (true
-                  ? (par1[(-57 + (var7[52] | -91))] + var9[57])
+                  ? (par1[(-57 + (var7[52] | -91))]! + var9[57]!)
                   : Uri.decodeFull((false
                       ? '17'
                       : (8).toStringAsExponential(var7[var7[8]]))))))
@@ -397,7 +397,7 @@
             (-54).abs(),
             ((var3 ? true : (!(var3)))
                 ? (!((Uri.encodeFull('aILQc')).endsWith('+7o0Q6b')))
-                : ((true ? ('bEIx').endsWith(par1[var2]) : par2)
+                : ((true ? ('bEIx').endsWith(par1[var2]!) : par2)
                     ? false
                     : ({
                           -77,
@@ -415,7 +415,7 @@
         try {
           var6 ??= par1[(('R12').isNotEmpty
               ? (par2 ? 4294967396 : var2)
-              : (((var0).isEmpty ? true : par2) ? var4 : var2))];
+              : (((var0).isEmpty ? true : par2) ? var4 : var2))]!;
           var8 ??= (var8 ??
               {
                 (~(((var7[var2] ?? 86) >>
@@ -427,8 +427,8 @@
         } catch (exception, stackTrace) {
           var9 = (Map.of({
                 59: var6,
-                3: var0[DateTime.may],
-                49: par1[var2],
+                3: var0[DateTime.may]!,
+                49: par1[var2]!,
                 71: '6',
                 77: ((!(true)) ? ('QB\u2665OU6' ?? 'r-\u2665') : foo0()),
                 88: foo0()
diff --git a/runtime/tests/vm/dart/regress38979_test.dart b/runtime/tests/vm/dart/regress38979_test.dart
index b128249..925b57f 100644
--- a/runtime/tests/vm/dart/regress38979_test.dart
+++ b/runtime/tests/vm/dart/regress38979_test.dart
@@ -22,7 +22,7 @@
 }
 
 class X0 {
-  Int32x4 foo0_0(Duration par1, Set<bool> par2) {
+  Int32x4? foo0_0(Duration par1, Set<bool> par2) {
     if (var14) {
       {
         int loc0 = 0;
@@ -35,13 +35,13 @@
                 ((((var16 > (-((-(loc0))))) ? Duration() : Duration()) +
                         (var14 ? (true ? var15 : par1) : Duration())) <
                     Duration()),
-            (((var30[(Int32x4.yzxw as int)]).toUpperCase()) +
+            (((var30[(Int32x4.yzxw as int)])!.toUpperCase()) +
                 (Uri.encodeComponent(('2' ??
-                    (var25[true]
+                    (var25[true]!
                         ? (String.fromEnvironment(''))
                         : var18))))): (!(var14)),
-            (var31['MgOdzM']
-                    ? var30[15]
+            (var31['MgOdzM']!
+                    ? var30[15]!
                     : (('D9q6Ma').substring(
                         (~((--var16))), foo1(var3, (false ? {} : var26))))):
                 (!(false)),
@@ -54,5 +54,5 @@
 
 main() {
   Expect.throws(() => X0().foo0_0(Duration(), {true, false}),
-      (e) => e is NoSuchMethodError);
+      (e) => e is NoSuchMethodError || e is TypeError);
 }
diff --git a/runtime/tests/vm/dart/regress_33999_test.dart b/runtime/tests/vm/dart/regress_33999_test.dart
index e7e9e89..1f4905a 100644
--- a/runtime/tests/vm/dart/regress_33999_test.dart
+++ b/runtime/tests/vm/dart/regress_33999_test.dart
@@ -8,16 +8,16 @@
 
 // Class with two type parameters.
 class A<U, T> {
-  T field1;
-  List<T> field2;
-  T Function(T) field3;
+  T? field1;
+  List<T>? field2;
+  T Function(T)? field3;
 }
 
 // Class with a single type parameter
 class B<T> {
-  T field1;
-  List<T> field2;
-  T Function(T) field3;
+  T? field1;
+  List<T>? field2;
+  T Function(T)? field3;
 }
 
 var TRUE = true;
diff --git a/runtime/tests/vm/dart/regress_34755_test.dart b/runtime/tests/vm/dart/regress_34755_test.dart
index c13cfcf..9b9956e 100644
--- a/runtime/tests/vm/dart/regress_34755_test.dart
+++ b/runtime/tests/vm/dart/regress_34755_test.dart
@@ -5,6 +5,8 @@
 // Test checking that null is handled correctly at the call-sites that
 // are tracking static type exactness.
 
+// Requirements=nnbd-weak
+
 import 'package:expect/expect.dart';
 
 void invokeAdd(List<int> l) {
@@ -12,5 +14,6 @@
 }
 
 void main() {
-  Expect.throws(() => invokeAdd(null), (error) => error is NoSuchMethodError);
+  dynamic myNull;
+  Expect.throws(() => invokeAdd(myNull), (error) => error is NoSuchMethodError);
 }
diff --git a/runtime/tests/vm/dart/regress_35481_test.dart b/runtime/tests/vm/dart/regress_35481_test.dart
index 21fd2ed..f7acbdd 100644
--- a/runtime/tests/vm/dart/regress_35481_test.dart
+++ b/runtime/tests/vm/dart/regress_35481_test.dart
@@ -15,7 +15,7 @@
 void foo() {
   try {
     for (var i = 0; i < 1000; i++) {
-      List(10).toList(growable: true);
+      List.filled(10, null).toList(growable: true);
     }
   } catch (e) {}
 }
diff --git a/runtime/tests/vm/dart/regress_35887_test.dart b/runtime/tests/vm/dart/regress_35887_test.dart
index b0018fb..30694ca 100644
--- a/runtime/tests/vm/dart/regress_35887_test.dart
+++ b/runtime/tests/vm/dart/regress_35887_test.dart
@@ -20,7 +20,7 @@
 
 const int limit = 50;
 
-Value maybeWrap(int i) => i < limit ? new Value(i) : null;
+dynamic maybeWrap(int i) => i < limit ? new Value(i) : null;
 
 Future<void> test() async {
   for (int i = 0; i < 60; ++i) {
diff --git a/runtime/tests/vm/dart/regress_36374_test.dart b/runtime/tests/vm/dart/regress_36374_test.dart
index 45df0f1..8d703d2 100644
--- a/runtime/tests/vm/dart/regress_36374_test.dart
+++ b/runtime/tests/vm/dart/regress_36374_test.dart
@@ -15,10 +15,10 @@
 }
 
 class Bar {
-  Bar(String y, Foo z);
+  Bar(String y, Foo? z);
 }
 
-foo(Object arg) {
+foo(Object? arg) {
   return Bar('abc', arg == null ? null : Foo((throw 'Err')));
 }
 
diff --git a/runtime/tests/vm/dart/regress_38700_test.dart b/runtime/tests/vm/dart/regress_38700_test.dart
index cc6c0ee..56a283a 100644
--- a/runtime/tests/vm/dart/regress_38700_test.dart
+++ b/runtime/tests/vm/dart/regress_38700_test.dart
@@ -9,7 +9,7 @@
 main() {
   var exception;
   try {
-    print((map['b'] > 82) ? 'x' : 'y');
+    print(((map['b'] as dynamic) > 82) ? 'x' : 'y');
   } catch (e, s) {
     exception = e;
   }
diff --git a/runtime/tests/vm/dart/regress_39152_test.dart b/runtime/tests/vm/dart/regress_39152_test.dart
index 343df24..d63e481 100644
--- a/runtime/tests/vm/dart/regress_39152_test.dart
+++ b/runtime/tests/vm/dart/regress_39152_test.dart
@@ -13,7 +13,7 @@
 }
 
 A a = new A();
-int y;
+int? y;
 
 class B {
   B(int x) {
diff --git a/runtime/tests/vm/dart/regress_39747_test.dart b/runtime/tests/vm/dart/regress_39747_test.dart
index 0d3d1f7..44742ee 100644
--- a/runtime/tests/vm/dart/regress_39747_test.dart
+++ b/runtime/tests/vm/dart/regress_39747_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.7
-
 // Regression test for https://github.com/dart-lang/sdk/issues/39747.
 // Verifies that compiler doesn't crash on a particular piece of code.
 
 import "package:expect/expect.dart";
 
-double foo4() {}
+dynamic foo4() => null;
 
 var par1 = 1.0.toStringAsPrecision(12);
 
diff --git a/runtime/tests/vm/dart/regress_39767_test.dart b/runtime/tests/vm/dart/regress_39767_test.dart
index 24e9b13..e429481 100644
--- a/runtime/tests/vm/dart/regress_39767_test.dart
+++ b/runtime/tests/vm/dart/regress_39767_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.7
-
 // VMOptions=--optimization_counter_threshold=1 --deterministic
 
 // Regression test for https://github.com/dart-lang/sdk/issues/39767.
@@ -15,18 +13,20 @@
 
 List<double> var25 = List<double>.filled(8, 0);
 
-double foo0(){
-    do {
-      throw {}; //# 01: runtime error
-    } while (false);
+double foo0() {
+  do {
+    throw {}; //# 01: runtime error
+  } while (false);
+  return 0;
 }
 
 main() {
-      do {
-        switch (1){
-          case 1: {
-                var25[7] = foo0();
-          }
+  do {
+    switch (1) {
+      case 1:
+        {
+          var25[7] = foo0();
         }
-      } while (false);
+    }
+  } while (false);
 }
diff --git a/runtime/tests/vm/dart/regress_40809_test.dart b/runtime/tests/vm/dart/regress_40809_test.dart
index 49bb8cf..df046b4 100644
--- a/runtime/tests/vm/dart/regress_40809_test.dart
+++ b/runtime/tests/vm/dart/regress_40809_test.dart
@@ -17,7 +17,7 @@
   // We use toString as a selector here to make sure that it is not eligible
   // for any potential transformations which remove named parameters.
   @pragma('vm:never-inline')
-  String toString({String prefix}) {
+  String toString({required String prefix}) {
     f = () => this.field;
     try {
       return int.parse(prefix + this.field).toString();
diff --git a/runtime/tests/vm/dart/regress_42065_test.dart b/runtime/tests/vm/dart/regress_42065_test.dart
new file mode 100644
index 0000000..28079af
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_42065_test.dart
@@ -0,0 +1,22 @@
+// 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.
+
+// 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.
+
+import "package:expect/expect.dart";
+
+List<int> foo0(int par1) {
+  if (par1 >= 39) {
+    return <int>[];
+  }
+  throw 'hi';
+}
+
+main() {
+  Expect.throws(() {
+    (foo0(0)).add(42);
+  }, (e) => e == 'hi');
+}
diff --git a/runtime/tests/vm/dart/regress_flutter16182_test.dart b/runtime/tests/vm/dart/regress_flutter16182_test.dart
index 81c386e..ecb49c3 100644
--- a/runtime/tests/vm/dart/regress_flutter16182_test.dart
+++ b/runtime/tests/vm/dart/regress_flutter16182_test.dart
@@ -7,7 +7,7 @@
 
 import "package:expect/expect.dart";
 
-bool ok;
+bool ok = false;
 
 class T1 {
   // Should be reachable.
@@ -17,7 +17,7 @@
 }
 
 class A1 {
-  T1 foo;
+  late T1 foo;
 
   void call([a1, a2, a3, a4, a5]) {
     foo = a5;
diff --git a/runtime/tests/vm/dart/regress_flutter_57398_test.dart b/runtime/tests/vm/dart/regress_flutter_57398_test.dart
index 79c5614..a2a93ab 100644
--- a/runtime/tests/vm/dart/regress_flutter_57398_test.dart
+++ b/runtime/tests/vm/dart/regress_flutter_57398_test.dart
@@ -24,7 +24,11 @@
 
 @pragma('vm:never-inline')
 FutureOr<int> make(int v) {
-  return v > 0 ? v : Future.value(v);
+  if (v > 0) {
+    return v;
+  } else {
+    return Future.value(v);
+  }
 }
 
 void main(List<String> args) {
diff --git a/runtime/tests/vm/dart/regress_range_analysis_shift_test.dart b/runtime/tests/vm/dart/regress_range_analysis_shift_test.dart
index f30a370..d78f73f 100644
--- a/runtime/tests/vm/dart/regress_range_analysis_shift_test.dart
+++ b/runtime/tests/vm/dart/regress_range_analysis_shift_test.dart
@@ -9,14 +9,14 @@
 
 import 'package:expect/expect.dart';
 
-int getShift(List<String> args) {
+int? getShift(List<String> args) {
   return args.length == -1 ? null : 40;
 }
 
 void test(List<String> args) {
-  int x = 1;
+  dynamic x = 1;
   if (args.length <= 0) {
-    int s = getShift(args);
+    int? s = getShift(args);
     x = x << s;
   }
   x += 1;
diff --git a/runtime/tests/vm/dart/rematerialize_unboxed_double_field_test.dart b/runtime/tests/vm/dart/rematerialize_unboxed_double_field_test.dart
index 8442c38..cf764a2 100644
--- a/runtime/tests/vm/dart/rematerialize_unboxed_double_field_test.dart
+++ b/runtime/tests/vm/dart/rematerialize_unboxed_double_field_test.dart
@@ -17,7 +17,7 @@
 }
 
 class RealSink {
-  static C o;
+  static late C o;
   void leak(C c) {
     o = c;
   }
diff --git a/runtime/tests/vm/dart/run_appended_aot_snapshot_test.dart b/runtime/tests/vm/dart/run_appended_aot_snapshot_test.dart
index c38c859..78471fb 100644
--- a/runtime/tests/vm/dart/run_appended_aot_snapshot_test.dart
+++ b/runtime/tests/vm/dart/run_appended_aot_snapshot_test.dart
@@ -26,21 +26,28 @@
     final String dillPath = path.join(tmp, 'test.dill');
     final String aotPath = path.join(tmp, 'test.aot');
     final String exePath = path.join(tmp, exeName);
+    final extraGenKernelOptions = Platform.executableArguments
+        .where((arg) =>
+            arg.startsWith('--enable-experiment=') ||
+            arg == '--null-safety' ||
+            arg == '--no-null-safety')
+        .toList();
 
     {
       final result = await generateAotKernel(checkedInDartVM, genKernel,
-          platformDill, sourcePath, dillPath, null, []);
+          platformDill, sourcePath, dillPath, null, [],
+          extraGenKernelOptions: extraGenKernelOptions);
       Expect.equals(result.stderr, '');
-      Expect.equals(result.exitCode, 0);
       Expect.equals(result.stdout, '');
+      Expect.equals(result.exitCode, 0);
     }
 
     {
       final result = await generateAotSnapshot(
           genSnapshot, dillPath, aotPath, null, false, []);
       Expect.equals(result.stderr, '');
-      Expect.equals(result.exitCode, 0);
       Expect.equals(result.stdout, '');
+      Expect.equals(result.exitCode, 0);
     }
 
     await writeAppendedExecutable(dartPrecompiledRuntime, aotPath, exePath);
diff --git a/runtime/tests/vm/dart/slow_path_shared_stub_test.dart b/runtime/tests/vm/dart/slow_path_shared_stub_test.dart
index 7c50e88..fb4c4d1 100644
--- a/runtime/tests/vm/dart/slow_path_shared_stub_test.dart
+++ b/runtime/tests/vm/dart/slow_path_shared_stub_test.dart
@@ -12,14 +12,14 @@
 import 'dart:math';
 
 class C {
-  C talk(C _) => _;
+  C? talk(C? _) => _;
 }
 
 int getPositiveNum() {
   return (new DateTime.now()).millisecondsSinceEpoch;
 }
 
-C getC() {
+C? getC() {
   if (getPositiveNum() == 0) {
     return new C();
   } else {
@@ -27,7 +27,7 @@
   }
 }
 
-int global;
+int global = 0;
 
 int getNum() {
   return global++;
@@ -39,7 +39,7 @@
   try {
     y = getNum();
     x = getC();
-    x.talk(x).talk(x);
+    x!.talk(x)!.talk(x);
     y = getNum();
   } catch (e) {
     Expect.equals(x, null);
@@ -59,7 +59,7 @@
     x = getC();
     z = z.ceil().toDouble();
     var k = z / 2;
-    x.talk(x).talk(x);
+    x!.talk(x)!.talk(x);
     z = k / 2;
     y = getNum();
   } catch (e) {
diff --git a/runtime/tests/vm/dart/snapshot_test_helper.dart b/runtime/tests/vm/dart/snapshot_test_helper.dart
index a66c247..b0cf664 100644
--- a/runtime/tests/vm/dart/snapshot_test_helper.dart
+++ b/runtime/tests/vm/dart/snapshot_test_helper.dart
@@ -75,7 +75,7 @@
 }
 
 Future<Result> runBinary(String prefix, String binary, List<String> arguments,
-    {Map<String, String> environment, bool runInShell: false}) async {
+    {Map<String, String>? environment, bool runInShell: false}) async {
   print("+ $binary " + arguments.join(" "));
   final processResult = await Process.run(binary, arguments,
       environment: environment, runInShell: runInShell);
diff --git a/runtime/tests/vm/dart/splay_test.dart b/runtime/tests/vm/dart/splay_test.dart
index eae1cbb..30e4582 100644
--- a/runtime/tests/vm/dart/splay_test.dart
+++ b/runtime/tests/vm/dart/splay_test.dart
@@ -43,18 +43,19 @@
   static final int kTreeModifications = 80;
   static final int kTreePayloadDepth = 5;
 
-  static SplayTree tree;
+  static SplayTree? tree;
 
   static Random rnd = new Random(12345);
 
   // Insert new node with a unique key.
   static num insertNewNode() {
     num key;
+    final localTree = tree!;
     do {
       key = rnd.nextDouble();
-    } while (tree.find(key) != null);
+    } while (localTree.find(key) != null);
     Payload payload = Payload.generate(kTreePayloadDepth, key.toString());
-    tree.insert(key, payload);
+    localTree.insert(key, payload);
     return key;
   }
 
@@ -67,7 +68,7 @@
     // Allow the garbage collector to reclaim the memory
     // used by the splay tree no matter how we exit the
     // tear down function.
-    List<num> keys = tree.exportKeys();
+    List<num> keys = tree!.exportKeys();
     tree = null;
 
     // Verify that the splay tree has the right size.
@@ -86,11 +87,15 @@
 
   void exercise() {
     // Replace a few nodes in the splay tree.
+    final localTree = tree!;
     for (int i = 0; i < kTreeModifications; i++) {
       num key = insertNewNode();
-      Node greatest = tree.findGreatestLessThan(key);
-      if (greatest == null) tree.remove(key);
-      else tree.remove(greatest.key);
+      Node? greatest = localTree.findGreatestLessThan(key);
+      if (greatest == null) {
+        localTree.remove(key);
+      } else {
+        localTree.remove(greatest.key);
+      }
     }
   }
 
@@ -103,10 +108,10 @@
 
 
 class Leaf {
-  Leaf(String tag) {
-    string = "String for key $tag in leaf node";
-    array = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ];
-  }
+  Leaf(String tag) :
+    string = "String for key $tag in leaf node",
+    array = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
+  {}
   String string;
   List<num> array;
 }
@@ -151,16 +156,16 @@
     // Splay on the key to move the last node on the search path for
     // the key to the root of the tree.
     splay(key);
-    if (root.key == key) return;
+    if (root!.key == key) return;
     Node node = new Node(key, value);
-    if (key > root.key) {
+    if (key > root!.key) {
       node.left = root;
-      node.right = root.right;
-      root.right = null;
+      node.right = root!.right;
+      root!.right = null;
     } else {
       node.right = root;
-      node.left = root.left;
-      root.left = null;
+      node.left = root!.left;
+      root!.left = null;
     }
     root = node;
   }
@@ -173,18 +178,18 @@
   Node remove(num key) {
     if (isEmpty) throw new Error('Key not found: $key');
     splay(key);
-    if (root.key != key) throw new Error('Key not found: $key');
-    Node removed = root;
-    if (root.left == null) {
-      root = root.right;
+    if (root!.key != key) throw new Error('Key not found: $key');
+    Node removed = root!;
+    if (root!.left == null) {
+      root = root!.right;
     } else {
-      Node right = root.right;
-      root = root.left;
+      Node? right = root!.right;
+      root = root!.left;
       // Splay to make sure that the new root has an empty right child.
       splay(key);
       // Insert the original right child as the right child of the new
       // root.
-      root.right = right;
+      root!.right = right;
     }
     return removed;
   }
@@ -193,19 +198,19 @@
    * Returns the node having the specified [key] or null if the tree doesn't
    * contain a node with the specified [key].
    */
-  Node find(num key) {
+  Node? find(num key) {
     if (isEmpty) return null;
     splay(key);
-    return root.key == key ? root : null;
+    return root!.key == key ? root : null;
   }
 
   /**
    * Returns the Node having the maximum key value.
    */
-  Node findMax([Node start]) {
+  Node? findMax([Node? start]) {
     if (isEmpty) return null;
-    Node current = null == start ? root : start;
-    while (current.right != null) current = current.right;
+    Node current = null == start ? root! : start;
+    while (current.right != null) current = current.right!;
     return current;
   }
 
@@ -213,15 +218,15 @@
    * Returns the Node having the maximum key value that
    * is less than the specified [key].
    */
-  Node findGreatestLessThan(num key) {
+  Node? findGreatestLessThan(num key) {
     if (isEmpty) return null;
     // Splay on the key to move the node with the given key or the last
     // node on the search path to the top of the tree.
     splay(key);
     // Now the result is either the root node or the greatest node in
     // the left subtree.
-    if (root.key < key) return root;
-    if (root.left != null) return findMax(root.left);
+    if (root!.key < key) return root;
+    if (root!.left != null) return findMax(root!.left);
     return null;
   }
 
@@ -239,16 +244,16 @@
     // the L tree of the algorithm.  The left child of the dummy node
     // will hold the R tree of the algorithm.  Using a dummy node, left
     // and right will always be nodes and we avoid special cases.
-    final Node dummy = new Node(null, null);
+    final Node dummy = new Node(0, null);
     Node left = dummy;
     Node right = dummy;
-    Node current = root;
+    Node current = root!;
     while (true) {
       if (key < current.key) {
         if (current.left == null) break;
-        if (key < current.left.key) {
+        if (key < current.left!.key) {
           // Rotate right.
-          Node tmp = current.left;
+          Node tmp = current.left!;
           current.left = tmp.right;
           tmp.right = current;
           current = tmp;
@@ -257,12 +262,12 @@
         // Link right.
         right.left = current;
         right = current;
-        current = current.left;
+        current = current.left!;
       } else if (key > current.key) {
         if (current.right == null) break;
-        if (key > current.right.key) {
+        if (key > current.right!.key) {
           // Rotate left.
-          Node tmp = current.right;
+          Node tmp = current.right!;
           current.right = tmp.left;
           tmp.left = current;
           current = tmp;
@@ -271,7 +276,7 @@
         // Link left.
         left.right = current;
         left = current;
-        current = current.right;
+        current = current.right!;
       } else {
         break;
       }
@@ -289,7 +294,7 @@
    */
   List<num> exportKeys() {
     List<num> result = [];
-    if (!isEmpty) root.traverse((Node node) => result.add(node.key));
+    if (!isEmpty) root!.traverse((Node node) => result.add(node.key));
     return result;
   }
 
@@ -297,24 +302,24 @@
   bool get isEmpty => null == root;
 
   // Pointer to the root node of the tree.
-  Node root;
+  Node? root;
 }
 
 
 class Node {
   Node(this.key, this.value);
   final num key;
-  final Object value;
+  final Object? value;
 
-  Node left, right;
+  Node? left, right;
 
   /**
    * Performs an ordered traversal of the subtree starting here.
    */
   void traverse(void f(Node n)) {
-    Node current = this;
+    Node? current = this;
     while (current != null) {
-      Node left = current.left;
+      Node? left = current.left;
       if (left != null) left.traverse(f);
       f(current);
       current = current.right;
diff --git a/runtime/tests/vm/dart/transferable_test.dart b/runtime/tests/vm/dart/transferable_test.dart
index 8daf5a0..2f5155a 100644
--- a/runtime/tests/vm/dart/transferable_test.dart
+++ b/runtime/tests/vm/dart/transferable_test.dart
@@ -18,8 +18,8 @@
 
 const int nIterations = 5;
 
-int iteration;
-bool keepTimerRunning;
+int iteration = -1;
+bool keepTimerRunning = false;
 
 main() async {
   keepTimerRunning = true;
@@ -53,7 +53,7 @@
   StartMessage(this.sendPort, this.useTransferable);
 }
 
-runBatch({bool useTransferable}) async {
+runBatch({required bool useTransferable}) async {
   Timer.run(idleTimer);
   final port = ReceivePort();
   final inbox = StreamIterator<dynamic>(port);
@@ -64,7 +64,7 @@
   final workerExitedPort = ReceivePort()
     ..listen((_) => workerCompleted.complete(true));
   worker.addOnExitListener(workerExitedPort.sendPort);
-  worker.resume(worker.pauseCapability);
+  worker.resume(worker.pauseCapability!);
 
   await inbox.moveNext();
   final outbox = inbox.current;
diff --git a/runtime/tests/vm/dart/transferable_throws_test.dart b/runtime/tests/vm/dart/transferable_throws_test.dart
index 6f4d55b..c2a35d6 100644
--- a/runtime/tests/vm/dart/transferable_throws_test.dart
+++ b/runtime/tests/vm/dart/transferable_throws_test.dart
@@ -72,7 +72,7 @@
 
 throwsIfCummulativeListIsTooLargeOn32bitPlatform() {
   try {
-    int maxUint8ListSize = pow(2, 30);
+    int maxUint8ListSize = pow(2, 30) as int;
     // Check whether we are on 32-bit or 64-bit platform.
     new Uint8List(maxUint8ListSize);
     // On 64-bit platform we will have difficulty allocating large enough
@@ -80,17 +80,17 @@
     return;
   } catch (_) {}
 
-  var halfmax = new Uint8List(pow(2, 29) - 1);
+  var halfmax = new Uint8List(pow(2, 29) - 1 as int);
   Expect.throwsArgumentError(
       () => TransferableTypedData.fromList([halfmax, halfmax, Uint8List(2)]));
 }
 
 class MyList<T> extends ListBase<T> {
   @override
-  int length;
+  int length = null as dynamic;
 
   @override
-  T operator [](int index) => null;
+  T operator [](int index) => null as T;
   @override
   void operator []=(int index, T value) {}
 }
@@ -106,10 +106,18 @@
   await throwsIfReceiverMaterializesMoreThanOnce();
   throwsIfCummulativeListIsTooLargeOn32bitPlatform();
 
-  Expect.throwsArgumentError(() => TransferableTypedData.fromList(null));
-  Expect.throwsArgumentError(() => TransferableTypedData.fromList([null]));
-  Expect.throwsArgumentError(
-      () => TransferableTypedData.fromList(MyList<Uint8List>()));
+  dynamic myNull;
+  if (isWeakMode) {
+    Expect.throwsArgumentError(() => TransferableTypedData.fromList(myNull));
+    Expect.throwsArgumentError(() => TransferableTypedData.fromList([myNull]));
+    Expect.throwsArgumentError(
+        () => TransferableTypedData.fromList(MyList<Uint8List>()));
+  } else {
+    Expect.throwsTypeError(() => TransferableTypedData.fromList(myNull));
+    Expect.throwsTypeError(() => TransferableTypedData.fromList([myNull]));
+    Expect.throwsTypeError(
+        () => TransferableTypedData.fromList(MyList<Uint8List>()));
+  }
   Expect.throwsArgumentError(
       () => TransferableTypedData.fromList([MyTypedData()]));
 }
diff --git a/runtime/tests/vm/dart/trigger_gc_in_native_test.dart b/runtime/tests/vm/dart/trigger_gc_in_native_test.dart
index 4205fa6..8d6db22 100644
--- a/runtime/tests/vm/dart/trigger_gc_in_native_test.dart
+++ b/runtime/tests/vm/dart/trigger_gc_in_native_test.dart
@@ -14,7 +14,7 @@
 import 'dart:typed_data';
 
 main() {
-  final List<List> arrays = [];
+  final List<List?> arrays = [];
   // Fill up heap with alternate large-small items.
   for (int i = 0; i < 500000; i++) {
     arrays.add(new Uint32List(260));
diff --git a/runtime/tests/vm/dart/use_dwarf_stack_traces_flag_test.dart b/runtime/tests/vm/dart/use_dwarf_stack_traces_flag_test.dart
index c67b5ef..7a2ed6c 100644
--- a/runtime/tests/vm/dart/use_dwarf_stack_traces_flag_test.dart
+++ b/runtime/tests/vm/dart/use_dwarf_stack_traces_flag_test.dart
@@ -179,7 +179,7 @@
   for (final line in lines) {
     final match = re.firstMatch(line);
     if (match != null) {
-      yield int.parse(match.group(1), radix: 16);
+      yield int.parse(match.group(1)!, radix: 16);
     }
   }
 }
diff --git a/runtime/tests/vm/dart/use_flag_test_helper.dart b/runtime/tests/vm/dart/use_flag_test_helper.dart
index fe9c511..e9f9737 100644
--- a/runtime/tests/vm/dart/use_flag_test_helper.dart
+++ b/runtime/tests/vm/dart/use_flag_test_helper.dart
@@ -25,7 +25,7 @@
 final aotRuntime = path.join(
     buildDir, 'dart_precompiled_runtime' + (Platform.isWindows ? '.exe' : ''));
 
-String get clangBuildToolsDir {
+String? get clangBuildToolsDir {
   String archDir;
   if (Platform.isLinux) {
     archDir = 'linux-x64';
@@ -51,8 +51,9 @@
   if (Platform.isMacOS) {
     cc = 'clang';
   } else if (buildDir.endsWith('SIMARM') || buildDir.endsWith('SIMARM64')) {
-    if (clangBuildToolsDir != null) {
-      cc = path.join(clangBuildToolsDir, 'clang');
+    final clangBuildTools = clangBuildToolsDir;
+    if (clangBuildTools != null) {
+      cc = path.join(clangBuildTools, 'clang');
     } else {
       throw 'Cannot assemble for ${path.basename(buildDir)} '
           'without //buildtools on ${Platform.operatingSystem}';
@@ -95,8 +96,9 @@
   if ((Platform.isLinux &&
           (buildDir.endsWith('SIMARM') || buildDir.endsWith('SIMARM64'))) ||
       (Platform.isMacOS && forceElf)) {
-    if (clangBuildToolsDir != null) {
-      strip = path.join(clangBuildToolsDir, 'llvm-strip');
+    final clangBuildTools = clangBuildToolsDir;
+    if (clangBuildTools != null) {
+      strip = path.join(clangBuildTools, 'llvm-strip');
     } else {
       throw 'Cannot strip ELF files for ${path.basename(buildDir)} '
           'without //buildtools on ${Platform.operatingSystem}';
@@ -180,7 +182,7 @@
     await fun(tempDir.path);
   } finally {
     if (!Platform.environment.containsKey(keepTempKey) ||
-        Platform.environment[keepTempKey].isEmpty) {
+        Platform.environment[keepTempKey]!.isEmpty) {
       tempDir.deleteSync(recursive: true);
     }
   }
diff --git a/runtime/tests/vm/dart/use_save_debugging_info_flag_test.dart b/runtime/tests/vm/dart/use_save_debugging_info_flag_test.dart
index e098c5a..5ed1c3a 100644
--- a/runtime/tests/vm/dart/use_save_debugging_info_flag_test.dart
+++ b/runtime/tests/vm/dart/use_save_debugging_info_flag_test.dart
@@ -168,7 +168,7 @@
 void printDiff(Map<int, List<int>> map, [int maxOutput = 100]) {
   int lines = 0;
   for (var index in map.keys) {
-    final pair = map[index];
+    final pair = map[index]!;
     if (pair[0] == -1) {
       print('$index: <>, ${pair[1]}');
       lines++;
diff --git a/runtime/tests/vm/dart/use_strip_flag_test.dart b/runtime/tests/vm/dart/use_strip_flag_test.dart
index 385fb36..5025c84 100644
--- a/runtime/tests/vm/dart/use_strip_flag_test.dart
+++ b/runtime/tests/vm/dart/use_strip_flag_test.dart
@@ -90,7 +90,8 @@
   });
 }
 
-void compareStrippedAndUnstripped({String stripped, String unstripped}) {
+void compareStrippedAndUnstripped(
+    {required String stripped, required String unstripped}) {
   final strippedSize = File(stripped).lengthSync();
   final unstrippedSize = File(unstripped).lengthSync();
   print("File size for stripped file $stripped: $strippedSize");
diff --git a/runtime/tests/vm/dart/v8_snapshot_profile_writer_test.dart b/runtime/tests/vm/dart/v8_snapshot_profile_writer_test.dart
index b0584ca..2ecfcc8 100644
--- a/runtime/tests/vm/dart/v8_snapshot_profile_writer_test.dart
+++ b/runtime/tests/vm/dart/v8_snapshot_profile_writer_test.dart
@@ -12,11 +12,11 @@
 import 'use_flag_test_helper.dart';
 
 test(
-    {String dillPath,
-    bool useAsm,
-    bool useBare,
-    bool stripFlag,
-    bool stripUtil}) async {
+    {required String dillPath,
+    required bool useAsm,
+    required bool useBare,
+    required bool stripFlag,
+    required bool stripUtil}) async {
   // The assembler may add extra unnecessary information to the compiled
   // snapshot whether or not we generate DWARF information in the assembly, so
   // we force the use of a utility when generating assembly.
@@ -42,8 +42,7 @@
       "--write-v8-snapshot-profile-to=$profilePath",
       // Regression test for dartbug.com/41149. We don't assume forced
       // disassembler support in Product mode.
-      if (!const bool.fromEnvironment('dart.vm.product'))
-        '--disassemble',
+      if (!const bool.fromEnvironment('dart.vm.product')) '--disassemble',
       '--ignore-unrecognized-flags',
       dillPath,
     ];
@@ -117,8 +116,8 @@
   });
 }
 
-Match matchComplete(RegExp regexp, String line) {
-  Match match = regexp.firstMatch(line);
+Match? matchComplete(RegExp regexp, String line) {
+  Match? match = regexp.firstMatch(line);
   if (match == null) return match;
   if (match.start != 0 || match.end != line.length) return null;
   return match;
@@ -143,11 +142,11 @@
       .cast<List<int>>()
       .transform(utf8.decoder)
       .transform(LineSplitter())) {
-    Match match = matchComplete(fieldEntry, line);
+    Match? match = matchComplete(fieldEntry, line);
     if (match != null) {
       fields
-          .putIfAbsent(match.group(1), () => Set<String>())
-          .add(match.group(2));
+          .putIfAbsent(match.group(1)!, () => Set<String>())
+          .add(match.group(2)!);
     }
   }
 
@@ -158,14 +157,14 @@
   final String rawObjectPath =
       path.join(sdkDir, 'runtime', 'vm', 'raw_object.h');
 
-  String currentClass;
+  String? currentClass;
   bool hasMissingFields = false;
   await for (String line in File(rawObjectPath)
       .openRead()
       .cast<List<int>>()
       .transform(utf8.decoder)
       .transform(LineSplitter())) {
-    Match match = matchComplete(classStart, line);
+    Match? match = matchComplete(classStart, line);
     if (match != null) {
       currentClass = match.group(1);
       continue;
@@ -184,9 +183,9 @@
         print("$currentClass is missing entirely.");
         continue;
       }
-      if (!fields[currentClass].contains(match.group(2))) {
+      if (!fields[currentClass]!.contains(match.group(2)!)) {
         hasMissingFields = true;
-        print("$currentClass is missing ${match.group(2)}.");
+        print("$currentClass is missing ${match.group(2)!}.");
       }
     }
   }
@@ -220,6 +219,10 @@
       '--aot',
       '--platform',
       platformDill,
+      ...Platform.executableArguments.where((arg) =>
+          arg.startsWith('--enable-experiment=') ||
+          arg == '--null-safety' ||
+          arg == '--no-null-safety'),
       '-o',
       dillPath,
       _thisTestPath
diff --git a/runtime/tests/vm/dart_2/appjit_bytecode_simple_test.dart b/runtime/tests/vm/dart_2/appjit_bytecode_simple_test.dart
new file mode 100644
index 0000000..d936339
--- /dev/null
+++ b/runtime/tests/vm/dart_2/appjit_bytecode_simple_test.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.
+
+// OtherResources=appjit_bytecode_simple_test_body.dart
+
+// Verify that app-jit snapshot contains dependencies between classes and CHA
+// optimized code.
+
+import 'dart:async';
+import 'dart:io' show Platform;
+
+import 'snapshot_test_helper.dart';
+
+Future<void> main() => runAppJitBytecodeTest(
+    Platform.script.resolve('appjit_bytecode_simple_test_body.dart'));
diff --git a/runtime/tests/vm/dart_2/appjit_bytecode_simple_test_body.dart b/runtime/tests/vm/dart_2/appjit_bytecode_simple_test_body.dart
new file mode 100644
index 0000000..a882e9a
--- /dev/null
+++ b/runtime/tests/vm/dart_2/appjit_bytecode_simple_test_body.dart
@@ -0,0 +1,8 @@
+// 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.
+
+void main(List<String> args) {
+  final isTraining = args.contains("--train");
+  print(isTraining ? 'OK(Trained)' : 'OK(Run)');
+}
diff --git a/runtime/tests/vm/dart_2/appjit_cha_deopt_test.dart b/runtime/tests/vm/dart_2/appjit_cha_deopt_test.dart
new file mode 100644
index 0000000..37071f9
--- /dev/null
+++ b/runtime/tests/vm/dart_2/appjit_cha_deopt_test.dart
@@ -0,0 +1,17 @@
+// 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.
+
+// OtherResources=appjit_cha_deopt_test_body.dart
+// VMOptions=--optimization-counter-threshold=100 --deterministic
+
+// Verify that app-jit snapshot contains dependencies between classes and CHA
+// optimized code.
+
+import 'dart:async';
+import 'dart:io' show Platform;
+
+import 'snapshot_test_helper.dart';
+
+Future<void> main() =>
+    runAppJitTest(Platform.script.resolve('appjit_cha_deopt_test_body.dart'));
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
new file mode 100644
index 0000000..c59f720
--- /dev/null
+++ b/runtime/tests/vm/dart_2/appjit_cha_deopt_test_body.dart
@@ -0,0 +1,43 @@
+// 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.
+
+// Verify that app-jit snapshot contains dependencies between classes and CHA
+// optimized code.
+
+import 'package:expect/expect.dart';
+
+class A {
+  void getMyName() => getMyNameImpl();
+
+  void getMyNameImpl() => "A";
+}
+
+class B extends A {
+  void getMyNameImpl() => "B";
+}
+
+final Function makeA = () => new A();
+final Function makeB = () => new B();
+
+void optimizeGetMyName(dynamic obj) {
+  for (var i = 0; i < 100; i++) {
+    obj.getMyName();
+  }
+  Expect.equals("A", obj.getMyName());
+}
+
+void main(List<String> args) {
+  final isTraining = args.contains("--train");
+  final dynamic obj = (isTraining ? makeA : makeB)();
+  if (isTraining) {
+    for (var i = 0; i < 10; i++) {
+      optimizeGetMyName(obj);
+    }
+    Expect.equals('A', obj.getMyName());
+    print('OK(Trained)');
+  } else {
+    Expect.equals('B', obj.getMyName());
+    print('OK(Run)');
+  }
+}
diff --git a/runtime/tests/vm/dart_2/appjit_determinism_test.dart b/runtime/tests/vm/dart_2/appjit_determinism_test.dart
new file mode 100644
index 0000000..f5116a8
--- /dev/null
+++ b/runtime/tests/vm/dart_2/appjit_determinism_test.dart
@@ -0,0 +1,22 @@
+// 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.
+
+// Verify creating an app-jit snapshot twice generates the same bits.
+
+import 'dart:async';
+import 'snapshot_test_helper.dart';
+
+int fib(int n) {
+  if (n <= 1) return 1;
+  return fib(n - 1) + fib(n - 2);
+}
+
+Future<void> main(List<String> args) async {
+  if (args.contains('--child')) {
+    print(fib(35));
+    return;
+  }
+
+  await checkDeterministicSnapshot("app-jit", "14930352");
+}
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
new file mode 100644
index 0000000..804e30c
--- /dev/null
+++ b/runtime/tests/vm/dart_2/appjit_load_static_licm_test.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.
+
+// OtherResources=appjit_load_static_licm_test_body.dart
+
+// Verify that app-jit snapshot contains dependencies between classes and CHA
+// optimized code.
+
+import 'dart:async';
+import 'dart:io' show Platform;
+
+import 'snapshot_test_helper.dart';
+
+Future<void> main() => runAppJitTest(
+    Platform.script.resolve('appjit_load_static_licm_test_body.dart'));
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
new file mode 100644
index 0000000..4006853
--- /dev/null
+++ b/runtime/tests/vm/dart_2/appjit_load_static_licm_test_body.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.
+
+// Verify that LoadStaticField IL instruction can't be hoisted above
+// InitStaticField instruction.
+
+import 'package:expect/expect.dart';
+
+// Classes used to trigger deoptimization when running from app-jit snapshot.
+class A {
+  void foo() {}
+}
+
+class B {
+  void foo() {}
+}
+
+// Static final field with a non-trivial initializer.
+// This field will be reset before snapshot is written.
+final field = (() => 'value')();
+
+dynamic bar(dynamic o, {bool loadField: false}) {
+  o.foo();
+  // Create loop to trigger loop invariant code motion. We are testing that
+  // field load can't be hoisted above field initialization.
+  for (var i = 0; i < 2; i++) {
+    final v = loadField ? field : null;
+    if (loadField) {
+      return v;
+    }
+  }
+  return null;
+}
+
+void main(List<String> args) {
+  final isTraining = args.contains("--train");
+  dynamic o = isTraining ? new A() : new B();
+  for (var i = 0; i < 20000; i++) {
+    bar(o, loadField: false);
+    if (isTraining) {
+      // Initialize the field when training.
+      bar(o, loadField: true);
+    }
+  }
+  Expect.equals('value', bar(o, loadField: true));
+  print(isTraining ? 'OK(Trained)' : 'OK(Run)');
+}
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
new file mode 100644
index 0000000..20c864f
--- /dev/null
+++ b/runtime/tests/vm/dart_2/async_igoto_threshold_flag_test.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This 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
+//   used the igoto-based async.
+
+// VMOptions=--async-igoto-threshold=-1
+// VMOptions=--async-igoto-threshold=0
+// VMOptions=--async-igoto-threshold=1
+// VMOptions=--async-igoto-threshold=10
+// VMOptions=--async-igoto-threshold=1000
+
+import '../../../../benchmarks/Calls/dart/Calls.dart' as calls;
+
+main() async => calls.main();
diff --git a/runtime/tests/vm/dart_2/bad_snapshot b/runtime/tests/vm/dart_2/bad_snapshot
new file mode 100644
index 0000000..9b1a92d
--- /dev/null
+++ b/runtime/tests/vm/dart_2/bad_snapshot
Binary files differ
diff --git a/runtime/tests/vm/dart_2/bare_instructions_trampolines_test.dart b/runtime/tests/vm/dart_2/bare_instructions_trampolines_test.dart
new file mode 100644
index 0000000..b7d734d
--- /dev/null
+++ b/runtime/tests/vm/dart_2/bare_instructions_trampolines_test.dart
@@ -0,0 +1,12 @@
+// 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=--always-generate-trampolines-for-testing --use-bare-instructions
+
+// We use a reasonable sized test and run it with the above options.
+import 'hello_fuchsia_test.dart' as test;
+
+main(args) {
+  test.main(args);
+}
diff --git a/runtime/tests/vm/dart_2/base_il_serialization_test.dart b/runtime/tests/vm/dart_2/base_il_serialization_test.dart
new file mode 100644
index 0000000..569b661
--- /dev/null
+++ b/runtime/tests/vm/dart_2/base_il_serialization_test.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.
+
+// VMOptions=--serialize_flow_graphs_to=il_tmp.txt
+// VMOptions=--serialize_flow_graphs_to=il_tmp.txt --populate_llvm_constant_pool
+// VMOptions=--serialize_flow_graphs_to=il_tmp.txt --no_serialize_flow_graph_types
+// VMOptions=--serialize_flow_graphs_to=il_tmp.txt --verbose_flow_graph_serialization
+// VMOptions=--serialize_flow_graphs_to=il_tmp.txt --no_serialize_flow_graph_types --verbose_flow_graph_serialization
+
+// Just use the existing hello world test.
+import 'hello_world_test.dart' as test;
+
+main(args) {
+  test.main();
+}
diff --git a/runtime/tests/vm/dart_2/boxmint_test.dart b/runtime/tests/vm/dart_2/boxmint_test.dart
new file mode 100644
index 0000000..bcc90b0
--- /dev/null
+++ b/runtime/tests/vm/dart_2/boxmint_test.dart
@@ -0,0 +1,28 @@
+// 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.
+
+// Test case that tests boxing mint
+
+// VMOptions=--optimization_counter_threshold=10 --deterministic --use-slow-path --shared-slow-path-triggers-gc --stacktrace_filter=foobar
+
+import 'dart:typed_data';
+import 'package:expect/expect.dart';
+
+final gSize = 100;
+final l = Uint64List(gSize);
+int sum = 0;
+
+foobar() {
+  for (int i = 0; i < l.length; ++i) {
+    sum += l[i];
+  }
+  Expect.equals(-9223372036854775808, sum);
+}
+
+main() {
+  for (int i = 0; i < gSize; i++) {
+    l[i] = (i + 30) << 62;
+  }
+  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
new file mode 100644
index 0000000..ca3b432
--- /dev/null
+++ b/runtime/tests/vm/dart_2/byte_array_optimized_test.dart
@@ -0,0 +1,4263 @@
+// 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=--optimization_counter_threshold=10 --no-background-compilation
+
+// Library tag to be able to run in html test framework.
+library byte_array_test;
+
+import "package:expect/expect.dart";
+import 'dart:typed_data';
+
+// This test exercises optimized [] and []= operators
+// on byte array views.
+class OptimizedByteArrayTest {
+  static testInt8ListImpl(Int8List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(10, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x100 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x7F - i;
+    }
+    Expect
+        .listEquals([127, 126, 125, 124, 123, 122, 121, 120, 119, 118], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -0x80 + i;
+    }
+    Expect.listEquals(
+        [-128, -127, -126, -125, -124, -123, -122, -121, -120, -119], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Int8List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Int8List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [-128, 0, 1, 127]);
+    Expect.listEquals([0, 1, 2, -128, 0, 1, 127, 7, 8, 9], array);
+  }
+
+  static testInt8List() {
+    Expect.throws(() {
+      new Int8List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Int8List(10);
+    testInt8ListImpl(array);
+  }
+
+  static testUint8ListImpl(Uint8List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(10, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x100 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFF - i;
+    }
+    Expect.listEquals(
+        [0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Uint8List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Uint8List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [257, 0, 1, 255]);
+    Expect.listEquals([0, 1, 2, 1, 0, 1, 255, 7, 8, 9], array);
+  }
+
+  static testUint8List() {
+    Expect.throws(() {
+      new Uint8List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Uint8List(10);
+    testUint8ListImpl(array);
+  }
+
+  static testInt16ListImpl(Int16List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(2, array.elementSizeInBytes);
+    Expect.equals(20, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x10000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x7FFF - i;
+    }
+    Expect.listEquals([
+      0x7FFF,
+      0x7FFE,
+      0x7FFD,
+      0x7FFC,
+      0x7FFB,
+      0x7FFA,
+      0x7FF9,
+      0x7FF8,
+      0x7FF7,
+      0x7FF6
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -0x8000 + i;
+    }
+    Expect.listEquals([
+      -0x8000,
+      -0x7FFF,
+      -0x7FFE,
+      -0x7FFD,
+      -0x7FFC,
+      -0x7FFB,
+      -0x7FFA,
+      -0x7FF9,
+      -0x7FF8,
+      -0x7FF7
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Int16List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Int16List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [-32768, 0, 1, 32767]);
+    Expect.listEquals([0, 1, 2, -32768, 0, 1, 32767, 7, 8, 9], array);
+  }
+
+  static testInt16List() {
+    Expect.throws(() {
+      new Int16List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Int16List(10);
+    testInt16ListImpl(array);
+  }
+
+  static testUint16ListImpl(Uint16List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(2, array.elementSizeInBytes);
+    Expect.equals(20, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x10000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFFFF - i;
+    }
+    Expect.listEquals([
+      0xFFFF,
+      0xFFFE,
+      0xFFFD,
+      0xFFFC,
+      0xFFFB,
+      0xFFFA,
+      0xFFF9,
+      0xFFF8,
+      0xFFF7,
+      0xFFF6
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Uint16List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Uint16List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [0x10001, 0, 1, 0xFFFF]);
+    Expect.listEquals([0, 1, 2, 1, 0, 1, 0xFFFF, 7, 8, 9], array);
+  }
+
+  static testUint16List() {
+    Expect.throws(() {
+      new Uint16List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Uint16List(10);
+    testUint16ListImpl(array);
+  }
+
+  static testInt32ListImpl(Int32List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(4, array.elementSizeInBytes);
+    Expect.equals(40, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x100000000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x7FFFFFFF - i;
+    }
+    Expect.listEquals([
+      0x7FFFFFFF,
+      0x7FFFFFFE,
+      0x7FFFFFFD,
+      0x7FFFFFFC,
+      0x7FFFFFFB,
+      0x7FFFFFFA,
+      0x7FFFFFF9,
+      0x7FFFFFF8,
+      0x7FFFFFF7,
+      0x7FFFFFF6
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -0x80000000 + i;
+    }
+    Expect.listEquals([
+      -0x80000000,
+      -0x7FFFFFFF,
+      -0x7FFFFFFE,
+      -0x7FFFFFFD,
+      -0x7FFFFFFC,
+      -0x7FFFFFFB,
+      -0x7FFFFFFA,
+      -0x7FFFFFF9,
+      -0x7FFFFFF8,
+      -0x7FFFFFF7
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Int32List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Int32List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [-0x80000000, 0, 1, 0x7FFFFFFF]);
+    Expect.listEquals([0, 1, 2, -0x80000000, 0, 1, 0x7FFFFFFF, 7, 8, 9], array);
+  }
+
+  static testInt32List() {
+    Expect.throws(() {
+      new Int32List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Int32List(10);
+    testInt32ListImpl(array);
+  }
+
+  static testUint32ListImpl(Uint32List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(4, array.elementSizeInBytes);
+    Expect.equals(40, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x100000000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFFFFFFFF - i;
+    }
+    Expect.listEquals([
+      0xFFFFFFFF,
+      0xFFFFFFFE,
+      0xFFFFFFFD,
+      0xFFFFFFFC,
+      0xFFFFFFFB,
+      0xFFFFFFFA,
+      0xFFFFFFF9,
+      0xFFFFFFF8,
+      0xFFFFFFF7,
+      0xFFFFFFF6
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Uint32List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Uint32List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [0x100000001, 0, 1, 0xFFFFFFFF]);
+    Expect.listEquals([0, 1, 2, 1, 0, 1, 0xFFFFFFFF, 7, 8, 9], array);
+  }
+
+  static testUint32List() {
+    Expect.throws(() {
+      new Uint32List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    Expect.throws(() {
+      new Uint32List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Uint32List(10);
+    testUint32ListImpl(array);
+  }
+
+  static testInt64ListImpl(Int64List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(8, array.elementSizeInBytes);
+    Expect.equals(80, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x7FFFFFFFFFFFFFFF - i;
+    }
+    Expect.listEquals([
+      0x7FFFFFFFFFFFFFFF,
+      0x7FFFFFFFFFFFFFFE,
+      0x7FFFFFFFFFFFFFFD,
+      0x7FFFFFFFFFFFFFFC,
+      0x7FFFFFFFFFFFFFFB,
+      0x7FFFFFFFFFFFFFFA,
+      0x7FFFFFFFFFFFFFF9,
+      0x7FFFFFFFFFFFFFF8,
+      0x7FFFFFFFFFFFFFF7,
+      0x7FFFFFFFFFFFFFF6
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -0x8000000000000000 + i;
+    }
+    Expect.listEquals([
+      -0x8000000000000000,
+      -0x7FFFFFFFFFFFFFFF,
+      -0x7FFFFFFFFFFFFFFE,
+      -0x7FFFFFFFFFFFFFFD,
+      -0x7FFFFFFFFFFFFFFC,
+      -0x7FFFFFFFFFFFFFFB,
+      -0x7FFFFFFFFFFFFFFA,
+      -0x7FFFFFFFFFFFFFF9,
+      -0x7FFFFFFFFFFFFFF8,
+      -0x7FFFFFFFFFFFFFF7
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Int64List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Int64List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [-0x8000000000000000, 0, 1, 0x7FFFFFFFFFFFFFFF]);
+    Expect.listEquals(
+        [0, 1, 2, -0x8000000000000000, 0, 1, 0x7FFFFFFFFFFFFFFF, 7, 8, 9],
+        array);
+  }
+
+  static testInt64List() {
+    Expect.throws(() {
+      new Int64List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Int64List(10);
+    testInt64ListImpl(array);
+  }
+
+  static testUint64ListImpl(Uint64List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(8, array.elementSizeInBytes);
+    Expect.equals(80, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFFFFFFFFFFFFFFFF - i;
+    }
+    Expect.listEquals([
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFE,
+      0xFFFFFFFFFFFFFFFD,
+      0xFFFFFFFFFFFFFFFC,
+      0xFFFFFFFFFFFFFFFB,
+      0xFFFFFFFFFFFFFFFA,
+      0xFFFFFFFFFFFFFFF9,
+      0xFFFFFFFFFFFFFFF8,
+      0xFFFFFFFFFFFFFFF7,
+      0xFFFFFFFFFFFFFFF6
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Uint64List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Uint64List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [-0x8000000000000000, 0, 1, 0xFFFFFFFFFFFFFFFF]);
+    Expect.listEquals(
+        [0, 1, 2, -0x8000000000000000, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9],
+        array);
+  }
+
+  static testUint64List() {
+    Expect.throws(() {
+      new Uint64List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Uint64List(10);
+    testUint64ListImpl(array);
+  }
+
+  static testFloat32ListImpl(Float32List array) {
+    Expect.isTrue(array is List<double>);
+    Expect.equals(10, array.length);
+    Expect.equals(4, array.elementSizeInBytes);
+    Expect.equals(40, array.lengthInBytes);
+    Expect
+        .listEquals([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], array);
+    Expect.throws(() {
+      array[-1] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0.0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0.0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1.0 + i;
+    }
+    Expect
+        .listEquals([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0], array);
+    // TODO: min, max, and round
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i * 1.0;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Float32List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Float32List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3.0, 4.0, 5.0, 6.0], region);
+    array.setRange(3, 7, [double.negativeInfinity, 0.0, 1.0, double.infinity]);
+    Expect.listEquals([
+      0.0,
+      1.0,
+      2.0,
+      double.negativeInfinity,
+      0.0,
+      1.0,
+      double.infinity,
+      7.0,
+      8.0,
+      9.0
+    ], array);
+  }
+
+  static testFloat32List() {
+    Expect.throws(() {
+      new Float32List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Float32List(10);
+    testFloat32ListImpl(array);
+  }
+
+  static testFloat64ListImpl(Float64List array) {
+    Expect.isTrue(array is List<double>);
+    Expect.equals(10, array.length);
+    Expect.equals(8, array.elementSizeInBytes);
+    Expect.equals(80, array.lengthInBytes);
+    Expect
+        .listEquals([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], array);
+    Expect.throws(() {
+      array[-1] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0.0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0.0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1.0 + i;
+    }
+    Expect
+        .listEquals([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0], array);
+    // TODO: min, max
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i * 1.0;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Float64List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Float64List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3.0, 4.0, 5.0, 6.0], region);
+    array.setRange(3, 7, [double.negativeInfinity, 0.0, 1.0, double.infinity]);
+    Expect.listEquals([
+      0.0,
+      1.0,
+      2.0,
+      double.negativeInfinity,
+      0.0,
+      1.0,
+      double.infinity,
+      7.0,
+      8.0,
+      9.0
+    ], array);
+  }
+
+  static testFloat64List() {
+    Expect.throws(() {
+      new Float64List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Float64List(10);
+    testFloat64ListImpl(array);
+  }
+
+  static testInt8ListViewImpl(var array) {
+    Expect.equals(12, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(12, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFF;
+    }
+    Expect.throws(() {
+      new Int8List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int8List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int8List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int8List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int8List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Int8List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Int8List);
+    Expect.equals(0, empty.length);
+    var whole = new Int8List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Int8List);
+    Expect.equals(12, whole.length);
+    var view = new Int8List.view(array.buffer, 1, array.length - 2);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Int8List);
+    Expect.equals(10, view.length);
+    Expect.equals(1, view.elementSizeInBytes);
+    Expect.equals(10, view.lengthInBytes);
+    Expect.listEquals([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([0xFF, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0xFF], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x100 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
+    Expect.listEquals([0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xFF], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], view);
+    Expect.listEquals([
+      0xFF,
+      0xF6,
+      0xF7,
+      0xF8,
+      0xF9,
+      0xFA,
+      0xFB,
+      0xFC,
+      0xFD,
+      0xFE,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x7F - i;
+    }
+    Expect.listEquals([127, 126, 125, 124, 123, 122, 121, 120, 119, 118], view);
+    Expect.listEquals(
+        [0xFF, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 0xFF], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -0x80 + i;
+    }
+    Expect.listEquals(
+        [-128, -127, -126, -125, -124, -123, -122, -121, -120, -119], view);
+    Expect.listEquals([
+      0xFF,
+      0x80,
+      0x81,
+      0x82,
+      0x83,
+      0x84,
+      0x85,
+      0x86,
+      0x87,
+      0x88,
+      0x89,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Int8List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Int8List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [-128, 0, 1, 127]);
+    Expect.listEquals([0, 1, 2, -128, 0, 1, 127, 7, 8, 9], view);
+    Expect.listEquals([0xFF, 0, 1, 2, 128, 0, 1, 127, 7, 8, 9, 0xFF], array);
+  }
+
+  static testInt8ListView() {
+    var array = new Uint8List(12);
+    testInt8ListViewImpl(array);
+  }
+
+  static testUint8ListViewImpl(var array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(12, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(12, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -1;
+    }
+    Expect.throws(() {
+      new Uint8List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint8List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint8List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint8List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint8List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Uint8List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Uint8List);
+    Expect.equals(0, empty.length);
+    var whole = new Uint8List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Uint8List);
+    Expect.equals(12, whole.length);
+    var view = new Uint8List.view(array.buffer, 1, array.length - 2);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Uint8List);
+    Expect.equals(10, view.length);
+    Expect.equals(1, view.elementSizeInBytes);
+    Expect.equals(10, view.lengthInBytes);
+    Expect.listEquals(
+        [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x100 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
+    Expect.listEquals([-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0xFF - i;
+    }
+    Expect.listEquals(
+        [0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6], view);
+    Expect.listEquals([-1, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -1], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Uint8List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Uint8List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [257, 0, 1, 255]);
+    Expect.listEquals([0, 1, 2, 1, 0, 1, 255, 7, 8, 9], view);
+  }
+
+  static testUint8ListView() {
+    var array = new Int8List(12);
+    testUint8ListViewImpl(array);
+  }
+
+  static testInt16ListViewImpl(var array) {
+    Expect.equals(24, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(24, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFF;
+    }
+    Expect.throws(() {
+      new Int16List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int16List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int16List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int16List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int16List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Int16List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Int16List);
+    Expect.equals(0, empty.length);
+    var whole = new Int16List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Int16List);
+    Expect.equals(12, whole.length);
+    var view = new Int16List.view(array.buffer, 2, 10);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Int16List);
+    Expect.equals(10, view.length);
+    Expect.equals(2, view.elementSizeInBytes);
+    Expect.equals(20, view.lengthInBytes);
+    Expect.listEquals([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0x01,
+      0x00,
+      0x02,
+      0x00,
+      0x03,
+      0x00,
+      0x04,
+      0x00,
+      0x05,
+      0x00,
+      0x06,
+      0x00,
+      0x07,
+      0x00,
+      0x08,
+      0x00,
+      0x09,
+      0x00,
+      0x0A,
+      0x00,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x10000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0x02,
+      0x00,
+      0x03,
+      0x00,
+      0x04,
+      0x00,
+      0x05,
+      0x00,
+      0x06,
+      0x00,
+      0x07,
+      0x00,
+      0x08,
+      0x00,
+      0x09,
+      0x00,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xF6,
+      0xFF,
+      0xF7,
+      0xFF,
+      0xF8,
+      0xFF,
+      0xF9,
+      0xFF,
+      0xFA,
+      0xFF,
+      0xFB,
+      0xFF,
+      0xFC,
+      0xFF,
+      0xFD,
+      0xFF,
+      0xFE,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x7FFF - i;
+    }
+    Expect.listEquals([
+      0x7FFF,
+      0x7FFE,
+      0x7FFD,
+      0x7FFC,
+      0x7FFB,
+      0x7FFA,
+      0x7FF9,
+      0x7FF8,
+      0x7FF7,
+      0x7FF6
+    ], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFE,
+      0x7F,
+      0xFD,
+      0x7F,
+      0xFC,
+      0x7F,
+      0xFB,
+      0x7F,
+      0xFA,
+      0x7F,
+      0xF9,
+      0x7F,
+      0xF8,
+      0x7F,
+      0xF7,
+      0x7F,
+      0xF6,
+      0x7F,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -0x8000 + i;
+    }
+    Expect.listEquals([
+      -0x8000,
+      -0x7FFF,
+      -0x7FFE,
+      -0x7FFD,
+      -0x7FFC,
+      -0x7FFB,
+      -0x7FFA,
+      -0x7FF9,
+      -0x7FF8,
+      -0x7FF7
+    ], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0x00,
+      0x80,
+      0x01,
+      0x80,
+      0x02,
+      0x80,
+      0x03,
+      0x80,
+      0x04,
+      0x80,
+      0x05,
+      0x80,
+      0x06,
+      0x80,
+      0x07,
+      0x80,
+      0x08,
+      0x80,
+      0x09,
+      0x80,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Int16List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Int16List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [-32768, 0, 1, 32767]);
+    Expect.listEquals([0, 1, 2, -32768, 0, 1, 32767, 7, 8, 9], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0x02,
+      0x00,
+      0x00,
+      0x80,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0xFF,
+      0x7F,
+      0x07,
+      0x00,
+      0x08,
+      0x00,
+      0x09,
+      0x00,
+      0xFF,
+      0xFF
+    ], array);
+  }
+
+  static testInt16ListView() {
+    var array = new Uint8List(24);
+    testInt16ListViewImpl(array);
+  }
+
+  static testUint16ListViewImpl(var array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(24, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(24, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -1;
+    }
+    Expect.throws(() {
+      new Uint16List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint16List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint16List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint16List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint16List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Uint16List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Uint16List);
+    Expect.equals(0, empty.length);
+    var whole = new Uint16List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Uint16List);
+    Expect.equals(12, whole.length);
+    var view = new Uint16List.view(array.buffer, 2, 10);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Uint16List);
+    Expect.equals(10, view.length);
+    Expect.equals(2, view.elementSizeInBytes);
+    Expect.equals(20, view.lengthInBytes);
+    Expect.listEquals([
+      0xFFFF,
+      0xFFFF,
+      0xFFFF,
+      0xFFFF,
+      0xFFFF,
+      0xFFFF,
+      0xFFFF,
+      0xFFFF,
+      0xFFFF,
+      0xFFFF
+    ], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      1,
+      0,
+      2,
+      0,
+      3,
+      0,
+      4,
+      0,
+      5,
+      0,
+      6,
+      0,
+      7,
+      0,
+      8,
+      0,
+      9,
+      0,
+      10,
+      0,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x10000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      0,
+      0,
+      1,
+      0,
+      2,
+      0,
+      3,
+      0,
+      4,
+      0,
+      5,
+      0,
+      6,
+      0,
+      7,
+      0,
+      8,
+      0,
+      9,
+      0,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0xFFFF - i;
+    }
+    Expect.listEquals([
+      0xFFFF,
+      0xFFFE,
+      0xFFFD,
+      0xFFFC,
+      0xFFFB,
+      0xFFFA,
+      0xFFF9,
+      0xFFF8,
+      0xFFF7,
+      0xFFF6
+    ], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      -2,
+      -1,
+      -3,
+      -1,
+      -4,
+      -1,
+      -5,
+      -1,
+      -6,
+      -1,
+      -7,
+      -1,
+      -8,
+      -1,
+      -9,
+      -1,
+      -10,
+      -1,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Uint16List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Uint16List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [0x10001, 0, 1, 0xFFFF]);
+    Expect.listEquals([0, 1, 2, 1, 0, 1, 0xFFFF, 7, 8, 9], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      0,
+      0,
+      1,
+      0,
+      2,
+      0,
+      1,
+      0,
+      0,
+      0,
+      1,
+      0,
+      -1,
+      -1,
+      7,
+      0,
+      8,
+      0,
+      9,
+      0,
+      -1,
+      -1
+    ], array);
+  }
+
+  static testUint16ListView() {
+    var array = new Int8List(24);
+    testUint16ListViewImpl(array);
+  }
+
+  static testInt32ListView() {
+    var array = new Uint8List(48);
+    Expect.equals(48, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(48, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFF;
+    }
+    Expect.throws(() {
+      new Int32List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int32List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int32List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int32List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int32List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Int32List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Int32List);
+    Expect.equals(0, empty.length);
+    var whole = new Int32List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Int32List);
+    Expect.equals(12, whole.length);
+    var view = new Int32List.view(array.buffer, 4, 10);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Int32List);
+    Expect.equals(10, view.length);
+    Expect.equals(4, view.elementSizeInBytes);
+    Expect.equals(40, view.lengthInBytes);
+    Expect.listEquals([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0x02,
+      0x00,
+      0x00,
+      0x00,
+      0x03,
+      0x00,
+      0x00,
+      0x00,
+      0x04,
+      0x00,
+      0x00,
+      0x00,
+      0x05,
+      0x00,
+      0x00,
+      0x00,
+      0x06,
+      0x00,
+      0x00,
+      0x00,
+      0x07,
+      0x00,
+      0x00,
+      0x00,
+      0x08,
+      0x00,
+      0x00,
+      0x00,
+      0x09,
+      0x00,
+      0x00,
+      0x00,
+      0x0A,
+      0x00,
+      0x00,
+      0x00,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x100000000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0x02,
+      0x00,
+      0x00,
+      0x00,
+      0x03,
+      0x00,
+      0x00,
+      0x00,
+      0x04,
+      0x00,
+      0x00,
+      0x00,
+      0x05,
+      0x00,
+      0x00,
+      0x00,
+      0x06,
+      0x00,
+      0x00,
+      0x00,
+      0x07,
+      0x00,
+      0x00,
+      0x00,
+      0x08,
+      0x00,
+      0x00,
+      0x00,
+      0x09,
+      0x00,
+      0x00,
+      0x00,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF6,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF7,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF8,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF9,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFA,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFB,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFC,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFD,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFE,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x7FFFFFFF - i;
+    }
+    Expect.listEquals([
+      0x7FFFFFFF,
+      0x7FFFFFFE,
+      0x7FFFFFFD,
+      0x7FFFFFFC,
+      0x7FFFFFFB,
+      0x7FFFFFFA,
+      0x7FFFFFF9,
+      0x7FFFFFF8,
+      0x7FFFFFF7,
+      0x7FFFFFF6
+    ], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFE,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFD,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFC,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFB,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFA,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF9,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF8,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF7,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF6,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -0x80000000 + i;
+    }
+    Expect.listEquals([
+      -0x80000000,
+      -0x7FFFFFFF,
+      -0x7FFFFFFE,
+      -0x7FFFFFFD,
+      -0x7FFFFFFC,
+      -0x7FFFFFFB,
+      -0x7FFFFFFA,
+      -0x7FFFFFF9,
+      -0x7FFFFFF8,
+      -0x7FFFFFF7
+    ], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x01,
+      0x00,
+      0x00,
+      0x80,
+      0x02,
+      0x00,
+      0x00,
+      0x80,
+      0x03,
+      0x00,
+      0x00,
+      0x80,
+      0x04,
+      0x00,
+      0x00,
+      0x80,
+      0x05,
+      0x00,
+      0x00,
+      0x80,
+      0x06,
+      0x00,
+      0x00,
+      0x80,
+      0x07,
+      0x00,
+      0x00,
+      0x80,
+      0x08,
+      0x00,
+      0x00,
+      0x80,
+      0x09,
+      0x00,
+      0x00,
+      0x80,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Int32List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Int32List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [-0x80000000, 0, 1, 0x7FFFFFFF]);
+    Expect.listEquals([0, 1, 2, -0x80000000, 0, 1, 0x7FFFFFFF, 7, 8, 9], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0x02,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0x07,
+      0x00,
+      0x00,
+      0x00,
+      0x08,
+      0x00,
+      0x00,
+      0x00,
+      0x09,
+      0x00,
+      0x00,
+      0x00,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+  }
+
+  static testUint32ListViewImpl(var array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(48, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(48, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -1;
+    }
+    Expect.throws(() {
+      new Uint32List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint32List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint32List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint32List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint32List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Uint32List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Uint32List);
+    Expect.equals(0, empty.length);
+    var whole = new Uint32List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Uint32List);
+    Expect.equals(12, whole.length);
+    var view = new Uint32List.view(array.buffer, 4, 10);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Uint32List);
+    Expect.equals(10, view.length);
+    Expect.equals(4, view.elementSizeInBytes);
+    Expect.equals(40, view.lengthInBytes);
+    Expect.listEquals([
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF
+    ], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      1,
+      0,
+      0,
+      0,
+      2,
+      0,
+      0,
+      0,
+      3,
+      0,
+      0,
+      0,
+      4,
+      0,
+      0,
+      0,
+      5,
+      0,
+      0,
+      0,
+      6,
+      0,
+      0,
+      0,
+      7,
+      0,
+      0,
+      0,
+      8,
+      0,
+      0,
+      0,
+      9,
+      0,
+      0,
+      0,
+      10,
+      0,
+      0,
+      0,
+      -1,
+      -1,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x100000000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      0,
+      0,
+      0,
+      0,
+      1,
+      0,
+      0,
+      0,
+      2,
+      0,
+      0,
+      0,
+      3,
+      0,
+      0,
+      0,
+      4,
+      0,
+      0,
+      0,
+      5,
+      0,
+      0,
+      0,
+      6,
+      0,
+      0,
+      0,
+      7,
+      0,
+      0,
+      0,
+      8,
+      0,
+      0,
+      0,
+      9,
+      0,
+      0,
+      0,
+      -1,
+      -1,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0xFFFFFFFF - i;
+    }
+    Expect.listEquals([
+      0xFFFFFFFF,
+      0xFFFFFFFE,
+      0xFFFFFFFD,
+      0xFFFFFFFC,
+      0xFFFFFFFB,
+      0xFFFFFFFA,
+      0xFFFFFFF9,
+      0xFFFFFFF8,
+      0xFFFFFFF7,
+      0xFFFFFFF6
+    ], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -2,
+      -1,
+      -1,
+      -1,
+      -3,
+      -1,
+      -1,
+      -1,
+      -4,
+      -1,
+      -1,
+      -1,
+      -5,
+      -1,
+      -1,
+      -1,
+      -6,
+      -1,
+      -1,
+      -1,
+      -7,
+      -1,
+      -1,
+      -1,
+      -8,
+      -1,
+      -1,
+      -1,
+      -9,
+      -1,
+      -1,
+      -1,
+      -10,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Uint32List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Uint32List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [0x100000001, 0, 1, 0xFFFFFFFF]);
+    Expect.listEquals([0, 1, 2, 1, 0, 1, 0xFFFFFFFF, 7, 8, 9], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      0,
+      0,
+      0,
+      0,
+      1,
+      0,
+      0,
+      0,
+      2,
+      0,
+      0,
+      0,
+      1,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      1,
+      0,
+      0,
+      0,
+      -1,
+      -1,
+      -1,
+      -1,
+      7,
+      0,
+      0,
+      0,
+      8,
+      0,
+      0,
+      0,
+      9,
+      0,
+      0,
+      0,
+      -1,
+      -1,
+      -1,
+      -1
+    ], array);
+  }
+
+  static testUint32ListView() {
+    var array = new Int8List(48);
+    testUint32ListViewImpl(array);
+  }
+
+  static testInt64ListViewImpl(var array) {
+    Expect.equals(96, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(96, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFF;
+    }
+    Expect.throws(() {
+      new Int64List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int64List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int64List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int64List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int64List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Int64List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Int64List);
+    Expect.equals(0, empty.length);
+    var whole = new Int64List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Int64List);
+    Expect.equals(12, whole.length);
+    var view = new Int64List.view(array.buffer, 8, 10);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Int64List);
+    Expect.equals(10, view.length);
+    Expect.equals(8, view.elementSizeInBytes);
+    Expect.equals(80, view.lengthInBytes);
+    Expect.listEquals([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x02,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x03,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x04,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x05,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x06,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x07,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x08,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x09,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x0A,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF6,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF7,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF8,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF9,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFA,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFB,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFC,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFD,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFE,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x7FFFFFFFFFFFFFFF - i;
+    }
+    Expect.listEquals([
+      0x7FFFFFFFFFFFFFFF,
+      0x7FFFFFFFFFFFFFFE,
+      0x7FFFFFFFFFFFFFFD,
+      0x7FFFFFFFFFFFFFFC,
+      0x7FFFFFFFFFFFFFFB,
+      0x7FFFFFFFFFFFFFFA,
+      0x7FFFFFFFFFFFFFF9,
+      0x7FFFFFFFFFFFFFF8,
+      0x7FFFFFFFFFFFFFF7,
+      0x7FFFFFFFFFFFFFF6
+    ], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFE,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFD,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFC,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFB,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFA,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF9,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF8,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF7,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF6,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -0x8000000000000000 + i;
+    }
+    Expect.listEquals([
+      -0x8000000000000000,
+      -0x7FFFFFFFFFFFFFFF,
+      -0x7FFFFFFFFFFFFFFE,
+      -0x7FFFFFFFFFFFFFFD,
+      -0x7FFFFFFFFFFFFFFC,
+      -0x7FFFFFFFFFFFFFFB,
+      -0x7FFFFFFFFFFFFFFA,
+      -0x7FFFFFFFFFFFFFF9,
+      -0x7FFFFFFFFFFFFFF8,
+      -0x7FFFFFFFFFFFFFF7
+    ], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x02,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x03,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x04,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x05,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x06,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x07,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x08,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x09,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Int64List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Int64List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [-0x8000000000000000, 0, 1, 0x7FFFFFFFFFFFFFFF]);
+    Expect.listEquals(
+        [0, 1, 2, -0x8000000000000000, 0, 1, 0x7FFFFFFFFFFFFFFF, 7, 8, 9],
+        view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x02,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0x07,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x08,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x09,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+  }
+
+  static testInt64ListView() {
+    var array = new Uint8List(96);
+    testInt64ListViewImpl(array);
+  }
+
+  static testUint64ListViewImpl(var array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(96, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(96, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -1;
+    }
+    Expect.throws(() {
+      new Uint64List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint64List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint64List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint64List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint64List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Uint64List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Uint64List);
+    Expect.equals(0, empty.length);
+    var whole = new Uint64List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Uint64List);
+    Expect.equals(12, whole.length);
+    var view = new Uint64List.view(array.buffer, 8, 10);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Uint64List);
+    Expect.equals(10, view.length);
+    Expect.equals(8, view.elementSizeInBytes);
+    Expect.equals(80, view.lengthInBytes);
+    Expect.listEquals([
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF
+    ], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      1,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      2,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      3,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      4,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      5,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      6,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      7,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      8,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      9,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      10,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0xFFFFFFFFFFFFFFFF - i;
+    }
+    Expect.listEquals([
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFE,
+      0xFFFFFFFFFFFFFFFD,
+      0xFFFFFFFFFFFFFFFC,
+      0xFFFFFFFFFFFFFFFB,
+      0xFFFFFFFFFFFFFFFA,
+      0xFFFFFFFFFFFFFFF9,
+      0xFFFFFFFFFFFFFFF8,
+      0xFFFFFFFFFFFFFFF7,
+      0xFFFFFFFFFFFFFFF6
+    ], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -2,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -3,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -4,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -5,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -6,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -7,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -8,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -9,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -10,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Uint64List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Uint64List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF]);
+    Expect.listEquals(
+        [0, 1, 2, 0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      1,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      2,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      1,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      -128,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      1,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      7,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      8,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      9,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1
+    ], array);
+  }
+
+  static testUint64ListView() {
+    var array = new Int8List(96);
+    testUint64ListViewImpl(array);
+  }
+
+  static testFloat32ListViewImpl(var array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(12, array.length);
+    Expect.equals(4, array.elementSizeInBytes);
+    Expect.equals(48, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xBF800000;
+    }
+    Expect.throws(() {
+      new Float32List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float32List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float32List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float32List.view(array.buffer, 0, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float32List.view(array.buffer, array.lengthInBytes - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Float32List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<double>);
+    Expect.isTrue(empty is Float32List);
+    Expect.equals(0, empty.length);
+    var whole = new Float32List.view(array.buffer);
+    Expect.isTrue(whole is List<double>);
+    Expect.isTrue(whole is Float32List);
+    Expect.equals(12, whole.length);
+    var view = new Float32List.view(array.buffer, 4, 10);
+    Expect.isTrue(view is List<double>);
+    Expect.isTrue(view is Float32List);
+    Expect.equals(10, view.length);
+    Expect.equals(4, view.elementSizeInBytes);
+    Expect.equals(40, view.lengthInBytes);
+    Expect.listEquals(
+        [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], view);
+    Expect.throws(() {
+      view[-1] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0.0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0.0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1.0 + i;
+    }
+    Expect
+        .listEquals([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0], view);
+    Expect.listEquals([
+      0xBF800000,
+      0x3F800000,
+      0x40000000,
+      0x40400000,
+      0x40800000,
+      0x40A00000,
+      0x40C00000,
+      0x40E00000,
+      0x41000000,
+      0x41100000,
+      0x41200000,
+      0xBF800000
+    ], array);
+    // TODO: min, max, and round
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i * 1.0;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Float32List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Float32List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3.0, 4.0, 5.0, 6.0], region);
+    view.setRange(3, 7, [double.negativeInfinity, 0.0, 1.0, double.infinity]);
+    Expect.listEquals([
+      0.0,
+      1.0,
+      2.0,
+      double.negativeInfinity,
+      0.0,
+      1.0,
+      double.infinity,
+      7.0,
+      8.0,
+      9.0
+    ], view);
+    Expect.listEquals([
+      0xBF800000,
+      0x00000000,
+      0x3F800000,
+      0x40000000,
+      0xFF800000,
+      0x00000000,
+      0x3F800000,
+      0x7F800000,
+      0x40E00000,
+      0x41000000,
+      0x41100000,
+      0xBF800000
+    ], array);
+  }
+
+  static testFloat32ListView() {
+    var array = new Uint32List(12);
+    testFloat32ListViewImpl(array);
+  }
+
+  static testFloat64ListViewImpl(var array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(12, array.length);
+    Expect.equals(8, array.elementSizeInBytes);
+    Expect.equals(96, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xBFF0000000000000;
+    }
+    Expect.throws(() {
+      new Float64List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float64List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float64List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float64List.view(array.buffer, 0, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float64List.view(array.buffer, array.lengthInBytes - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Float64List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<double>);
+    Expect.isTrue(empty is Float64List);
+    Expect.equals(0, empty.length);
+    var whole = new Float64List.view(array.buffer);
+    Expect.isTrue(whole is List<double>);
+    Expect.isTrue(whole is Float64List);
+    Expect.equals(12, whole.length);
+    var view = new Float64List.view(array.buffer, 8, 10);
+    Expect.isTrue(view is List<double>);
+    Expect.isTrue(view is Float64List);
+    Expect.equals(10, view.length);
+    Expect.equals(8, view.elementSizeInBytes);
+    Expect.equals(80, view.lengthInBytes);
+    Expect.listEquals(
+        [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], view);
+    Expect.throws(() {
+      view[-1] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0.0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0.0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1.0 + i;
+    }
+    Expect
+        .listEquals([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0], view);
+    Expect.listEquals([
+      0xBFF0000000000000,
+      0x3FF0000000000000,
+      0x4000000000000000,
+      0x4008000000000000,
+      0x4010000000000000,
+      0x4014000000000000,
+      0x4018000000000000,
+      0x401C000000000000,
+      0x4020000000000000,
+      0x4022000000000000,
+      0x4024000000000000,
+      0xBFF0000000000000
+    ], array);
+    // TODO: min, max
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i * 1.0;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Float64List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Float64List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3.0, 4.0, 5.0, 6.0], region);
+    view.setRange(3, 7, [double.negativeInfinity, 0.0, 1.0, double.infinity]);
+    Expect.listEquals([
+      0.0,
+      1.0,
+      2.0,
+      double.negativeInfinity,
+      0.0,
+      1.0,
+      double.infinity,
+      7.0,
+      8.0,
+      9.0
+    ], view);
+    Expect.listEquals([
+      0xBFF0000000000000,
+      0x0000000000000000,
+      0x3FF0000000000000,
+      0x4000000000000000,
+      0xFFF0000000000000,
+      0x0000000000000000,
+      0x3FF0000000000000,
+      0x7FF0000000000000,
+      0x401C000000000000,
+      0x4020000000000000,
+      0x4022000000000000,
+      0xBFF0000000000000
+    ], array);
+  }
+
+  static testFloat64ListView() {
+    var array = new Uint64List(12);
+    testFloat64ListViewImpl(array);
+  }
+
+  static testMain() {
+    testInt8List();
+    testUint8List();
+    testInt16List();
+    testUint16List();
+    testInt32List();
+    testUint32List();
+    testInt64List();
+    testUint64List();
+    testFloat32List();
+    testFloat64List();
+    //testByteList();
+    testInt8ListView();
+    testUint8ListView();
+    testInt16ListView();
+    testUint16ListView();
+    testInt32ListView();
+    testUint32ListView();
+    testInt64ListView();
+    testUint64ListView();
+    testFloat32ListView();
+    testFloat64ListView();
+  }
+}
+
+main() {
+  for (var i = 0; i < 20; i++) {
+    OptimizedByteArrayTest.testMain();
+  }
+}
diff --git a/runtime/tests/vm/dart_2/byte_array_test.dart b/runtime/tests/vm/dart_2/byte_array_test.dart
new file mode 100644
index 0000000..a476301
--- /dev/null
+++ b/runtime/tests/vm/dart_2/byte_array_test.dart
@@ -0,0 +1,4660 @@
+// 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=--optimization_counter_threshold=10 --disable_alloc_stubs_after_gc --no-background-compilation
+
+// Library tag to be able to run in html test framework.
+library byte_array_test;
+
+import "package:expect/expect.dart";
+import 'dart:typed_data';
+
+class ByteArrayTest {
+  static testInt8ListImpl(Int8List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(10, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x100 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x7F - i;
+    }
+    Expect
+        .listEquals([127, 126, 125, 124, 123, 122, 121, 120, 119, 118], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -0x80 + i;
+    }
+    Expect.listEquals(
+        [-128, -127, -126, -125, -124, -123, -122, -121, -120, -119], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Int8List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    empty = array.sublist(array.length);
+    Expect.equals(0, empty.length);
+
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Int8List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [-128, 0, 1, 127]);
+    Expect.listEquals([0, 1, 2, -128, 0, 1, 127, 7, 8, 9], array);
+  }
+
+  static testInt8List() {
+    Expect.throws(() {
+      new Int8List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Int8List(10);
+    testInt8ListImpl(array);
+  }
+
+  static testUint8ListImpl(Uint8List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(10, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x100 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFF - i;
+    }
+    Expect.listEquals(
+        [0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Uint8List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    empty = array.sublist(array.length);
+    Expect.equals(0, empty.length);
+
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Uint8List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [257, 0, 1, 255]);
+    Expect.listEquals([0, 1, 2, 1, 0, 1, 255, 7, 8, 9], array);
+  }
+
+  static testUint8List() {
+    Expect.throws(() {
+      new Uint8List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Uint8List(10);
+    testUint8ListImpl(array);
+  }
+
+  static testUint8ClampedListImpl(Uint8ClampedList array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(10, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -1 + i;
+    }
+    Expect.listEquals([0, 0, 1, 2, 3, 4, 5, 6, 7, 8], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x100 + i;
+    }
+    Expect
+        .listEquals([255, 255, 255, 255, 255, 255, 255, 255, 255, 255], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFF - i;
+    }
+    Expect.listEquals(
+        [0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Uint8ClampedList);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    empty = array.sublist(array.length);
+    Expect.equals(0, empty.length);
+
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Uint8ClampedList);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [257, 0, 1, 255]);
+    Expect.listEquals([0, 1, 2, 255, 0, 1, 255, 7, 8, 9], array);
+  }
+
+  static testUint8ClampedList() {
+    Expect.throws(() {
+      new Uint8ClampedList(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Uint8ClampedList(10);
+    testUint8ClampedListImpl(array);
+  }
+
+  static testInt16ListImpl(Int16List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(2, array.elementSizeInBytes);
+    Expect.equals(20, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x10000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x7FFF - i;
+    }
+    Expect.listEquals([
+      0x7FFF,
+      0x7FFE,
+      0x7FFD,
+      0x7FFC,
+      0x7FFB,
+      0x7FFA,
+      0x7FF9,
+      0x7FF8,
+      0x7FF7,
+      0x7FF6
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -0x8000 + i;
+    }
+    Expect.listEquals([
+      -0x8000,
+      -0x7FFF,
+      -0x7FFE,
+      -0x7FFD,
+      -0x7FFC,
+      -0x7FFB,
+      -0x7FFA,
+      -0x7FF9,
+      -0x7FF8,
+      -0x7FF7
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Int16List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    empty = array.sublist(array.length);
+    Expect.equals(0, empty.length);
+
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Int16List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [-32768, 0, 1, 32767]);
+    Expect.listEquals([0, 1, 2, -32768, 0, 1, 32767, 7, 8, 9], array);
+  }
+
+  static testInt16List() {
+    Expect.throws(() {
+      new Int16List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Int16List(10);
+    testInt16ListImpl(array);
+  }
+
+  static testUint16ListImpl(Uint16List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(2, array.elementSizeInBytes);
+    Expect.equals(20, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x10000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFFFF - i;
+    }
+    Expect.listEquals([
+      0xFFFF,
+      0xFFFE,
+      0xFFFD,
+      0xFFFC,
+      0xFFFB,
+      0xFFFA,
+      0xFFF9,
+      0xFFF8,
+      0xFFF7,
+      0xFFF6
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Uint16List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    empty = array.sublist(array.length);
+    Expect.equals(0, empty.length);
+
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Uint16List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [0x10001, 0, 1, 0xFFFF]);
+    Expect.listEquals([0, 1, 2, 1, 0, 1, 0xFFFF, 7, 8, 9], array);
+  }
+
+  static testUint16List() {
+    Expect.throws(() {
+      new Uint16List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Uint16List(10);
+    testUint16ListImpl(array);
+  }
+
+  static testInt32ListImpl(Int32List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(4, array.elementSizeInBytes);
+    Expect.equals(40, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x100000000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x7FFFFFFF - i;
+    }
+    Expect.listEquals([
+      0x7FFFFFFF,
+      0x7FFFFFFE,
+      0x7FFFFFFD,
+      0x7FFFFFFC,
+      0x7FFFFFFB,
+      0x7FFFFFFA,
+      0x7FFFFFF9,
+      0x7FFFFFF8,
+      0x7FFFFFF7,
+      0x7FFFFFF6
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -0x80000000 + i;
+    }
+    Expect.listEquals([
+      -0x80000000,
+      -0x7FFFFFFF,
+      -0x7FFFFFFE,
+      -0x7FFFFFFD,
+      -0x7FFFFFFC,
+      -0x7FFFFFFB,
+      -0x7FFFFFFA,
+      -0x7FFFFFF9,
+      -0x7FFFFFF8,
+      -0x7FFFFFF7
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Int32List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    empty = array.sublist(array.length);
+    Expect.equals(0, empty.length);
+
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Int32List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [-0x80000000, 0, 1, 0x7FFFFFFF]);
+    Expect.listEquals([0, 1, 2, -0x80000000, 0, 1, 0x7FFFFFFF, 7, 8, 9], array);
+  }
+
+  static testInt32List() {
+    Expect.throws(() {
+      new Int32List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Int32List(10);
+    testInt32ListImpl(array);
+  }
+
+  static testUint32ListImpl(Uint32List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(4, array.elementSizeInBytes);
+    Expect.equals(40, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x100000000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFFFFFFFF - i;
+    }
+    Expect.listEquals([
+      0xFFFFFFFF,
+      0xFFFFFFFE,
+      0xFFFFFFFD,
+      0xFFFFFFFC,
+      0xFFFFFFFB,
+      0xFFFFFFFA,
+      0xFFFFFFF9,
+      0xFFFFFFF8,
+      0xFFFFFFF7,
+      0xFFFFFFF6
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Uint32List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    empty = array.sublist(array.length);
+    Expect.equals(0, empty.length);
+
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Uint32List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [0x100000001, 0, 1, 0xFFFFFFFF]);
+    Expect.listEquals([0, 1, 2, 1, 0, 1, 0xFFFFFFFF, 7, 8, 9], array);
+  }
+
+  static testUint32List() {
+    Expect.throws(() {
+      new Uint32List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    Expect.throws(() {
+      new Uint32List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Uint32List(10);
+    testUint32ListImpl(array);
+  }
+
+  static testInt64ListImpl(Int64List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(8, array.elementSizeInBytes);
+    Expect.equals(80, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0x7FFFFFFFFFFFFFFF - i;
+    }
+    Expect.listEquals([
+      0x7FFFFFFFFFFFFFFF,
+      0x7FFFFFFFFFFFFFFE,
+      0x7FFFFFFFFFFFFFFD,
+      0x7FFFFFFFFFFFFFFC,
+      0x7FFFFFFFFFFFFFFB,
+      0x7FFFFFFFFFFFFFFA,
+      0x7FFFFFFFFFFFFFF9,
+      0x7FFFFFFFFFFFFFF8,
+      0x7FFFFFFFFFFFFFF7,
+      0x7FFFFFFFFFFFFFF6
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -0x8000000000000000 + i;
+    }
+    Expect.listEquals([
+      -0x8000000000000000,
+      -0x7FFFFFFFFFFFFFFF,
+      -0x7FFFFFFFFFFFFFFE,
+      -0x7FFFFFFFFFFFFFFD,
+      -0x7FFFFFFFFFFFFFFC,
+      -0x7FFFFFFFFFFFFFFB,
+      -0x7FFFFFFFFFFFFFFA,
+      -0x7FFFFFFFFFFFFFF9,
+      -0x7FFFFFFFFFFFFFF8,
+      -0x7FFFFFFFFFFFFFF7
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Int64List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    empty = array.sublist(array.length);
+    Expect.equals(0, empty.length);
+
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Int64List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [-0x8000000000000000, 0, 1, 0x7FFFFFFFFFFFFFFF]);
+    Expect.listEquals(
+        [0, 1, 2, -0x8000000000000000, 0, 1, 0x7FFFFFFFFFFFFFFF, 7, 8, 9],
+        array);
+  }
+
+  static testInt64List() {
+    Expect.throws(() {
+      new Int64List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Int64List(10);
+    testInt64ListImpl(array);
+  }
+
+  static testUint64ListImpl(Uint64List array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(10, array.length);
+    Expect.equals(8, array.elementSizeInBytes);
+    Expect.equals(80, array.lengthInBytes);
+    Expect.listEquals([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], array);
+    Expect.throws(() {
+      array[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFFFFFFFFFFFFFFFF - i;
+    }
+    Expect.listEquals([
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFE,
+      0xFFFFFFFFFFFFFFFD,
+      0xFFFFFFFFFFFFFFFC,
+      0xFFFFFFFFFFFFFFFB,
+      0xFFFFFFFFFFFFFFFA,
+      0xFFFFFFFFFFFFFFF9,
+      0xFFFFFFFFFFFFFFF8,
+      0xFFFFFFFFFFFFFFF7,
+      0xFFFFFFFFFFFFFFF6
+    ], array);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Uint64List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    empty = array.sublist(array.length);
+    Expect.equals(0, empty.length);
+
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Uint64List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    array.setRange(3, 7, [-0x8000000000000000, 0, 1, 0xFFFFFFFFFFFFFFFF]);
+    Expect.listEquals(
+        [0, 1, 2, -0x8000000000000000, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9],
+        array);
+  }
+
+  static testUint64List() {
+    Expect.throws(() {
+      new Uint64List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Uint64List(10);
+    testUint64ListImpl(array);
+  }
+
+  static testFloat32ListImpl(Float32List array) {
+    Expect.isTrue(array is List<double>);
+    Expect.equals(10, array.length);
+    Expect.equals(4, array.elementSizeInBytes);
+    Expect.equals(40, array.lengthInBytes);
+    Expect
+        .listEquals([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], array);
+    Expect.throws(() {
+      array[-1] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0.0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0.0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1.0 + i;
+    }
+    Expect
+        .listEquals([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0], array);
+    // TODO: min, max, and round
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i * 1.0;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Float32List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    empty = array.sublist(array.length);
+    Expect.equals(0, empty.length);
+
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Float32List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3.0, 4.0, 5.0, 6.0], region);
+    array.setRange(3, 7, [double.negativeInfinity, 0.0, 1.0, double.infinity]);
+    Expect.listEquals([
+      0.0,
+      1.0,
+      2.0,
+      double.negativeInfinity,
+      0.0,
+      1.0,
+      double.infinity,
+      7.0,
+      8.0,
+      9.0
+    ], array);
+  }
+
+  static testFloat32List() {
+    Expect.throws(() {
+      new Float32List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Float32List(10);
+    testFloat32ListImpl(array);
+  }
+
+  static testFloat64ListImpl(Float64List array) {
+    Expect.isTrue(array is List<double>);
+    Expect.equals(10, array.length);
+    Expect.equals(8, array.elementSizeInBytes);
+    Expect.equals(80, array.lengthInBytes);
+    Expect
+        .listEquals([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], array);
+    Expect.throws(() {
+      array[-1] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array[10] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      array.add(0.0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.addAll([0.0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      array.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 1.0 + i;
+    }
+    Expect
+        .listEquals([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0], array);
+    // TODO: min, max
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = i * 1.0;
+    }
+    var copy = array.sublist(0, array.length);
+    Expect.isFalse(identical(copy, array));
+    Expect.isTrue(copy is Float64List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(array, copy);
+    var empty = array.sublist(array.length, array.length);
+    Expect.equals(0, empty.length);
+    empty = array.sublist(array.length);
+    Expect.equals(0, empty.length);
+
+    var region = array.sublist(3, array.length - 3);
+    Expect.isTrue(copy is Float64List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3.0, 4.0, 5.0, 6.0], region);
+    array.setRange(3, 7, [double.negativeInfinity, 0.0, 1.0, double.infinity]);
+    Expect.listEquals([
+      0.0,
+      1.0,
+      2.0,
+      double.negativeInfinity,
+      0.0,
+      1.0,
+      double.infinity,
+      7.0,
+      8.0,
+      9.0
+    ], array);
+  }
+
+  static testFloat64List() {
+    Expect.throws(() {
+      new Float64List(-1);
+    }, (e) {
+      return e is ArgumentError;
+    });
+    var array = new Float64List(10);
+    testFloat64ListImpl(array);
+  }
+
+  static testByteList() {
+    var array = new Uint8List(8);
+    Expect.equals(8, array.length);
+    Expect.equals(8, array.lengthInBytes);
+    var byte_array = new ByteData.view(array.buffer);
+    Expect.equals(8, byte_array.lengthInBytes);
+    Expect.throws(() {
+      byte_array.getInt8(-1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getUint8(-1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getInt16(-1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getUint16(-1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getInt32(-1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getUint32(-1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getInt64(-1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getUint64(-1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getFloat32(-1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getFloat64(-1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setInt8(-1, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setUint8(-1, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setInt16(-1, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setUint16(-1, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setInt32(-1, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setUint32(-1, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setInt64(-1, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setUint64(-1, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setFloat32(-1, 0.0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setFloat64(-1, 0.0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getInt8(8);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getUint8(8);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getInt16(8);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getUint16(8);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getInt32(8);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getUint32(8);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getInt64(8);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getUint64(8);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getFloat32(8);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.getFloat64(8);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setInt8(8, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setUint8(8, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setInt16(8, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setUint16(8, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setInt32(8, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setUint32(8, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setInt64(8, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setUint64(8, 0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setFloat32(8, 0.0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      byte_array.setFloat64(8, 0.0);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.equals(0, byte_array.getInt8(0));
+    Expect.equals(0, byte_array.getUint8(0));
+    Expect.equals(0, byte_array.getInt16(0));
+    Expect.equals(0, byte_array.getUint16(0));
+    Expect.equals(0, byte_array.getInt32(0));
+    Expect.equals(0, byte_array.getUint32(0));
+    Expect.equals(0, byte_array.getInt64(0));
+    Expect.equals(0, byte_array.getUint64(0));
+    Expect.equals(0.0, byte_array.getFloat32(0));
+    Expect.equals(0.0, byte_array.getFloat64(0));
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFF;
+    }
+    Expect.equals(-1, byte_array.getInt8(0));
+    Expect.equals(0xFF, byte_array.getUint8(0));
+    Expect.equals(-1, byte_array.getInt16(0));
+    Expect.equals(0xFFFF, byte_array.getUint16(0));
+    Expect.equals(-1, byte_array.getInt32(0));
+    Expect.equals(0xFFFFFFFF, byte_array.getUint32(0));
+    Expect.equals(-1, byte_array.getInt64(0));
+    Expect.equals(0xFFFFFFFFFFFFFFFF, byte_array.getUint64(0));
+    Expect.isTrue(byte_array.getFloat32(0).isNaN);
+    Expect.isTrue(byte_array.getFloat64(0).isNaN);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFF - i;
+    }
+    byte_array.setUint32(0, 0xBF800000, Endian.little);
+    Expect.equals(0, byte_array.getInt8(0));
+    Expect.equals(0, byte_array.getInt8(1));
+    Expect.equals(-128, byte_array.getInt8(2));
+    Expect.equals(-65, byte_array.getInt8(3));
+    Expect.equals(-5, byte_array.getInt8(4));
+    Expect.equals(-6, byte_array.getInt8(5));
+    Expect.equals(-7, byte_array.getInt8(6));
+    Expect.equals(-8, byte_array.getInt8(7));
+    Expect.equals(0x00, byte_array.getUint8(0));
+    Expect.equals(0x00, byte_array.getUint8(1));
+    Expect.equals(0x80, byte_array.getUint8(2));
+    Expect.equals(0xBF, byte_array.getUint8(3));
+    Expect.equals(0xFB, byte_array.getUint8(4));
+    Expect.equals(0xFA, byte_array.getUint8(5));
+    Expect.equals(0xF9, byte_array.getUint8(6));
+    Expect.equals(0xF8, byte_array.getUint8(7));
+    Expect.equals(0, byte_array.getInt16(0));
+    Expect.equals(-16512, byte_array.getInt16(2, Endian.little));
+    Expect.equals(-1285, byte_array.getInt16(4, Endian.little));
+    Expect.equals(-1799, byte_array.getInt16(6, Endian.little));
+    Expect.equals(0x0000, byte_array.getUint16(0, Endian.little));
+    Expect.equals(0xBF80, byte_array.getUint16(2, Endian.little));
+    Expect.equals(0xFAFB, byte_array.getUint16(4, Endian.little));
+    Expect.equals(0xF8F9, byte_array.getUint16(6, Endian.little));
+    Expect.equals(-1082130432, byte_array.getInt32(0, Endian.little));
+    Expect.equals(0xBF800000, byte_array.getUint32(0, Endian.little));
+    Expect.equals(-506097523945897984, byte_array.getInt64(0, Endian.little));
+    Expect.equals(0xF8F9FAFBBF800000, byte_array.getUint64(0, Endian.little));
+    Expect.equals(-1.0, byte_array.getFloat32(0, Endian.little));
+    // TODO: byte_array.getFloat64(0)
+  }
+
+  static testInt8ListViewImpl(var array) {
+    Expect.equals(12, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(12, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFF;
+    }
+    Expect.throws(() {
+      new Int8List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int8List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int8List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int8List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int8List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Int8List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Int8List);
+    Expect.equals(0, empty.length);
+    var whole = new Int8List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Int8List);
+    Expect.equals(12, whole.length);
+    var view = new Int8List.view(array.buffer, 1, array.length - 2);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Int8List);
+    Expect.equals(10, view.length);
+    Expect.equals(1, view.elementSizeInBytes);
+    Expect.equals(10, view.lengthInBytes);
+    Expect.listEquals([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([0xFF, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0xFF], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x100 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
+    Expect.listEquals([0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xFF], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], view);
+    Expect.listEquals([
+      0xFF,
+      0xF6,
+      0xF7,
+      0xF8,
+      0xF9,
+      0xFA,
+      0xFB,
+      0xFC,
+      0xFD,
+      0xFE,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x7F - i;
+    }
+    Expect.listEquals([127, 126, 125, 124, 123, 122, 121, 120, 119, 118], view);
+    Expect.listEquals(
+        [0xFF, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 0xFF], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -0x80 + i;
+    }
+    Expect.listEquals(
+        [-128, -127, -126, -125, -124, -123, -122, -121, -120, -119], view);
+    Expect.listEquals([
+      0xFF,
+      0x80,
+      0x81,
+      0x82,
+      0x83,
+      0x84,
+      0x85,
+      0x86,
+      0x87,
+      0x88,
+      0x89,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Int8List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Int8List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [-128, 0, 1, 127]);
+    Expect.listEquals([0, 1, 2, -128, 0, 1, 127, 7, 8, 9], view);
+    Expect.listEquals([0xFF, 0, 1, 2, 128, 0, 1, 127, 7, 8, 9, 0xFF], array);
+  }
+
+  static testInt8ListView() {
+    var array = new Uint8List(12);
+    testInt8ListViewImpl(array);
+  }
+
+  static testUint8ListViewImpl(var array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(12, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(12, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -1;
+    }
+    Expect.throws(() {
+      new Uint8List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint8List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint8List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint8List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint8List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Uint8List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Uint8List);
+    Expect.equals(0, empty.length);
+    var whole = new Uint8List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Uint8List);
+    Expect.equals(12, whole.length);
+    var view = new Uint8List.view(array.buffer, 1, array.length - 2);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Uint8List);
+    Expect.equals(10, view.length);
+    Expect.equals(1, view.elementSizeInBytes);
+    Expect.equals(10, view.lengthInBytes);
+    Expect.listEquals(
+        [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x100 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
+    Expect.listEquals([-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0xFF - i;
+    }
+    Expect.listEquals(
+        [0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6], view);
+    Expect.listEquals([-1, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -1], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Uint8List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Uint8List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [257, 0, 1, 255]);
+    Expect.listEquals([0, 1, 2, 1, 0, 1, 255, 7, 8, 9], view);
+  }
+
+  static testUint8ListView() {
+    var array = new Int8List(12);
+    testUint8ListViewImpl(array);
+  }
+
+  static testInt16ListViewImpl(var array) {
+    Expect.equals(24, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(24, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFF;
+    }
+    Expect.throws(() {
+      new Int16List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int16List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int16List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int16List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int16List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Int16List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Int16List);
+    Expect.equals(0, empty.length);
+    var whole = new Int16List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Int16List);
+    Expect.equals(12, whole.length);
+    var view = new Int16List.view(array.buffer, 2, 10);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Int16List);
+    Expect.equals(10, view.length);
+    Expect.equals(2, view.elementSizeInBytes);
+    Expect.equals(20, view.lengthInBytes);
+    Expect.listEquals([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0x01,
+      0x00,
+      0x02,
+      0x00,
+      0x03,
+      0x00,
+      0x04,
+      0x00,
+      0x05,
+      0x00,
+      0x06,
+      0x00,
+      0x07,
+      0x00,
+      0x08,
+      0x00,
+      0x09,
+      0x00,
+      0x0A,
+      0x00,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x10000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0x02,
+      0x00,
+      0x03,
+      0x00,
+      0x04,
+      0x00,
+      0x05,
+      0x00,
+      0x06,
+      0x00,
+      0x07,
+      0x00,
+      0x08,
+      0x00,
+      0x09,
+      0x00,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xF6,
+      0xFF,
+      0xF7,
+      0xFF,
+      0xF8,
+      0xFF,
+      0xF9,
+      0xFF,
+      0xFA,
+      0xFF,
+      0xFB,
+      0xFF,
+      0xFC,
+      0xFF,
+      0xFD,
+      0xFF,
+      0xFE,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x7FFF - i;
+    }
+    Expect.listEquals([
+      0x7FFF,
+      0x7FFE,
+      0x7FFD,
+      0x7FFC,
+      0x7FFB,
+      0x7FFA,
+      0x7FF9,
+      0x7FF8,
+      0x7FF7,
+      0x7FF6
+    ], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFE,
+      0x7F,
+      0xFD,
+      0x7F,
+      0xFC,
+      0x7F,
+      0xFB,
+      0x7F,
+      0xFA,
+      0x7F,
+      0xF9,
+      0x7F,
+      0xF8,
+      0x7F,
+      0xF7,
+      0x7F,
+      0xF6,
+      0x7F,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -0x8000 + i;
+    }
+    Expect.listEquals([
+      -0x8000,
+      -0x7FFF,
+      -0x7FFE,
+      -0x7FFD,
+      -0x7FFC,
+      -0x7FFB,
+      -0x7FFA,
+      -0x7FF9,
+      -0x7FF8,
+      -0x7FF7
+    ], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0x00,
+      0x80,
+      0x01,
+      0x80,
+      0x02,
+      0x80,
+      0x03,
+      0x80,
+      0x04,
+      0x80,
+      0x05,
+      0x80,
+      0x06,
+      0x80,
+      0x07,
+      0x80,
+      0x08,
+      0x80,
+      0x09,
+      0x80,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Int16List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Int16List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [-32768, 0, 1, 32767]);
+    Expect.listEquals([0, 1, 2, -32768, 0, 1, 32767, 7, 8, 9], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0x02,
+      0x00,
+      0x00,
+      0x80,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0xFF,
+      0x7F,
+      0x07,
+      0x00,
+      0x08,
+      0x00,
+      0x09,
+      0x00,
+      0xFF,
+      0xFF
+    ], array);
+  }
+
+  static testInt16ListView() {
+    var array = new Uint8List(24);
+    testInt16ListViewImpl(array);
+  }
+
+  static testUint16ListViewImpl(var array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(24, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(24, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -1;
+    }
+    Expect.throws(() {
+      new Uint16List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint16List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint16List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint16List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint16List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Uint16List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Uint16List);
+    Expect.equals(0, empty.length);
+    var whole = new Uint16List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Uint16List);
+    Expect.equals(12, whole.length);
+    var view = new Uint16List.view(array.buffer, 2, 10);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Uint16List);
+    Expect.equals(10, view.length);
+    Expect.equals(2, view.elementSizeInBytes);
+    Expect.equals(20, view.lengthInBytes);
+    Expect.listEquals([
+      0xFFFF,
+      0xFFFF,
+      0xFFFF,
+      0xFFFF,
+      0xFFFF,
+      0xFFFF,
+      0xFFFF,
+      0xFFFF,
+      0xFFFF,
+      0xFFFF
+    ], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      1,
+      0,
+      2,
+      0,
+      3,
+      0,
+      4,
+      0,
+      5,
+      0,
+      6,
+      0,
+      7,
+      0,
+      8,
+      0,
+      9,
+      0,
+      10,
+      0,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x10000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      0,
+      0,
+      1,
+      0,
+      2,
+      0,
+      3,
+      0,
+      4,
+      0,
+      5,
+      0,
+      6,
+      0,
+      7,
+      0,
+      8,
+      0,
+      9,
+      0,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0xFFFF - i;
+    }
+    Expect.listEquals([
+      0xFFFF,
+      0xFFFE,
+      0xFFFD,
+      0xFFFC,
+      0xFFFB,
+      0xFFFA,
+      0xFFF9,
+      0xFFF8,
+      0xFFF7,
+      0xFFF6
+    ], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      -2,
+      -1,
+      -3,
+      -1,
+      -4,
+      -1,
+      -5,
+      -1,
+      -6,
+      -1,
+      -7,
+      -1,
+      -8,
+      -1,
+      -9,
+      -1,
+      -10,
+      -1,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Uint16List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Uint16List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [0x10001, 0, 1, 0xFFFF]);
+    Expect.listEquals([0, 1, 2, 1, 0, 1, 0xFFFF, 7, 8, 9], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      0,
+      0,
+      1,
+      0,
+      2,
+      0,
+      1,
+      0,
+      0,
+      0,
+      1,
+      0,
+      -1,
+      -1,
+      7,
+      0,
+      8,
+      0,
+      9,
+      0,
+      -1,
+      -1
+    ], array);
+  }
+
+  static testUint16ListView() {
+    var array = new Int8List(24);
+    testUint16ListViewImpl(array);
+  }
+
+  static testInt32ListView() {
+    var array = new Uint8List(48);
+    Expect.equals(48, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(48, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFF;
+    }
+    Expect.throws(() {
+      new Int32List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int32List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int32List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int32List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int32List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Int32List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Int32List);
+    Expect.equals(0, empty.length);
+    var whole = new Int32List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Int32List);
+    Expect.equals(12, whole.length);
+    var view = new Int32List.view(array.buffer, 4, 10);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Int32List);
+    Expect.equals(10, view.length);
+    Expect.equals(4, view.elementSizeInBytes);
+    Expect.equals(40, view.lengthInBytes);
+    Expect.listEquals([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0x02,
+      0x00,
+      0x00,
+      0x00,
+      0x03,
+      0x00,
+      0x00,
+      0x00,
+      0x04,
+      0x00,
+      0x00,
+      0x00,
+      0x05,
+      0x00,
+      0x00,
+      0x00,
+      0x06,
+      0x00,
+      0x00,
+      0x00,
+      0x07,
+      0x00,
+      0x00,
+      0x00,
+      0x08,
+      0x00,
+      0x00,
+      0x00,
+      0x09,
+      0x00,
+      0x00,
+      0x00,
+      0x0A,
+      0x00,
+      0x00,
+      0x00,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x100000000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0x02,
+      0x00,
+      0x00,
+      0x00,
+      0x03,
+      0x00,
+      0x00,
+      0x00,
+      0x04,
+      0x00,
+      0x00,
+      0x00,
+      0x05,
+      0x00,
+      0x00,
+      0x00,
+      0x06,
+      0x00,
+      0x00,
+      0x00,
+      0x07,
+      0x00,
+      0x00,
+      0x00,
+      0x08,
+      0x00,
+      0x00,
+      0x00,
+      0x09,
+      0x00,
+      0x00,
+      0x00,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF6,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF7,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF8,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF9,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFA,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFB,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFC,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFD,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFE,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x7FFFFFFF - i;
+    }
+    Expect.listEquals([
+      0x7FFFFFFF,
+      0x7FFFFFFE,
+      0x7FFFFFFD,
+      0x7FFFFFFC,
+      0x7FFFFFFB,
+      0x7FFFFFFA,
+      0x7FFFFFF9,
+      0x7FFFFFF8,
+      0x7FFFFFF7,
+      0x7FFFFFF6
+    ], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFE,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFD,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFC,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFB,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFA,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF9,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF8,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF7,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF6,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -0x80000000 + i;
+    }
+    Expect.listEquals([
+      -0x80000000,
+      -0x7FFFFFFF,
+      -0x7FFFFFFE,
+      -0x7FFFFFFD,
+      -0x7FFFFFFC,
+      -0x7FFFFFFB,
+      -0x7FFFFFFA,
+      -0x7FFFFFF9,
+      -0x7FFFFFF8,
+      -0x7FFFFFF7
+    ], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x01,
+      0x00,
+      0x00,
+      0x80,
+      0x02,
+      0x00,
+      0x00,
+      0x80,
+      0x03,
+      0x00,
+      0x00,
+      0x80,
+      0x04,
+      0x00,
+      0x00,
+      0x80,
+      0x05,
+      0x00,
+      0x00,
+      0x80,
+      0x06,
+      0x00,
+      0x00,
+      0x80,
+      0x07,
+      0x00,
+      0x00,
+      0x80,
+      0x08,
+      0x00,
+      0x00,
+      0x80,
+      0x09,
+      0x00,
+      0x00,
+      0x80,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Int32List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Int32List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [-0x80000000, 0, 1, 0x7FFFFFFF]);
+    Expect.listEquals([0, 1, 2, -0x80000000, 0, 1, 0x7FFFFFFF, 7, 8, 9], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0x02,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0x07,
+      0x00,
+      0x00,
+      0x00,
+      0x08,
+      0x00,
+      0x00,
+      0x00,
+      0x09,
+      0x00,
+      0x00,
+      0x00,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+  }
+
+  static testUint32ListViewImpl(var array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(48, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(48, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -1;
+    }
+    Expect.throws(() {
+      new Uint32List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint32List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint32List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint32List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint32List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Uint32List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Uint32List);
+    Expect.equals(0, empty.length);
+    var whole = new Uint32List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Uint32List);
+    Expect.equals(12, whole.length);
+    var view = new Uint32List.view(array.buffer, 4, 10);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Uint32List);
+    Expect.equals(10, view.length);
+    Expect.equals(4, view.elementSizeInBytes);
+    Expect.equals(40, view.lengthInBytes);
+    Expect.listEquals([
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF,
+      0xFFFFFFFF
+    ], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      1,
+      0,
+      0,
+      0,
+      2,
+      0,
+      0,
+      0,
+      3,
+      0,
+      0,
+      0,
+      4,
+      0,
+      0,
+      0,
+      5,
+      0,
+      0,
+      0,
+      6,
+      0,
+      0,
+      0,
+      7,
+      0,
+      0,
+      0,
+      8,
+      0,
+      0,
+      0,
+      9,
+      0,
+      0,
+      0,
+      10,
+      0,
+      0,
+      0,
+      -1,
+      -1,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x100000000 + i;
+    }
+    Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      0,
+      0,
+      0,
+      0,
+      1,
+      0,
+      0,
+      0,
+      2,
+      0,
+      0,
+      0,
+      3,
+      0,
+      0,
+      0,
+      4,
+      0,
+      0,
+      0,
+      5,
+      0,
+      0,
+      0,
+      6,
+      0,
+      0,
+      0,
+      7,
+      0,
+      0,
+      0,
+      8,
+      0,
+      0,
+      0,
+      9,
+      0,
+      0,
+      0,
+      -1,
+      -1,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0xFFFFFFFF - i;
+    }
+    Expect.listEquals([
+      0xFFFFFFFF,
+      0xFFFFFFFE,
+      0xFFFFFFFD,
+      0xFFFFFFFC,
+      0xFFFFFFFB,
+      0xFFFFFFFA,
+      0xFFFFFFF9,
+      0xFFFFFFF8,
+      0xFFFFFFF7,
+      0xFFFFFFF6
+    ], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -2,
+      -1,
+      -1,
+      -1,
+      -3,
+      -1,
+      -1,
+      -1,
+      -4,
+      -1,
+      -1,
+      -1,
+      -5,
+      -1,
+      -1,
+      -1,
+      -6,
+      -1,
+      -1,
+      -1,
+      -7,
+      -1,
+      -1,
+      -1,
+      -8,
+      -1,
+      -1,
+      -1,
+      -9,
+      -1,
+      -1,
+      -1,
+      -10,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Uint32List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Uint32List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [0x100000001, 0, 1, 0xFFFFFFFF]);
+    Expect.listEquals([0, 1, 2, 1, 0, 1, 0xFFFFFFFF, 7, 8, 9], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      0,
+      0,
+      0,
+      0,
+      1,
+      0,
+      0,
+      0,
+      2,
+      0,
+      0,
+      0,
+      1,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      1,
+      0,
+      0,
+      0,
+      -1,
+      -1,
+      -1,
+      -1,
+      7,
+      0,
+      0,
+      0,
+      8,
+      0,
+      0,
+      0,
+      9,
+      0,
+      0,
+      0,
+      -1,
+      -1,
+      -1,
+      -1
+    ], array);
+  }
+
+  static testUint32ListView() {
+    var array = new Int8List(48);
+    testUint32ListViewImpl(array);
+  }
+
+  static testInt64ListViewImpl(var array) {
+    Expect.equals(96, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(96, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xFF;
+    }
+    Expect.throws(() {
+      new Int64List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int64List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int64List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int64List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Int64List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Int64List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Int64List);
+    Expect.equals(0, empty.length);
+    var whole = new Int64List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Int64List);
+    Expect.equals(12, whole.length);
+    var view = new Int64List.view(array.buffer, 8, 10);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Int64List);
+    Expect.equals(10, view.length);
+    Expect.equals(8, view.elementSizeInBytes);
+    Expect.equals(80, view.lengthInBytes);
+    Expect.listEquals([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x02,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x03,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x04,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x05,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x06,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x07,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x08,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x09,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x0A,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -10 + i;
+    }
+    Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF6,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF7,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF8,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xF9,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFA,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFB,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFC,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFD,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFE,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0x7FFFFFFFFFFFFFFF - i;
+    }
+    Expect.listEquals([
+      0x7FFFFFFFFFFFFFFF,
+      0x7FFFFFFFFFFFFFFE,
+      0x7FFFFFFFFFFFFFFD,
+      0x7FFFFFFFFFFFFFFC,
+      0x7FFFFFFFFFFFFFFB,
+      0x7FFFFFFFFFFFFFFA,
+      0x7FFFFFFFFFFFFFF9,
+      0x7FFFFFFFFFFFFFF8,
+      0x7FFFFFFFFFFFFFF7,
+      0x7FFFFFFFFFFFFFF6
+    ], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFE,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFD,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFC,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFB,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFA,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF9,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF8,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF7,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xF6,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = -0x8000000000000000 + i;
+    }
+    Expect.listEquals([
+      -0x8000000000000000,
+      -0x7FFFFFFFFFFFFFFF,
+      -0x7FFFFFFFFFFFFFFE,
+      -0x7FFFFFFFFFFFFFFD,
+      -0x7FFFFFFFFFFFFFFC,
+      -0x7FFFFFFFFFFFFFFB,
+      -0x7FFFFFFFFFFFFFFA,
+      -0x7FFFFFFFFFFFFFF9,
+      -0x7FFFFFFFFFFFFFF8,
+      -0x7FFFFFFFFFFFFFF7
+    ], view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x02,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x03,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x04,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x05,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x06,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x07,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x08,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x09,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Int64List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Int64List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [-0x8000000000000000, 0, 1, 0x7FFFFFFFFFFFFFFF]);
+    Expect.listEquals(
+        [0, 1, 2, -0x8000000000000000, 0, 1, 0x7FFFFFFFFFFFFFFF, 7, 8, 9],
+        view);
+    Expect.listEquals([
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x02,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x80,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x01,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0x7F,
+      0x07,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x08,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x09,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0x00,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    ], array);
+  }
+
+  static testInt64ListView() {
+    var array = new Uint8List(96);
+    testInt64ListViewImpl(array);
+  }
+
+  static testUint64ListViewImpl(var array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(96, array.length);
+    Expect.equals(1, array.elementSizeInBytes);
+    Expect.equals(96, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = -1;
+    }
+    Expect.throws(() {
+      new Uint64List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint64List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint64List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint64List.view(array.buffer, 0, array.length + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Uint64List.view(array.buffer, array.length - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Uint64List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<int>);
+    Expect.isTrue(empty is Uint64List);
+    Expect.equals(0, empty.length);
+    var whole = new Uint64List.view(array.buffer);
+    Expect.isTrue(whole is List<int>);
+    Expect.isTrue(whole is Uint64List);
+    Expect.equals(12, whole.length);
+    var view = new Uint64List.view(array.buffer, 8, 10);
+    Expect.isTrue(view is List<int>);
+    Expect.isTrue(view is Uint64List);
+    Expect.equals(10, view.length);
+    Expect.equals(8, view.elementSizeInBytes);
+    Expect.equals(80, view.lengthInBytes);
+    Expect.listEquals([
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFF
+    ], view);
+    Expect.throws(() {
+      view[-1] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[view.length] = 0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, view.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1 + i;
+    }
+    Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      1,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      2,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      3,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      4,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      5,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      6,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      7,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      8,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      9,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      10,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 0xFFFFFFFFFFFFFFFF - i;
+    }
+    Expect.listEquals([
+      0xFFFFFFFFFFFFFFFF,
+      0xFFFFFFFFFFFFFFFE,
+      0xFFFFFFFFFFFFFFFD,
+      0xFFFFFFFFFFFFFFFC,
+      0xFFFFFFFFFFFFFFFB,
+      0xFFFFFFFFFFFFFFFA,
+      0xFFFFFFFFFFFFFFF9,
+      0xFFFFFFFFFFFFFFF8,
+      0xFFFFFFFFFFFFFFF7,
+      0xFFFFFFFFFFFFFFF6
+    ], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -2,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -3,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -4,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -5,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -6,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -7,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -8,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -9,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -10,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1
+    ], array);
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Uint64List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Uint64List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3, 4, 5, 6], region);
+    view.setRange(3, 7, [0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF]);
+    Expect.listEquals(
+        [0, 1, 2, 0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9], view);
+    Expect.listEquals([
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      1,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      2,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      1,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      -128,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      1,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      7,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      8,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      9,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      0,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1,
+      -1
+    ], array);
+  }
+
+  static testUint64ListView() {
+    var array = new Int8List(96);
+    testUint64ListViewImpl(array);
+  }
+
+  static testFloat32ListViewImpl(var array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(12, array.length);
+    Expect.equals(4, array.elementSizeInBytes);
+    Expect.equals(48, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xBF800000;
+    }
+    Expect.throws(() {
+      new Float32List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float32List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float32List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float32List.view(array.buffer, 0, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float32List.view(array.buffer, array.lengthInBytes - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Float32List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<double>);
+    Expect.isTrue(empty is Float32List);
+    Expect.equals(0, empty.length);
+    var whole = new Float32List.view(array.buffer);
+    Expect.isTrue(whole is List<double>);
+    Expect.isTrue(whole is Float32List);
+    Expect.equals(12, whole.length);
+    var view = new Float32List.view(array.buffer, 4, 10);
+    Expect.isTrue(view is List<double>);
+    Expect.isTrue(view is Float32List);
+    Expect.equals(10, view.length);
+    Expect.equals(4, view.elementSizeInBytes);
+    Expect.equals(40, view.lengthInBytes);
+    Expect.listEquals(
+        [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], view);
+    Expect.throws(() {
+      view[-1] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0.0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0.0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1.0 + i;
+    }
+    Expect
+        .listEquals([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0], view);
+    Expect.listEquals([
+      0xBF800000,
+      0x3F800000,
+      0x40000000,
+      0x40400000,
+      0x40800000,
+      0x40A00000,
+      0x40C00000,
+      0x40E00000,
+      0x41000000,
+      0x41100000,
+      0x41200000,
+      0xBF800000
+    ], array);
+    // TODO: min, max, and round
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i * 1.0;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Float32List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Float32List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3.0, 4.0, 5.0, 6.0], region);
+    view.setRange(3, 7, [double.negativeInfinity, 0.0, 1.0, double.infinity]);
+    Expect.listEquals([
+      0.0,
+      1.0,
+      2.0,
+      double.negativeInfinity,
+      0.0,
+      1.0,
+      double.infinity,
+      7.0,
+      8.0,
+      9.0
+    ], view);
+    Expect.listEquals([
+      0xBF800000,
+      0x00000000,
+      0x3F800000,
+      0x40000000,
+      0xFF800000,
+      0x00000000,
+      0x3F800000,
+      0x7F800000,
+      0x40E00000,
+      0x41000000,
+      0x41100000,
+      0xBF800000
+    ], array);
+  }
+
+  static testFloat32ListView() {
+    var array = new Uint32List(12);
+    testFloat32ListViewImpl(array);
+  }
+
+  static testFloat64ListViewImpl(var array) {
+    Expect.isTrue(array is List<int>);
+    Expect.equals(12, array.length);
+    Expect.equals(8, array.elementSizeInBytes);
+    Expect.equals(96, array.lengthInBytes);
+    for (int i = 0; i < array.length; ++i) {
+      array[i] = 0xBFF0000000000000;
+    }
+    Expect.throws(() {
+      new Float64List.view(array.buffer, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float64List.view(array.buffer, 0, -1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float64List.view(array.buffer, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float64List.view(array.buffer, 0, array.lengthInBytes + 1);
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      new Float64List.view(array.buffer, array.lengthInBytes - 1, 2);
+    }, (e) {
+      return e is RangeError;
+    });
+    var empty = new Float64List.view(array.buffer, array.lengthInBytes);
+    Expect.isTrue(empty is List<double>);
+    Expect.isTrue(empty is Float64List);
+    Expect.equals(0, empty.length);
+    var whole = new Float64List.view(array.buffer);
+    Expect.isTrue(whole is List<double>);
+    Expect.isTrue(whole is Float64List);
+    Expect.equals(12, whole.length);
+    var view = new Float64List.view(array.buffer, 8, 10);
+    Expect.isTrue(view is List<double>);
+    Expect.isTrue(view is Float64List);
+    Expect.equals(10, view.length);
+    Expect.equals(8, view.elementSizeInBytes);
+    Expect.equals(80, view.lengthInBytes);
+    Expect.listEquals(
+        [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], view);
+    Expect.throws(() {
+      view[-1] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[-1];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10];
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view[10] = 0.0;
+    }, (e) {
+      return e is RangeError;
+    });
+    Expect.throws(() {
+      view.add(0.0);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.addAll([0.0]);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.clear();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.length = 0;
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeLast();
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    Expect.throws(() {
+      view.removeRange(0, array.length - 1);
+    }, (e) {
+      return e is UnsupportedError;
+    });
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = 1.0 + i;
+    }
+    Expect
+        .listEquals([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0], view);
+    Expect.listEquals([
+      0xBFF0000000000000,
+      0x3FF0000000000000,
+      0x4000000000000000,
+      0x4008000000000000,
+      0x4010000000000000,
+      0x4014000000000000,
+      0x4018000000000000,
+      0x401C000000000000,
+      0x4020000000000000,
+      0x4022000000000000,
+      0x4024000000000000,
+      0xBFF0000000000000
+    ], array);
+    // TODO: min, max
+    for (int i = 0; i < view.length; ++i) {
+      view[i] = i * 1.0;
+    }
+    var copy = view.sublist(0, view.length);
+    Expect.isFalse(identical(copy, view));
+    Expect.isTrue(copy is Float64List);
+    Expect.equals(10, copy.length);
+    Expect.listEquals(view, copy);
+    var region = view.sublist(3, view.length - 3);
+    Expect.isTrue(copy is Float64List);
+    Expect.equals(4, region.length);
+    Expect.listEquals([3.0, 4.0, 5.0, 6.0], region);
+    view.setRange(3, 7, [double.negativeInfinity, 0.0, 1.0, double.infinity]);
+    Expect.listEquals([
+      0.0,
+      1.0,
+      2.0,
+      double.negativeInfinity,
+      0.0,
+      1.0,
+      double.infinity,
+      7.0,
+      8.0,
+      9.0
+    ], view);
+    Expect.listEquals([
+      0xBFF0000000000000,
+      0x0000000000000000,
+      0x3FF0000000000000,
+      0x4000000000000000,
+      0xFFF0000000000000,
+      0x0000000000000000,
+      0x3FF0000000000000,
+      0x7FF0000000000000,
+      0x401C000000000000,
+      0x4020000000000000,
+      0x4022000000000000,
+      0xBFF0000000000000
+    ], array);
+  }
+
+  static testFloat64ListView() {
+    var array = new Uint64List(12);
+    testFloat64ListViewImpl(array);
+  }
+
+  static testMain() {
+    testInt8List();
+    testUint8List();
+    testUint8ClampedList();
+    testInt16List();
+    testUint16List();
+    testInt32List();
+    testUint32List();
+    testInt64List();
+    testUint64List();
+    testFloat32List();
+    testFloat64List();
+
+    testInt8ListView();
+    testUint8ListView();
+    testInt16ListView();
+    testUint16ListView();
+    testInt32ListView();
+    testUint32ListView();
+    testInt64ListView();
+    testUint64ListView();
+    testFloat32ListView();
+    testFloat64ListView();
+
+    testByteList();
+  }
+}
+
+main() {
+  for (var i = 0; i < 20; i++) {
+    ByteArrayTest.testMain();
+  }
+}
diff --git a/runtime/tests/vm/dart_2/bytecode_and_ast_mix_test.dart b/runtime/tests/vm/dart_2/bytecode_and_ast_mix_test.dart
new file mode 100644
index 0000000..72f6b76
--- /dev/null
+++ b/runtime/tests/vm/dart_2/bytecode_and_ast_mix_test.dart
@@ -0,0 +1,32 @@
+// 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.
+
+// OtherResources=bytecode_and_ast_mix_test_body.dart
+
+// Tests the mix of kernel AST (test) and bytecode dill files (core libraries).
+// Verifies that kernel AST can reference a not yet loaded bytecode class
+// through a constant in metadata.
+
+import 'dart:io' show Platform;
+
+import 'package:path/path.dart' as path;
+import 'snapshot_test_helper.dart';
+
+main() async {
+  final testScriptUri =
+      Platform.script.resolve('bytecode_and_ast_mix_test_body.dart');
+  await withTempDir((String temp) async {
+    final dillPath = path.join(temp, 'ast.dill');
+    final testPath = testScriptUri.toFilePath();
+
+    final buildResult = await runGenKernel('BUILD AST DILL FILE', [
+      '--no-gen-bytecode',
+      '--output=$dillPath',
+      testPath,
+    ]);
+    print(buildResult);
+    final runResult = await runDart('RUN FROM AST DILL FILE', [dillPath]);
+    expectOutput("OK", runResult);
+  });
+}
diff --git a/runtime/tests/vm/dart_2/bytecode_and_ast_mix_test_body.dart b/runtime/tests/vm/dart_2/bytecode_and_ast_mix_test_body.dart
new file mode 100644
index 0000000..dac3c07
--- /dev/null
+++ b/runtime/tests/vm/dart_2/bytecode_and_ast_mix_test_body.dart
@@ -0,0 +1,23 @@
+// 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:mirrors';
+import 'package:expect/expect.dart';
+
+class A {
+  void foo() {}
+}
+
+class B extends A {
+  @override
+  void foo() {}
+}
+
+main() {
+  ClassMirror classB = reflectClass(B);
+  MethodMirror foo = classB.declarations[#foo];
+  final annotation = foo.metadata[0].reflectee;
+  Expect.isTrue(annotation.toString().contains('_Override'));
+  print('OK');
+}
diff --git a/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test.dart b/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test.dart
new file mode 100644
index 0000000..a44f8f2
--- /dev/null
+++ b/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test.dart
@@ -0,0 +1,51 @@
+// 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.
+
+// OtherResources=bytecode_with_ast_in_aot_test_body1.dart
+// OtherResources=bytecode_with_ast_in_aot_test_body2.dart
+
+// Tests that gen_kernel is able to produce dill file with both bytecode
+// and AST in AOT mode, and gen_snapshot is able to consume them.
+// Two test cases are only different in number of entry points, so
+// obfuscation prohibitions metadata has different size, causing
+// different alignment of bytecode metadata.
+
+import 'dart:io' show Platform;
+
+import 'package:path/path.dart' as path;
+import 'snapshot_test_helper.dart';
+
+testAOTOnBytecodeWithAST(String temp, String source) async {
+  final sourcePath = Platform.script.resolve(source).toFilePath();
+  final dillPath = path.join(temp, '${source}.dill');
+  final snapshotPath = path.join(temp, '${source}.so');
+
+  final genKernelResult = await runGenKernel('BUILD DILL FILE', [
+    '--aot',
+    '--gen-bytecode',
+    '--no-drop-ast',
+    '--output=$dillPath',
+    sourcePath,
+  ]);
+  print(genKernelResult);
+  final genSnapshotResult = await runGenSnapshot('GENERATE SNAPSHOT', [
+    '--use-bytecode-compiler',
+    '--snapshot-kind=app-aot-elf',
+    '--elf=$snapshotPath',
+    dillPath,
+  ]);
+  print(genSnapshotResult);
+  final runResult =
+      await runBinary('RUN SNAPSHOT', dartPrecompiledRuntime, [snapshotPath]);
+  expectOutput("OK", runResult);
+}
+
+main() async {
+  await withTempDir((String temp) async {
+    await testAOTOnBytecodeWithAST(
+        temp, 'bytecode_with_ast_in_aot_test_body1.dart');
+    await testAOTOnBytecodeWithAST(
+        temp, 'bytecode_with_ast_in_aot_test_body2.dart');
+  });
+}
diff --git a/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test_body1.dart b/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test_body1.dart
new file mode 100644
index 0000000..18ae42b
--- /dev/null
+++ b/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test_body1.dart
@@ -0,0 +1,19 @@
+// 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.
+
+// Test case for bytecode_with_ast_in_aot_test.dart.
+// Contains 1 entry point.
+
+import 'package:expect/expect.dart';
+
+class A {
+  // Make sure obfuscation prohibitions metadata is generated.
+  @pragma('vm:entry-point')
+  void foofoo1() {}
+}
+
+main() {
+  new A();
+  print('OK');
+}
diff --git a/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test_body2.dart b/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test_body2.dart
new file mode 100644
index 0000000..c3a1e7e
--- /dev/null
+++ b/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test_body2.dart
@@ -0,0 +1,24 @@
+// 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.
+
+// Test case for bytecode_with_ast_in_aot_test.dart.
+// Contains 2 entry points.
+
+import 'package:expect/expect.dart';
+
+class A {
+  // Make sure obfuscation prohibitions metadata is generated.
+  @pragma('vm:entry-point')
+  void foofoo1() {}
+
+  // One more entry for obfuscation prohibitions metadata,
+  // raises the chances that subsequent bytecode metadata is misaligned.
+  @pragma('vm:entry-point')
+  void foofoo2() {}
+}
+
+main() {
+  new A();
+  print('OK');
+}
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
new file mode 100644
index 0000000..5a8dfaf
--- /dev/null
+++ b/runtime/tests/vm/dart_2/callee_side_type_checks_test.dart
@@ -0,0 +1,87 @@
+// 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.
+
+// VMOptions=--reify-generic-functions
+
+import "package:expect/expect.dart";
+
+// This test tests that AOT compiler does not optimize away necessary
+// type checks.
+
+class A {
+  int _addOneToArgument(int x) => x + 1;
+}
+
+abstract class G<T> {
+  int _addOneToArgument(T x);
+}
+
+class B extends A implements G<int> {}
+
+class C {
+  int _addTwoToArgument(int x) => x + 2;
+}
+
+class D {
+  int _addThreeToArgument(num x) {
+    return 0;
+  }
+}
+
+class E extends D {
+  int _addThreeToArgument(covariant int x) {
+    return x + 3;
+  }
+}
+
+typedef dynamic F0<T>(T val);
+typedef U F1<T, U>(T val);
+
+class F<T> {
+  T fMethod1(F0<T> f, T val) => f(val) as T;
+  U fMethod2<U>(F1<T, U> f, T val) => f(val);
+}
+
+final arr = <Object>[
+  new B(),
+  new C(),
+  new E(),
+  new D(), // Just to confuse CHA
+  new F<int>(),
+];
+
+int _add42Int(int v) => v + 42;
+double _add42Double(double v) => v + 42;
+double _add42_0Int(int v) => v + 42.0;
+
+main() {
+  final b = arr[0] as G<num>;
+
+  Expect.equals(1, b._addOneToArgument(0));
+  Expect.equals(0, b._addOneToArgument(-1));
+  Expect.throwsTypeError(() => b._addOneToArgument(1.1));
+
+  final c = (arr[1] as C);
+  final tornMethod = c._addTwoToArgument;
+  Expect.equals(2, c._addTwoToArgument(0));
+  Expect.equals(0, c._addTwoToArgument(-2));
+  Expect.throwsTypeError(() => (tornMethod as dynamic)(1.1));
+
+  final e = (arr[2] as D);
+  Expect.equals(3, e._addThreeToArgument(0));
+  Expect.equals(0, e._addThreeToArgument(-3));
+  Expect.throwsTypeError(() => e._addThreeToArgument(1.1));
+
+  final f = (arr[4] as F<num>);
+  final torn1 = f.fMethod1 as dynamic;
+  Expect.equals(43, torn1(_add42Int, 1));
+  Expect.throwsTypeError(() => torn1(_add42Double, 1));
+  Expect.throwsTypeError(() => torn1(_add42Int, 1.1));
+
+  final torn2 = f.fMethod2 as dynamic;
+  Expect.equals(43, torn2<int>(_add42Int, 1));
+  Expect.equals(43.0, torn2<double>(_add42_0Int, 1));
+  Expect.throwsTypeError(() => torn2<double>(_add42Int, 1));
+  Expect.throwsTypeError(() => torn2<int>(_add42_0Int, 1));
+}
diff --git a/runtime/tests/vm/dart_2/catch_entry_state_test.dart b/runtime/tests/vm/dart_2/catch_entry_state_test.dart
new file mode 100644
index 0000000..9f5fd6e
--- /dev/null
+++ b/runtime/tests/vm/dart_2/catch_entry_state_test.dart
@@ -0,0 +1,51 @@
+// 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=--no-background-compilation --optimization-counter-threshold=100
+
+// Verify that runtime correctly materializes unboxed variables on the catch
+// entry in optimized code.
+
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+
+@pragma('vm:never-inline')
+void testThrow(bool shouldThrow) {
+  var dbl = 0.0;
+  var i32 = 0;
+  var i64 = 0;
+  var f32x4 = new Float32x4.zero();
+  var f64x2 = new Float64x2.zero();
+  var i32x4 = new Int32x4(0, 0, 0, 0);
+  try {
+    for (var i = 0; i < 100; i++) {
+      dbl += i;
+      i32 = i | 0x70000000;
+      i64 = i | 0x80000000;
+      final d = i.toDouble();
+      f32x4 += new Float32x4(d, -d, d, -d);
+      f64x2 += new Float64x2(d, -d);
+      i32x4 += new Int32x4(-i, i, -i, i);
+      if (shouldThrow && i == 50) {
+        throw "";
+      }
+    }
+  } catch (e) {}
+
+  if (shouldThrow) {
+    Expect.equals(1275.0, dbl);
+    Expect.equals(0x70000000 | 50, i32);
+    Expect.equals(0x80000000 | 50, i64);
+    Expect.listEquals([1275.0, -1275.0, 1275.0, -1275.0],
+        [f32x4.x, f32x4.y, f32x4.z, f32x4.w]);
+    Expect.listEquals([1275.0, -1275.0], [f64x2.x, f64x2.y]);
+    Expect.listEquals(
+        [-1275, 1275, -1275, 1275], [i32x4.x, i32x4.y, i32x4.z, i32x4.w]);
+  }
+}
+
+void main() {
+  for (var i = 0; i < 100; i++) testThrow(false);
+  testThrow(true);
+}
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
new file mode 100644
index 0000000..11c1a33
--- /dev/null
+++ b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_lazy_non_symbolic_test.dart
@@ -0,0 +1,17 @@
+// 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=--dwarf-stack-traces --save-debugging-info=async_lazy_debug.so --lazy-async-stacks --no-causal-async-stacks
+
+import 'dart:async';
+import 'dart:io';
+
+import 'utils.dart';
+
+Future<void> main(List<String> args) async {
+  // We won't have access to the debugging info file on Android.
+  if (Platform.isAndroid) return;
+
+  await doTestsLazy('async_lazy_debug.so');
+}
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
new file mode 100644
index 0000000..3155257
--- /dev/null
+++ b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_lazy_test.dart
@@ -0,0 +1,11 @@
+// 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=--lazy-async-stacks --no-causal-async-stacks
+
+import 'dart:async';
+
+import 'utils.dart';
+
+Future<void> main(List<String> args) async => await doTestsLazy();
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
new file mode 100644
index 0000000..f65de84
--- /dev/null
+++ b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_no_causal_non_symbolic_test.dart
@@ -0,0 +1,17 @@
+// 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=--dwarf-stack-traces --save-debugging-info=async_no_causal_debug.so --no-causal-async-stacks --no-lazy-async-stacks
+
+import 'dart:async';
+import 'dart:io';
+
+import 'utils.dart';
+
+Future<void> main(List<String> args) async {
+  // We won't have access to the debugging info file on Android.
+  if (Platform.isAndroid) return;
+
+  await doTestsNoCausalNoLazy('async_no_causal_debug.so');
+}
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
new file mode 100644
index 0000000..7cc8cf0
--- /dev/null
+++ b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_no_causal_test.dart
@@ -0,0 +1,11 @@
+// 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=--no-causal-async-stacks --no-lazy-async-stacks
+
+import 'dart:async';
+
+import 'utils.dart';
+
+Future<void> main(List<String> args) async => await doTestsNoCausalNoLazy();
diff --git a/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_non_symbolic_test.dart b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_non_symbolic_test.dart
new file mode 100644
index 0000000..cdb783a
--- /dev/null
+++ b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_non_symbolic_test.dart
@@ -0,0 +1,17 @@
+// 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=--dwarf-stack-traces --save-debugging-info=async_causal_debug.so --causal-async-stacks --no-lazy-async-stacks
+
+import 'dart:async';
+import 'dart:io';
+
+import 'utils.dart';
+
+Future<void> main(List<String> args) async {
+  // We won't have access to the debugging info file on Android.
+  if (Platform.isAndroid) return;
+
+  await doTestsCausal('async_causal_debug.so');
+}
diff --git a/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_test.dart b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_test.dart
new file mode 100644
index 0000000..6d25d36
--- /dev/null
+++ b/runtime/tests/vm/dart_2/causal_stacks/async_throws_stack_test.dart
@@ -0,0 +1,11 @@
+// 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=--causal-async-stacks --no-lazy-async-stacks
+
+import 'dart:async';
+
+import 'utils.dart';
+
+Future<void> main(List<String> args) async => await doTestsCausal();
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
new file mode 100644
index 0000000..e2bcd2f
--- /dev/null
+++ b/runtime/tests/vm/dart_2/causal_stacks/sync_async_start_pkg_test_test.dart
@@ -0,0 +1,27 @@
+// 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.
+//
+// This test ensures that "pkg:stack_trace" (used by "pkg:test") doesn't break
+// when causal async stacks are enabled by dropping frames below a synchronous
+// start to an async function.
+
+import "package:test/test.dart";
+import "package:stack_trace/src/stack_zone_specification.dart";
+
+import 'dart:async';
+
+void main() {
+  test("Stacktrace includes sync-starts.", () async {
+    final st = await firstMethod();
+    expect("$st", allOf([contains("firstMethod"), contains("secondMethod")]));
+  });
+}
+
+Future<StackTrace> firstMethod() async {
+  return await secondMethod();
+}
+
+Future<StackTrace> secondMethod() async {
+  return StackTrace.current;
+}
diff --git a/runtime/tests/vm/dart_2/causal_stacks/utils.dart b/runtime/tests/vm/dart_2/causal_stacks/utils.dart
new file mode 100644
index 0000000..a7df656
--- /dev/null
+++ b/runtime/tests/vm/dart_2/causal_stacks/utils.dart
@@ -0,0 +1,1221 @@
+// 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:async';
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:path/path.dart' as path;
+import 'package:expect/expect.dart';
+import 'package:native_stack_traces/native_stack_traces.dart';
+
+// Test functions:
+
+Future<void> throwSync() {
+  throw '';
+}
+
+Future<void> throwAsync() async {
+  await 0;
+  throw '';
+}
+
+// ----
+// Scenario: All async functions yielded at least once before throw:
+// ----
+Future<void> allYield() async {
+  await 0;
+  await allYield2();
+}
+
+Future<void> allYield2() async {
+  await 0;
+  await allYield3();
+}
+
+Future<void> allYield3() async {
+  await 0;
+  throwSync();
+}
+
+// ----
+// Scenario: None of the async functions yieled before the throw:
+// ----
+Future<void> noYields() async {
+  await noYields2();
+}
+
+Future<void> noYields2() async {
+  await noYields3();
+}
+
+Future<void> noYields3() async {
+  throwSync();
+}
+
+// ----
+// Scenario: Mixed yielding and non-yielding frames:
+// ----
+Future<void> mixedYields() async {
+  await mixedYields2();
+}
+
+Future<void> mixedYields2() async {
+  await 0;
+  await mixedYields3();
+}
+
+Future<void> mixedYields3() async {
+  return throwAsync();
+}
+
+// ----
+// Scenario: Non-async frame:
+// ----
+Future<void> syncSuffix() async {
+  await syncSuffix2();
+}
+
+Future<void> syncSuffix2() async {
+  await 0;
+  await syncSuffix3();
+}
+
+Future<void> syncSuffix3() {
+  return throwAsync();
+}
+
+// ----
+// Scenario: Caller is non-async, has no upwards stack:
+// ----
+
+Future nonAsyncNoStack() async => await nonAsyncNoStack1();
+
+Future nonAsyncNoStack1() async => await nonAsyncNoStack2();
+
+Future nonAsyncNoStack2() async => Future.value(0).then((_) => throwAsync());
+
+// ----
+// Scenario: async*:
+// ----
+
+Future awaitEveryAsyncStarThrowSync() async {
+  await for (Future v in asyncStarThrowSync()) {
+    await v;
+  }
+}
+
+Stream<Future> asyncStarThrowSync() async* {
+  for (int i = 0; i < 2; i++) {
+    await i;
+    yield throwSync();
+  }
+}
+
+Future awaitEveryAsyncStarThrowAsync() async {
+  await for (Future v in asyncStarThrowAsync()) {
+    await v;
+  }
+}
+
+Stream<Future> asyncStarThrowAsync() async* {
+  for (int i = 0; i < 2; i++) {
+    await i;
+    yield Future.value(i);
+    await throwAsync();
+  }
+}
+
+Future listenAsyncStarThrowAsync() async {
+  // Listening to an async* doesn't create the usual await-for StreamIterator.
+  StreamSubscription ss = asyncStarThrowAsync().listen((Future f) {});
+  await ss.asFuture();
+}
+
+// ----
+// Scenario: All async functions yielded and we run in a custom zone with a
+// custom error handler.
+// ----
+
+Future<void> customErrorZone() async {
+  final completer = Completer<void>();
+  runZonedGuarded(() async {
+    await allYield();
+    completer.complete(null);
+  }, (e, s) {
+    completer.completeError(e, s);
+  });
+  return completer.future;
+}
+
+// Helpers:
+
+// We want lines that either start with a frame index or an async gap marker.
+final _lineRE = RegExp(r'^(?:#(?<number>\d+)|<asynchronous suspension>)');
+
+void assertStack(List<String> expects, StackTrace stackTrace,
+    [String debugInfoFilename]) async {
+  final original = await Stream.value(stackTrace.toString())
+      .transform(const LineSplitter())
+      .toList();
+  var frames = original;
+
+  // Use the DWARF stack decoder if we're running in --dwarf-stack-traces mode
+  // and in precompiled mode (otherwise --dwarf-stack-traces has no effect).
+  final decodeTrace = frames.first.startsWith('Warning:');
+  if (decodeTrace) {
+    Expect.isNotNull(debugInfoFilename);
+    final dwarf = Dwarf.fromFile(debugInfoFilename);
+    frames = await Stream.fromIterable(original)
+        .transform(DwarfStackTraceDecoder(dwarf))
+        .where(_lineRE.hasMatch)
+        .toList();
+  }
+
+  void printFrameInformation() {
+    print('RegExps for expected stack:');
+    expects.forEach((s) => print('"${s}"'));
+    print('');
+    if (decodeTrace) {
+      print('Non-symbolic actual stack:');
+      original.forEach(print);
+      print('');
+    }
+    print('Actual stack:');
+    frames.forEach(print);
+    print('');
+  }
+
+  for (int i = 0; i < expects.length; i++) {
+    try {
+      Expect.isTrue(i < frames.length,
+          'Expected at least ${expects.length} frames, found ${frames.length}');
+    } on ExpectException {
+      // On failed expect, print full stack for reference.
+      printFrameInformation();
+      print('Expected line ${i + 1} to be ${expects[i]} but was missing');
+      rethrow;
+    }
+    try {
+      Expect.isTrue(RegExp(expects[i]).hasMatch(frames[i]));
+    } on ExpectException {
+      // On failed expect, print full stack for reference.
+      printFrameInformation();
+      print('Expected line ${i + 1} to be `${expects[i]}` '
+          'but was `${frames[i]}`');
+      rethrow;
+    }
+  }
+
+  try {
+    Expect.equals(expects.length, frames.length);
+  } on ExpectException {
+    // On failed expect, print full stack for reference.
+    printFrameInformation();
+    rethrow;
+  }
+}
+
+Future<void> doTestAwait(Future f(), List<String> expectedStack,
+    [String debugInfoFilename]) async {
+  // Caller catches exception.
+  try {
+    await f();
+    Expect.fail('No exception thrown!');
+  } on String catch (e, s) {
+    assertStack(expectedStack, s, debugInfoFilename);
+  }
+}
+
+Future<void> doTestAwaitThen(Future f(), List<String> expectedStack,
+    [String debugInfoFilename]) async {
+  // Caller catches but a then is set.
+  try {
+    await f().then((e) {
+      // Ignore.
+    });
+    Expect.fail('No exception thrown!');
+  } on String catch (e, s) {
+    assertStack(expectedStack, s, debugInfoFilename);
+  }
+}
+
+Future<void> doTestAwaitCatchError(Future f(), List<String> expectedStack,
+    [String debugInfoFilename]) async {
+  // Caller doesn't catch, but we have a catchError set.
+  StackTrace stackTrace;
+  await f().catchError((e, s) {
+    stackTrace = s;
+  });
+  assertStack(expectedStack, stackTrace, debugInfoFilename);
+}
+
+// ----
+// Test "Suites":
+// ----
+
+// For: --causal-async-stacks
+Future<void> doTestsCausal([String debugInfoFilename]) async {
+  final allYieldExpected = const <String>[
+    r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
+    r'^#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#2      allYield2 \(.*/utils.dart:34(:9)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#3      allYield \(.*/utils.dart:29(:9)?\)$',
+    r'^<asynchronous suspension>$',
+  ];
+  await doTestAwait(
+      allYield,
+      allYieldExpected +
+          const <String>[
+            r'^#4      doTestAwait ',
+            r'^#5      doTestsCausal ',
+            r'^#6      main ',
+            r'^#7      _startIsolate.<anonymous closure> ',
+            r'^#8      _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      allYield,
+      allYieldExpected +
+          const <String>[
+            r'^#4      doTestAwaitThen ',
+            r'^#5      doTestsCausal ',
+            r'^<asynchronous suspension>$',
+            r'^#6      main ',
+            r'^#7      _startIsolate.<anonymous closure> ',
+            r'^#8      _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(
+      allYield,
+      allYieldExpected +
+          const <String>[
+            r'^#4      doTestAwaitCatchError ',
+            r'^#5      doTestsCausal ',
+            r'^<asynchronous suspension>$',
+            r'^#6      main ',
+            r'^#7      _startIsolate.<anonymous closure> ',
+            r'^#8      _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+
+  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)?\)$',
+  ];
+  await doTestAwait(
+      noYields,
+      noYieldsExpected +
+          const <String>[
+            r'^#4      doTestAwait ',
+            r'^#5      doTestsCausal ',
+            r'^<asynchronous suspension>$',
+            r'^#6      main ',
+            r'^#7      _startIsolate.<anonymous closure> ',
+            r'^#8      _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      noYields,
+      noYieldsExpected +
+          const <String>[
+            r'^#4      doTestAwaitThen ',
+            r'^#5      doTestsCausal ',
+            r'^<asynchronous suspension>$',
+            r'^#6      main ',
+            r'^#7      _startIsolate.<anonymous closure> ',
+            r'^#8      _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(
+      noYields,
+      noYieldsExpected +
+          const <String>[
+            r'^#4      doTestAwaitCatchError ',
+            r'^#5      doTestsCausal ',
+            r'^<asynchronous suspension>$',
+            r'^#6      main ',
+            r'^#7      _startIsolate.<anonymous closure> ',
+            r'^#8      _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+
+  final mixedYieldsExpected = const <String>[
+    r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#1      mixedYields3 \(.*/utils.dart:70(:10)?\)$',
+    r'^#2      mixedYields2 \(.*/utils.dart:66(:9)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#3      mixedYields \(.*/utils.dart:61(:9)?\)$',
+  ];
+  await doTestAwait(
+      mixedYields,
+      mixedYieldsExpected +
+          const <String>[
+            r'^#4      doTestAwait ',
+            r'^#5      doTestsCausal ',
+            r'^<asynchronous suspension>$',
+            r'^#6      main ',
+            r'^#7      _startIsolate.<anonymous closure> ',
+            r'^#8      _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      mixedYields,
+      mixedYieldsExpected +
+          const <String>[
+            r'^#4      doTestAwaitThen ',
+            r'^#5      doTestsCausal ',
+            r'^<asynchronous suspension>$',
+            r'^#6      main ',
+            r'^#7      _startIsolate.<anonymous closure> ',
+            r'^#8      _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(
+      mixedYields,
+      mixedYieldsExpected +
+          const <String>[
+            r'^#4      doTestAwaitCatchError ',
+            r'^#5      doTestsCausal ',
+            r'^<asynchronous suspension>$',
+            r'^#6      main ',
+            r'^#7      _startIsolate.<anonymous closure> ',
+            r'^#8      _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+
+  final syncSuffixExpected = const <String>[
+    r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#1      syncSuffix3 \(.*/utils.dart:86(:10)?\)$',
+    r'^#2      syncSuffix2 \(.*/utils.dart:82(:9)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#3      syncSuffix \(.*/utils.dart:77(:9)?\)$',
+  ];
+  await doTestAwait(
+      syncSuffix,
+      syncSuffixExpected +
+          const <String>[
+            r'^#4      doTestAwait ',
+            r'^#5      doTestsCausal ',
+            r'^<asynchronous suspension>$',
+            r'^#6      main ',
+            r'^#7      _startIsolate.<anonymous closure> ',
+            r'^#8      _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      syncSuffix,
+      syncSuffixExpected +
+          const <String>[
+            r'^#4      doTestAwaitThen ',
+            r'^#5      doTestsCausal ',
+            r'^<asynchronous suspension>$',
+            r'^#6      main ',
+            r'^#7      _startIsolate.<anonymous closure> ',
+            r'^#8      _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(
+      syncSuffix,
+      syncSuffixExpected +
+          const <String>[
+            r'^#4      doTestAwaitCatchError ',
+            r'^#5      doTestsCausal ',
+            r'^<asynchronous suspension>$',
+            r'^#6      main ',
+            r'^#7      _startIsolate.<anonymous closure> ',
+            r'^#8      _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+
+  final nonAsyncNoStackExpected = const <String>[
+    r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#1      nonAsyncNoStack2.<anonymous closure> ',
+    r'^#2      _RootZone.runUnary ',
+    r'^#3      _FutureListener.handleValue ',
+    r'^#4      Future._propagateToListeners.handleValueCallback ',
+    r'^#5      Future._propagateToListeners ',
+    r'^#6      Future._completeWithValue ',
+    r'^#7      Future._asyncCompleteWithValue.<anonymous closure> ',
+    r'^#8      _microtaskLoop ',
+    r'^#9      _startMicrotaskLoop ',
+    r'^#10     _runPendingImmediateCallback ',
+    r'^#11     _RawReceivePortImpl._handleMessage ',
+  ];
+  await doTestAwait(
+      nonAsyncNoStack, nonAsyncNoStackExpected, debugInfoFilename);
+  await doTestAwaitThen(
+      nonAsyncNoStack, nonAsyncNoStackExpected, debugInfoFilename);
+  await doTestAwaitCatchError(
+      nonAsyncNoStack, nonAsyncNoStackExpected, debugInfoFilename);
+
+  final asyncStarThrowSyncExpected = const <String>[
+    r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
+    r'^#1      asyncStarThrowSync \(.*/utils.dart:112(:11)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#2      awaitEveryAsyncStarThrowSync \(.+\)$',
+  ];
+  await doTestAwait(
+      awaitEveryAsyncStarThrowSync,
+      asyncStarThrowSyncExpected +
+          const <String>[
+            r'^#3      doTestAwait \(.+\)$',
+            r'^#4      doTestsCausal \(.+\)$',
+            r'^<asynchronous suspension>$',
+            r'^#5      main \(.+\)$',
+            r'^#6      _startIsolate.<anonymous closure> \(.+\)$',
+            r'^#7      _RawReceivePortImpl._handleMessage \(.+\)$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      awaitEveryAsyncStarThrowSync,
+      asyncStarThrowSyncExpected +
+          const <String>[
+            r'^#3      doTestAwaitThen \(.+\)$',
+            r'^#4      doTestsCausal \(.+\)$',
+            r'^<asynchronous suspension>$',
+            r'^#5      main \(.+\)$',
+            r'^#6      _startIsolate.<anonymous closure> \(.+\)$',
+            r'^#7      _RawReceivePortImpl._handleMessage \(.+\)$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(
+      awaitEveryAsyncStarThrowSync,
+      asyncStarThrowSyncExpected +
+          const <String>[
+            r'^#3      doTestAwaitCatchError \(.+\)$',
+            r'^#4      doTestsCausal \(.+\)$',
+            r'^<asynchronous suspension>$',
+            r'^#5      main \(.+\)$',
+            r'^#6      _startIsolate.<anonymous closure> \(.+\)$',
+            r'^#7      _RawReceivePortImpl._handleMessage \(.+\)$',
+          ],
+      debugInfoFilename);
+
+  final asyncStarThrowAsyncExpected = const <String>[
+    r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#1      asyncStarThrowAsync \(.*/utils.dart:126(:11)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#2      awaitEveryAsyncStarThrowAsync \(.+\)$',
+  ];
+  await doTestAwait(
+      awaitEveryAsyncStarThrowAsync,
+      asyncStarThrowAsyncExpected +
+          const <String>[
+            r'^#3      doTestAwait \(.+\)$',
+            r'^#4      doTestsCausal \(.+\)$',
+            r'^<asynchronous suspension>$',
+            r'^#5      main \(.+\)$',
+            r'^#6      _startIsolate.<anonymous closure> \(.+\)$',
+            r'^#7      _RawReceivePortImpl._handleMessage \(.+\)$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      awaitEveryAsyncStarThrowAsync,
+      asyncStarThrowAsyncExpected +
+          const <String>[
+            r'^#3      doTestAwaitThen \(.+\)$',
+            r'^#4      doTestsCausal \(.+\)$',
+            r'^<asynchronous suspension>$',
+            r'^#5      main \(.+\)$',
+            r'^#6      _startIsolate.<anonymous closure> \(.+\)$',
+            r'^#7      _RawReceivePortImpl._handleMessage \(.+\)$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(
+      awaitEveryAsyncStarThrowAsync,
+      asyncStarThrowAsyncExpected +
+          const <String>[
+            r'^#3      doTestAwaitCatchError \(.+\)$',
+            r'^#4      doTestsCausal \(.+\)$',
+            r'^<asynchronous suspension>$',
+            r'^#5      main \(.+\)$',
+            r'^#6      _startIsolate.<anonymous closure> \(.+\)$',
+            r'^#7      _RawReceivePortImpl._handleMessage \(.+\)$',
+          ],
+      debugInfoFilename);
+
+  final listenAsyncStartExpected = const <String>[
+    r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#1      asyncStarThrowAsync \(.*/utils.dart:126(:11)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#2      listenAsyncStarThrowAsync \(.+/utils.dart:132(:27)?\)$',
+  ];
+  await doTestAwait(
+      listenAsyncStarThrowAsync,
+      listenAsyncStartExpected +
+          const <String>[
+            r'^#3      doTestAwait \(.+\)$',
+            r'^#4      doTestsCausal \(.+\)$',
+            r'^<asynchronous suspension>$',
+            r'^#5      main \(.+\)$',
+            r'^#6      _startIsolate.<anonymous closure> \(.+\)$',
+            r'^#7      _RawReceivePortImpl._handleMessage \(.+\)$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      listenAsyncStarThrowAsync,
+      listenAsyncStartExpected +
+          const <String>[
+            r'^#3      doTestAwaitThen \(.+\)$',
+            r'^#4      doTestsCausal \(.+\)$',
+            r'^<asynchronous suspension>$',
+            r'^#5      main \(.+\)$',
+            r'^#6      _startIsolate.<anonymous closure> \(.+\)$',
+            r'^#7      _RawReceivePortImpl._handleMessage \(.+\)$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(
+      listenAsyncStarThrowAsync,
+      listenAsyncStartExpected +
+          const <String>[
+            r'^#3      doTestAwaitCatchError \(.+\)$',
+            r'^#4      doTestsCausal \(.+\)$',
+            r'^<asynchronous suspension>$',
+            r'^#5      main \(.+\)$',
+            r'^#6      _startIsolate.<anonymous closure> \(.+\)$',
+            r'^#7      _RawReceivePortImpl._handleMessage \(.+\)$',
+          ],
+      debugInfoFilename);
+  final customErrorZoneExpected = const <String>[
+    r'#0      throwSync \(.*/utils.dart:16(:3)?\)$',
+    r'#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
+    r'<asynchronous suspension>$',
+    r'#2      allYield2 \(.*/utils.dart:34(:9)?\)$',
+    r'<asynchronous suspension>$',
+    r'#3      allYield \(.*/utils.dart:29(:9)?\)$',
+    r'<asynchronous suspension>$',
+    r'#4      customErrorZone.<anonymous closure> \(.*/utils.dart:144(:11)?\)$',
+    r'#5      _rootRun ',
+    r'#6      _CustomZone.run ',
+    r'#7      _runZoned ',
+    r'#8      runZonedGuarded ',
+    r'#9      customErrorZone \(.*/utils.dart:143(:3)?\)$',
+  ];
+  await doTestAwait(
+      customErrorZone,
+      customErrorZoneExpected +
+          const <String>[
+            r'#10     doTestAwait ',
+            r'#11     doTestsCausal ',
+            r'<asynchronous suspension>$',
+            r'#12     main \(.+\)$',
+            r'#13     _startIsolate.<anonymous closure> ',
+            r'#14     _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      customErrorZone,
+      customErrorZoneExpected +
+          const <String>[
+            r'#10     doTestAwaitThen ',
+            r'#11     doTestsCausal ',
+            r'<asynchronous suspension>$',
+            r'#12     main \(.+\)$',
+            r'#13     _startIsolate.<anonymous closure> ',
+            r'#14     _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(
+      customErrorZone,
+      customErrorZoneExpected +
+          const <String>[
+            r'#10     doTestAwaitCatchError ',
+            r'#11     doTestsCausal ',
+            r'<asynchronous suspension>$',
+            r'#12     main \(.+\)$',
+            r'#13     _startIsolate.<anonymous closure> ',
+            r'#14     _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+}
+
+// For: --no-causal-async-stacks --no-lazy-async-stacks
+Future<void> doTestsNoCausalNoLazy([String debugInfoFilename]) async {
+  final allYieldExpected = const <String>[
+    r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
+    r'^#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
+    r'^#2      _RootZone.runUnary ',
+    r'^#3      _FutureListener.handleValue ',
+    r'^#4      Future._propagateToListeners.handleValueCallback ',
+    r'^#5      Future._propagateToListeners ',
+    // TODO(dart-vm): Figure out why this is inconsistent:
+    r'^#6      Future.(_addListener|_prependListeners).<anonymous closure> ',
+    r'^#7      _microtaskLoop ',
+    r'^#8      _startMicrotaskLoop ',
+    r'^#9      _runPendingImmediateCallback ',
+    r'^#10     _RawReceivePortImpl._handleMessage ',
+  ];
+  await doTestAwait(allYield, allYieldExpected, debugInfoFilename);
+  await doTestAwaitThen(allYield, allYieldExpected, debugInfoFilename);
+  await doTestAwaitCatchError(allYield, allYieldExpected, debugInfoFilename);
+
+  final noYieldsExpected = const <String>[
+    r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
+    r'^#1      noYields3 \(.*/utils.dart:54(:3)?\)$',
+    r'^#2      _AsyncAwaitCompleter.start ',
+    r'^#3      noYields3 \(.*/utils.dart:53(:23)?\)$',
+    r'^#4      noYields2 \(.*/utils.dart:50(:9)?\)$',
+    r'^#5      _AsyncAwaitCompleter.start ',
+    r'^#6      noYields2 \(.*/utils.dart:49(:23)?\)$',
+    r'^#7      noYields \(.*/utils.dart:46(:9)?\)$',
+    r'^#8      _AsyncAwaitCompleter.start ',
+    r'^#9      noYields \(.*/utils.dart:45(:22)?\)$',
+  ];
+  await doTestAwait(
+      noYields,
+      noYieldsExpected +
+          const <String>[
+            r'^#10     doTestAwait ',
+            r'^#11     _AsyncAwaitCompleter.start ',
+            r'^#12     doTestAwait ',
+            r'^#13     doTestsNoCausalNoLazy ',
+            r'^#14     _RootZone.runUnary ',
+            r'^#15     _FutureListener.handleValue ',
+            r'^#16     Future._propagateToListeners.handleValueCallback ',
+            r'^#17     Future._propagateToListeners ',
+            r'^#18     Future._completeWithValue ',
+            r'^#19     _AsyncAwaitCompleter.complete ',
+            r'^#20     _completeOnAsyncReturn ',
+            r'^#21     doTestAwaitCatchError ',
+            r'^#22     _RootZone.runUnary ',
+            r'^#23     _FutureListener.handleValue ',
+            r'^#24     Future._propagateToListeners.handleValueCallback ',
+            r'^#25     Future._propagateToListeners ',
+            r'^#26     Future._completeError ',
+            r'^#27     _AsyncAwaitCompleter.completeError ',
+            r'^#28     allYield ',
+            r'^#29     _asyncErrorWrapperHelper.errorCallback ',
+            r'^#30     _RootZone.runBinary ',
+            r'^#31     _FutureListener.handleError ',
+            r'^#32     Future._propagateToListeners.handleError ',
+            r'^#33     Future._propagateToListeners ',
+            r'^#34     Future._completeError ',
+            r'^#35     _AsyncAwaitCompleter.completeError ',
+            r'^#36     allYield2 ',
+            r'^#37     _asyncErrorWrapperHelper.errorCallback ',
+            r'^#38     _RootZone.runBinary ',
+            r'^#39     _FutureListener.handleError ',
+            r'^#40     Future._propagateToListeners.handleError ',
+            r'^#41     Future._propagateToListeners ',
+            r'^#42     Future._completeError ',
+            r'^#43     _AsyncAwaitCompleter.completeError ',
+            r'^#44     allYield3 ',
+            r'^#45     _RootZone.runUnary ',
+            r'^#46     _FutureListener.handleValue ',
+            r'^#47     Future._propagateToListeners.handleValueCallback ',
+            r'^#48     Future._propagateToListeners ',
+            // TODO(dart-vm): Figure out why this is inconsistent:
+            r'^#49     Future.(_addListener|_prependListeners).<anonymous closure> ',
+            r'^#50     _microtaskLoop ',
+            r'^#51     _startMicrotaskLoop ',
+            r'^#52     _runPendingImmediateCallback ',
+            r'^#53     _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      noYields,
+      noYieldsExpected +
+          const <String>[
+            r'^#10     doTestAwaitThen ',
+            r'^#11     _AsyncAwaitCompleter.start ',
+            r'^#12     doTestAwaitThen ',
+            r'^#13     doTestsNoCausalNoLazy ',
+            r'^#14     _RootZone.runUnary ',
+            r'^#15     _FutureListener.handleValue ',
+            r'^#16     Future._propagateToListeners.handleValueCallback ',
+            r'^#17     Future._propagateToListeners ',
+            r'^#18     Future._completeWithValue ',
+            r'^#19     _AsyncAwaitCompleter.complete ',
+            r'^#20     _completeOnAsyncReturn ',
+            r'^#21     doTestAwait ',
+            r'^#22     _asyncErrorWrapperHelper.errorCallback ',
+            r'^#23     _RootZone.runBinary ',
+            r'^#24     _FutureListener.handleError ',
+            r'^#25     Future._propagateToListeners.handleError ',
+            r'^#26     Future._propagateToListeners ',
+            r'^#27     Future._completeError ',
+            r'^#28     _AsyncAwaitCompleter.completeError ',
+            r'^#29     noYields ',
+            r'^#30     _asyncErrorWrapperHelper.errorCallback ',
+            r'^#31     _RootZone.runBinary ',
+            r'^#32     _FutureListener.handleError ',
+            r'^#33     Future._propagateToListeners.handleError ',
+            r'^#34     Future._propagateToListeners ',
+            r'^#35     Future._completeError ',
+            r'^#36     _AsyncAwaitCompleter.completeError ',
+            r'^#37     noYields2 ',
+            r'^#38     _asyncErrorWrapperHelper.errorCallback ',
+            r'^#39     _RootZone.runBinary ',
+            r'^#40     _FutureListener.handleError ',
+            r'^#41     Future._propagateToListeners.handleError ',
+            r'^#42     Future._propagateToListeners ',
+            r'^#43     Future._completeError ',
+            // TODO(dart-vm): Figure out why this is inconsistent:
+            r'^#44     Future.(_asyncCompleteError|_chainForeignFuture).<anonymous closure> ',
+            r'^#45     _microtaskLoop ',
+            r'^#46     _startMicrotaskLoop ',
+            r'^#47     _runPendingImmediateCallback ',
+            r'^#48     _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(
+      noYields,
+      noYieldsExpected +
+          const <String>[
+            r'^#10     doTestAwaitCatchError ',
+            r'^#11     _AsyncAwaitCompleter.start ',
+            r'^#12     doTestAwaitCatchError ',
+            r'^#13     doTestsNoCausalNoLazy ',
+            r'^#14     _RootZone.runUnary ',
+            r'^#15     _FutureListener.handleValue ',
+            r'^#16     Future._propagateToListeners.handleValueCallback ',
+            r'^#17     Future._propagateToListeners ',
+            r'^#18     Future._completeWithValue ',
+            r'^#19     _AsyncAwaitCompleter.complete ',
+            r'^#20     _completeOnAsyncReturn ',
+            r'^#21     doTestAwaitThen ',
+            r'^#22     _asyncErrorWrapperHelper.errorCallback ',
+            r'^#23     _RootZone.runBinary ',
+            r'^#24     _FutureListener.handleError ',
+            r'^#25     Future._propagateToListeners.handleError ',
+            r'^#26     Future._propagateToListeners ',
+            r'^#27     Future._completeError ',
+            r'^#28     _AsyncAwaitCompleter.completeError ',
+            r'^#29     noYields ',
+            r'^#30     _asyncErrorWrapperHelper.errorCallback ',
+            r'^#31     _RootZone.runBinary ',
+            r'^#32     _FutureListener.handleError ',
+            r'^#33     Future._propagateToListeners.handleError ',
+            r'^#34     Future._propagateToListeners ',
+            r'^#35     Future._completeError ',
+            r'^#36     _AsyncAwaitCompleter.completeError ',
+            r'^#37     noYields2 ',
+            r'^#38     _asyncErrorWrapperHelper.errorCallback ',
+            r'^#39     _RootZone.runBinary ',
+            r'^#40     _FutureListener.handleError ',
+            r'^#41     Future._propagateToListeners.handleError ',
+            r'^#42     Future._propagateToListeners ',
+            r'^#43     Future._completeError ',
+            // TODO(dart-vm): Figure out why this is inconsistent:
+            r'^#44     Future.(_asyncCompleteError|_chainForeignFuture).<anonymous closure> ',
+            r'^#45     _microtaskLoop ',
+            r'^#46     _startMicrotaskLoop ',
+            r'^#47     _runPendingImmediateCallback ',
+            r'^#48     _RawReceivePortImpl._handleMessage ',
+          ],
+      debugInfoFilename);
+
+  final mixedYieldsExpected = const <String>[
+    r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+    r'^#1      _RootZone.runUnary ',
+    r'^#2      _FutureListener.handleValue ',
+    r'^#3      Future._propagateToListeners.handleValueCallback ',
+    r'^#4      Future._propagateToListeners ',
+    // TODO(dart-vm): Figure out why this is inconsistent:
+    r'^#5      Future.(_addListener|_prependListeners).<anonymous closure> ',
+    r'^#6      _microtaskLoop ',
+    r'^#7      _startMicrotaskLoop ',
+    r'^#8      _runPendingImmediateCallback ',
+    r'^#9      _RawReceivePortImpl._handleMessage ',
+  ];
+  await doTestAwait(mixedYields, mixedYieldsExpected, debugInfoFilename);
+  await doTestAwaitThen(mixedYields, mixedYieldsExpected, debugInfoFilename);
+  await doTestAwaitCatchError(
+      mixedYields, mixedYieldsExpected, debugInfoFilename);
+
+  final syncSuffixExpected = const <String>[
+    r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+    r'^#1      _RootZone.runUnary ',
+    r'^#2      _FutureListener.handleValue ',
+    r'^#3      Future._propagateToListeners.handleValueCallback ',
+    r'^#4      Future._propagateToListeners ',
+    // TODO(dart-vm): Figure out why this is inconsistent:
+    r'^#5      Future.(_addListener|_prependListeners).<anonymous closure> ',
+    r'^#6      _microtaskLoop ',
+    r'^#7      _startMicrotaskLoop ',
+    r'^#8      _runPendingImmediateCallback ',
+    r'^#9      _RawReceivePortImpl._handleMessage ',
+  ];
+  await doTestAwait(syncSuffix, syncSuffixExpected, debugInfoFilename);
+  await doTestAwaitThen(syncSuffix, syncSuffixExpected, debugInfoFilename);
+  await doTestAwaitCatchError(
+      syncSuffix, syncSuffixExpected, debugInfoFilename);
+
+  final nonAsyncNoStackExpected = const <String>[
+    r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+    r'^#1      _RootZone.runUnary ',
+    r'^#2      _FutureListener.handleValue ',
+    r'^#3      Future._propagateToListeners.handleValueCallback ',
+    r'^#4      Future._propagateToListeners ',
+    // TODO(dart-vm): Figure out why this is inconsistent:
+    r'^#5      Future.(_addListener|_prependListeners).<anonymous closure> ',
+    r'^#6      _microtaskLoop ',
+    r'^#7      _startMicrotaskLoop ',
+    r'^#8      _runPendingImmediateCallback ',
+    r'^#9      _RawReceivePortImpl._handleMessage ',
+  ];
+  await doTestAwait(
+      nonAsyncNoStack, nonAsyncNoStackExpected, debugInfoFilename);
+  await doTestAwaitThen(
+      nonAsyncNoStack, nonAsyncNoStackExpected, debugInfoFilename);
+  await doTestAwaitCatchError(
+      nonAsyncNoStack, nonAsyncNoStackExpected, debugInfoFilename);
+
+  final asyncStarThrowSyncExpected = const <String>[
+    r'^#0      throwSync \(.+/utils.dart:16(:3)?\)$',
+    r'^#1      asyncStarThrowSync \(.+/utils.dart:112(:11)?\)$',
+    r'^#2      _RootZone.runUnary \(.+\)$',
+    r'^#3      _FutureListener.handleValue \(.+\)$',
+    r'^#4      Future._propagateToListeners.handleValueCallback \(.+\)$',
+    r'^#5      Future._propagateToListeners \(.+\)$',
+    // TODO(dart-vm): Figure out why this is inconsistent:
+    r'^#6      Future.(_addListener|_prependListeners).<anonymous closure> \(.+\)$',
+    r'^#7      _microtaskLoop \(.+\)$',
+    r'^#8      _startMicrotaskLoop \(.+\)$',
+    r'^#9      _runPendingImmediateCallback \(.+\)$',
+    r'^#10     _RawReceivePortImpl._handleMessage \(.+\)$',
+  ];
+  await doTestAwait(awaitEveryAsyncStarThrowSync, asyncStarThrowSyncExpected,
+      debugInfoFilename);
+  await doTestAwaitThen(awaitEveryAsyncStarThrowSync,
+      asyncStarThrowSyncExpected, debugInfoFilename);
+  await doTestAwaitCatchError(awaitEveryAsyncStarThrowSync,
+      asyncStarThrowSyncExpected, debugInfoFilename);
+
+  final asyncStarThrowAsyncExpected = const <String>[
+    r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+    r'^#1      _RootZone.runUnary ',
+    r'^#2      _FutureListener.handleValue ',
+    r'^#3      Future._propagateToListeners.handleValueCallback ',
+    r'^#4      Future._propagateToListeners ',
+    // TODO(dart-vm): Figure out why this is inconsistent:
+    r'^#5      Future.(_addListener|_prependListeners).<anonymous closure> ',
+    r'^#6      _microtaskLoop ',
+    r'^#7      _startMicrotaskLoop ',
+    r'^#8      _runPendingImmediateCallback ',
+    r'^#9      _RawReceivePortImpl._handleMessage ',
+  ];
+  await doTestAwait(awaitEveryAsyncStarThrowAsync, asyncStarThrowAsyncExpected,
+      debugInfoFilename);
+  await doTestAwaitThen(awaitEveryAsyncStarThrowAsync,
+      asyncStarThrowAsyncExpected, debugInfoFilename);
+  await doTestAwaitCatchError(awaitEveryAsyncStarThrowAsync,
+      asyncStarThrowAsyncExpected, debugInfoFilename);
+
+  final listenAsyncStartExpected = const <String>[
+    r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+    r'^#1      _RootZone.runUnary ',
+    r'^#2      _FutureListener.handleValue ',
+    r'^#3      Future._propagateToListeners.handleValueCallback ',
+    r'^#4      Future._propagateToListeners ',
+    // TODO(dart-vm): Figure out why this is inconsistent:
+    r'^#5      Future.(_addListener|_prependListeners).<anonymous closure> ',
+    r'^#6      _microtaskLoop ',
+    r'^#7      _startMicrotaskLoop ',
+    r'^#8      _runPendingImmediateCallback ',
+    r'^#9      _RawReceivePortImpl._handleMessage ',
+  ];
+  await doTestAwait(
+      listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
+  await doTestAwaitThen(
+      listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
+  await doTestAwaitCatchError(
+      listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
+
+  final customErrorZoneExpected = const <String>[
+    r'#0      throwSync \(.*/utils.dart:16(:3)?\)$',
+    r'#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
+    r'#2      _rootRunUnary ',
+    r'#3      _CustomZone.runUnary ',
+    r'#4      _FutureListener.handleValue ',
+    r'#5      Future._propagateToListeners.handleValueCallback ',
+    r'#6      Future._propagateToListeners ',
+    r'#7      Future.(_addListener|_prependListeners).<anonymous closure> ',
+    r'#8      _rootRun ',
+    r'#9      _CustomZone.run ',
+    r'#10     _CustomZone.runGuarded ',
+    r'#11     _CustomZone.bindCallbackGuarded.<anonymous closure> ',
+    r'#12     _microtaskLoop ',
+    r'#13     _startMicrotaskLoop ',
+    r'#14     _runPendingImmediateCallback ',
+    r'#15     _RawReceivePortImpl._handleMessage ',
+  ];
+  await doTestAwait(
+      customErrorZone, customErrorZoneExpected, debugInfoFilename);
+  await doTestAwaitThen(
+      customErrorZone, customErrorZoneExpected, debugInfoFilename);
+  await doTestAwaitCatchError(
+      customErrorZone, customErrorZoneExpected, debugInfoFilename);
+}
+
+// For: --lazy-async-stacks
+Future<void> doTestsLazy([String debugInfoFilename]) async {
+  final allYieldExpected = const <String>[
+    r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
+    r'^#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#2      allYield2 \(.*/utils.dart:34(:3)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#3      allYield \(.*/utils.dart:29(:3)?\)$',
+    r'^<asynchronous suspension>$',
+  ];
+  await doTestAwait(
+      allYield,
+      allYieldExpected +
+          const <String>[
+            r'^#4      doTestAwait ',
+            r'^<asynchronous suspension>$',
+            r'^#5      doTestsLazy ',
+            r'^<asynchronous suspension>$',
+            r'^#6      main ',
+            r'^<asynchronous suspension>$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      allYield,
+      allYieldExpected +
+          const <String>[
+            r'^#4      doTestAwaitThen.<anonymous closure> ',
+            r'^<asynchronous suspension>$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(allYield, allYieldExpected, debugInfoFilename);
+
+  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)?\)$',
+  ];
+  await doTestAwait(
+      noYields,
+      noYieldsExpected +
+          const <String>[
+            r'^#4      doTestAwait ',
+            r'^#5      doTestsLazy ',
+            r'^<asynchronous suspension>$',
+            r'^#6      main ',
+            r'^<asynchronous suspension>$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      noYields,
+      noYieldsExpected +
+          const <String>[
+            r'^#4      doTestAwaitThen ',
+            r'^#5      doTestsLazy ',
+            r'^<asynchronous suspension>$',
+            r'^#6      main ',
+            r'^<asynchronous suspension>$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(
+      noYields,
+      noYieldsExpected +
+          const <String>[
+            r'^#4      doTestAwaitCatchError ',
+            r'^#5      doTestsLazy ',
+            r'^<asynchronous suspension>$',
+            r'^#6      main ',
+            r'^<asynchronous suspension>$',
+          ],
+      debugInfoFilename);
+
+  final mixedYieldsExpected = const <String>[
+    r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#1      mixedYields2 \(.*/utils.dart:66(:3)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#2      mixedYields \(.*/utils.dart:61(:3)?\)$',
+    r'^<asynchronous suspension>$',
+  ];
+  await doTestAwait(
+      mixedYields,
+      mixedYieldsExpected +
+          const <String>[
+            r'^#3      doTestAwait ',
+            r'^<asynchronous suspension>$',
+            r'^#4      doTestsLazy ',
+            r'^<asynchronous suspension>$',
+            r'^#5      main ',
+            r'^<asynchronous suspension>$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      mixedYields,
+      mixedYieldsExpected +
+          const <String>[
+            r'^#3      doTestAwaitThen.<anonymous closure> ',
+            r'^<asynchronous suspension>$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(
+      mixedYields, mixedYieldsExpected, debugInfoFilename);
+
+  final syncSuffixExpected = const <String>[
+    r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#1      syncSuffix2 \(.*/utils.dart:82(:3)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#2      syncSuffix \(.*/utils.dart:77(:3)?\)$',
+    r'^<asynchronous suspension>$',
+  ];
+  await doTestAwait(
+      syncSuffix,
+      syncSuffixExpected +
+          const <String>[
+            r'^#3      doTestAwait ',
+            r'^<asynchronous suspension>$',
+            r'^#4      doTestsLazy ',
+            r'^<asynchronous suspension>$',
+            r'^#5      main ',
+            r'^<asynchronous suspension>$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      syncSuffix,
+      syncSuffixExpected +
+          const <String>[
+            r'^#3      doTestAwaitThen.<anonymous closure> ',
+            r'^<asynchronous suspension>$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(
+      syncSuffix, syncSuffixExpected, debugInfoFilename);
+
+  final nonAsyncNoStackExpected = const <String>[
+    r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#1      nonAsyncNoStack1 \(.*/utils.dart:95(:36)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#2      nonAsyncNoStack \(.*/utils.dart:93(:35)?\)$',
+    r'^<asynchronous suspension>$',
+  ];
+  await doTestAwait(
+      nonAsyncNoStack,
+      nonAsyncNoStackExpected +
+          const <String>[
+            r'^#3      doTestAwait ',
+            r'^<asynchronous suspension>$',
+            r'^#4      doTestsLazy ',
+            r'^<asynchronous suspension>$',
+            r'^#5      main ',
+            r'^<asynchronous suspension>$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      nonAsyncNoStack,
+      nonAsyncNoStackExpected +
+          const <String>[
+            r'^#3      doTestAwaitThen.<anonymous closure> ',
+            r'^<asynchronous suspension>$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(
+      nonAsyncNoStack, nonAsyncNoStackExpected, debugInfoFilename);
+
+  final asyncStarThrowSyncExpected = const <String>[
+    r'^#0      throwSync \(.+/utils.dart:16(:3)?\)$',
+    r'^#1      asyncStarThrowSync \(.+/utils.dart:112(:11)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#2      awaitEveryAsyncStarThrowSync \(.+/utils.dart:104(:3)?\)$',
+    r'^<asynchronous suspension>$',
+  ];
+  await doTestAwait(
+      awaitEveryAsyncStarThrowSync,
+      asyncStarThrowSyncExpected +
+          const <String>[
+            r'^#3      doTestAwait ',
+            r'^<asynchronous suspension>$',
+            r'^#4      doTestsLazy ',
+            r'^<asynchronous suspension>$',
+            r'^#5      main ',
+            r'^<asynchronous suspension>$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      awaitEveryAsyncStarThrowSync,
+      asyncStarThrowSyncExpected +
+          const <String>[
+            r'^#3      doTestAwaitThen.<anonymous closure> ',
+            r'^<asynchronous suspension>$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(awaitEveryAsyncStarThrowSync,
+      asyncStarThrowSyncExpected, debugInfoFilename);
+
+  final asyncStarThrowAsyncExpected = const <String>[
+    r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#1      asyncStarThrowAsync \(.*/utils.dart:126(:5)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#2      awaitEveryAsyncStarThrowAsync \(.+/utils.dart:117(:3)?\)$',
+    r'^<asynchronous suspension>$',
+  ];
+  await doTestAwait(
+      awaitEveryAsyncStarThrowAsync,
+      asyncStarThrowAsyncExpected +
+          const <String>[
+            r'^#3      doTestAwait ',
+            r'^<asynchronous suspension>$',
+            r'^#4      doTestsLazy ',
+            r'^<asynchronous suspension>$',
+            r'^#5      main ',
+            r'^<asynchronous suspension>$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitThen(
+      awaitEveryAsyncStarThrowAsync,
+      asyncStarThrowAsyncExpected +
+          const <String>[
+            r'^#3      doTestAwaitThen.<anonymous closure> ',
+            r'^<asynchronous suspension>$',
+          ],
+      debugInfoFilename);
+  await doTestAwaitCatchError(awaitEveryAsyncStarThrowAsync,
+      asyncStarThrowAsyncExpected, debugInfoFilename);
+
+  final listenAsyncStartExpected = const <String>[
+    r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#1      asyncStarThrowAsync \(.*/utils.dart:126(:5)?\)$',
+    r'^<asynchronous suspension>$',
+    r'^#2      listenAsyncStarThrowAsync.<anonymous closure> \(.+/utils.dart(:0)?\)$',
+    r'^<asynchronous suspension>$',
+  ];
+  await doTestAwait(
+      listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
+  await doTestAwaitThen(
+      listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
+  await doTestAwaitCatchError(
+      listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
+
+  final customErrorZoneExpected = const <String>[
+    r'#0      throwSync \(.*/utils.dart:16(:3)?\)$',
+    r'#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
+    r'<asynchronous suspension>$',
+    r'#2      allYield2 \(.*/utils.dart:34(:3)?\)$',
+    r'<asynchronous suspension>$',
+    r'#3      allYield \(.*/utils.dart:29(:3)?\)$',
+    r'<asynchronous suspension>$',
+    r'#4      customErrorZone.<anonymous closure> \(.*/utils.dart:144(:5)?\)$',
+    r'<asynchronous suspension>$',
+  ];
+  await doTestAwait(
+      customErrorZone, customErrorZoneExpected, debugInfoFilename);
+  await doTestAwaitThen(
+      customErrorZone, customErrorZoneExpected, debugInfoFilename);
+  await doTestAwaitCatchError(
+      customErrorZone, customErrorZoneExpected, debugInfoFilename);
+}
diff --git a/runtime/tests/vm/dart_2/compilation_trace_test.dart b/runtime/tests/vm/dart_2/compilation_trace_test.dart
new file mode 100644
index 0000000..4ebafb5
--- /dev/null
+++ b/runtime/tests/vm/dart_2/compilation_trace_test.dart
@@ -0,0 +1,45 @@
+// 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:async";
+import "dart:io";
+
+import "package:path/path.dart" as p;
+
+import "snapshot_test_helper.dart";
+
+int fib(int n) {
+  if (n <= 1) return 1;
+  return fib(n - 1) + fib(n - 2);
+}
+
+Future<void> main(List<String> args) async {
+  if (args.contains("--child")) {
+    print(fib(35));
+    return;
+  }
+
+  if (!Platform.script.toString().endsWith(".dart")) {
+    print("This test must run from source");
+    return;
+  }
+
+  await withTempDir((String tmp) async {
+    final String tracePath = p.join(tmp, "compilation_trace.txt");
+
+    final result1 = await runDart("generate compilation trace", [
+      "--save_compilation_trace=$tracePath",
+      Platform.script.toFilePath(),
+      "--child",
+    ]);
+    expectOutput("14930352", result1);
+
+    final result2 = await runDart("use compilation trace", [
+      "--load_compilation_trace=$tracePath",
+      Platform.script.toFilePath(),
+      "--child",
+    ]);
+    expectOutput("14930352", result2);
+  });
+}
diff --git a/runtime/tests/vm/dart_2/data_uri_import_test.dart b/runtime/tests/vm/dart_2/data_uri_import_test.dart
new file mode 100644
index 0000000..576f302
--- /dev/null
+++ b/runtime/tests/vm/dart_2/data_uri_import_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+// 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
+import 'data:;charset=utf-8,foo%28%29%20%3D%3E%2042%3B';  /// nomime: ok
+import 'data:application/dart;charset=utf-16,foo%28%29%20%3D%3E%2042%3B';  /// utf16: ok
+import 'data:application/dart,foo%28%29%20%3D%3E%2042%3B';  /// nocharset: ok
+import 'data:application/dart;charset=utf-8,foo?%9g';  /// badencodeddate: compile-time error
+import 'data:application/dart;charset=utf-8;base64,Zm9vKCkgPT4gNDI7';  /// base64: ok
+
+import "package:expect/expect.dart";
+
+main() {
+  Expect.equals(42, foo());
+}
diff --git a/runtime/tests/vm/dart_2/data_uri_spawn_test.dart b/runtime/tests/vm/dart_2/data_uri_spawn_test.dart
new file mode 100644
index 0000000..3e045a9
--- /dev/null
+++ b/runtime/tests/vm/dart_2/data_uri_spawn_test.dart
@@ -0,0 +1,31 @@
+// 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:isolate";
+
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+Uri toDartDataUri(String source) {
+  return Uri.parse("data:application/dart;charset=utf-8,"
+      "${Uri.encodeComponent(source)}");
+}
+
+main() {
+  String source = """
+import "dart:isolate";
+main(List args, SendPort replyPort) {
+replyPort.send(42);
+}
+""";
+
+  RawReceivePort receivePort;
+  asyncStart();
+  receivePort = new RawReceivePort((message) {
+    Expect.equals(message, 42);
+    receivePort.close();
+    asyncEnd();
+  });
+  Isolate.spawnUri(toDartDataUri(source), [], receivePort.sendPort);
+}
diff --git a/runtime/tests/vm/dart_2/disassemble_determinism_test.dart b/runtime/tests/vm/dart_2/disassemble_determinism_test.dart
new file mode 100644
index 0000000..1ff1091
--- /dev/null
+++ b/runtime/tests/vm/dart_2/disassemble_determinism_test.dart
@@ -0,0 +1,57 @@
+// 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.
+
+// Verify running with --disassemble --disassemble-relative produces
+// deterministic output. This is useful for removing noise when tracking down
+// the effects of compiler changes.
+
+import 'dart:async';
+import 'dart:io';
+import 'snapshot_test_helper.dart';
+
+import 'package:expect/expect.dart';
+
+int fib(int n) {
+  if (n <= 1) return 1;
+  return fib(n - 1) + fib(n - 2);
+}
+
+Future<void> main(List<String> args) async {
+  if (args.contains('--child')) {
+    print(fib(35));
+    return;
+  }
+
+  if (!Platform.script.toString().endsWith(".dart")) {
+    return; // Not running from source: skip for app-jit and app-aot.
+  }
+  if (Platform.executable.contains("Product")) {
+    return; // No disassembler in product mode.
+  }
+  if (Platform.executable.contains("IA32")) {
+    return; // Our IA32 code is not position independent.
+  }
+
+  final result1 = await runDart('GENERATE DISASSEMBLY 1', [
+    '--deterministic',
+    '--disassemble',
+    '--disassemble-relative',
+    Platform.script.toFilePath(),
+    '--child'
+  ]);
+  final asm1 = result1.processResult.stderr;
+
+  final result2 = await runDart('GENERATE DISASSEMBLY 2', [
+    '--deterministic',
+    '--disassemble',
+    '--disassemble-relative',
+    Platform.script.toFilePath(),
+    '--child'
+  ]);
+  final asm2 = result2.processResult.stderr;
+
+  Expect.isTrue(
+      asm1.contains("Code for function"), "Printed at least one function");
+  Expect.stringEquals(asm1, asm2);
+}
diff --git a/runtime/tests/vm/dart_2/double_field_assignment_test.dart b/runtime/tests/vm/dart_2/double_field_assignment_test.dart
new file mode 100644
index 0000000..ba95348
--- /dev/null
+++ b/runtime/tests/vm/dart_2/double_field_assignment_test.dart
@@ -0,0 +1,65 @@
+// 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 "package:expect/expect.dart";
+
+final bool alwaysTrue = int.parse('1') == 1;
+
+abstract class I {
+  double get val;
+  void set val(double v);
+}
+
+class Foo implements I {
+  double val;
+  @pragma('vm:never-inline')
+  Foo(this.val);
+}
+
+class Bar implements I {
+  double val = alwaysTrue ? 1.1 : 2.2;
+}
+
+@pragma('vm:never-inline')
+double identity(double x) => x;
+
+@pragma('vm:never-inline')
+void testGetter() {
+  final I a = alwaysTrue ? Foo(4.2) : Bar();
+
+  // Call intrinsic getter (which should make a copy if field is unboxed)
+  final value = a.val;
+  final valueAlias = identity(value);
+
+  if (a is Foo) {
+    // Override the mutable box via direct StoreInstanceField instruction.
+    a.val = 99.0;
+  }
+
+  // Ensure value (aka valueAlias) was not overriden with 99.0
+  Expect.equals(4.2, valueAlias);
+}
+
+@pragma('vm:never-inline')
+void testSetter() {
+  final I a = alwaysTrue ? Foo(1.0) : Bar();
+
+  final value = alwaysTrue ? 4.2 : 2.1;
+  final valueAlias = identity(value);
+
+  // Call intrinsic setter (which should make a copy if field is unboxed)
+  a.val = value;
+  if (a is Foo) {
+    // Override the mutable box via direct StoreInstanceField instruction.
+    a.val = 99.0;
+  }
+
+  // Ensure value (aka valueAlias) was not overriden with 99.0
+  Expect.equals(4.2, valueAlias);
+}
+
+main() {
+  testGetter();
+  testSetter();
+}
diff --git a/runtime/tests/vm/dart_2/double_materialize_test.dart b/runtime/tests/vm/dart_2/double_materialize_test.dart
new file mode 100644
index 0000000..e1fa1b3
--- /dev/null
+++ b/runtime/tests/vm/dart_2/double_materialize_test.dart
@@ -0,0 +1,22 @@
+// 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.
+
+// VMOptions=--optimization_counter_threshold=10 --no-use-osr --no-background-compilation
+
+import "package:expect/expect.dart";
+
+double f(double x, double five, dynamic y) {
+  double z = x + five;
+  var a = y + 5;
+  return z + a.toDouble();
+}
+
+void main() {
+  double x = 1.0;
+  for (int i = 0; i < 1000; i++) {
+    x = f(x, 5.0, i);
+  }
+  x = f(x, 5.0, 1.0);
+  Expect.equals(509512.0, x);
+}
diff --git a/runtime/tests/vm/dart_2/double_to_smi_test.dart b/runtime/tests/vm/dart_2/double_to_smi_test.dart
new file mode 100644
index 0000000..06d6139
--- /dev/null
+++ b/runtime/tests/vm/dart_2/double_to_smi_test.dart
@@ -0,0 +1,23 @@
+// 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.
+
+// VMOptions=--optimization_counter_threshold=10 --no-use-osr --no-background-compilation
+
+import "package:expect/expect.dart";
+
+int convert(dynamic d) {
+  return d.toInt();
+}
+
+main() {
+  double x = -100.0;
+  int count = 0;
+  while (x < 100.0) {
+    count = count + convert(x);
+    x = x + 0.5;
+  }
+  Expect.equals(-100, count);
+  count = convert(42);
+  Expect.equals(42, count);
+}
diff --git a/runtime/tests/vm/dart_2/dylib_utils.dart b/runtime/tests/vm/dart_2/dylib_utils.dart
new file mode 100644
index 0000000..75ba33b
--- /dev/null
+++ b/runtime/tests/vm/dart_2/dylib_utils.dart
@@ -0,0 +1,26 @@
+// 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:ffi' as ffi;
+import 'dart:io' show Platform;
+
+String _platformPath(String name, {String path}) {
+  if (path == null) path = "";
+  if (Platform.isLinux || Platform.isAndroid)
+    return path + "lib" + name + ".so";
+  if (Platform.isMacOS) return path + "lib" + name + ".dylib";
+  if (Platform.isWindows) return path + name + ".dll";
+  throw Exception("Platform not implemented");
+}
+
+ffi.DynamicLibrary dlopenPlatformSpecific(String name, {String path}) {
+  String fullPath = _platformPath(name, path: path);
+  return ffi.DynamicLibrary.open(fullPath);
+}
+
+ffi.DynamicLibrary ffiTestFunctions =
+    dlopenPlatformSpecific("ffi_test_functions");
+
+final triggerGc = ffiTestFunctions
+    .lookupFunction<ffi.Void Function(), void Function()>("TriggerGC");
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
new file mode 100644
index 0000000..8c647eb0
--- /dev/null
+++ b/runtime/tests/vm/dart_2/emit_aot_size_info_flag_test.dart
@@ -0,0 +1,109 @@
+// 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:async";
+import "dart:io";
+import "dart:convert";
+
+import 'package:expect/expect.dart';
+import 'package:path/path.dart' as path;
+
+main(List<String> args) async {
+  if (!Platform.executable.endsWith("dart_precompiled_runtime")) {
+    return; // Running in JIT: AOT binaries not available.
+  }
+
+  if (Platform.isAndroid) {
+    return; // SDK tree and gen_snapshot not available on the test device.
+  }
+
+  final buildDir = path.dirname(Platform.executable);
+  final sdkDir = path.dirname(path.dirname(buildDir));
+  final platformDill = path.join(buildDir, 'vm_platform_strong.dill');
+  final genSnapshot = path.join(buildDir, 'gen_snapshot');
+  final aotRuntime = path.join(buildDir, 'dart_precompiled_runtime');
+
+  await withTempDir((String tempDir) async {
+    final script = path.join(sdkDir, 'pkg/kernel/bin/dump.dart');
+    final scriptDill = path.join(tempDir, 'kernel_dump.dill');
+    final appHeapsnapshot = path.join(tempDir, 'app.heapsnapshot');
+    final appSizesJson = path.join(tempDir, 'app-sizes.json');
+
+    // Compile script to Kernel IR.
+    await run('pkg/vm/tool/gen_kernel', <String>[
+      '--aot',
+      '--platform=$platformDill',
+      '-o',
+      scriptDill,
+      script,
+    ]);
+
+    // Run the AOT compiler with the size information flags set.
+    final elfFile = path.join(tempDir, 'aot.snapshot');
+    await Future.wait(<Future>[
+      run(genSnapshot, <String>[
+        '--snapshot-kind=app-aot-elf',
+        '--print-instructions-sizes-to=$appSizesJson',
+        '--write-v8-snapshot-profile-to=$appHeapsnapshot',
+        '--elf=$elfFile',
+        scriptDill,
+      ]),
+    ]);
+
+    // Ensure we can actually run the code.
+    await Future.wait(<Future>[
+      run(aotRuntime, <String>[
+        elfFile,
+        scriptDill,
+        path.join(tempDir, 'ignored.txt'),
+      ]),
+    ]);
+
+    // Ensure we can read the files and they look legitimate.
+    final appHeapsnapshotBytes = await readFile(appHeapsnapshot);
+    final snapshotMap = json.decode(appHeapsnapshotBytes);
+    Expect.isTrue(snapshotMap is Map);
+    Expect.isTrue(snapshotMap.keys.contains('snapshot'));
+
+    final appSizesJsonBytes = await readFile(appSizesJson);
+    final sizeList = json.decode(appSizesJsonBytes);
+    Expect.isTrue(sizeList is List);
+    Expect.isTrue(sizeList[0] is Map);
+    Expect.isTrue(sizeList[0].keys.toSet().containsAll(['n', 's']));
+  });
+}
+
+Future<String> readFile(String file) {
+  return new File(file).readAsString();
+}
+
+Future run(String executable, List<String> args) async {
+  print('Running $executable ${args.join(' ')}');
+
+  final result = await Process.run(executable, args);
+  final String stdout = result.stdout;
+  final String stderr = result.stderr;
+  if (stdout.isNotEmpty) {
+    print('stdout:');
+    print(stdout);
+  }
+  if (stderr.isNotEmpty) {
+    print('stderr:');
+    print(stderr);
+  }
+
+  if (result.exitCode != 0) {
+    throw 'Command failed with non-zero exit code (was ${result.exitCode})';
+  }
+}
+
+Future withTempDir(Future fun(String dir)) async {
+  final tempDir =
+      Directory.systemTemp.createTempSync('aot-size-info-flags-test');
+  try {
+    await fun(tempDir.path);
+  } finally {
+    tempDir.deleteSync(recursive: true);
+  }
+}
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
new file mode 100644
index 0000000..f46906f
--- /dev/null
+++ b/runtime/tests/vm/dart_2/entrypoints/aot/static_this_test.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// VMOptions=--enable-testing-pragmas -Denable_inlining=true
+
+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
new file mode 100644
index 0000000..fae9243
--- /dev/null
+++ b/runtime/tests/vm/dart_2/entrypoints/aot/super_test.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// VMOptions=--enable-testing-pragmas -Denable_inlining=true
+
+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
new file mode 100644
index 0000000..bc8822a
--- /dev/null
+++ b/runtime/tests/vm/dart_2/entrypoints/common.dart
@@ -0,0 +1,75 @@
+// 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:expect/expect.dart";
+
+// We want to run each test with and without inlining of the target functions.
+// We accomplish this by using VM options in the yes-inlining variant to set the
+// "enable_inlining" constant variable to true. This maximizes code sharing
+// between the two variants, which are otherwise identical.
+const pragma NeverInline = const bool.fromEnvironment("enable_inlining")
+    ? null
+    : pragma('vm:never-inline');
+
+// In AOT we need to force some functions to be inlined since we only build the
+// unchecked entry-point when inlining.
+const pragma AlwaysInline = const bool.fromEnvironment("enable_inlining")
+    ? pragma('vm:prefer-inline')
+    : null;
+
+// All these tests can be run in test mode or in benchmark mode. In benchmark
+// mode, there is introspection is omitted and the tests runs for many more
+// iterations.
+const bool benchmarkMode = const bool.fromEnvironment("benchmark_mode");
+
+class TargetCalls {
+  int checked = 0;
+  int unchecked = 0;
+
+  // Leave a little room for some cases which always use the checked entry, like
+  // lazy compile stub or interpreter warm-up.
+  static const int wiggle = 10;
+
+  void expectChecked(int iterations) {
+    print("$checked, $unchecked");
+    Expect.isTrue(checked >= iterations - wiggle && unchecked == 0);
+  }
+
+  void expectUnchecked(int iterations) {
+    print("$checked, $unchecked");
+    Expect.isTrue(checked <= wiggle && unchecked >= iterations - wiggle);
+  }
+}
+
+TargetCalls entryPoint = TargetCalls();
+TargetCalls tearoffEntryPoint = TargetCalls();
+
+_validateHelper(int ep, TargetCalls calls) {
+  calls ??= entryPoint;
+
+  if (ep < 0 || ep > 2) {
+    Expect.fail("ERROR: invalid entry-point ($ep) passed by VM.");
+  }
+  if (ep == 0) {
+    calls.checked++;
+  } else {
+    calls.unchecked++;
+  }
+}
+
+void _validateFn(String _, int ep) => _validateHelper(ep, null);
+
+// Invocation of tearoffs go through a tearoff wrapper. We want to independently
+// test which entrypoint was used for the tearoff wrapper vs. which was used for
+// actual target.
+_validateTearoffFn(String name, int ep) {
+  _validateHelper(
+      ep, name.endsWith("#tearoff") ? tearoffEntryPoint : entryPoint);
+}
+
+@pragma("vm:entry-point", "get")
+const validate = benchmarkMode ? null : _validateFn;
+
+@pragma("vm:entry-point", "get")
+const validateTearoff = benchmarkMode ? null : _validateTearoffFn;
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
new file mode 100644
index 0000000..3599dba
--- /dev/null
+++ b/runtime/tests/vm/dart_2/entrypoints/jit/polymorphic_optional_this_test.dart
@@ -0,0 +1,64 @@
+// 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.
+//
+// VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=10 -Denable_inlining=true --compilation-counter-threshold=1
+// 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
+
+// Test that 'PolymorphicInstanceCall's against "this" go through the unchecked
+// entrypoint. The use of optional arguments here encourages prologue sharing
+// between the entrypoints.
+
+import "../common.dart";
+import "package:expect/expect.dart";
+
+abstract class C<T> {
+  @NeverInline
+  void samir1(T x) {
+    samir2(x, y: "hi");
+  }
+
+  void samir2(T x, {String y});
+}
+
+class D<T> extends C<T> {
+  @NeverInline
+  @pragma("vm:testing.unsafe.trace-entrypoints-fn", validate)
+  @pragma("vm:entry-point")
+  void samir2(T x, {String y}) {
+    Expect.notEquals(x, -1);
+    Expect.equals(y, "hi");
+  }
+}
+
+class E<T> extends C<T> {
+  @NeverInline
+  @pragma("vm:testing.unsafe.trace-entrypoints-fn", validate)
+  @pragma("vm:entry-point")
+  void samir2(T x, {String y}) {
+    Expect.notEquals(x, -1);
+    Expect.equals(y, "hi");
+  }
+}
+
+int j = 0;
+
+C getC() {
+  if (j % 2 == 0) {
+    ++j;
+    return new D<int>();
+  } else {
+    ++j;
+    return new E<int>();
+  }
+}
+
+main(List<String> args) {
+  const int iterations = benchmarkMode ? 100000000 : 100;
+  for (int i = 0; i < iterations; ++i) {
+    getC().samir1(i);
+  }
+
+  entryPoint.expectUnchecked(iterations);
+}
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
new file mode 100644
index 0000000..5793419
--- /dev/null
+++ b/runtime/tests/vm/dart_2/entrypoints/jit/polymorphic_this_test.dart
@@ -0,0 +1,59 @@
+// 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.
+//
+// VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=10 -Denable_inlining=true --compilation-counter-threshold=1
+// 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
+
+// Test that 'PolymorphicInstanceCall's against "this" go through the unchecked
+// entrypoint.
+
+import "../common.dart";
+import "package:expect/expect.dart";
+
+abstract class C<T> {
+  @NeverInline
+  void target1(T x) {
+    target2(x);
+  }
+
+  void target2(T x);
+}
+
+class D<T> extends C<T> {
+  @NeverInline
+  @pragma("vm:testing.unsafe.trace-entrypoints-fn", validate)
+  void target2(T x) {
+    Expect.notEquals(x, -1);
+  }
+}
+
+class E<T> extends C<T> {
+  @pragma("vm:testing.unsafe.trace-entrypoints-fn", validate)
+  @NeverInline
+  void target2(T x) {
+    Expect.notEquals(x, -1);
+  }
+}
+
+int j = 0;
+
+C getC() {
+  if (j % 2 == 0) {
+    ++j;
+    return new D<int>();
+  } else {
+    ++j;
+    return new E<int>();
+  }
+}
+
+main(List<String> args) {
+  const int iterations = benchmarkMode ? 200000000 : 100;
+  for (int i = 0; i < iterations; ++i) {
+    getC().target1(i);
+  }
+
+  entryPoint.expectUnchecked(iterations);
+}
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
new file mode 100644
index 0000000..29094e4
--- /dev/null
+++ b/runtime/tests/vm/dart_2/entrypoints/jit/static_this_test.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 file.
+//
+// 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=5 -Denable_inlining=true --compilation-counter-threshold=5
+// VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=-1 --compilation-counter-threshold=5
+
+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
new file mode 100644
index 0000000..be8d2d9
--- /dev/null
+++ b/runtime/tests/vm/dart_2/entrypoints/jit/super_test.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 file.
+//
+// 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=5 --compilation-counter-threshold=5
+// VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=-1 --compilation-counter-threshold=5
+
+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
new file mode 100644
index 0000000..38a8307
--- /dev/null
+++ b/runtime/tests/vm/dart_2/entrypoints/static_this.dart
@@ -0,0 +1,35 @@
+// 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.
+//
+// Test that 'StaticCall's against "this" go through the unchecked entry-point.
+
+import "common.dart";
+import "package:expect/expect.dart";
+
+class C<T> {
+  @pragma("vm:testing.unsafe.trace-entrypoints-fn", validate)
+  @pragma("vm:entry-point")
+  @NeverInline
+  @AlwaysInline
+  void target2(T x) {
+    Expect.notEquals(x, -1);
+  }
+
+  @NeverInline
+  void target1(T x) {
+    target2(x);
+  }
+}
+
+test(List<String> args) {
+  // Make sure the precise runtime-type of C is not known below.
+  C c = args.length == 0 ? C<int>() : C<String>();
+
+  const int iterations = benchmarkMode ? 400000000 : 100;
+  for (int i = 0; i < iterations; ++i) {
+    c.target1(i);
+  }
+
+  entryPoint.expectUnchecked(iterations);
+}
diff --git a/runtime/tests/vm/dart_2/entrypoints/super.dart b/runtime/tests/vm/dart_2/entrypoints/super.dart
new file mode 100644
index 0000000..2ba7af0
--- /dev/null
+++ b/runtime/tests/vm/dart_2/entrypoints/super.dart
@@ -0,0 +1,59 @@
+// 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.
+//
+// Test that 'StaticCall's against "super" go through the unchecked entrypoint.
+
+import "common.dart";
+import "package:expect/expect.dart";
+
+class C<T> {
+  @AlwaysInline
+  @NeverInline
+  @pragma("vm:testing.unsafe.trace-entrypoints-fn", validate)
+  void target1(T x) {
+    Expect.notEquals(x, -1);
+  }
+}
+
+class D<T> extends C<T> {
+  @NeverInline
+  void target1(T x) {
+    super.target1(x);
+  }
+}
+
+class E<T> extends C<T> {
+  @NeverInline
+  void target1(T x) {
+    super.target1(x);
+  }
+}
+
+int j = 0;
+
+C getC() {
+  if (j % 2 == 0) {
+    ++j;
+    return new D<int>();
+  } else if (j % 2 == 1) {
+    ++j;
+    return new E<int>();
+  } else {
+    return new C<int>();
+  }
+}
+
+test(List<String> args) {
+  // Make sure the check on target1.x is not completely eliminated.
+  if (args.length > 0) {
+    (C<int>() as C<num>).target1(1.0);
+  }
+
+  const int iterations = benchmarkMode ? 200000000 : 100;
+  for (int i = 0; i < iterations; ++i) {
+    getC().target1(i);
+  }
+
+  entryPoint.expectUnchecked(iterations);
+}
diff --git a/runtime/tests/vm/dart_2/entrypoints/tearoff_prologue_test.dart b/runtime/tests/vm/dart_2/entrypoints/tearoff_prologue_test.dart
new file mode 100644
index 0000000..2cf7278
--- /dev/null
+++ b/runtime/tests/vm/dart_2/entrypoints/tearoff_prologue_test.dart
@@ -0,0 +1,39 @@
+// 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.
+//
+// No type checks are removed here, but we can skip the argument count check.
+// VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=10
+// VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=10 -Denable_inlining=true
+// VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=-1
+
+import "package:expect/expect.dart";
+import "common.dart";
+
+class C<T> {
+  @NeverInline
+  @pragma("vm:testing.unsafe.trace-entrypoints-fn", validateTearoff)
+  @pragma("vm:entry-point")
+  void samir1(T x) {
+    if (x == -1) {
+      throw "oh no";
+    }
+  }
+}
+
+void run(void Function(int) test, int i) {
+  test(i);
+}
+
+main(List<String> args) {
+  var c = new C<int>();
+  var f = c.samir1;
+
+  const int iterations = benchmarkMode ? 100000000 : 100;
+  for (int i = 0; i < iterations; ++i) {
+    run(f, i);
+  }
+
+  entryPoint.expectChecked(iterations);
+  tearoffEntryPoint.expectUnchecked(iterations);
+}
diff --git a/runtime/tests/vm/dart_2/entrypoints/tearoff_test.dart b/runtime/tests/vm/dart_2/entrypoints/tearoff_test.dart
new file mode 100644
index 0000000..d0bd88a
--- /dev/null
+++ b/runtime/tests/vm/dart_2/entrypoints/tearoff_test.dart
@@ -0,0 +1,38 @@
+// 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-testing-pragmas --no-background-compilation --optimization-counter-threshold=10
+// VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=10 -Denable_inlining=true
+// VMOptions=--enable-testing-pragmas --no-background-compilation --optimization-counter-threshold=-1
+
+// Test that typed calls against tearoffs go into the unchecked entrypoint.
+
+import "package:expect/expect.dart";
+import "common.dart";
+
+class C<T> {
+  @NeverInline
+  @pragma("vm:testing.unsafe.trace-entrypoints-fn", validateTearoff)
+  @pragma("vm:entry-point")
+  void target1(T x, String y) {
+    Expect.notEquals(x, -1);
+    Expect.equals(y, "foo");
+  }
+}
+
+void run(void Function(int, String) fn, int i) {
+  fn(i, "foo");
+}
+
+main(List<String> args) {
+  var f = (new C<int>()).target1;
+
+  const int iterations = benchmarkMode ? 100000000 : 100;
+  for (int i = 0; i < iterations; ++i) {
+    run(f, i);
+  }
+
+  entryPoint.expectChecked(iterations);
+  tearoffEntryPoint.expectUnchecked(iterations);
+}
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
new file mode 100644
index 0000000..bd114cb
--- /dev/null
+++ b/runtime/tests/vm/dart_2/error_messages_in_null_checks_test.dart
@@ -0,0 +1,101 @@
+// 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.
+
+// This test verifies that NoSuchMethodError thrown from null checks
+// corresponding to devirtualized calls in AOT mode have detailed messages
+// (dartbug.com/32863).
+
+import "package:expect/expect.dart";
+
+class A {
+  @pragma("vm:entry-point") // Prevent obfuscation
+  void foo() {
+    Expect.fail('A.foo should not be reachable');
+  }
+
+  @pragma("vm:entry-point") // Prevent obfuscation
+  dynamic get bar {
+    Expect.fail('A.bar should not be reachable');
+  }
+
+  @pragma("vm:entry-point") // Prevent obfuscation
+  set bazz(int x) {
+    Expect.fail('A.bazz should not be reachable');
+  }
+}
+
+A myNull;
+double doubleNull;
+int intNull;
+
+main(List<String> args) {
+  // Make sure value of `myNull` is not a compile-time null and
+  // devirtualization happens.
+  if (args.length > 42) {
+    myNull = new A();
+    doubleNull = 3.14;
+    intNull = 2;
+  }
+
+  Expect.throws(
+      () => myNull.foo(),
+      (e) =>
+          e is NoSuchMethodError &&
+          e.toString().startsWith(
+              'NoSuchMethodError: The method \'foo\' was called on null.'));
+
+  Expect.throws(
+      () => myNull.foo,
+      (e) =>
+          e is NoSuchMethodError &&
+          e.toString().startsWith(
+              'NoSuchMethodError: The getter \'foo\' was called on null.'));
+
+  Expect.throws(
+      () => myNull.bar,
+      (e) =>
+          e is NoSuchMethodError &&
+          e.toString().startsWith(
+              'NoSuchMethodError: The getter \'bar\' was called on null.'));
+
+  Expect.throws(
+      () => myNull.bar(),
+      (e) =>
+          e is NoSuchMethodError &&
+          e.toString().startsWith(
+              'NoSuchMethodError: The getter \'bar\' was called on null.'));
+
+  Expect.throws(() {
+    myNull.bazz = 3;
+  },
+      (e) =>
+          e is NoSuchMethodError &&
+          e.toString().startsWith(
+              'NoSuchMethodError: The setter \'bazz=\' was called on null.'));
+
+  Expect.throws(
+      () => doubleNull + 2.17,
+      (e) =>
+          e is NoSuchMethodError &&
+          e.toString().startsWith(
+              'NoSuchMethodError: The method \'+\' was called on null.'));
+
+  Expect.throws(
+      () => 9.81 - doubleNull,
+      (e) =>
+          e is NoSuchMethodError &&
+          // If '-' is specialized.
+          (e.toString().startsWith(
+                  'NoSuchMethodError: The method \'-\' was called on null.') ||
+              // If '-' is not specialized, it calls toDouble() internally.
+              e.toString().startsWith(
+                  'NoSuchMethodError: The method \'toDouble\' was called on null.')));
+
+  Expect.throws(
+      () => intNull * 7,
+      (e) =>
+          e is NoSuchMethodError &&
+          e.toString().startsWith(
+              'NoSuchMethodError: The method \'*\' was called on null.'));
+}
diff --git a/runtime/tests/vm/dart_2/error_stacktrace_test.dart b/runtime/tests/vm/dart_2/error_stacktrace_test.dart
new file mode 100644
index 0000000..533aed5
--- /dev/null
+++ b/runtime/tests/vm/dart_2/error_stacktrace_test.dart
@@ -0,0 +1,31 @@
+// 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.
+// Test that the full stacktrace in an error object matches the stacktrace
+// handed to the catch clause.
+library test.error_stacktrace;
+
+import "package:expect/expect.dart";
+
+class C {
+  // operator*(o) is missing to trigger a noSuchMethodError when a C object
+  // is used in the multiplication below.
+}
+
+bar(c) => c * 4;
+foo(c) => bar(c);
+
+main() {
+  try {
+    var a = foo(new C());
+  } catch (e, s) {
+    print(e);
+    print("###");
+    print(e.stackTrace);
+    print("###");
+    print(s);
+    print("###");
+    Expect.isTrue(e is NoSuchMethodError);
+    Expect.stringEquals(e.stackTrace.toString(), s.toString());
+  }
+}
diff --git a/runtime/tests/vm/dart_2/extension_names_test.dart b/runtime/tests/vm/dart_2/extension_names_test.dart
new file mode 100644
index 0000000..77414da
--- /dev/null
+++ b/runtime/tests/vm/dart_2/extension_names_test.dart
@@ -0,0 +1,103 @@
+// 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.
+
+// Test that ensures stack traces have user friendly names from extension
+// functions.
+
+import 'dart:core';
+import "package:expect/expect.dart";
+
+class C<T> {
+  static int tracefunc() {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('C.tracefunc'));
+      Expect.isTrue(s.toString().contains('ext.sfld'));
+    }
+    return 10;
+  }
+
+  static int ld = C.tracefunc();
+}
+
+extension ext<T> on C<T> {
+  func() {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('ext.func'));
+    }
+  }
+
+  get prop {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('ext.prop'));
+    }
+  }
+
+  set prop(value) {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('ext.prop='));
+    }
+  }
+
+  operator +(val) {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('ext.+'));
+    }
+  }
+
+  operator -(val) {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('ext.-'));
+    }
+  }
+
+  static int sfld = C.tracefunc();
+  static sfunc() {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('ext.sfunc'));
+    }
+  }
+
+  static get sprop {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('ext.sprop'));
+    }
+  }
+
+  static set sprop(value) {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('ext.sprop='));
+    }
+  }
+}
+
+main() {
+  C<int> c = new C<int>();
+  c.func();
+  c.prop;
+  c.prop = 10;
+  ext.sfunc();
+  ext.sprop;
+  ext.sprop = 10;
+  ext.sfld;
+  c + 1;
+  c - 1;
+}
diff --git a/runtime/tests/vm/dart_2/extension_unnamed_names_test.dart b/runtime/tests/vm/dart_2/extension_unnamed_names_test.dart
new file mode 100644
index 0000000..a38966d
--- /dev/null
+++ b/runtime/tests/vm/dart_2/extension_unnamed_names_test.dart
@@ -0,0 +1,85 @@
+// 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.
+
+// Test that ensures stack traces have user friendly names from extension
+// functions.
+
+import 'dart:core';
+import "package:expect/expect.dart";
+
+class C {
+  static int tracefunc() {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('C.tracefunc'));
+      Expect.isTrue(s.toString().contains('ext.sfld'));
+    }
+    return 10;
+  }
+
+  static int ld = C.tracefunc();
+}
+
+extension on C {
+  func() {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('_extension#0.func'));
+    }
+  }
+
+  get prop {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('_extension#0.prop'));
+    }
+  }
+
+  set prop(value) {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('_extension#0.prop='));
+    }
+  }
+
+  operator +(val) {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('_extension#0.+'));
+    }
+  }
+
+  operator -(val) {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('_extension#0.-'));
+    }
+  }
+}
+
+extension on C {
+  bar() {
+    try {
+      throw "producing a stack trace";
+    } catch (e, s) {
+      Expect.isTrue(s.toString().contains('_extension#1.bar'));
+    }
+  }
+}
+
+main() {
+  C c = new C();
+  c.func();
+  c.prop;
+  c.prop = 10;
+  c + 1;
+  c - 1;
+  c.bar();
+}
diff --git a/runtime/tests/vm/dart_2/fuzz3608420507_regression_test.dart b/runtime/tests/vm/dart_2/fuzz3608420507_regression_test.dart
new file mode 100644
index 0000000..198ba7c
--- /dev/null
+++ b/runtime/tests/vm/dart_2/fuzz3608420507_regression_test.dart
@@ -0,0 +1,236 @@
+// The Dart Project Fuzz Tester (1.2).
+// Program generated as:
+//   dart dartfuzz.dart --seed 3608420507
+
+bool var0 = false;
+bool var1 = false;
+int var2 = -49;
+double var3 = double.maxFinite;
+String var4 = '5Cw)';
+List<int> var5 = [ 8589934591 ];
+Map<int, String> var6 = { 0 : '\u2665', 1 : '7\u{1f600}\u{1f600}t\u2665s', 2 : '\u2665&)I', 3 : 'G\u2665\u{1f600}e' };
+
+List<int> foo0(List<int> par1, int par2, int par3) {
+  var6 ??= var6;
+  var4 ??= '';
+  par1 = var5;
+  return [ -94 ];
+}
+
+int foo1(Map<int, String> par1, bool par2) {
+  print((-((((var4 == (var4).toLowerCase()) ? false : par2) ? (-(double.nan)) : (var1 ? (((false ? true : var1) ? (par2 ? ((-((double.maxFinite + var3)))).roundToDouble() : (-(var3))) : var3)).abs() : var3)))));
+  { List<int> loc0 = [ 95 ];
+    return var2;
+  }
+}
+
+String foo2() {
+  var3 += (true ? ((var3).remainder((var1 ? (-(0.20648281590433248)) : double.maxFinite)) + double.maxFinite) : (var3 * var3));
+  var2 %= (var2--);
+  var6 = var6;
+  return (var1 ? (false ? (((!(true)) || false) ? var4 : ((var6).isEmpty ? var4 : 'I#')) : var4) : 'XLH+c\u2665\u2665');
+}
+
+class X0  {
+
+  String fld0_0 = '\u2665';
+
+  String foo0_0() {
+    if (((({ 0 : 'e\u{1f600}mw', 1 : 'XZPq', 2 : '2l', 3 : 'EI' } ?? { 0 : '1fG', 1 : 'LV\u2665s\u{1f600}s\u2665', 2 : '\u{1f600}#', 3 : 'V' }) ?? { 0 : 'Z6' })).isNotEmpty) {
+      var4 ??= var4;
+    } else {
+      if ((var5 == ((var1 ? ((!((false ? var1 : (!((true && (var0 ? (false ? (false ? false : var1) : true) : var1))))))) ? var0 : var1) : false) ? ((([ -9223372030412324863, 21, -97 ] + var5) ?? ([ -9223372034707292160, -16, 6 ] + var5)) + ([ 83, -52, 18 ]).sublist((++var2))) : ((var1 ? var5 : var5)).sublist(foo1(var6, true))))) {
+        { int loc0 = (var2--);
+          if (false) {
+            fld0_0 ??= '\u26655JnN';
+            { Map<int, String> loc1 = var6;
+              return var4;
+            }
+          }
+        }
+      }
+    }
+    return '1f';
+  }
+
+  void run() {
+    if ((foo0([ -23, -74, 8589934591 ], (true ? (-(-9223372030412324863)) : var2), (var0 ? var2 : foo1({ 0 : 'kU0', 1 : '\u{1f600}', 2 : '\u2665M' }, (var1 && (var2).isEven)))) == [ 81, -9223372030412324865, 56, 62 ])) {
+      var6 ??= { 0 : '\u{1f600}\u{1f600}D\u26652', 1 : 'yJb\u26657+' };
+      return;
+    } else {
+      return;
+    }
+  }
+}
+
+class X1 extends X0 {
+
+  double fld1_0 = 0.6358731486904787;
+
+  bool foo1_0() {
+    { List<int> loc0 = (foo0(var5, (var1 ? foo1({ 0 : '\u26657@MJF', 1 : 'J' }, true) : (~((--var2)))), ([ 6442450945 ]).removeLast()) + foo0([ 58 ], (-(var2)), (var2++)));
+      print(foo0([ 69 ], 97, 63));
+      var5 = (((var5).sublist(var2)).sublist(var2)).sublist(((-(var3))).toInt());
+    }
+    var1 = (!(var0));
+    print((!(((-(double.infinity)) != double.minPositive))));
+    return var0;
+  }
+
+  List<int> foo1_1(bool par1, double par2, int par3) {
+    print(foo2());
+    fld1_0 = (-(double.infinity));
+    var0 = (([ -9223372036854775808, -19 ]).remove(foo1(var6, ((-((par3++))) < var2))) ? (var4 == 'Z72') : var1);
+    return foo0(foo0((foo0(([ 14, -79 ] ?? var5), (-(par3)), ((true ? true : (!(var1))) ? (var0 ? (-73 * par3) : 53) : 66)) + (var1 ? var5 : [ 17 ])), ((true ? var1 : (par1 ? (!(false)) : par1)) ? par3 : var2), foo1(var6, true)), foo1({ 0 : '1okmvo', 1 : 'Cyn', 2 : 'Iq\u{1f600}' }, (!((!(foo1_0()))))), (par1 ? (~((foo1_0() ? (--var2) : -1))) : (par1 ? var2 : 74)));
+  }
+
+  void run() {
+    super.run();
+    if ((false ? var0 : ({ 0 : 'SVw', 1 : '\u266576Q', 2 : '\u2665b&E' }).containsValue(var4))) {
+      return;
+    }
+  }
+}
+
+class X2 extends X1 {
+
+  String fld2_0 = '';
+  Map<int, String> fld2_1 = { 0 : '\u{1f600}\u2665F8', 1 : '\u{1f600}Kd', 2 : 'CW6e@d' };
+  Map<int, String> fld2_2 = { 0 : 'MM3Ogd\u{1f600}', 1 : 'D', 2 : 'I\u{1f600}2kH4\u{1f600}' };
+
+  List<int> foo2_0(String par1, double par2, int par3) {
+    var6 ??= ({ 0 : 'hVMi', 1 : '', 2 : 'S' } ?? { 0 : '9c\u{1f600}\u{1f600}\u{1f600}dW', 1 : 'g(Fu\u{1f600}bX', 2 : 'Pi2Z\u{1f600}', 3 : 'O\u2665' });
+    for (int loc0 = 0; loc0 < 84; loc0++) {
+      return (((!((!(var1)))) ? false : false) ? var5 : (false ? var5 : [ -9223372030412324864 ]));
+    }
+  }
+
+  bool foo2_1(int par1, String par2) {
+    { double loc0 = var3;
+      fld2_2 = { 0 : 'mWycw' };
+      var0 = true;
+    }
+    return (var1 ? ((par1++) != foo1(fld2_1, (!(false)))) : true);
+  }
+
+  Map<int, String> foo2_2() {
+    { String loc0 = 'Am 3x';
+      return fld2_1;
+    }
+  }
+
+  double foo2_3(List<int> par1) {
+    var6 = foo2_2();
+    if (var1) {
+      print({ 0 : 'K\u{1f600}\u{1f600}\u2665\u{1f600}', 1 : 'lh34LP' });
+      print('im\u2665');
+      { String loc0 = (var1 ? ('y\u2665E4UQQ' + ('Q0J2  y').substring(-78)) : foo2());
+        { bool loc1 = (((-(-92))).isOdd && (!((!(false)))));
+          print(var3);
+          if ((var2).isEven) {
+            var3 /= 0.536905815119827;
+            var2 |= (++var2);
+            { double loc2 = var3;
+              { int loc3 = foo1({ 0 : 'G(', 1 : '\u{1f600}&a9t', 2 : '\u{1f600}TF', 3 : '\u2665m-' }, true);
+                var4 ??= (loc0).substring(((((par1 ?? [ -9223372034707292159, 44, -1, 2147483648 ])).remove((false ? -9223372032559808511 : (((++loc3) ~/ (2147483649 | 54))).ceil())) || false) ? (~((loc3++))) : (foo1(fld2_1, (var6 == { 0 : '', 1 : 'KP8' })) >> 50)));
+                if ((true != ((!(loc1)) ? ((-(40)) >= -32) : foo2_1(9223372034707292159, (foo2_2()).remove((((-((loc3).abs())) ~/ 42)).toSigned(-27)))))) {
+                  if (loc1) {
+                    return loc2;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  void run() {
+    super.run();
+    fld2_2 ??= (var1 ? fld2_2 : { 0 : 'M ', 1 : 'zG', 2 : 'c' });
+    if (((foo2_1(var2, var4) ? ((false ? ((var1 || (true && foo2_1(9223372032559808512, var4))) ? var5 : var5) : ([ -52 ]).sublist((true ? 24 : var2)))).remove(9223372036854775807) : false) && var0)) {
+      for (int loc0 = 0; loc0 < 57; loc0++) {
+        var5 ??= (([ 26, 82, -9223372032559808512 ]).sublist((-22 >> 27)) + var5);
+        var6 ??= fld2_2;
+        fld2_0 ??= foo2();
+        for (int loc1 = 0; loc1 < 67; loc1++) {
+          for (int loc2 = 0; loc2 < 31; loc2++) {
+            var4 = foo2();
+            { bool loc3 = foo2_1((-(((!(var0)) ? foo1(fld2_2, true) : foo1((foo2_1((false ? ([ -74, -49, -79, 2 ]).length : 9223372034707292161), 'y') ? ({ 0 : '\u{1f600}Jf', 1 : 'NF' } ?? { 0 : '1 y\u{1f600}\u26659' }) : { 0 : '6MO\u2665A\u{1f600})', 1 : 'p\u{1f600}\u{1f600}6J', 2 : 'sg)' }), var0)))), fld2_0);
+              var5 ??= var5;
+              for (int loc4 = 0; loc4 < 78; loc4++) {
+                return;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+class X3 extends X2 {
+
+  List<int> fld3_0 = [ -4, -4, -79, 34 ];
+
+  bool foo3_0(int par1, List<int> par2) {
+    return (((var1 ? 60 : var2)).isOdd ? ((var1 ? fld3_0 : par2)).remove(foo1(var6, (var1 != var0))) : (false ? false : (('GB').substring((++var2))).endsWith(('p\u{1f600}f1u\u2665' ?? 'L\u2665OY!ui'))));
+  }
+
+  int foo3_1(List<int> par1, int par2, bool par3) {
+    if (true) {
+      return par2;
+    }
+  }
+
+  List<int> foo3_2(List<int> par1, List<int> par2) {
+    for (int loc0 = 0; loc0 < 68; loc0++) {
+      { String loc1 = foo2();
+        var2 -= (~((false ? (~((false ? loc0 : -9223372034707292161))) : (var2--))));
+        for (int loc2 = 0; loc2 < 95; loc2++) {
+          var3 ??= ((false ? var3 : (-(var3))) * (var3 ?? ((-(double.negativeInfinity))).remainder((var3 * double.nan))));
+          if ((loc1).endsWith('')) {
+            print((((!(foo3_0(-47, par2))) ? par1 : ([ 2, -52, -9223372032559808512, 2147483649 ] + par2))).removeLast());
+            var2 -= foo3_1((foo0((foo0(((var0 ? [ -4294967295, -95, -22, 27 ] : [ 38 ]) + [ 2147483647 ]), (var3).truncate(), var2) ?? par1), (~(loc0)), 53)).sublist((--loc0)), ((loc2++) ?? ((!((false || var0))) ? (69 + (47 & (foo0([ 24, -98, 2147483647, -48 ], loc0, 47)).indexOf(37))) : (var4).compareTo((var1 ? loc1 : loc1)))), (foo3_0((var2 + (~(loc2))), foo0(([ 20, 13 ] + par2), loc0, var2)) && (loc1).isNotEmpty));
+            for (int loc3 = 0; loc3 < 62; loc3++) {
+              for (int loc4 = 0; loc4 < 61; loc4++) {
+                return fld3_0;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  bool foo3_3(List<int> par1, Map<int, String> par2, Map<int, String> par3) {
+    for (int loc0 = 0; loc0 < 16; loc0++) {
+      if (foo3_0((-((var0 ? 8589934591 : 65))), foo3_2(fld3_0, (fld3_0).sublist((true ? (0.23821360229648214).toInt() : var2))))) {
+        par1 ??= (((var4 == '&Tze') ? ([ -27, 23, -40 ] != par1) : true) ? [ 23, 21, 4294967295 ] : fld3_0);
+        print((par2 ?? { 0 : '\u{1f600}\u2665\u{1f600}Jpj&', 1 : '', 2 : '', 3 : '' }));
+        var4 = var4;
+        var1 = (((~(((++loc0) ?? loc0)))).isEven == false);
+      }
+      for (int loc1 = 0; loc1 < 93; loc1++) {
+        var4 = 'gngT';
+        return (foo3_0(((((var3 * (loc1).ceilToDouble()) - ((0.6230577340230226 > var3) ? (var3 - var3) : double.maxFinite)) - double.nan)).ceil(), [ 0 ]) ? ((!(var0)) && foo3_0((-(-59)), [ 8, 1, 12, -9223372030412324863 ])) : foo3_0(foo3_1(foo3_2([ 2, -33, -72 ], [ 30, 58, 0 ]), loc1, (!(var1))), var5));
+      }
+    }
+  }
+
+  void run() {
+    super.run();
+    var1 = (var6).containsKey((var0 ? (30).floor() : (~((++var2)))));
+  }
+}
+
+main() {
+  try {
+    new X3().run();
+  } catch (e) {
+    print('throws');
+  } finally {
+    print('$var0\n$var1\n$var2\n$var3\n$var4\n$var5\n$var6\n');
+  }
+}
diff --git a/runtime/tests/vm/dart_2/generic_field_invocation_test.dart b/runtime/tests/vm/dart_2/generic_field_invocation_test.dart
new file mode 100644
index 0000000..6149695
--- /dev/null
+++ b/runtime/tests/vm/dart_2/generic_field_invocation_test.dart
@@ -0,0 +1,20 @@
+// 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.
+//
+// This test verifies that we invoke closure in fields correctly when going
+// through the slow NSM path rather than the field invocation dispatchers.
+//
+// VMOptions=--no-lazy-dispatchers
+
+import 'package:expect/expect.dart';
+
+class C {
+  dynamic field;
+}
+
+main() {
+  var c = C();
+  c.field = <T>(T x) => x.hashCode;
+  Expect.equals(3, c.field<dynamic>(3));
+}
diff --git a/runtime/tests/vm/dart_2/hello_fuchsia_test.dart b/runtime/tests/vm/dart_2/hello_fuchsia_test.dart
new file mode 100644
index 0000000..818ee25
--- /dev/null
+++ b/runtime/tests/vm/dart_2/hello_fuchsia_test.dart
@@ -0,0 +1,517 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "dart:convert";
+import "dart:io";
+
+testAddressParse() async {
+  print(new InternetAddress("1.0.2.3").rawAddress);
+  print(new InternetAddress("1.0.2.3").type);
+
+  print(new InternetAddress("::1").rawAddress);
+  print(new InternetAddress("::1").type);
+
+  try {
+    print(new InternetAddress("localhost"));
+  } catch (e) {
+    print(e);
+  }
+}
+
+testSimpleBind() async {
+  var s = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  print("port = ${s.port}");
+  await s.close();
+}
+
+testSimpleConnect() async {
+  var server = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  print("server port = ${server.port}");
+  server.listen((socket) {
+    print("listen socket port = ${socket.port}");
+    socket.close();
+  });
+  var socket = await RawSocket.connect("127.0.0.1", server.port);
+  print("socket port = ${socket.port}");
+  if (socket.remoteAddress.address != "127.0.0.1" ||
+      socket.remoteAddress.type != InternetAddressType.IP_V4) {
+    throw "Bad remote address ${socket.remoteAddress}";
+  }
+  if (socket.remotePort is! int) {
+    throw "Bad remote port ${socket.remotePort}";
+  }
+  await server.close();
+  await socket.close();
+}
+
+testSimpleReadWriteClose() async {
+  // This test creates a server and a client connects. The client then
+  // writes and the server echos. When the client finishes fully reading the
+  // echo, it closes the socket. When the server receives the close event, it
+  // closes its end of the socket too.
+
+  const messageSize = 1000;
+  int serverReadCount = 0;
+  int clientReadCount = 0;
+
+  List<int> createTestData() {
+    return new List<int>.generate(messageSize, (index) => index & 0xff);
+  }
+
+  void verifyTestData(List<int> data) {
+    assert(messageSize == data.length);
+    List<int> expected = createTestData();
+    for (int i = 0; i < messageSize; i++) {
+      assert(expected[i] == data[i]);
+    }
+  }
+
+  var server = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  server.listen((client) {
+    int bytesRead = 0;
+    int bytesWritten = 0;
+    bool closedEventReceived = false;
+    List<int> data = new List<int>(messageSize);
+    bool doneReading = false;
+
+    client.writeEventsEnabled = false;
+    client.listen((event) {
+      switch (event) {
+        case RawSocketEvent.READ:
+          if (doneReading) {
+            break;
+          }
+          print("client READ event bytesRead = $bytesRead");
+          assert(bytesWritten == 0);
+          assert(client.available() > 0);
+          var buffer = client.read(200);
+          print("client READ event: read ${buffer.length} more bytes");
+          data.setRange(bytesRead, bytesRead + buffer.length, buffer);
+          bytesRead += buffer.length;
+          if (bytesRead == data.length) {
+            verifyTestData(data);
+            print("client READ event. Done reading, enabling writes");
+            client.writeEventsEnabled = true;
+            doneReading = true;
+          }
+          break;
+        case RawSocketEvent.WRITE:
+          assert(!client.writeEventsEnabled);
+          bytesWritten +=
+              client.write(data, bytesWritten, data.length - bytesWritten);
+          print("client WRITE event: $bytesWritten written");
+          if (bytesWritten < data.length) {
+            client.writeEventsEnabled = true;
+          }
+          if (bytesWritten == data.length) {
+            print("client WRITE event: done writing.");
+          }
+          break;
+        case RawSocketEvent.READ_CLOSED:
+          print("client READ_CLOSED event");
+          client.close();
+          server.close();
+          break;
+        case RawSocketEvent.CLOSED:
+          assert(!closedEventReceived);
+          print("client CLOSED event");
+          closedEventReceived = true;
+          break;
+        default:
+          throw "Unexpected event $event";
+      }
+    }, onError: (e) {
+      print("client ERROR $e");
+    }, onDone: () {
+      assert(closedEventReceived);
+    });
+  });
+
+  {
+    var completer = new Completer();
+    var socket = await RawSocket.connect("127.0.0.1", server.port);
+    int bytesRead = 0;
+    int bytesWritten = 0;
+    bool closedEventReceived = false;
+    List<int> data = createTestData();
+
+    socket.listen((event) {
+      switch (event) {
+        case RawSocketEvent.READ:
+          assert(socket.available() > 0);
+          print("server READ event: ${bytesRead} read");
+          var buffer = socket.read();
+          print("server READ event: read ${buffer.length} more bytes");
+          data.setRange(bytesRead, bytesRead + buffer.length, buffer);
+          bytesRead += buffer.length;
+          if (bytesRead == messageSize) {
+            print("server READ event: done reading");
+            socket.close();
+          }
+          break;
+        case RawSocketEvent.WRITE:
+          assert(bytesRead == 0);
+          assert(!socket.writeEventsEnabled);
+          bytesWritten +=
+              socket.write(data, bytesWritten, data.length - bytesWritten);
+          print("server WRITE event: ${bytesWritten} written");
+          if (bytesWritten < data.length) {
+            socket.writeEventsEnabled = true;
+          } else {
+            print("server WRITE event: done writing");
+            data = new List<int>(messageSize);
+          }
+          break;
+        case RawSocketEvent.READ_CLOSED:
+          print("server READ_CLOSED event");
+          verifyTestData(data);
+          socket.close();
+          break;
+        case RawSocketEvent.CLOSED:
+          assert(!closedEventReceived);
+          print("server CLOSED event");
+          closedEventReceived = true;
+          break;
+        default:
+          throw "Unexpected event $event";
+      }
+    }, onError: (e) {
+      print("server ERROR $e");
+    }, onDone: () {
+      assert(closedEventReceived);
+      completer.complete(null);
+    });
+
+    return completer.future;
+  }
+}
+
+testSimpleReadWriteShutdown({bool dropReads}) async {
+  // This test creates a server and a client connects. The client then
+  // writes and the server echos. When the server has finished its
+  // echo it half-closes. When the client gets the close event is
+  // closes fully.
+
+  const messageSize = 1000;
+  int serverReadCount = 0;
+  int clientReadCount = 0;
+
+  List<int> createTestData() {
+    return new List<int>.generate(messageSize, (index) => index & 0xff);
+  }
+
+  void verifyTestData(List<int> data) {
+    assert(messageSize == data.length);
+    List<int> expected = createTestData();
+    for (int i = 0; i < messageSize; i++) {
+      assert(expected[i] == data[i]);
+    }
+  }
+
+  var server = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  server.listen((client) {
+    int bytesRead = 0;
+    int bytesWritten = 0;
+    bool closedEventReceived = false;
+    List<int> data = new List<int>(messageSize);
+    bool doneReading = false;
+
+    client.writeEventsEnabled = false;
+    client.listen((event) {
+      switch (event) {
+        case RawSocketEvent.READ:
+          if (doneReading) {
+            break;
+          }
+          if (dropReads) {
+            if (serverReadCount != 10) {
+              serverReadCount++;
+              break;
+            } else {
+              serverReadCount = 0;
+            }
+          }
+          print("client READ event bytesRead = $bytesRead");
+          assert(bytesWritten == 0);
+          assert(client.available() > 0);
+          var buffer = client.read(200);
+          print("client READ event: read ${buffer.length} more bytes");
+          data.setRange(bytesRead, bytesRead + buffer.length, buffer);
+          bytesRead += buffer.length;
+          if (bytesRead == data.length) {
+            verifyTestData(data);
+            print("client READ event. Done reading, enabling writes");
+            client.writeEventsEnabled = true;
+            doneReading = true;
+          }
+          break;
+        case RawSocketEvent.WRITE:
+          assert(!client.writeEventsEnabled);
+          bytesWritten +=
+              client.write(data, bytesWritten, data.length - bytesWritten);
+          print("client WRITE event: $bytesWritten written");
+          if (bytesWritten < data.length) {
+            client.writeEventsEnabled = true;
+          }
+          if (bytesWritten == data.length) {
+            print("client WRITE event: done writing.");
+            client.shutdown(SocketDirection.SEND);
+          }
+          break;
+        case RawSocketEvent.READ_CLOSED:
+          print("client READ_CLOSED event");
+          server.close();
+          break;
+        case RawSocketEvent.CLOSED:
+          assert(!closedEventReceived);
+          print("client CLOSED event");
+          closedEventReceived = true;
+          break;
+        default:
+          throw "Unexpected event $event";
+      }
+    }, onDone: () {
+      assert(closedEventReceived);
+    });
+  });
+
+  {
+    var completer = new Completer();
+    var socket = await RawSocket.connect("127.0.0.1", server.port);
+    int bytesRead = 0;
+    int bytesWritten = 0;
+    bool closedEventReceived = false;
+    List<int> data = createTestData();
+
+    socket.listen((event) {
+      switch (event) {
+        case RawSocketEvent.READ:
+          assert(socket.available() > 0);
+          if (dropReads) {
+            if (clientReadCount != 10) {
+              clientReadCount++;
+              break;
+            } else {
+              clientReadCount = 0;
+            }
+          }
+          print("server READ event: ${bytesRead} read");
+          var buffer = socket.read();
+          print("server READ event: read ${buffer.length} more bytes");
+          data.setRange(bytesRead, bytesRead + buffer.length, buffer);
+          bytesRead += buffer.length;
+          break;
+        case RawSocketEvent.WRITE:
+          assert(bytesRead == 0);
+          assert(!socket.writeEventsEnabled);
+          bytesWritten +=
+              socket.write(data, bytesWritten, data.length - bytesWritten);
+          print("server WRITE event: ${bytesWritten} written");
+          if (bytesWritten < data.length) {
+            socket.writeEventsEnabled = true;
+          } else {
+            print("server WRITE event: done writing");
+            data = new List<int>(messageSize);
+          }
+          break;
+        case RawSocketEvent.READ_CLOSED:
+          print("server READ_CLOSED event");
+          verifyTestData(data);
+          socket.close();
+          break;
+        case RawSocketEvent.CLOSED:
+          assert(!closedEventReceived);
+          print("server CLOSED event");
+          closedEventReceived = true;
+          break;
+        default:
+          throw "Unexpected event $event";
+      }
+    }, onDone: () {
+      assert(closedEventReceived);
+      completer.complete(null);
+    });
+
+    return completer.future;
+  }
+}
+
+Future testProcess() async {
+  String exe = Platform.resolvedExecutable;
+  print("Running $exe --version");
+  Process p = await Process.start(exe, ["--version"]);
+  p.stderr.transform(utf8.decoder).listen(print);
+  int code = await p.exitCode;
+  print("$exe --version exited with code $code");
+}
+
+void testProcessRunSync() {
+  String exe = Platform.resolvedExecutable;
+  print("Running $exe --version");
+  var result = Process.runSync(exe, ["--version"]);
+  print("$exe --version exited with code ${result.exitCode}");
+  print("$exe --version had stdout = '${result.stdout}'");
+  print("$exe --version had stderr = '${result.stderr}'");
+}
+
+Future testKill() async {
+  String exe = Platform.resolvedExecutable;
+  String script = Platform.script.path;
+  print("Running $exe $script");
+  Process p = await Process.start(exe, [script, "infinite-loop"]);
+  await new Future.delayed(const Duration(seconds: 1));
+  p.kill();
+  int code = await p.exitCode;
+  print("$exe $script exited with code $code");
+}
+
+Future testLs(String path) async {
+  Stream<FileSystemEntity> stream = (new Directory(path)).list();
+  await for (FileSystemEntity fse in stream) {
+    print(fse.path);
+  }
+}
+
+void testPlatformEnvironment() {
+  Map<String, String> env = Platform.environment;
+  for (String k in env.keys) {
+    String v = env[k];
+    print("$k = '$v'");
+  }
+}
+
+Future testCopy() async {
+  final String sourceName = "foo";
+  final String destName = "bar";
+  Directory tmp = await Directory.systemTemp.createTemp("testCopy");
+  File sourceFile = new File("${tmp.path}/$sourceName");
+  File destFile = new File("${tmp.path}/$destName");
+  List<int> data = new List<int>.generate(10 * 1024, (int i) => i & 0xff);
+  await sourceFile.writeAsBytes(data);
+  await sourceFile.copy(destFile.path);
+  List<int> resultData = await destFile.readAsBytes();
+  assert(data.length == resultData.length);
+  for (int i = 0; i < data.length; i++) {
+    assert(data[i] == resultData[i]);
+  }
+  await sourceFile.delete();
+  await destFile.delete();
+  await tmp.delete();
+}
+
+Future testRecursiveDelete() async {
+  Directory tmp0 = await Directory.systemTemp.createTemp("testRD");
+  Directory tmp1 = await tmp0.createTemp("testRD");
+  Directory tmp2 = await tmp1.createTemp("testRD");
+  File file0 = new File("${tmp0.path}/file");
+  File file1 = new File("${tmp1.path}/file");
+  File file2 = new File("${tmp2.path}/file");
+  List<int> data = new List<int>.generate(10 * 1024, (int i) => i & 0xff);
+  await file0.writeAsBytes(data);
+  await file1.writeAsBytes(data);
+  await file2.writeAsBytes(data);
+
+  await tmp0.delete(recursive: true);
+
+  assert(!await file2.exists());
+  assert(!await file1.exists());
+  assert(!await file0.exists());
+  assert(!await tmp2.exists());
+  assert(!await tmp1.exists());
+  assert(!await tmp0.exists());
+}
+
+bool testFileOpenDirectoryFails() {
+  File dir = new File(Directory.systemTemp.path);
+  try {
+    dir.openSync();
+  } on FileSystemException catch (e) {
+    return true;
+  } catch (e) {
+    print("Unexpected Exception: $e");
+    return false;
+  }
+}
+
+
+Future testListInterfaces() async {
+  List<NetworkInterface> interfaces = await NetworkInterface.list();
+  print('Found ${interfaces.length} interfaces:');
+  for (var iface in interfaces) {
+    print('\t$iface');
+  }
+}
+
+main(List<String> args) async {
+  if (args.length >= 1) {
+    if (args[0] == "infinite-loop") {
+      while (true);
+    }
+  }
+
+  print("Hello, Fuchsia!");
+
+  print("testAddressParse");
+  await testAddressParse();
+  print("testAddressParse done");
+
+  print("testSimpleBind");
+  await testSimpleBind();
+  print("testSimpleBind done");
+
+  print("testSimpleConnect");
+  await testSimpleConnect();
+  print("testSimpleConnect done");
+
+  print("testSimpleReadWriteClose");
+  await testSimpleReadWriteClose();
+  print("testSimpleReadWriteClose done");
+
+  print("testSimpleReadWriteShutdown");
+  await testSimpleReadWriteShutdown(dropReads: false);
+  print("testSimpleReadWriteShutdown done");
+
+  print("lsTest");
+  await testLs("/");
+  print("lsTest done");
+
+  print("testPlatformEnvironment");
+  testPlatformEnvironment();
+  print("testPlatformEnvironment done");
+
+  print("testProcess");
+  await testProcess();
+  print("testProcess done");
+
+  print("testProcessRunSync");
+  testProcessRunSync();
+  print("testProcessRunSync done");
+
+  print("testKill");
+  await testKill();
+  print("testKill done");
+
+  print("testCopy");
+  await testCopy();
+  print("testCopy done");
+
+  print("testRecursiveDelete");
+  await testRecursiveDelete();
+  print("testRecursiveDelete done");
+
+  print("testFileOpenDirectoryFails");
+  bool result = testFileOpenDirectoryFails();
+  if (result) {
+    print("testFileOpenDirectoryFails done");
+  } else {
+    print("testFileOpenDirectoryFails FAILED");
+  }
+
+  print('testListInterfaces');
+  await testListInterfaces();
+  print('testListInterfaces done');
+
+  print("Goodbyte, Fuchsia!");
+}
diff --git a/runtime/tests/vm/dart_2/hello_world_test.dart b/runtime/tests/vm/dart_2/hello_world_test.dart
new file mode 100644
index 0000000..8c9c377
--- /dev/null
+++ b/runtime/tests/vm/dart_2/hello_world_test.dart
@@ -0,0 +1,10 @@
+// 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.
+
+// Classic "Hello, world!". Used in the VM build (runtime/bin/BUILD.gn) as
+// a tiny script for precompilation.
+
+main() {
+  print("Hello, world!");
+}
diff --git a/runtime/tests/vm/dart_2/il_round_trip_deserialization_test.dart b/runtime/tests/vm/dart_2/il_round_trip_deserialization_test.dart
new file mode 100644
index 0000000..0a6f667
--- /dev/null
+++ b/runtime/tests/vm/dart_2/il_round_trip_deserialization_test.dart
@@ -0,0 +1,20 @@
+// 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=
+// VMOptions=--early-round-trip-serialization
+// VMOptions=--late-round-trip-serialization
+// VMOptions=--early-round-trip-serialization --late-round-trip-serialization
+// VMOptions=--deterministic
+// VMOptions=--deterministic --early-round-trip-serialization
+// VMOptions=--deterministic --late-round-trip-serialization
+// VMOptions=--deterministic --early-round-trip-serialization --late-round-trip-serialization
+
+// Just use the existing hello world test for now.
+// TODO(36882): Add more interesting code as the deserializer grows.
+import 'hello_world_test.dart' as test;
+
+main(args) {
+  test.main();
+}
diff --git a/runtime/tests/vm/dart_2/in_memory_elf_test.dart b/runtime/tests/vm/dart_2/in_memory_elf_test.dart
new file mode 100644
index 0000000..958dd73
--- /dev/null
+++ b/runtime/tests/vm/dart_2/in_memory_elf_test.dart
@@ -0,0 +1,12 @@
+// 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=--force-load-elf-from-memory
+//
+// Tests the in-memory ELF loader, which loads an ELF image without an
+// underlying file.
+
+main() {
+  print("Test successful.");
+}
diff --git a/runtime/tests/vm/dart_2/inline_stack_frame_test.dart b/runtime/tests/vm/dart_2/inline_stack_frame_test.dart
new file mode 100644
index 0000000..68c8584
--- /dev/null
+++ b/runtime/tests/vm/dart_2/inline_stack_frame_test.dart
@@ -0,0 +1,96 @@
+// 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=--optimization_counter_threshold=10 --no-background-compilation
+
+// This test tries to verify that we produce the correct stack trace when
+// throwing exceptions even when functions are inlined.
+// The test invokes a bunch of functions and then does a throw. There is a
+// catch at the outer function which uses the stack trace produced to return
+// a string. The test then verifies that the stack trace contains each
+// method in the invocation chain. The test is run during warmup to ensure
+// unoptimized code produces the correct result and is then run
+// in a loop to ensure optimization kicks in and some inlining is done.
+// Note: it appears that functions which have a throw are not inlined (func4)
+//       and functions that have try/catch in them are not optimized (func1).
+//       func2 is not inlined as func1 has not been optimized.
+
+class Test {
+  @pragma("vm:entry-point")
+  String func1(var k) {
+    try {
+      for (var i = 0; i <= 50; i++) {
+        func2(i * k);
+      }
+      return "";
+    } catch (e, stacktrace) {
+      var result = e + "\n" + stacktrace.toString();
+      return result;
+    }
+  }
+
+  @pragma("vm:entry-point")
+  int func2(var i) {
+    var result = 0;
+    for (var k = 0; k <= 10; k++) {
+      result += func3(i + k);
+    }
+    return result;
+  }
+
+  @pragma("vm:entry-point")
+  int func3(var i) {
+    var result = 0;
+    for (var l = 0; l <= 1; l++) {
+      result += func4(i + l);
+    }
+    return result;
+  }
+
+  @pragma("vm:entry-point")
+  int func4(var i) {
+    var result = 0;
+    for (var j = 0; j <= 10; j++) {
+      result += func5(i + j);
+    }
+    return result;
+  }
+
+  @pragma("vm:entry-point")
+  int func5(var i) {
+    if (i >= 520) throw "show me inlined functions";
+    return i;
+  }
+}
+
+expectHasSubstring(String string, String substring) {
+  if (!string.contains(substring)) {
+    var sb = new StringBuffer();
+    sb.writeln("Expect string:");
+    sb.writeln(string);
+    sb.writeln("To have substring:");
+    sb.writeln(substring);
+    throw new Exception(sb.toString());
+  }
+}
+
+main() {
+  var x = new Test();
+  var result = x.func1(100000);
+  expectHasSubstring(result, "show me inlined functions");
+  expectHasSubstring(result, "Test.func1");
+  expectHasSubstring(result, "Test.func2");
+  expectHasSubstring(result, "Test.func3");
+  expectHasSubstring(result, "Test.func4");
+  expectHasSubstring(result, "Test.func5");
+  for (var i = 0; i <= 10; i++) {
+    result = x.func1(i);
+  }
+  expectHasSubstring(result, "show me inlined functions");
+  expectHasSubstring(result, "Test.func1");
+  expectHasSubstring(result, "Test.func2");
+  expectHasSubstring(result, "Test.func3");
+  expectHasSubstring(result, "Test.func4");
+  expectHasSubstring(result, "Test.func5");
+}
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
new file mode 100644
index 0000000..7f99459
--- /dev/null
+++ b/runtime/tests/vm/dart_2/internal_platform_library_import_test.dart
@@ -0,0 +1,10 @@
+// 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:_internal';
+
+void main(List<String> args) {
+  // Ensure we can import and use members of `dart:_internal`.
+  print(unsafeCast);
+}
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
new file mode 100644
index 0000000..e45e045
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolate_send_function_types_test.dart
@@ -0,0 +1,47 @@
+// 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:isolate';
+
+import 'package:expect/expect.dart';
+
+class A<T> {}
+
+main(args) async {
+  final x = A<void Function()>();
+
+  {
+    final caughtErrorCompleter = Completer<String>();
+    await runZonedGuarded(() {
+      Isolate.spawn(isolate, x);
+    }, (e, s) {
+      caughtErrorCompleter.complete(e.toString());
+    });
+    Expect.equals(
+        await caughtErrorCompleter.future,
+        "Invalid argument(s): Illegal argument in isolate message : "
+        "(function types are not supported yet)");
+  }
+
+  void genericFunc<T>() async {
+    final y = A<void Function(T)>();
+    final caughtErrorCompleter = Completer<String>();
+    await runZoned(() {
+      Isolate.spawn(isolate, y);
+    }, onError: (e) {
+      caughtErrorCompleter.complete(e.toString());
+    });
+    Expect.equals(
+        await caughtErrorCompleter.future,
+        "Invalid argument(s): Illegal argument in isolate message : "
+        "(function types are not supported yet)");
+  }
+
+  await genericFunc<int>();
+}
+
+void isolate(A foo) async {
+  print('Tick: ${foo}');
+}
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
new file mode 100644
index 0000000..902d5ef
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/enum_isolate_regress41824_test.dart
@@ -0,0 +1,633 @@
+// 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:isolate';
+
+import 'package:expect/expect.dart';
+
+enum Command {
+  kValue0,
+  kValue1,
+  kValue2,
+  kValue3,
+  kValue4,
+  kValue5,
+  kValue6,
+  kValue7,
+  kValue8,
+  kValue9,
+  kValue10,
+  kValue11,
+  kValue12,
+  kValue13,
+  kValue14,
+  kValue15,
+  kValue16,
+  kValue17,
+  kValue18,
+  kValue19,
+  kValue20,
+  kValue21,
+  kValue22,
+  kValue23,
+  kValue24,
+  kValue25,
+  kValue26,
+  kValue27,
+  kValue28,
+  kValue29,
+  kValue30,
+  kValue31,
+  kValue32,
+  kValue33,
+  kValue34,
+  kValue35,
+  kValue36,
+  kValue37,
+  kValue38,
+  kValue39,
+  kValue40,
+  kValue41,
+  kValue42,
+  kValue43,
+  kValue44,
+  kValue45,
+  kValue46,
+  kValue47,
+  kValue48,
+  kValue49,
+  kValue50,
+  kValue51,
+  kValue52,
+  kValue53,
+  kValue54,
+  kValue55,
+  kValue56,
+  kValue57,
+  kValue58,
+  kValue59,
+  kValue60,
+  kValue61,
+  kValue62,
+  kValue63,
+  kValue64,
+  kValue65,
+  kValue66,
+  kValue67,
+  kValue68,
+  kValue69,
+  kValue70,
+  kValue71,
+  kValue72,
+  kValue73,
+  kValue74,
+  kValue75,
+  kValue76,
+  kValue77,
+  kValue78,
+  kValue79,
+  kValue80,
+  kValue81,
+  kValue82,
+  kValue83,
+  kValue84,
+  kValue85,
+  kValue86,
+  kValue87,
+  kValue88,
+  kValue89,
+  kValue90,
+  kValue91,
+  kValue92,
+  kValue93,
+  kValue94,
+  kValue95,
+  kValue96,
+  kValue97,
+  kValue98,
+  kValue99,
+  kValue100,
+  kValue101,
+  kValue102,
+  kValue103,
+  kValue104,
+  kValue105,
+  kValue106,
+  kValue107,
+  kValue108,
+  kValue109,
+  kValue110,
+  kValue111,
+  kValue112,
+  kValue113,
+  kValue114,
+  kValue115,
+  kValue116,
+  kValue117,
+  kValue118,
+  kValue119,
+  kValue120,
+  kValue121,
+  kValue122,
+  kValue123,
+  kValue124,
+  kValue125,
+  kValue126,
+  kValue127,
+  kValue128,
+  kValue129,
+  kValue130,
+  kValue131,
+  kValue132,
+  kValue133,
+  kValue134,
+  kValue135,
+  kValue136,
+  kValue137,
+  kValue138,
+  kValue139,
+  kValue140,
+  kValue141,
+  kValue142,
+  kValue143,
+  kValue144,
+  kValue145,
+  kValue146,
+  kValue147,
+  kValue148,
+  kValue149,
+  kValue150,
+  kValue151,
+  kValue152,
+  kValue153,
+  kValue154,
+  kValue155,
+  kValue156,
+  kValue157,
+  kValue158,
+  kValue159,
+  kValue160,
+  kValue161,
+  kValue162,
+  kValue163,
+  kValue164,
+  kValue165,
+  kValue166,
+  kValue167,
+  kValue168,
+  kValue169,
+  kValue170,
+  kValue171,
+  kValue172,
+  kValue173,
+  kValue174,
+  kValue175,
+  kValue176,
+  kValue177,
+  kValue178,
+  kValue179,
+  kValue180,
+  kValue181,
+  kValue182,
+  kValue183,
+  kValue184,
+  kValue185,
+  kValue186,
+  kValue187,
+  kValue188,
+  kValue189,
+  kValue190,
+  kValue191,
+  kValue192,
+  kValue193,
+  kValue194,
+  kValue195,
+  kValue196,
+  kValue197,
+  kValue198,
+  kValue199,
+  kValue200
+}
+
+void tryClose(List list) {
+  final List commands = list[0];
+  final SendPort sendPort = list[1];
+  sendPort.send(identical(commands[0], Command.kValue0) &&
+      identical(commands[1], Command.kValue1) &&
+      identical(commands[2], Command.kValue2) &&
+      identical(commands[3], Command.kValue3) &&
+      identical(commands[4], Command.kValue4) &&
+      identical(commands[5], Command.kValue5) &&
+      identical(commands[6], Command.kValue6) &&
+      identical(commands[7], Command.kValue7) &&
+      identical(commands[8], Command.kValue8) &&
+      identical(commands[9], Command.kValue9) &&
+      identical(commands[10], Command.kValue10) &&
+      identical(commands[11], Command.kValue11) &&
+      identical(commands[12], Command.kValue12) &&
+      identical(commands[13], Command.kValue13) &&
+      identical(commands[14], Command.kValue14) &&
+      identical(commands[15], Command.kValue15) &&
+      identical(commands[16], Command.kValue16) &&
+      identical(commands[17], Command.kValue17) &&
+      identical(commands[18], Command.kValue18) &&
+      identical(commands[19], Command.kValue19) &&
+      identical(commands[20], Command.kValue20) &&
+      identical(commands[21], Command.kValue21) &&
+      identical(commands[22], Command.kValue22) &&
+      identical(commands[23], Command.kValue23) &&
+      identical(commands[24], Command.kValue24) &&
+      identical(commands[25], Command.kValue25) &&
+      identical(commands[26], Command.kValue26) &&
+      identical(commands[27], Command.kValue27) &&
+      identical(commands[28], Command.kValue28) &&
+      identical(commands[29], Command.kValue29) &&
+      identical(commands[30], Command.kValue30) &&
+      identical(commands[31], Command.kValue31) &&
+      identical(commands[32], Command.kValue32) &&
+      identical(commands[33], Command.kValue33) &&
+      identical(commands[34], Command.kValue34) &&
+      identical(commands[35], Command.kValue35) &&
+      identical(commands[36], Command.kValue36) &&
+      identical(commands[37], Command.kValue37) &&
+      identical(commands[38], Command.kValue38) &&
+      identical(commands[39], Command.kValue39) &&
+      identical(commands[40], Command.kValue40) &&
+      identical(commands[41], Command.kValue41) &&
+      identical(commands[42], Command.kValue42) &&
+      identical(commands[43], Command.kValue43) &&
+      identical(commands[44], Command.kValue44) &&
+      identical(commands[45], Command.kValue45) &&
+      identical(commands[46], Command.kValue46) &&
+      identical(commands[47], Command.kValue47) &&
+      identical(commands[48], Command.kValue48) &&
+      identical(commands[49], Command.kValue49) &&
+      identical(commands[50], Command.kValue50) &&
+      identical(commands[51], Command.kValue51) &&
+      identical(commands[52], Command.kValue52) &&
+      identical(commands[53], Command.kValue53) &&
+      identical(commands[54], Command.kValue54) &&
+      identical(commands[55], Command.kValue55) &&
+      identical(commands[56], Command.kValue56) &&
+      identical(commands[57], Command.kValue57) &&
+      identical(commands[58], Command.kValue58) &&
+      identical(commands[59], Command.kValue59) &&
+      identical(commands[60], Command.kValue60) &&
+      identical(commands[61], Command.kValue61) &&
+      identical(commands[62], Command.kValue62) &&
+      identical(commands[63], Command.kValue63) &&
+      identical(commands[64], Command.kValue64) &&
+      identical(commands[65], Command.kValue65) &&
+      identical(commands[66], Command.kValue66) &&
+      identical(commands[67], Command.kValue67) &&
+      identical(commands[68], Command.kValue68) &&
+      identical(commands[69], Command.kValue69) &&
+      identical(commands[70], Command.kValue70) &&
+      identical(commands[71], Command.kValue71) &&
+      identical(commands[72], Command.kValue72) &&
+      identical(commands[73], Command.kValue73) &&
+      identical(commands[74], Command.kValue74) &&
+      identical(commands[75], Command.kValue75) &&
+      identical(commands[76], Command.kValue76) &&
+      identical(commands[77], Command.kValue77) &&
+      identical(commands[78], Command.kValue78) &&
+      identical(commands[79], Command.kValue79) &&
+      identical(commands[80], Command.kValue80) &&
+      identical(commands[81], Command.kValue81) &&
+      identical(commands[82], Command.kValue82) &&
+      identical(commands[83], Command.kValue83) &&
+      identical(commands[84], Command.kValue84) &&
+      identical(commands[85], Command.kValue85) &&
+      identical(commands[86], Command.kValue86) &&
+      identical(commands[87], Command.kValue87) &&
+      identical(commands[88], Command.kValue88) &&
+      identical(commands[89], Command.kValue89) &&
+      identical(commands[90], Command.kValue90) &&
+      identical(commands[91], Command.kValue91) &&
+      identical(commands[92], Command.kValue92) &&
+      identical(commands[93], Command.kValue93) &&
+      identical(commands[94], Command.kValue94) &&
+      identical(commands[95], Command.kValue95) &&
+      identical(commands[96], Command.kValue96) &&
+      identical(commands[97], Command.kValue97) &&
+      identical(commands[98], Command.kValue98) &&
+      identical(commands[99], Command.kValue99) &&
+      identical(commands[100], Command.kValue100) &&
+      identical(commands[101], Command.kValue101) &&
+      identical(commands[102], Command.kValue102) &&
+      identical(commands[103], Command.kValue103) &&
+      identical(commands[104], Command.kValue104) &&
+      identical(commands[105], Command.kValue105) &&
+      identical(commands[106], Command.kValue106) &&
+      identical(commands[107], Command.kValue107) &&
+      identical(commands[108], Command.kValue108) &&
+      identical(commands[109], Command.kValue109) &&
+      identical(commands[110], Command.kValue110) &&
+      identical(commands[111], Command.kValue111) &&
+      identical(commands[112], Command.kValue112) &&
+      identical(commands[113], Command.kValue113) &&
+      identical(commands[114], Command.kValue114) &&
+      identical(commands[115], Command.kValue115) &&
+      identical(commands[116], Command.kValue116) &&
+      identical(commands[117], Command.kValue117) &&
+      identical(commands[118], Command.kValue118) &&
+      identical(commands[119], Command.kValue119) &&
+      identical(commands[120], Command.kValue120) &&
+      identical(commands[121], Command.kValue121) &&
+      identical(commands[122], Command.kValue122) &&
+      identical(commands[123], Command.kValue123) &&
+      identical(commands[124], Command.kValue124) &&
+      identical(commands[125], Command.kValue125) &&
+      identical(commands[126], Command.kValue126) &&
+      identical(commands[127], Command.kValue127) &&
+      identical(commands[128], Command.kValue128) &&
+      identical(commands[129], Command.kValue129) &&
+      identical(commands[130], Command.kValue130) &&
+      identical(commands[131], Command.kValue131) &&
+      identical(commands[132], Command.kValue132) &&
+      identical(commands[133], Command.kValue133) &&
+      identical(commands[134], Command.kValue134) &&
+      identical(commands[135], Command.kValue135) &&
+      identical(commands[136], Command.kValue136) &&
+      identical(commands[137], Command.kValue137) &&
+      identical(commands[138], Command.kValue138) &&
+      identical(commands[139], Command.kValue139) &&
+      identical(commands[140], Command.kValue140) &&
+      identical(commands[141], Command.kValue141) &&
+      identical(commands[142], Command.kValue142) &&
+      identical(commands[143], Command.kValue143) &&
+      identical(commands[144], Command.kValue144) &&
+      identical(commands[145], Command.kValue145) &&
+      identical(commands[146], Command.kValue146) &&
+      identical(commands[147], Command.kValue147) &&
+      identical(commands[148], Command.kValue148) &&
+      identical(commands[149], Command.kValue149) &&
+      identical(commands[150], Command.kValue150) &&
+      identical(commands[151], Command.kValue151) &&
+      identical(commands[152], Command.kValue152) &&
+      identical(commands[153], Command.kValue153) &&
+      identical(commands[154], Command.kValue154) &&
+      identical(commands[155], Command.kValue155) &&
+      identical(commands[156], Command.kValue156) &&
+      identical(commands[157], Command.kValue157) &&
+      identical(commands[158], Command.kValue158) &&
+      identical(commands[159], Command.kValue159) &&
+      identical(commands[160], Command.kValue160) &&
+      identical(commands[161], Command.kValue161) &&
+      identical(commands[162], Command.kValue162) &&
+      identical(commands[163], Command.kValue163) &&
+      identical(commands[164], Command.kValue164) &&
+      identical(commands[165], Command.kValue165) &&
+      identical(commands[166], Command.kValue166) &&
+      identical(commands[167], Command.kValue167) &&
+      identical(commands[168], Command.kValue168) &&
+      identical(commands[169], Command.kValue169) &&
+      identical(commands[170], Command.kValue170) &&
+      identical(commands[171], Command.kValue171) &&
+      identical(commands[172], Command.kValue172) &&
+      identical(commands[173], Command.kValue173) &&
+      identical(commands[174], Command.kValue174) &&
+      identical(commands[175], Command.kValue175) &&
+      identical(commands[176], Command.kValue176) &&
+      identical(commands[177], Command.kValue177) &&
+      identical(commands[178], Command.kValue178) &&
+      identical(commands[179], Command.kValue179) &&
+      identical(commands[180], Command.kValue180) &&
+      identical(commands[181], Command.kValue181) &&
+      identical(commands[182], Command.kValue182) &&
+      identical(commands[183], Command.kValue183) &&
+      identical(commands[184], Command.kValue184) &&
+      identical(commands[185], Command.kValue185) &&
+      identical(commands[186], Command.kValue186) &&
+      identical(commands[187], Command.kValue187) &&
+      identical(commands[188], Command.kValue188) &&
+      identical(commands[189], Command.kValue189) &&
+      identical(commands[190], Command.kValue190) &&
+      identical(commands[191], Command.kValue191) &&
+      identical(commands[192], Command.kValue192) &&
+      identical(commands[193], Command.kValue193) &&
+      identical(commands[194], Command.kValue194) &&
+      identical(commands[195], Command.kValue195) &&
+      identical(commands[196], Command.kValue196) &&
+      identical(commands[197], Command.kValue197) &&
+      identical(commands[198], Command.kValue198) &&
+      identical(commands[199], Command.kValue199) &&
+      identical(commands[200], Command.kValue200));
+}
+
+main(args) async {
+  final rp = ReceivePort();
+  final si = StreamIterator(rp);
+  print('spawning child isolate');
+  await Isolate.spawn(tryClose, [
+    [
+      Command.kValue0,
+      Command.kValue1,
+      Command.kValue2,
+      Command.kValue3,
+      Command.kValue4,
+      Command.kValue5,
+      Command.kValue6,
+      Command.kValue7,
+      Command.kValue8,
+      Command.kValue9,
+      Command.kValue10,
+      Command.kValue11,
+      Command.kValue12,
+      Command.kValue13,
+      Command.kValue14,
+      Command.kValue15,
+      Command.kValue16,
+      Command.kValue17,
+      Command.kValue18,
+      Command.kValue19,
+      Command.kValue20,
+      Command.kValue21,
+      Command.kValue22,
+      Command.kValue23,
+      Command.kValue24,
+      Command.kValue25,
+      Command.kValue26,
+      Command.kValue27,
+      Command.kValue28,
+      Command.kValue29,
+      Command.kValue30,
+      Command.kValue31,
+      Command.kValue32,
+      Command.kValue33,
+      Command.kValue34,
+      Command.kValue35,
+      Command.kValue36,
+      Command.kValue37,
+      Command.kValue38,
+      Command.kValue39,
+      Command.kValue40,
+      Command.kValue41,
+      Command.kValue42,
+      Command.kValue43,
+      Command.kValue44,
+      Command.kValue45,
+      Command.kValue46,
+      Command.kValue47,
+      Command.kValue48,
+      Command.kValue49,
+      Command.kValue50,
+      Command.kValue51,
+      Command.kValue52,
+      Command.kValue53,
+      Command.kValue54,
+      Command.kValue55,
+      Command.kValue56,
+      Command.kValue57,
+      Command.kValue58,
+      Command.kValue59,
+      Command.kValue60,
+      Command.kValue61,
+      Command.kValue62,
+      Command.kValue63,
+      Command.kValue64,
+      Command.kValue65,
+      Command.kValue66,
+      Command.kValue67,
+      Command.kValue68,
+      Command.kValue69,
+      Command.kValue70,
+      Command.kValue71,
+      Command.kValue72,
+      Command.kValue73,
+      Command.kValue74,
+      Command.kValue75,
+      Command.kValue76,
+      Command.kValue77,
+      Command.kValue78,
+      Command.kValue79,
+      Command.kValue80,
+      Command.kValue81,
+      Command.kValue82,
+      Command.kValue83,
+      Command.kValue84,
+      Command.kValue85,
+      Command.kValue86,
+      Command.kValue87,
+      Command.kValue88,
+      Command.kValue89,
+      Command.kValue90,
+      Command.kValue91,
+      Command.kValue92,
+      Command.kValue93,
+      Command.kValue94,
+      Command.kValue95,
+      Command.kValue96,
+      Command.kValue97,
+      Command.kValue98,
+      Command.kValue99,
+      Command.kValue100,
+      Command.kValue101,
+      Command.kValue102,
+      Command.kValue103,
+      Command.kValue104,
+      Command.kValue105,
+      Command.kValue106,
+      Command.kValue107,
+      Command.kValue108,
+      Command.kValue109,
+      Command.kValue110,
+      Command.kValue111,
+      Command.kValue112,
+      Command.kValue113,
+      Command.kValue114,
+      Command.kValue115,
+      Command.kValue116,
+      Command.kValue117,
+      Command.kValue118,
+      Command.kValue119,
+      Command.kValue120,
+      Command.kValue121,
+      Command.kValue122,
+      Command.kValue123,
+      Command.kValue124,
+      Command.kValue125,
+      Command.kValue126,
+      Command.kValue127,
+      Command.kValue128,
+      Command.kValue129,
+      Command.kValue130,
+      Command.kValue131,
+      Command.kValue132,
+      Command.kValue133,
+      Command.kValue134,
+      Command.kValue135,
+      Command.kValue136,
+      Command.kValue137,
+      Command.kValue138,
+      Command.kValue139,
+      Command.kValue140,
+      Command.kValue141,
+      Command.kValue142,
+      Command.kValue143,
+      Command.kValue144,
+      Command.kValue145,
+      Command.kValue146,
+      Command.kValue147,
+      Command.kValue148,
+      Command.kValue149,
+      Command.kValue150,
+      Command.kValue151,
+      Command.kValue152,
+      Command.kValue153,
+      Command.kValue154,
+      Command.kValue155,
+      Command.kValue156,
+      Command.kValue157,
+      Command.kValue158,
+      Command.kValue159,
+      Command.kValue160,
+      Command.kValue161,
+      Command.kValue162,
+      Command.kValue163,
+      Command.kValue164,
+      Command.kValue165,
+      Command.kValue166,
+      Command.kValue167,
+      Command.kValue168,
+      Command.kValue169,
+      Command.kValue170,
+      Command.kValue171,
+      Command.kValue172,
+      Command.kValue173,
+      Command.kValue174,
+      Command.kValue175,
+      Command.kValue176,
+      Command.kValue177,
+      Command.kValue178,
+      Command.kValue179,
+      Command.kValue180,
+      Command.kValue181,
+      Command.kValue182,
+      Command.kValue183,
+      Command.kValue184,
+      Command.kValue185,
+      Command.kValue186,
+      Command.kValue187,
+      Command.kValue188,
+      Command.kValue189,
+      Command.kValue190,
+      Command.kValue191,
+      Command.kValue192,
+      Command.kValue193,
+      Command.kValue194,
+      Command.kValue195,
+      Command.kValue196,
+      Command.kValue197,
+      Command.kValue198,
+      Command.kValue199,
+      Command.kValue200
+    ],
+    rp.sendPort
+  ]);
+  await si.moveNext();
+  Expect.equals(true, si.current);
+  rp.close();
+}
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
new file mode 100644
index 0000000..9a2938b
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/fibonacci_call_ig_test.dart
@@ -0,0 +1,19 @@
+// 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 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
new file mode 100644
index 0000000..b6b32ef
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/fibonacci_call_test.dart
@@ -0,0 +1,18 @@
+// 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 'test_utils.dart';
+
+main(args) async {
+  final rp = ReceivePort();
+  final int n = 18;
+  await Isolate.spawn(fibonacciRecursive, [rp.sendPort, n]);
+  Expect.equals(4181, await rp.first);
+}
diff --git a/runtime/tests/vm/dart_2/isolates/internal.dart b/runtime/tests/vm/dart_2/isolates/internal.dart
new file mode 100644
index 0000000..961f23f
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/internal.dart
@@ -0,0 +1,87 @@
+// 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: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
new file mode 100644
index 0000000..71ca959
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/limited_active_mutator_test.dart
@@ -0,0 +1,53 @@
+// 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.
+
+// SharedObjects=ffi_test_functions
+// VMOptions=--enable-isolate-groups --disable-heap-verification --disable-thread-pool-limit
+
+import 'dart:async';
+import 'dart:math' as math;
+
+import 'package:expect/expect.dart';
+
+import 'test_utils.dart';
+
+// This should be larger than max-new-space-size/tlab-size.
+const int threadCount = 1000;
+const int treeHeight = 10;
+final expectedSum = math.pow(2, treeHeight) - 1;
+
+class Worker extends RingElement {
+  final int id;
+  Worker(this.id);
+
+  Future run(dynamic _, dynamic _2) async {
+    return buildTree(treeHeight).sum;
+  }
+}
+
+main(args) async {
+  // This test tests a custom embedder which installs it's own message handler
+  // and therefore does not use our thread pool implementation.
+  // The test passes `--disable-thread-pool-limit` to similate an embedder which
+  // can use arbitrarily number of threads.
+  //
+  // The VM is responsible for ensuring at most N number of mutator threads can
+  // be actively executing Dart code (if not, too many threads would be fighting
+  // to obtain TLABs and performance would be terrible).
+
+  final ring = await Ring.create(threadCount);
+
+  // Let each worker do a lot of allocations: If the VM doesn't limit the number
+  // of concurrent mutators, it would cause the threads to fight over TLABs and
+  // this test would timeout.
+  final results = await ring.run((int id) => Worker(id));
+
+  Expect.equals(threadCount, results.length);
+  for (int i = 0; i < threadCount; ++i) {
+    final int sum = results[i];
+    Expect.equals(expectedSum, sum);
+  }
+
+  await ring.close();
+}
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
new file mode 100644
index 0000000..10f5f19
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/ring_gc_sendAndExit_test.dart
@@ -0,0 +1,32 @@
+// 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:math' as math;
+
+import 'package:expect/expect.dart';
+
+import 'ring_gc_test.dart' show Worker;
+import 'test_utils.dart';
+
+main(args) async {
+  final int numIsolates = (isDebugMode || isSimulator) ? 100 : 5000;
+
+  // Spawn ring of 1k isolates.
+  final ring = await Ring.create(numIsolates);
+
+  // Let each node produce a tree, send it to it's neighbour and let it return
+  // the one it received (via sendAndExit).
+  final results = await ring.runAndClose((int id) => Worker(id));
+  Expect.equals(numIsolates, results.length);
+
+  // Validate the result.
+  for (int i = 0; i < numIsolates; ++i) {
+    final Tree tree = results[i];
+    final senderId = (numIsolates + i - 1) % numIsolates;
+    final expectedCount = math.pow(2, senderId % 10) - 1;
+    Expect.equals(expectedCount, tree.sum);
+  }
+}
diff --git a/runtime/tests/vm/dart_2/isolates/ring_gc_test.dart b/runtime/tests/vm/dart_2/isolates/ring_gc_test.dart
new file mode 100644
index 0000000..a126755
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/ring_gc_test.dart
@@ -0,0 +1,54 @@
+// 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:async';
+import 'dart:math' as math;
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+
+import 'test_utils.dart';
+
+class Worker extends RingElement {
+  final int id;
+  Worker(this.id);
+
+  Future run(SendPort next, StreamIterator prev) async {
+    final Tree tree = buildTree(id % 10);
+
+    // Send to next in ring.
+    next.send(tree);
+    // Receive from previous in ring.
+    await prev.moveNext();
+    final prevTree = prev.current as Tree;
+
+    // Return to main
+    return prevTree;
+  }
+}
+
+main(args) async {
+  final int numIsolates = (isDebugMode || isSimulator) ? 100 : 1000;
+
+  // Spawn ring of 1k isolates.
+  final ring = await Ring.create(numIsolates);
+
+  // Let each node produce a tree, send it to it's neighbour and let it return
+  // the one it received.
+  final results = await ring.run((int id) => Worker(id));
+  Expect.equals(numIsolates, results.length);
+
+  // Validate the result.
+  for (int i = 0; i < numIsolates; ++i) {
+    final Tree tree = results[i];
+    final senderId = (numIsolates + i - 1) % numIsolates;
+    final expectedCount = math.pow(2, senderId % 10) - 1;
+    Expect.equals(expectedCount, tree.sum);
+  }
+
+  // Close the ring.
+  await ring.close();
+}
diff --git a/runtime/tests/vm/dart_2/isolates/spawn_function_test.dart b/runtime/tests/vm/dart_2/isolates/spawn_function_test.dart
new file mode 100644
index 0000000..f2a85ea
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/spawn_function_test.dart
@@ -0,0 +1,32 @@
+// 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=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:isolate';
+import 'dart:async';
+
+import 'package:expect/expect.dart';
+
+void isolateEntry(args) {
+  final SendPort sendPort = args;
+  sendPort.send('hello world');
+}
+
+main() async {
+  final port = ReceivePort();
+  final exitPort = ReceivePort();
+
+  await Isolate.spawn(isolateEntry, port.sendPort, onExit: exitPort.sendPort);
+
+  final messages = StreamIterator(port);
+  Expect.isTrue(await messages.moveNext());
+  Expect.equals('hello world', messages.current);
+  await messages.cancel();
+
+  final exit = StreamIterator(exitPort);
+  Expect.isTrue(await exit.moveNext());
+  await exit.cancel();
+}
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
new file mode 100644
index 0000000..915c102
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/sum_recursive_call_ig_test.dart
@@ -0,0 +1,19 @@
+// 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
new file mode 100644
index 0000000..89bcc58
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/sum_recursive_call_test.dart
@@ -0,0 +1,18 @@
+// 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 'test_utils.dart';
+
+main(args) async {
+  final rp = ReceivePort();
+  final int count = (isDebugMode || isSimulator) ? 100 : (10 * 1000);
+  await Isolate.spawn(sumRecursive, [rp.sendPort, count]);
+  Expect.equals(count, await rp.first);
+}
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
new file mode 100644
index 0000000..a3fb967
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/sum_recursive_tail_call_ig_test.dart
@@ -0,0 +1,19 @@
+// 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
new file mode 100644
index 0000000..866b8f3
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/sum_recursive_tail_call_test.dart
@@ -0,0 +1,18 @@
+// 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 'test_utils.dart';
+
+main(args) async {
+  final rp = ReceivePort();
+  final int count = (isDebugMode || isSimulator) ? 100 : (10 * 1000);
+  await Isolate.spawn(sumRecursiveTailCall, [rp.sendPort, count, 0]);
+  Expect.equals(count, await rp.first);
+}
diff --git a/runtime/tests/vm/dart_2/isolates/test_utils.dart b/runtime/tests/vm/dart_2/isolates/test_utils.dart
new file mode 100644
index 0000000..67b84d8
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/test_utils.dart
@@ -0,0 +1,201 @@
+// 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:isolate';
+
+import 'internal.dart';
+
+final bool isDebugMode = Platform.script.path.contains('Debug');
+final bool isSimulator = Platform.script.path.contains('SIM');
+
+// Implements recursive summation:
+//   sum(n) => n == 0 ? 0
+//                    : 1 + sum(n-1);
+Future sumRecursive(List args) async {
+  final SendPort port = args[0];
+  final n = args[1];
+  if (n == 0) {
+    port.send(0);
+  } else {
+    final rp = ReceivePort();
+    await Isolate.spawn(sumRecursive, [rp.sendPort, n - 1]);
+    port.send(1 + (await rp.first));
+  }
+}
+
+// Implements recursive summation via tail calls:
+//   sum(n, s) => n == 0 ? s
+//                       : sum(n-1, s+1);
+Future sumRecursiveTailCall(List args) async {
+  final SendPort port = args[0];
+  final n = args[1];
+  final s = args[2];
+  if (n == 0) {
+    port.send(s);
+  } else {
+    await Isolate.spawn(sumRecursiveTailCall, [port, n - 1, s + 1]);
+  }
+}
+
+// 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 {
+  Future run(SendPort nextNeighbour, StreamIterator prevNeighbour);
+}
+
+class Ring {
+  final int size;
+  final List<StreamIterator> receivePorts;
+  final List<SendPort> controlSendPorts;
+  final List<SendPort> dataSendPorts;
+
+  Ring(this.size, this.receivePorts, this.controlSendPorts, this.dataSendPorts);
+
+  static Future<Ring> create(int n) async {
+    final ports = <StreamIterator>[];
+    final spawnFutures = <Future>[];
+    for (int i = 0; i < n; ++i) {
+      final port = ReceivePort();
+      ports.add(StreamIterator(port));
+      spawnFutures
+          .add(Isolate.spawn(_ringEntry, port.sendPort, debugName: 'ring-$i'));
+    }
+    await Future.wait(spawnFutures);
+    final controlSendPorts = <SendPort>[];
+    final dataSendPorts = <SendPort>[];
+    for (int i = 0; i < n; ++i) {
+      final si = ports[i];
+      await si.moveNext();
+      controlSendPorts.add(si.current[0]);
+      dataSendPorts.add(si.current[1]);
+    }
+
+    return Ring(n, ports, controlSendPorts, dataSendPorts);
+  }
+
+  static Future _ringEntry(SendPort port) async {
+    final rpControl = ReceivePort();
+    final rpData = ReceivePort();
+    port.send([rpControl.sendPort, rpData.sendPort]);
+
+    final siControl = StreamIterator(rpControl);
+    final siData = StreamIterator(rpData);
+    while (await siControl.moveNext()) {
+      final List args = siControl.current;
+      final command = args[0];
+      switch (command) {
+        case Command.kRun:
+          final RingElement re = args[1];
+          final SendPort nextNeighbor = args[2];
+          port.send(await re.run(nextNeighbor, siData));
+          break;
+        case Command.kRunAndClose:
+          final RingElement re = args[1];
+          final SendPort nextNeighbor = args[2];
+          port.sendAndExit(await re.run(nextNeighbor, siData));
+          break;
+        case Command.kClose:
+          port.send('done');
+          rpControl.close();
+          rpData.close();
+          return;
+      }
+    }
+
+    throw 'bug';
+  }
+
+  Future<List> run(RingElement buildRingElement(int id)) async {
+    for (int i = 0; i < size; i++) {
+      final nextNeighbor = dataSendPorts[(i + 1) % size];
+      controlSendPorts[i]
+          .send([Command.kRun, buildRingElement(i), nextNeighbor]);
+    }
+
+    final results = await Future.wait(receivePorts.map((si) async {
+      await si.moveNext();
+      return si.current;
+    }).toList());
+
+    return results;
+  }
+
+  Future<List> runAndClose(RingElement buildRingElement(int id)) async {
+    for (int i = 0; i < size; i++) {
+      final nextNeighbor = dataSendPorts[(i + 1) % size];
+      controlSendPorts[i]
+          .send([Command.kRunAndClose, buildRingElement(i), nextNeighbor]);
+    }
+
+    final results = await Future.wait(receivePorts.map((si) async {
+      await si.moveNext();
+      return si.current;
+    }).toList());
+    finalize();
+    return results;
+  }
+
+  Future close() async {
+    for (int i = 0; i < size; i++) {
+      controlSendPorts[i].send([Command.kClose]);
+    }
+    final results = await Future.wait(receivePorts.map((si) async {
+      await si.moveNext();
+      return si.current;
+    }).toList());
+    finalize();
+    return results;
+  }
+
+  void finalize() async {
+    for (int i = 0; i < size; ++i) {
+      await receivePorts[i].cancel();
+    }
+  }
+}
+
+class Tree {
+  final int value;
+  final Tree left;
+  final Tree right;
+
+  Tree(this.value, this.left, this.right);
+
+  int get sum => value + (left?.sum ?? 0) + (right?.sum ?? 0);
+
+  Tree get copy => Tree(value, left?.copy, right?.copy);
+}
+
+Tree buildTree(int n) {
+  if (n == 0) return Tree(0, null, null);
+  Tree left = Tree(0, null, null);
+  Tree right = Tree(0, null, null);
+  for (int i = 1; i < n; ++i) {
+    left = Tree(1, left, right);
+    right = left.copy;
+  }
+  return Tree(1, left, right);
+}
diff --git a/runtime/tests/vm/dart_2/isolates/thread_pool_test.dart b/runtime/tests/vm/dart_2/isolates/thread_pool_test.dart
new file mode 100644
index 0000000..ff8a7e6
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/thread_pool_test.dart
@@ -0,0 +1,76 @@
+// 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.
+
+// SharedObjects=ffi_test_functions
+// VMOptions=--enable-isolate-groups --disable-heap-verification
+
+import 'dart:async';
+import 'dart:ffi';
+
+import 'package:expect/expect.dart';
+
+import 'test_utils.dart';
+import '../../../../../tests/ffi_2/dylib_utils.dart';
+
+// This should be larger than max-new-space-size/tlab-size.
+const int threadCount = 200;
+
+class Isolate extends Struct {}
+
+typedef Dart_CurrentIsolateFT = Pointer<Isolate> Function();
+typedef Dart_CurrentIsolateNFT = Pointer<Isolate> Function();
+typedef Dart_EnterIsolateFT = void Function(Pointer<Isolate>);
+typedef Dart_EnterIsolateNFT = Void Function(Pointer<Isolate>);
+typedef Dart_ExitIsolateFT = void Function();
+typedef Dart_ExitIsolateNFT = Void Function();
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+final threadPoolBarrierSync = ffiTestFunctions.lookupFunction<
+    Void Function(
+        Pointer<NativeFunction<Dart_CurrentIsolateNFT>>,
+        Pointer<NativeFunction<Dart_EnterIsolateNFT>>,
+        Pointer<NativeFunction<Dart_ExitIsolateNFT>>,
+        IntPtr),
+    void Function(
+        Pointer<NativeFunction<Dart_CurrentIsolateNFT>>,
+        Pointer<NativeFunction<Dart_EnterIsolateNFT>>,
+        Pointer<NativeFunction<Dart_ExitIsolateNFT>>,
+        int)>('ThreadPoolTest_BarrierSync');
+
+final Pointer<NativeFunction<Dart_CurrentIsolateNFT>> dartCurrentIsolate =
+    DynamicLibrary.executable().lookup("Dart_CurrentIsolate").cast();
+final Pointer<NativeFunction<Dart_EnterIsolateNFT>> dartEnterIsolate =
+    DynamicLibrary.executable().lookup("Dart_EnterIsolate").cast();
+final Pointer<NativeFunction<Dart_ExitIsolateNFT>> dartExitIsolate =
+    DynamicLibrary.executable().lookup("Dart_ExitIsolate").cast();
+
+class Worker extends RingElement {
+  final int id;
+  Worker(this.id);
+
+  Future run(dynamic _, dynamic _2) async {
+    threadPoolBarrierSync(
+        dartCurrentIsolate, dartEnterIsolate, dartExitIsolate, threadCount);
+    return id;
+  }
+}
+
+main(args) async {
+  final ring = await Ring.create(threadCount);
+
+  // Let each worker:
+  //   - call into C
+  //   - exit the isolate
+  //   - wait until notified
+  //   - continue & exit
+  final results = await ring.run((int id) => Worker(id));
+
+  Expect.equals(threadCount, results.length);
+  for (int i = 0; i < threadCount; ++i) {
+    Expect.equals(i, results[i]);
+  }
+
+  await ring.close();
+}
diff --git a/runtime/tests/vm/dart_2/issue32950_test.dart b/runtime/tests/vm/dart_2/issue32950_test.dart
new file mode 100644
index 0000000..7e14a7f
--- /dev/null
+++ b/runtime/tests/vm/dart_2/issue32950_test.dart
@@ -0,0 +1,22 @@
+import 'dart:isolate';
+import 'dart:io';
+
+import 'package:path/path.dart' as p;
+
+main() async {
+  Directory tmp = await Directory.systemTemp.createTemp("testCopy");
+  var path = "${tmp.path}/other.dart";
+  var sourceFile = new File(path);
+  sourceFile.writeAsStringSync("""
+    import 'package:path/path.dart' as p;
+
+    void main() => print(p.current);
+  """);
+
+  var exitPort = new ReceivePort();
+  await Isolate.spawnUri(p.toUri(p.absolute(path)), [], null,
+      packageConfig: p.toUri(p.absolute(".packages")),
+      onExit: exitPort.sendPort);
+  await exitPort.first;
+  await sourceFile.delete();
+}
diff --git a/runtime/tests/vm/dart_2/issue_31959_31960_test.dart b/runtime/tests/vm/dart_2/issue_31959_31960_test.dart
new file mode 100644
index 0000000..d63a16f
--- /dev/null
+++ b/runtime/tests/vm/dart_2/issue_31959_31960_test.dart
@@ -0,0 +1,93 @@
+// 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=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:async';
+import 'dart:isolate';
+import 'dart:math';
+import 'dart:typed_data';
+
+import 'package:async_helper/async_helper.dart' show asyncStart, asyncEnd;
+import 'package:expect/expect.dart';
+
+Uint8List generateSampleList(final int size) {
+  final list = Uint8List(size);
+  for (int i = 0; i < size; i++) {
+    list[i] = i % 243;
+  }
+  return list;
+}
+
+void validateReceivedList(final int expectedSize, final list) {
+  Expect.equals(expectedSize, list.length);
+  // probe few elements
+  for (int i = 0; i < list.length; i += max<num>(1, expectedSize ~/ 1000)) {
+    Expect.equals(i % 243, list[i]);
+  }
+}
+
+Future<Null> testSend(
+    bool transferable, int toIsolateSize, int fromIsolateSize) async {
+  asyncStart();
+  final port = ReceivePort();
+  final inbox = StreamIterator(port);
+  await Isolate.spawn(isolateMain,
+      [transferable, toIsolateSize, fromIsolateSize, port.sendPort]);
+  await inbox.moveNext();
+  final outbox = inbox.current;
+  final workWatch = Stopwatch();
+  final data = generateSampleList(toIsolateSize);
+  int count = 10;
+  workWatch.start();
+  while (count-- > 0) {
+    outbox.send(transferable ? TransferableTypedData.fromList([data]) : data);
+    await inbox.moveNext();
+    validateReceivedList(
+        fromIsolateSize,
+        transferable
+            ? inbox.current.materialize().asUint8List()
+            : inbox.current);
+  }
+  print('total ${workWatch.elapsedMilliseconds}ms');
+  outbox.send(null);
+  port.close();
+  asyncEnd();
+}
+
+main() async {
+  asyncStart();
+  int bignum = 10 * 1000 * 1000;
+  await testSend(false, bignum, 1); // none
+  await testSend(true, bignum, 1); // 31959tr
+  await testSend(false, bignum, 1); // 31960
+  await testSend(true, bignum, 1); // 31960tr
+  asyncEnd();
+}
+
+Future<Null> isolateMain(List config) async {
+  bool transferable = config[0];
+  int toIsolateSize = config[1];
+  int fromIsolateSize = config[2];
+  SendPort outbox = config[3];
+
+  final port = ReceivePort();
+  final inbox = StreamIterator(port);
+  outbox.send(port.sendPort);
+  final data = generateSampleList(fromIsolateSize);
+  while (true) {
+    await inbox.moveNext();
+    if (inbox.current == null) {
+      break;
+    }
+    validateReceivedList(
+        toIsolateSize,
+        transferable
+            ? inbox.current.materialize().asUint8List()
+            : inbox.current);
+    outbox.send(transferable ? TransferableTypedData.fromList([data]) : data);
+  }
+  port.close();
+}
diff --git a/runtime/tests/vm/dart_2/kernel_determinism_test.dart b/runtime/tests/vm/dart_2/kernel_determinism_test.dart
new file mode 100644
index 0000000..ed3ab3d
--- /dev/null
+++ b/runtime/tests/vm/dart_2/kernel_determinism_test.dart
@@ -0,0 +1,22 @@
+// 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.
+
+// Verify creating an incremental kernel file twice generates the same bits.
+
+import 'dart:async';
+import 'snapshot_test_helper.dart';
+
+int fib(int n) {
+  if (n <= 1) return 1;
+  return fib(n - 1) + fib(n - 2);
+}
+
+Future<void> main(List<String> args) async {
+  if (args.contains('--child')) {
+    print(fib(35));
+    return;
+  }
+
+  await checkDeterministicSnapshot("kernel", "");
+}
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
new file mode 100644
index 0000000..a1c962e
--- /dev/null
+++ b/runtime/tests/vm/dart_2/licm_and_assert_strengthening_test.dart
@@ -0,0 +1,48 @@
+// 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=--optimization-counter-threshold=10 --no-background-compilation
+
+// 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
+// certain conditions would be set to -1. The code was changed to never
+// use deopt_id from the environment but this regression test is provided for
+// completeness.
+
+class A<T> {
+  var foo = 42;
+}
+
+class B extends A<String> {}
+
+class C extends B {}
+
+void foo(dynamic a) {
+  // To prevent AssertAssignable strengthening from occuring too early we
+  // need to hide the fact that CheckClass and AssertAssignable are performed
+  // against the same SSA value. To achieve that we store a into an array and
+  // then load it back. Load Forwarding would happen just before LICM and
+  // will remove the indirection. Then LICM would hoist both CheckClass
+  // and AssertAssignable out of the loop and then strengthening would happen.
+  final box = <dynamic>[null];
+  box[0] = a;
+
+  for (var i = 0; i < 1; i++) {
+    a as A<String>;
+    if (box[0].foo != 42) {
+      throw "unexpected";
+    }
+  }
+}
+
+void main() {
+  for (var i = 0; i < 100; i++) {
+    foo(B());
+  }
+
+  // Trigger deoptimization on the CheckClass produced by strengthened
+  // AssertAssignable - if this CheckClass has wrong deoptimization id a crash
+  // would occur.
+  foo(C());
+}
diff --git a/runtime/tests/vm/dart_2/minimal_kernel_bytecode_test.dart b/runtime/tests/vm/dart_2/minimal_kernel_bytecode_test.dart
new file mode 100644
index 0000000..417f129
--- /dev/null
+++ b/runtime/tests/vm/dart_2/minimal_kernel_bytecode_test.dart
@@ -0,0 +1,14 @@
+// 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.
+
+// OtherResources=minimal_kernel_script.dart
+
+// Tests that dill file produced with --minimal-kernel --gen-bytecode
+// options works as expected.
+
+import 'minimal_kernel_test.dart' as test;
+
+main() async {
+  await test.compileAndRunMinimalDillTest(['--gen-bytecode']);
+}
diff --git a/runtime/tests/vm/dart_2/minimal_kernel_script.dart b/runtime/tests/vm/dart_2/minimal_kernel_script.dart
new file mode 100644
index 0000000..ea3070c
--- /dev/null
+++ b/runtime/tests/vm/dart_2/minimal_kernel_script.dart
@@ -0,0 +1,10 @@
+// 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";
+
+main(List<String> args) {
+  final String encoded = base64.encode(args[0].codeUnits);
+  print(String.fromCharCodes(base64.decode(encoded)));
+}
diff --git a/runtime/tests/vm/dart_2/minimal_kernel_test.dart b/runtime/tests/vm/dart_2/minimal_kernel_test.dart
new file mode 100644
index 0000000..0c7722c
--- /dev/null
+++ b/runtime/tests/vm/dart_2/minimal_kernel_test.dart
@@ -0,0 +1,37 @@
+// 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.
+
+// OtherResources=minimal_kernel_script.dart
+
+// Tests that dill file produced with --minimal-kernel option
+// works as expected.
+
+import 'dart:io' show Platform;
+
+import 'package:path/path.dart' as path;
+import 'snapshot_test_helper.dart';
+
+compileAndRunMinimalDillTest(List<String> extraCompilationArgs) async {
+  final testScriptUri = Platform.script.resolve('minimal_kernel_script.dart');
+  final message = 'Round_trip_message';
+
+  await withTempDir((String temp) async {
+    final minimalDillPath = path.join(temp, 'minimal.dill');
+    await runGenKernel('BUILD MINIMAL DILL FILE', [
+      '--minimal-kernel',
+      '--no-link-platform',
+      ...extraCompilationArgs,
+      '--output=$minimalDillPath',
+      testScriptUri.toFilePath(),
+    ]);
+
+    final result =
+        await runDart('RUN FROM MINIMAL DILL FILE', [minimalDillPath, message]);
+    expectOutput(message, result);
+  });
+}
+
+main() async {
+  await compileAndRunMinimalDillTest([]);
+}
diff --git a/runtime/tests/vm/dart_2/named_params_shaking_test.dart b/runtime/tests/vm/dart_2/named_params_shaking_test.dart
new file mode 100644
index 0000000..b941651
--- /dev/null
+++ b/runtime/tests/vm/dart_2/named_params_shaking_test.dart
@@ -0,0 +1,44 @@
+// 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.
+//
+// Test that optimization of named parameters doesn't change evaluation order.
+
+import 'dart:math';
+import 'package:expect/expect.dart';
+
+int global = 0;
+
+int inc() => ++global;
+int dec() => global = max(0, --global);
+
+// When converting named parameters to positional parameters, we
+// follow alphabetical order. Ensure that argument evaluation order
+// is unchanged.
+void testNamedOrder(int w, {int z, int y, int x}) {
+  Expect.equals(w, 1);
+  Expect.equals(z, 2);
+  Expect.equals(y, 3);
+  Expect.equals(x, 2);
+}
+
+class TestNamedOrderBase {
+  TestNamedOrderBase(w, {int z, int y, int x}) {
+    testNamedOrder(w, z: z, y: y, x: x);
+  }
+}
+
+class TestNamedOrderSub extends TestNamedOrderBase {
+  int x;
+  TestNamedOrderSub()
+      : x = dec(),
+        super(inc(), z: inc(), y: inc(), x: dec()) {
+    Expect.equals(x, 0);
+  }
+}
+
+main() {
+  testNamedOrder(inc(), z: inc(), y: inc(), x: dec());
+  global = 1;
+  TestNamedOrderSub();
+}
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
new file mode 100644
index 0000000..b6b5814
--- /dev/null
+++ b/runtime/tests/vm/dart_2/non_smi_receiver_assert_assignable_test.dart
@@ -0,0 +1,22 @@
+class A {}
+
+class B extends A {}
+
+final bool kTrue = int.parse('1') == 1;
+
+final dynamic smiValue = kTrue == 1 ? 1 : 'a';
+final A barValue = kTrue ? B() : A();
+
+main() {
+  // Inlined AssertAssignable has to perform Smi check on LoadClassId.
+  smiValue as String;
+
+  // Inlined AssertAssignable can omit Smi check on LoadClassId.
+  barValue as B;
+
+  foo<int>(1);
+  foo<String>('a');
+}
+
+@pragma('vm:never-inline')
+T foo<T>(dynamic arg) => arg as T;
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
new file mode 100644
index 0000000..e8dfe76
--- /dev/null
+++ b/runtime/tests/vm/dart_2/null_checks_with_dwarf_stack_traces_test.dart
@@ -0,0 +1,56 @@
+// 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=--dwarf-stack-traces
+
+// This test verifies that null checks are handled correctly
+// with --dwarf-stack-traces option (dartbug.com/35851).
+
+import "package:expect/expect.dart";
+
+class A {
+  void foo() {
+    Expect.fail('A.foo should not be reachable');
+  }
+
+  dynamic get bar {
+    Expect.fail('A.bar should not be reachable');
+  }
+
+  set bazz(int x) {
+    Expect.fail('A.bazz should not be reachable');
+  }
+}
+
+A myNull;
+double doubleNull;
+int intNull;
+
+main(List<String> args) {
+  // Make sure value of `myNull` is not a compile-time null and
+  // devirtualization happens.
+  if (args.length > 42) {
+    myNull = new A();
+    doubleNull = 3.14;
+    intNull = 2;
+  }
+
+  Expect.throws(() => myNull.foo(), (e) => e is NoSuchMethodError);
+
+  Expect.throws(() => myNull.foo, (e) => e is NoSuchMethodError);
+
+  Expect.throws(() => myNull.bar, (e) => e is NoSuchMethodError);
+
+  Expect.throws(() => myNull.bar(), (e) => e is NoSuchMethodError);
+
+  Expect.throws(() {
+    myNull.bazz = 3;
+  }, (e) => e is NoSuchMethodError);
+
+  Expect.throws(() => doubleNull + 2.17, (e) => e is NoSuchMethodError);
+
+  Expect.throws(() => 9.81 - doubleNull, (e) => e is NoSuchMethodError);
+
+  Expect.throws(() => intNull * 7, (e) => e is NoSuchMethodError);
+}
diff --git a/runtime/tests/vm/dart/null_float32x4_simd_ops_test.dart b/runtime/tests/vm/dart_2/null_float32x4_simd_ops_test.dart
similarity index 100%
rename from runtime/tests/vm/dart/null_float32x4_simd_ops_test.dart
rename to runtime/tests/vm/dart_2/null_float32x4_simd_ops_test.dart
diff --git a/runtime/tests/vm/dart/null_float64x2_simd_ops_test.dart b/runtime/tests/vm/dart_2/null_float64x2_simd_ops_test.dart
similarity index 100%
rename from runtime/tests/vm/dart/null_float64x2_simd_ops_test.dart
rename to runtime/tests/vm/dart_2/null_float64x2_simd_ops_test.dart
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
new file mode 100644
index 0000000..348b154
--- /dev/null
+++ b/runtime/tests/vm/dart_2/null_safety_autodetection_in_kernel_compiler_test.dart
@@ -0,0 +1,44 @@
+// 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.
+
+// Tests auto-detection of null safety mode in gen_kernel tool.
+
+import 'dart:io' show File, Platform;
+
+import 'package:path/path.dart' as path;
+import 'snapshot_test_helper.dart';
+
+compileAndRunTest(String comment, String expectedOutput) async {
+  await withTempDir((String temp) async {
+    final testScriptPath = path.join(temp, 'test.dart');
+    File(testScriptPath).writeAsStringSync('''
+      // $comment
+
+      void main() {
+        try {
+          null as int;
+          print('weak mode');
+        } on TypeError {
+          print('strong mode');
+        }
+      }
+    ''');
+
+    final testDillPath = path.join(temp, 'test.dill');
+    await runGenKernel('BUILD DILL FILE', [
+      '--enable-experiment=non-nullable',
+      '--output=$testDillPath',
+      testScriptPath,
+    ]);
+
+    final result = await runBinary(
+        'RUN TEST FROM DILL', Platform.executable, [testDillPath]);
+    expectOutput(expectedOutput, result);
+  });
+}
+
+main() async {
+  await compileAndRunTest('', 'strong mode');
+  await compileAndRunTest('@dart=2.7', 'weak mode');
+}
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
new file mode 100644
index 0000000..83dd0f7
--- /dev/null
+++ b/runtime/tests/vm/dart_2/optimized_stacktrace_line_and_column_test.dart
@@ -0,0 +1,83 @@
+// 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.
+// 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
+  return x + 1;
+}
+
+test1() {
+  // First unoptimized.
+  try {
+    foo(null);
+    Expect.fail("Unreachable");
+  } catch (e, stacktrace) {
+    String s = stacktrace.toString();
+    print(s);
+    Expect.isFalse(s.contains("-1:-1"), "A");
+    RegExp regex = new RegExp(
+        "optimized_stacktrace_line_and_column_test(_none|_01)*\.dart:11(:18)*");
+    Expect.isTrue(regex.hasMatch(s), s);
+  }
+
+  // Optimized.
+  for (var i = 0; i < 10000; i++) foo(42);
+  try {
+    foo(null);
+    Expect.fail("Unreachable");
+  } catch (e, stacktrace) {
+    String s = stacktrace.toString();
+    print(s);
+    Expect.isFalse(s.contains("-1:-1"), "C");
+    RegExp regex = new RegExp(
+        "optimized_stacktrace_line_and_column_test(_none|_01)*\.dart:11(:18)*");
+    Expect.isTrue(regex.hasMatch(s), "D");
+  }
+}
+
+// (2) Test checked mode exceptions.
+maximus(x) => moritz(x);
+
+moritz(x) {
+  if (x == 333) return true ? 0 : 1;
+  if (x == 777) {
+    bool b = x;
+    return b;
+  }
+
+  return x + 1;
+}
+
+test2() {
+  for (var i = 0; i < 100000; i++) maximus(42);
+  try {
+    maximus(333);
+  } catch (e, stacktrace) {
+    String s = stacktrace.toString();
+    print(s);
+    Expect.isTrue(s.contains("maximus"), "E");
+    Expect.isTrue(s.contains("moritz"), "F");
+    Expect.isFalse(s.contains("-1:-1"), "G");
+  }
+
+  try {
+    maximus(777);
+  } catch (e, stacktrace) {
+    String s = stacktrace.toString();
+    print(s);
+    Expect.isTrue(s.contains("maximus"), "H");
+    Expect.isTrue(s.contains("moritz"), "I");
+    Expect.isFalse(s.contains("-1:-1"), "J");
+  }
+}
+
+main() {
+  test1();
+  test2();
+}
diff --git a/runtime/tests/vm/dart_2/optimized_stacktrace_line_test.dart b/runtime/tests/vm/dart_2/optimized_stacktrace_line_test.dart
new file mode 100644
index 0000000..43e5fde
--- /dev/null
+++ b/runtime/tests/vm/dart_2/optimized_stacktrace_line_test.dart
@@ -0,0 +1,83 @@
+// 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.
+// 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
+  return x + 1;
+}
+
+test1() {
+  // First unoptimized.
+  try {
+    foo(null);
+    Expect.fail("Unreachable");
+  } catch (e, stacktrace) {
+    String s = stacktrace.toString();
+    print(s);
+    Expect.isFalse(s.contains("-1:-1"), "A");
+    RegExp regex =
+        new RegExp("optimized_stacktrace_line_test(_none|_01)*\.dart:11");
+    Expect.isTrue(regex.hasMatch(s), "B");
+  }
+
+  // Optimized.
+  for (var i = 0; i < 10000; i++) foo(42);
+  try {
+    foo(null);
+    Expect.fail("Unreachable");
+  } catch (e, stacktrace) {
+    String s = stacktrace.toString();
+    print(s);
+    Expect.isFalse(s.contains("-1:-1"), "C");
+    RegExp regex =
+        new RegExp("optimized_stacktrace_line_test(_none|_01)*\.dart:11");
+    Expect.isTrue(regex.hasMatch(s), "D");
+  }
+}
+
+// (2) Test checked mode exceptions.
+maximus(x) => moritz(x);
+
+moritz(x) {
+  if (x == 333) return (42 as bool) ? 0 : 1;
+  if (x == 777) {
+    bool b = x;
+    return b;
+  }
+
+  return x + 1;
+}
+
+test2() {
+  for (var i = 0; i < 100000; i++) maximus(42);
+  try {
+    maximus(333);
+  } catch (e, stacktrace) {
+    String s = stacktrace.toString();
+    print(s);
+    Expect.isTrue(s.contains("maximus"), "E");
+    Expect.isTrue(s.contains("moritz"), "F");
+    Expect.isFalse(s.contains("-1:-1"), "G");
+  }
+
+  try {
+    maximus(777);
+  } catch (e, stacktrace) {
+    String s = stacktrace.toString();
+    print(s);
+    Expect.isTrue(s.contains("maximus"), "H");
+    Expect.isTrue(s.contains("moritz"), "I");
+    Expect.isFalse(s.contains("-1:-1"), "J");
+  }
+}
+
+main() {
+  test1();
+  test2();
+}
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
new file mode 100644
index 0000000..7b2eae5
--- /dev/null
+++ b/runtime/tests/vm/dart_2/print_flow_graph_determinism_test.dart
@@ -0,0 +1,51 @@
+// 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.
+
+// Verify running with --print-flow-graph produces deterministic output. This is
+// useful for removing noise when tracking down the effects of compiler changes.
+
+import 'dart:async';
+import 'dart:io';
+import 'snapshot_test_helper.dart';
+
+import 'package:expect/expect.dart';
+
+int fib(int n) {
+  if (n <= 1) return 1;
+  return fib(n - 1) + fib(n - 2);
+}
+
+Future<void> main(List<String> args) async {
+  if (args.contains('--child')) {
+    print(fib(35));
+    return;
+  }
+
+  if (!Platform.script.toString().endsWith(".dart")) {
+    return; // Not running from source: skip for app-jit and app-aot.
+  }
+  if (Platform.executable.contains("Product")) {
+    return; // No flow graph printer in product mode.
+  }
+
+  final result1 = await runDart('GENERATE CFG 1', [
+    '--deterministic',
+    '--print-flow-graph',
+    Platform.script.toFilePath(),
+    '--child'
+  ]);
+  final cfg1 = result1.processResult.stderr;
+
+  final result2 = await runDart('GENERATE CFG 2', [
+    '--deterministic',
+    '--print-flow-graph',
+    Platform.script.toFilePath(),
+    '--child'
+  ]);
+  final cfg2 = result2.processResult.stderr;
+
+  Expect.isTrue(
+      cfg1.contains("*** BEGIN CFG"), "Printed at least one function");
+  Expect.stringEquals(cfg1, cfg2);
+}
diff --git a/runtime/tests/vm/dart_2/product_aot_kernel_test.dart b/runtime/tests/vm/dart_2/product_aot_kernel_test.dart
new file mode 100644
index 0000000..5bc2f13
--- /dev/null
+++ b/runtime/tests/vm/dart_2/product_aot_kernel_test.dart
@@ -0,0 +1,92 @@
+// 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.
+
+// This test ensures that certain core libraries are "empty" in product mode (thereby
+// ensuring the right conditional pragma annotations were used).
+
+import "dart:async";
+import "dart:io";
+
+import 'package:expect/expect.dart';
+import 'package:kernel/binary/ast_from_binary.dart'
+    show BinaryBuilderWithMetadata;
+import 'package:kernel/kernel.dart';
+import 'package:path/path.dart' as path;
+import 'package:vm/metadata/bytecode.dart' show BytecodeMetadataRepository;
+
+import 'use_flag_test_helper.dart';
+
+Future main(List<String> args) async {
+  final buildDir = path.dirname(Platform.resolvedExecutable);
+
+  if (!buildDir.contains('Product')) {
+    print('Skipping test due to running in non-PRODUCT configuration.');
+    return;
+  }
+
+  if (Platform.isAndroid) {
+    print('Skipping test due to missing "${path.basename(platformDill)}".');
+    return;
+  }
+
+  await withTempDir('product-aot-kernel-test', (String tempDir) async {
+    final helloFile = path.join(tempDir, 'hello.dart');
+    final helloDillFile = path.join(tempDir, 'hello.dart.dill');
+
+    // Compile script to Kernel IR.
+    await File(helloFile).writeAsString('main() => print("Hello");');
+    await run(genKernel, <String>[
+      '--aot',
+      '--platform=$platformDill',
+      '-o',
+      helloDillFile,
+      helloFile,
+    ]);
+
+    // Ensure the AOT dill file will have effectively empty service related
+    // libraries.
+
+    final component = Component();
+    final bytecodeMetadataRepository = BytecodeMetadataRepository();
+    component.addMetadataRepository(bytecodeMetadataRepository);
+    final List<int> bytes = File(helloDillFile).readAsBytesSync();
+    new BinaryBuilderWithMetadata(bytes).readComponent(component);
+
+    final bytecodeComponent =
+        bytecodeMetadataRepository.mapping[component]?.component;
+    if (bytecodeComponent != null) {
+      final libVmService = bytecodeComponent.libraries.singleWhere(
+          (lib) => lib.importUri.toString() == "'dart:_vmservice'");
+      final libVmServiceToplevelClass = libVmService.classes.single;
+      Expect.isTrue(libVmServiceToplevelClass.name.toString() == "''");
+      Expect.isTrue(libVmServiceToplevelClass.members.functions.isEmpty);
+      Expect.isTrue(libVmServiceToplevelClass.members.fields.isEmpty);
+
+      final libVmServiceIo = bytecodeComponent.libraries.singleWhere(
+          (lib) => lib.importUri.toString() == "'dart:vmservice_io'");
+      final libVmServiceIoToplevelClass = libVmServiceIo.classes.single;
+      Expect.isTrue(libVmServiceIoToplevelClass.name.toString() == "''");
+      Expect.isTrue(libVmServiceIoToplevelClass.members.functions.isEmpty);
+
+      // Those fields are currently accessed by by the embedder, even in product
+      // mode.
+      Expect.isTrue(libVmServiceIoToplevelClass.members.fields.length <= 11);
+    } else {
+      final libVmService = component.libraries
+          .singleWhere((lib) => lib.importUri.toString() == 'dart:_vmservice');
+      Expect.isTrue(libVmService.procedures.isEmpty);
+      Expect.isTrue(libVmService.classes.isEmpty);
+      Expect.isTrue(libVmService.fields.isEmpty);
+
+      final libVmServiceIo = component.libraries.singleWhere(
+          (lib) => lib.importUri.toString() == 'dart:vmservice_io');
+      Expect.isTrue(libVmServiceIo.procedures.isEmpty);
+      Expect.isTrue(libVmServiceIo.classes.isEmpty);
+
+      // Those fields are currently accessed by by the embedder, even in product
+      // mode.
+      Expect.isTrue(libVmServiceIo.fields.length <= 11);
+    }
+  });
+}
diff --git a/runtime/tests/vm/dart_2/random_walk_fuzzer.dart b/runtime/tests/vm/dart_2/random_walk_fuzzer.dart
new file mode 100644
index 0000000..633533b
--- /dev/null
+++ b/runtime/tests/vm/dart_2/random_walk_fuzzer.dart
@@ -0,0 +1,352 @@
+// 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.
+
+// Random-walk fuzzer for the Dart VM.
+//
+// Start with all the classes and libraries and various interesting values.
+// Repeatedly choose one as a receiver, construct a message it is likely to
+// understand, send the message, and add the result.
+//
+// Intentionally not run on the build bots because through dart:io it could
+// trash their setups.
+
+library fuzzer;
+
+import 'dart:io';
+import 'dart:math';
+import 'dart:mirrors';
+import 'dart:typed_data';
+
+var blacklist = [
+  'dart.io.exit',
+  'dart.io.exitCode',
+  'dart.io.sleep',
+  'dart.io.Process.killPid',
+];
+
+final bool trace = false;
+
+void main(List<String> args) {
+  int seed;
+  if (args.length == 1) {
+    seed = int.parse(args[0]);
+  } else {
+    // Dart's built-in random number generator doesn't provide access to the
+    // seed when it is chosen by the implementation. We need to be able to
+    // report this seed to make runs of the fuzzer reproducible, so we create
+    // the seed ourselves.
+
+    // When running on many machines in parallel, the current time alone
+    // is a poor choice of seed.
+    seed = 0;
+    try {
+      var f = new File("/dev/urandom").openSync();
+      seed = (seed << 8) | f.readByteSync();
+      seed = (seed << 8) | f.readByteSync();
+      seed = (seed << 8) | f.readByteSync();
+      seed = (seed << 8) | f.readByteSync();
+      f.close();
+    } catch (e) {
+      print("Failed to read from /dev/urandom: $e");
+    }
+
+    seed ^= new DateTime.now().millisecondsSinceEpoch;
+    seed &= 0xFFFFFFFF;
+  }
+  random = new Random(seed);
+
+  // Information needed to reproduce this run.
+  print("Dart VM fuzzer");
+  print("Executable: ${Platform.executable}");
+  print("Arguments: ${Platform.executableArguments}");
+  print("Version: ${Platform.version}");
+  print("Seed: ${seed}");
+  print("------------------------------------------");
+
+  setupInterestingValues();
+  setupClasses();
+
+  // Bound the number of steps in our random walk so that if any issue is found
+  // it can be reproduced without having to wait too long.
+  for (int i = 0; i < 100000; i++) {
+    fuzz(randomElementOf(candidateReceivers));
+    if (maybe(0.01)) garbageCollect();
+  }
+}
+
+Random random;
+
+bool maybe(probability) => random.nextDouble() < probability;
+
+randomElementOf(list) {
+  return list.length == 0 ? null : list[random.nextInt(list.length)];
+}
+
+class Candidate<T> {
+  Candidate origin;
+  String message;
+  T mirror;
+  trace() {
+    if (origin == null) {
+      print("");
+    } else {
+      origin.trace();
+      print(" $message");
+    }
+    print(mirror);
+  }
+}
+
+List<Candidate<ObjectMirror>> candidateReceivers =
+    new List<Candidate<ObjectMirror>>();
+List<Candidate<InstanceMirror>> candidateArguments =
+    new List<Candidate<InstanceMirror>>();
+
+void addInstance(var instance) {
+  addInstanceMirror(reflect(instance));
+}
+
+void addInstanceMirror(InstanceMirror mirror,
+    [Candidate origin, String message]) {
+  var c = new Candidate<InstanceMirror>();
+  c.mirror = mirror;
+  c.origin = origin;
+  c.message = message;
+
+  candidateReceivers.add(c);
+  candidateArguments.add(c);
+}
+
+void addObjectMirror(ObjectMirror mirror) {
+  var c = new Candidate<ObjectMirror>();
+  c.mirror = mirror;
+  c.origin = null;
+  c.message = null;
+
+  candidateReceivers.add(c);
+}
+
+void setupInterestingValues() {
+  addInstance(null);
+  addInstance(true);
+  addInstance(false);
+
+  addInstance([]);
+  addInstance(const []);
+  addInstance({});
+  addInstance(const {});
+
+  addInstance(() => null);
+
+  addInstance(-1);
+  addInstance(0);
+  addInstance(1);
+  addInstance(2);
+
+  addInstance(1 << 31);
+  addInstance(1 << 31 + 1);
+  addInstance(1 << 31 - 1);
+
+  addInstance(1 << 32);
+  addInstance(1 << 32 + 1);
+  addInstance(1 << 32 - 1);
+
+  addInstance(1 << 63);
+  addInstance(1 << 63 + 1);
+  addInstance(1 << 63 - 1);
+
+  addInstance(1 << 64);
+  addInstance(1 << 64 + 1);
+  addInstance(1 << 64 - 1);
+
+  addInstance(-1.0);
+  addInstance(0.0);
+  addInstance(1.0);
+  addInstance(2.0);
+  addInstance(double.nan);
+  addInstance(double.infinity);
+  addInstance(double.negativeInfinity);
+  addInstance(double.minPositive);
+  addInstance(double.maxFinite);
+
+  addInstance("foo"); // ASCII string
+  addInstance("blåbærgrød"); // Latin1 string
+  addInstance("Îñţérñåţîöñåļîžåţîờñ"); // Unicode string
+  addInstance("𝄞"); // Surrogate pairs
+  addInstance("𝄞"[0]); // Surrogate pairs
+  addInstance("𝄞"[1]); // Surrogate pairs
+  addInstance("\u{0}"); // Non-printing character
+  addInstance("\u{1}"); // Non-printing character
+  addInstance("f\u{0}oo"); // Internal NUL
+  addInstance("blåbæ\u{0}rgrød"); // Internal NUL
+  addInstance("Îñţérñåţîö\u{0}ñåļîžåţîờñ"); // Internal NUL
+  addInstance("\u{0}𝄞"); // Internal NUL
+
+  for (int len = 0; len < 8; len++) {
+    addInstance(fillInt(new Int8List(len)));
+    addInstance(fillInt(new Int16List(len)));
+    addInstance(fillInt(new Int32List(len)));
+    addInstance(fillInt(new Int64List(len)));
+    addInstance(fillInt(new Uint8List(len)));
+    addInstance(fillInt(new Uint16List(len)));
+    addInstance(fillInt(new Uint32List(len)));
+    addInstance(fillInt(new Uint64List(len)));
+    addInstance(fillFloat(new Float32List(len)));
+    addInstance(fillFloat(new Float64List(len)));
+  }
+
+  randomInstance(ignore) {
+    return randomElementOf(candidateArguments).mirror.reflectee;
+  }
+
+  for (int len = 0; len < 8; len++) {
+    addInstance(new List.generate(len, randomInstance));
+  }
+}
+
+void fillInt(TypedData d) {
+  for (var i = 0; i < d.length; i++) {
+    d[i] = random.nextInt(0xFFFFFFFF);
+  }
+}
+
+void fillFloat(TypedData d) {
+  for (var i = 0; i < d.length; i++) {
+    d[i] = random.nextDouble();
+  }
+}
+
+void setupClasses() {
+  currentMirrorSystem().libraries.values.forEach((lib) {
+    if (lib.simpleName == #fuzzer) return; // Don't recurse.
+    addObjectMirror(lib);
+    lib.declarations.values.forEach((decl) {
+      if (decl is ClassMirror) {
+        addObjectMirror(decl);
+      }
+    });
+  });
+}
+
+MethodMirror randomMethodOf(receiver) {
+  if (receiver is ClassMirror) {
+    return randomElementOf(receiver.declarations.values
+        .where((d) => d is MethodMirror && d.isStatic)
+        .toList());
+  } else if (receiver is LibraryMirror) {
+    return randomElementOf(
+        receiver.declarations.values.where((d) => d is MethodMirror).toList());
+  } else if (receiver is InstanceMirror) {
+    var methods = [];
+    var cls = receiver.type;
+    while (cls != reflectClass(Object)) {
+      cls.declarations.values.forEach((d) {
+        if (d is MethodMirror && !d.isStatic) methods.add(d);
+      });
+      cls = cls.superclass;
+    }
+    return randomElementOf(methods);
+  }
+  throw new Error("UNREACHABLE");
+}
+
+String prettyMessageName(receiver, method) {
+  var r = "?", m = "?";
+  if (receiver is InstanceMirror) {
+    r = MirrorSystem.getName(receiver.type.simpleName);
+  } else if (receiver is ClassMirror) {
+    r = MirrorSystem.getName(receiver.simpleName);
+    r = "$r class";
+  } else if (receiver is LibraryMirror) {
+    r = MirrorSystem.getName(receiver.simpleName);
+    r = "$r lib";
+  }
+  m = MirrorSystem.getName(method.simpleName);
+  return "$r>>#$m";
+}
+
+void fuzz(Candidate c) {
+  ObjectMirror receiver = c.mirror;
+  MethodMirror method = randomMethodOf(receiver);
+  if (method == null) return;
+  if (blacklist.contains(MirrorSystem.getName(method.qualifiedName))) return;
+
+  List positional = randomPositionalArgumentsFor(method);
+  Map named = randomNamedArgumentsFor(method);
+  InstanceMirror result;
+
+  String message = prettyMessageName(receiver, method);
+  if (trace) {
+    c.trace();
+    print(message);
+  }
+
+  if (method.isConstructor) {
+    try {
+      result = receiver.newInstance(method.simpleName, positional, named);
+    } catch (e) {}
+  } else if (method.isRegularMethod) {
+    try {
+      result = receiver.invoke(method.simpleName, positional, named);
+    } catch (e) {}
+  } else if (method.isGetter) {
+    try {
+      result = receiver.getField(method.simpleName);
+    } catch (e) {}
+  } else if (method.isSetter) {
+    try {
+      result = receiver.setField(method.simpleName, positional[0]);
+    } catch (e) {}
+  }
+
+  if (result != null) {
+    addInstanceMirror(result, c, message);
+  }
+}
+
+InstanceMirror randomArgumentWithBias(TypeMirror bias) {
+  if (maybe(0.75)) {
+    for (var candidate in candidateArguments) {
+      if (candidate.mirror.type.isAssignableTo(bias)) {
+        return candidate.mirror;
+      }
+    }
+  }
+  return randomElementOf(candidateArguments).mirror;
+}
+
+List randomPositionalArgumentsFor(MethodMirror method) {
+  var result = [];
+  for (int i = 0; i < method.parameters.length; i++) {
+    ParameterMirror p = method.parameters[i];
+    if (!p.isNamed && (!p.isOptional || maybe(0.5))) {
+      result.add(randomArgumentWithBias(p.type));
+    }
+  }
+  return result;
+}
+
+Map randomNamedArgumentsFor(MethodMirror method) {
+  var result = {};
+  for (int i = 0; i < method.parameters.length; i++) {
+    ParameterMirror p = method.parameters[i];
+    if (p.isNamed && maybe(0.5)) {
+      result[p.simpleName] = randomArgumentWithBias(p.type);
+    }
+  }
+
+  return result;
+}
+
+void garbageCollect() {
+  // Chain a bunch of moderately sized arrays, then let go of them. Using a
+  // moderate size avoids our allocations going directly to a large object
+  // page in old space.
+  var n;
+  for (int i = 0; i < 2048; i++) {
+    var m = new List(512);
+    m[0] = n;
+    n = m;
+  }
+}
diff --git a/runtime/tests/vm/dart_2/redirection_type_shuffling_test.dart b/runtime/tests/vm/dart_2/redirection_type_shuffling_test.dart
new file mode 100644
index 0000000..b177334
--- /dev/null
+++ b/runtime/tests/vm/dart_2/redirection_type_shuffling_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+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>;
+}
+
+main() {
+  ClassMirror cm = reflect(new G<int, String>()).type;
+
+  Expect.isTrue(cm.newInstance(#retain, []).reflectee is G<int,String>);
+
+  Expect.isTrue(cm.newInstance(#swap, []).reflectee is G<String,int>);  /// 00: dynamic type error
+}
diff --git a/runtime/tests/vm/dart_2/regress29620_test.dart b/runtime/tests/vm/dart_2/regress29620_test.dart
new file mode 100644
index 0000000..b41f3b7
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress29620_test.dart
@@ -0,0 +1,58 @@
+// 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.
+
+// 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.
+
+// VMOptions=--optimization_counter_threshold=10 --no-use-osr --no-background-compilation
+
+import "package:expect/expect.dart";
+
+class Flag {
+  var value;
+  Flag(this.value);
+
+  static final FLAG = new Flag(0);
+}
+
+@pragma('vm:prefer-inline')
+void checkRange(bit) {
+  if (bit < 0 || bit > 31) {
+    throw "bit must be in [0, 31]";
+  }
+}
+
+@pragma('vm:prefer-inline')
+bool isSet(flags, bit) {
+  checkRange(bit);
+  // Note: > 0 here instead of == 0 to prevent merging into
+  // TestSmi instruction.
+  return (flags & (1 << bit)) > 0;
+}
+
+@pragma('vm:never-inline')
+bool bug(flags) {
+  var bit = Flag.FLAG.value;
+  checkRange(bit);
+  for (var i = 0; i < 1; i++) {
+    bit = Flag.FLAG.value;
+    checkRange(bit);
+  }
+
+  // In early optimization stages `bit` would be a Phi(...). This Phi would be
+  // dominated by checkRange and thus range analysis will infer [0, 31] range
+  // for it - and thus a EliminateEnvironment will make decision that
+  // (1 << bit) can't deoptimize and will detach environment from it. Later
+  // passes will eliminate Phi for `bit` as it is redundant and as a result we
+  // will loose precise range information for `bit` and backend will try
+  // to emit a range check and a deoptimization.
+  return isSet(flags, bit);
+}
+
+main() {
+  for (var i = 0; i < 100; i++) {
+    bug(1);
+  }
+}
diff --git a/runtime/tests/vm/dart_2/regress29846_test.dart b/runtime/tests/vm/dart_2/regress29846_test.dart
new file mode 100644
index 0000000..9657e9a
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress29846_test.dart
@@ -0,0 +1,60 @@
+// 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.
+
+// Regression test for dartbug.com/29846: check that range-based
+// CheckClassId is generated correctly.
+
+// VMOptions=--optimization_counter_threshold=10 --no-background-compilation
+
+import "package:expect/expect.dart";
+
+class B {
+  int x;
+  B(this.x) {}
+}
+
+abstract class A0 {
+  int foo() => bar.x;
+  B get bar;
+}
+
+class A1 extends A0 {
+  B get bar => _bfield;
+  B _bfield = new B(1);
+}
+
+class A2 extends A1 {
+  B get bar => new B(2);
+}
+
+// Several classes with subsequent Cids
+
+class A3 extends A1 {}
+
+class A4 extends A1 {}
+
+// This one does not have _bfield
+
+class A5 extends A0 {
+  B get bar => new B(5);
+}
+
+main() {
+  var b = new B(0);
+  var a1 = new A1();
+  var a2 = new A2();
+  var a3 = new A3();
+  var a4 = new A4();
+  var a5 = new A5();
+
+  for (var i = 0; i < 5; i++) {
+    a1.foo();
+    a2.foo();
+    a3.foo();
+    a4.foo();
+  }
+
+  // CheckClassId should trigger deoptimization
+  Expect.equals(a5.foo(), 5);
+}
diff --git a/runtime/tests/vm/dart_2/regress30853_test.dart b/runtime/tests/vm/dart_2/regress30853_test.dart
new file mode 100644
index 0000000..a514edf
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress30853_test.dart
@@ -0,0 +1,32 @@
+// 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.
+
+// Regression test for dartbug.com/30853: check that we assign correct range
+// to Uint32 operations when creating them from Int64 operations.
+
+// VMOptions=--optimization_counter_threshold=50 --no-background-compilation
+
+import "package:expect/expect.dart";
+
+@pragma('vm:never-inline')
+noop(x) => x;
+
+const int BITS32 = 0xFFFFFFFF;
+
+@pragma('vm:prefer-inline')
+int toUint32(int x) => noop(x & BITS32);
+
+@pragma('vm:never-inline')
+bitNotAsUint32(x) {
+  // After inlining we will have here BoxUint32(UnboxUint32(UnarySmiOp(~, x)))
+  // UnboxUint32 must have correct range assigned, otherwise we will not
+  // emit boxing slowpath and Uint32 4294967294 will become Int32 -2 instead.
+  return toUint32(~x);
+}
+
+main() {
+  for (var i = 0; i < 100; i++) {
+    Expect.equals(0xfffffffe, bitNotAsUint32(1));
+  }
+}
diff --git a/runtime/tests/vm/dart_2/regress32508_test.dart b/runtime/tests/vm/dart_2/regress32508_test.dart
new file mode 100644
index 0000000..37319c2
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress32508_test.dart
@@ -0,0 +1,29 @@
+// 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.
+
+// Regression test for dartbug.com/32508: check that type test which takes
+// a value of a guarded _Closure field is performed correctly.
+
+// VMOptions=--optimization_counter_threshold=10 --no-background-compilation
+
+import "package:expect/expect.dart";
+
+typedef R MyFunc<R, T1, T2>(T1 arg1, T2 arg2);
+
+class X {
+  Function _foo = (x) {};
+
+  bool bar() {
+    if (_foo is MyFunc<dynamic, dynamic, dynamic>) {
+      Expect.fail('Boom!');
+    }
+    return true;
+  }
+}
+
+main() {
+  for (var i = 0; i < 100; i++) {
+    Expect.isTrue(new X().bar());
+  }
+}
diff --git a/runtime/tests/vm/dart_2/regress32597_2_test.dart b/runtime/tests/vm/dart_2/regress32597_2_test.dart
new file mode 100644
index 0000000..9081470
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress32597_2_test.dart
@@ -0,0 +1,47 @@
+// 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.
+
+// Regression test for dartbug.com/32597: incorrect type was assigned to phi
+// in strong mode.
+
+// VMOptions=--optimization_counter_threshold=10 --no-background-compilation
+
+import "package:expect/expect.dart";
+
+class Token {
+  Token next;
+}
+
+class StringToken extends Token {}
+
+class ErrorToken extends Token {}
+
+bool failed = false;
+
+void foo(Token tokens, {bool x: false}) {
+  dynamic v;
+  {
+    Token current = tokens;
+    while (current is ErrorToken) {
+      failed = true;
+      current = null;
+    }
+    v = current;
+  }
+  if (x) {
+    ErrorToken second = v;
+    print(second);
+  }
+}
+
+void main() {
+  Token token = new StringToken();
+  token.next = token;
+
+  for (int i = 0; i < 100; i++) {
+    foo(token);
+  }
+  print(failed ? 'failure' : 'success');
+  Expect.isFalse(failed);
+}
diff --git a/runtime/tests/vm/dart_2/regress32597_test.dart b/runtime/tests/vm/dart_2/regress32597_test.dart
new file mode 100644
index 0000000..969af09
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress32597_test.dart
@@ -0,0 +1,40 @@
+// 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.
+
+// Regression test for dartbug.com/32597: incorrect type was assigned to phi
+// in strong mode.
+
+// VMOptions=--optimization_counter_threshold=10 --no-background-compilation
+
+class Token {
+  Token next;
+}
+
+class StringToken extends Token {}
+
+class ErrorToken extends Token {}
+
+void foo(Token tokens) {
+  Token current = tokens;
+  for (int i = 0; i < 1; i++) {
+    while (current is ErrorToken) {
+      ErrorToken first = current;
+      // Loading phi (created for local variable 'current') from another local
+      // variable ('first') with more specific type should not change the type
+      // assigned to phi.
+      print(first);
+    }
+    current = current.next;
+  }
+}
+
+void main() {
+  Token token = new StringToken();
+  token.next = token;
+
+  for (int i = 0; i < 100; i++) {
+    foo(token);
+  }
+  print('ok');
+}
diff --git a/runtime/tests/vm/dart_2/regress32619_test.dart b/runtime/tests/vm/dart_2/regress32619_test.dart
new file mode 100644
index 0000000..3659926
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress32619_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.
+
+// Regression test for dartbug.com/32619: incorrect widening of smis to int32.
+
+// VMOptions=--optimization-counter-threshold=5 --no-background-compilation
+
+import "package:expect/expect.dart";
+import 'dart:typed_data';
+
+const int _digitBits = 32;
+const int _digitMask = (1 << _digitBits) - 1;
+
+const int _halfDigitBits = _digitBits >> 1;
+const int _halfDigitMask = (1 << _halfDigitBits) - 1;
+
+int _mulAdd(Uint32List multiplicandDigits, int i, Uint32List accumulatorDigits,
+    int j, int n) {
+  int carry = 0;
+  while (--n >= 0) {
+    int ml = multiplicandDigits[i] & _halfDigitMask;
+    int mh = multiplicandDigits[i++] >> _halfDigitBits;
+    int ph = mh * 4;
+    int q1 = ((ph & _halfDigitMask) << _halfDigitBits);
+    int pl = 4 * ml + q1 + accumulatorDigits[j];
+    carry = (pl >> _digitBits) + (ph >> _halfDigitBits);
+    accumulatorDigits[j++] = pl & _digitMask;
+  }
+
+  return carry;
+}
+
+main() {
+  var multiplicandDigits = new Uint32List.fromList([0, 294967296, 0, 0]);
+  var accumulatorDigits = new Uint32List.fromList([0, 4, 4, 0, 0, 0]);
+
+  var d1 = _mulAdd(multiplicandDigits, 0, accumulatorDigits, 0, 2);
+
+  Expect.equals(0, d1);
+}
diff --git a/runtime/tests/vm/dart_2/regress36953_test.dart b/runtime/tests/vm/dart_2/regress36953_test.dart
new file mode 100644
index 0000000..617049b
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress36953_test.dart
@@ -0,0 +1,30 @@
+// 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.
+
+// Regression test for dartbug.com/36953: check that phi is inserted correctly
+// when try block has no normal exit.
+
+// VMOptions=--optimization_counter_threshold=10 --deterministic
+
+import "package:expect/expect.dart";
+
+void testBody() {
+  var v;
+  do {
+    try {} catch (e, st) {
+      continue;
+    }
+
+    try {
+      v = 10;
+      throw "";
+    } catch (e, st) {}
+  } while (v++ < 10);
+  Expect.equals(11, v);
+}
+
+void main() {
+  testBody();
+  testBody();
+}
diff --git a/runtime/tests/vm/dart_2/regress38467_test.dart b/runtime/tests/vm/dart_2/regress38467_test.dart
new file mode 100644
index 0000000..5bf5086
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress38467_test.dart
@@ -0,0 +1,32 @@
+// 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.
+
+// 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.
+
+// VMOptions=--optimization_counter_threshold=10 --deterministic
+
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+
+Float64List foo = new Float64List(2);
+Float64List bar = new Float64List(2);
+
+void prepare() {
+  bar = new Float64List.view(foo.buffer, 8);
+}
+
+@pragma('vm:never-inline')
+testMain(Float64List xfoo, Float64List xbar) {
+  xfoo[1] = 1.0;
+  xbar[0] = 2.0;
+  return xfoo[1];
+}
+
+void main() {
+  prepare();
+  Expect.equals(2.0, testMain(foo, bar));
+}
diff --git a/runtime/tests/vm/dart_2/regress38654_test.dart b/runtime/tests/vm/dart_2/regress38654_test.dart
new file mode 100644
index 0000000..4aed202
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress38654_test.dart
@@ -0,0 +1,606 @@
+// 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.
+
+// See https://github.com/dart-lang/sdk/issues/38654 for context.
+
+// The Dart Project Fuzz Tester (1.53).
+// Program generated as:
+//   dart dartfuzz.dart --seed 194851581 --no-fp --no-ffi
+
+import 'dart:async';
+import 'dart:cli';
+import 'dart:collection';
+import 'dart:convert';
+import 'dart:core';
+import 'dart:io';
+import 'dart:isolate';
+import 'dart:math';
+import 'dart:typed_data';
+
+Map<int, String> var0 = {
+  39: 'sl2a(',
+  29: 'HGYdMd',
+  93: '\u2665',
+  97: 'hJ',
+  38: 'O',
+  25: '',
+  40: ''
+};
+int var1 = 56;
+int var2 = -9;
+bool var3 = false;
+int var4 = -77;
+double var5 = 0.9130097229882881;
+String var6 = '\u2665g';
+List<int> var7 = [-4294967280, -46, -51, 13, -77, -20];
+Set<int> var8 = {
+  -9223372036854775680,
+  25,
+  -43,
+  2,
+  -57,
+  -9223372030412324865,
+  4294967423,
+  -39
+};
+Map<int, String> var9 = {90: 'DXbRR', 8: 's\u2665y', 51: '0wumJ', 33: 'aee'};
+
+String foo0() {
+  {
+    int loc0 = 79;
+    while (--loc0 > 0) {
+      for (int loc1 in ((var7 +
+              [
+                -51,
+                Int32x4.wwzy,
+                (((var3 ? (--var2) : 21) < -40)
+                    ? (var3 ? var2 : var7[var1])
+                    : (var1--)),
+                ((var3
+                        ? Float32x4.wyyy
+                        : var7[
+                            (false ? var4 : ZLibOption.DEFAULT_WINDOW_BITS)]) <<
+                    var7[var7[-32769]]),
+                (var3 ? 8 : var7[-9223372036854775680]),
+                (Int32x4.xxww ^ Int32x4.zzyy)
+              ]) ??
+          ((!((var0 !=
+                  {
+                    96: 'r&\u2665P',
+                    94: ('JXX ' + var6),
+                    62: '\u26656',
+                    35: ListBase.listToString(var7)
+                  })))
+              ? ((var3 ? var7 : (true ? var7 : var7)) ??
+                  [
+                    (false ? var2 : -66),
+                    -55,
+                    (-(var7[loc0])),
+                    var7[-12],
+                    ((((27 + var1)).isInfinite
+                            ? var3
+                            : (var3 ? (var9[var7[-88]]).isEmpty : var3))
+                        ? -4294934528
+                        : var1),
+                    -40,
+                    var7[var7[var7[Int32x4.wxyw]]],
+                    14
+                  ])
+              : [Float32x4.yxyy]))) {
+        /*
+         * Multi-line
+         * comment.
+         */
+        {
+          int loc2 = 67;
+          while (--loc2 > 0) {
+            var8 = {loc1, 62, -37, Float32x4.yxwz, -42};
+          }
+        }
+        var9.forEach((loc2, loc3) {
+          var7 = var7;
+          try {
+            loc3 ??= 'tSWbA';
+          } catch (exception, stackTrace) {
+            for (int loc4 in [
+              ((!((((-82 * var7[-28])).toString() == (var0[31] ?? var6))))
+                  ? (--var2)
+                  : (--var4))
+            ]) {
+              var7[Int32x4.wxzx] ~/= Int32x4.ywwx;
+            }
+            var3 ??= var3;
+          } finally {
+            var0 ??= var9;
+          }
+        });
+      }
+    }
+  }
+  return ((var3 &&
+          (((var3 ? true : (var3 || var3)) ? false : false)
+              ? true
+              : (!((false && false)))))
+      ? 'V-5p'
+      : (((Float32x4.xwwx > var7[var2])
+              ? var6
+              : var9[(((--var2)).isEven ? -90 : (++var2))]) ??
+          (var3 ? '' : '!5s#rtD')));
+}
+
+Set<int> foo1(int par1, bool par2) {
+  // Single-line comment.
+  {
+    int loc0 = 68;
+    while (--loc0 > 0) {
+      {
+        List<int> loc1 = [
+          var1,
+          -13,
+          (false ? ((~(19)) - ((!(true)) ? (par1++) : -89)) : (~((var2--)))),
+          Float32x4.yzww,
+          var7[(~((--par1)))],
+          (-99 % par1),
+          (true ? (~(var7[par1])) : Int32x4.xyxw)
+        ];
+        for (int loc2 in var8) {
+          var7[16] <<= Float32x4.yyyx;
+        }
+        for (int loc2 = 0; loc2 < 33; loc2++) {
+          if (var3) {
+            var0 = (Map.unmodifiable(var9) ??
+                (Map.unmodifiable(var9) ??
+                    Map.from({6: var9[var1], 28: foo0(), 36: '8+'})));
+            var9[((-93 * loc1[loc2]) +
+                (((!((!(par2)))) || (!(par2)))
+                    ? (var4 ~/ JsonUtf8Encoder.DEFAULT_BUFFER_SIZE)
+                    : -9223372032559775745))] ??= var6;
+          }
+          var3 = ((!((loc1[loc0] != (false ? (--var4) : var1)))) ||
+              ('').endsWith('xTYEp\u2665'));
+        }
+      }
+      for (int loc1 in var7) {
+        var7[Float32x4.ywzy] >>= var2;
+        /*
+         * Multi-line
+         * comment.
+         */
+        var8 = (((false ? var8 : {var1, Float32x4.xwyw}) ??
+                ({(Int32x4.wxyy & var7[(par1--)])} ??
+                    (var3
+                        ? {var7[73], 20, var4, (var7[(-20 | loc1)] * 84), 47}
+                        : (par2
+                            ? {
+                                8,
+                                -66,
+                                (((var7[var7[-56]])
+                                            .toRadixString(Int32x4.wyxx) !=
+                                        (('j' ?? 'r')).toLowerCase())
+                                    ? var7[var7[(var2++)]]
+                                    : (-(Duration.microsecondsPerDay))),
+                                (~(((!(true))
+                                    ? (false
+                                        ? (++var2)
+                                        : var7[ZLibOption.STRATEGY_FILTERED])
+                                    : Float32x4.xxyz))),
+                                (var3
+                                    ? (true
+                                        ? (-95 -
+                                            (-25 ??
+                                                ((false ? true : var3)
+                                                    ? Int32x4.xxww
+                                                    : var7[-29])))
+                                        : (var2++))
+                                    : -34)
+                              }
+                            : ({(++var4), par1, (-81 % var7[-54])})
+                                .toSet())))) ??
+            {
+              (~((-((loc1++))))),
+              (var7[var7[4295032832]] - RawSocketOption.levelIPv4)
+            });
+      }
+    }
+  }
+  return {
+    var7[var2],
+    var2,
+    (-(((par2 && par2) ? Int32x4.ywzw : Float32x4.wywx))),
+    ((!(NetworkInterface.listSupported))
+        ? (--var4)
+        : (((var6).isEmpty
+                ? (-73 * ((var7[var4]).isOdd ? Float32x4.xwww : -63))
+                : -4) -
+            (~(69)))),
+    (((true
+                ? (true
+                    ? -9223372032559808257
+                    : (~((par2 ? (var1--) : (false ? var7[-4] : var1)))))
+                : 27) <<
+            Float32x4.xyzy) -
+        ((~(var7[Float32x4.xyzz])) &
+            (((par2 ? true : false) ? par2 : true)
+                ? 44
+                : ((!(par2)) ? -57 : var7[var2])))),
+    (MapBase.mapToString((Map.from({
+              77: ((!(false)) ? var6 : var0[var7[var7[var7[-63]]]]),
+              87: '9vj',
+              50: 'e\u26655-',
+              46: var9[-32],
+              96: var6
+            }) ??
+            {
+              32: var0[-9223372032559742976],
+              4: SetBase.setToString(var8),
+              67: var0[Int32x4.yxww],
+              53: var9[53],
+              91: var6,
+              17: '2gtffn'
+            })))
+        .length
+  };
+}
+
+String foo2(Map<int, String> par1, bool par2) {
+  try {
+    par2 = (false
+        ? false
+        : (SecurityContext.alpnSupported
+            ? false
+            : (var3 ? ('aXL').isNotEmpty : (77).isNegative)));
+    if ((((++var4) ~/ (var4 & var1))).isEven) {
+      /*
+       * Multi-line
+       * comment.
+       */
+      var7 ??= (((((-(var7[-2]))).toString() ?? foo0()) ??
+              (true
+                  ? (par1[(-57 + (var7[52] | -91))] + var9[57])
+                  : Uri.decodeFull((false
+                      ? '17'
+                      : (8).toStringAsExponential(var7[var7[8]]))))))
+          .codeUnits;
+    }
+  } catch (exception, stackTrace) {
+    {
+      bool loc0 = ({
+        61: String.fromEnvironment(('K4\u2665dc0' + var6)),
+        85: ((!(true)) ? 'I&P' : par1[(~((-((++var4)))))])
+      }).isNotEmpty;
+      {
+        Map<int, String> loc1 =
+            Map.from({55: (true ? '' : 'ZoDx\u{1f600}'), 82: foo0()});
+
+        /// Single-line documentation comment.
+        var3 = var3;
+      }
+      {
+        int loc1 = 81;
+        while (--loc1 > 0) {
+          var3 = (!((List.filled(38, 87) !=
+              ((false ? (true ? loc0 : true) : var3) ? var7 : var7))));
+          try {
+            par2 = var3;
+            switch (loc1) {
+              case 1947756698:
+                {
+                  var7 = [
+                    [(--var1), -74, (-(Float32x4.ywyw))][((-(38)) | (var2--))],
+                    Float32x4.yyzy,
+                    (Int32x4.yxzx % Int32x4.ywyx),
+                    var4,
+                    (loc0 ? (var1--) : Float32x4.xzxy),
+                    (-((~(-15))))
+                  ];
+
+                  /// Single-line documentation comment.
+                  throw {
+                    (true ? ((var4++) ~/ (-69 ?? 78)) : (var1--)),
+                    (--var1),
+                    (-((var2--))),
+                    (-82 % (-30).bitLength),
+                    14,
+                    32768,
+                    Int32x4.zxwy
+                  };
+                }
+                break;
+              case 1947756704:
+                {
+                  if (true) {
+                    break;
+                  }
+                }
+                break;
+            }
+          } catch (exception, stackTrace) {
+            var6 = 'YgW\u{1f600}';
+            if ((!(((true ? loc0 : var3) &&
+                ((var3 ? ((var1++)).isFinite : par2) || var3))))) {
+              try {
+                return foo0();
+              } catch (exception, stackTrace) {
+                var6 = foo0();
+              }
+              par1 = ((par2 ? (par1 ?? Map.identity()) : var9) ?? var9);
+            } else {
+              var7 ??= var7;
+              return 'ACaB#Z1';
+            }
+          }
+        }
+      }
+    }
+    for (int loc0 = 0; loc0 < 15; loc0++) {
+      var7[(-(((Uint64List.bytesPerElement).isFinite ? -12 : -46)))] ~/= (true
+          ? loc0
+          : (~((var7[(14 >> (-((var1--))))] ^ (9223372032559808639 ?? loc0)))));
+    }
+  } finally {
+    /*
+     * Multi-line
+     * comment.
+     */
+    try {
+      {
+        int loc0 = 73;
+        while (--loc0 > 0) {
+          {
+            int loc1 = 0;
+            do {
+              var4 <<= loc0;
+              for (int loc2 in var8) {
+                par2 = true;
+                par2 ??= (foo0()).isEmpty;
+              }
+            } while (++loc1 < 73);
+          }
+          var9 = var0;
+        }
+      }
+      for (int loc0 = 0; loc0 < 96; loc0++) {
+        /// Single-line documentation comment.
+        try {
+          par2 ??= ('(b').endsWith('x-f76ee');
+          var3 = var3;
+        } catch (exception, stackTrace) {
+          var8 ??= foo1((var3 ? 51 : (false ? Int32x4.zzxy : (-((~(-84)))))),
+              (NetworkInterface.listSupported || true));
+        }
+      }
+    } catch (exception, stackTrace) {
+      for (int loc0 in [
+        (~((-(((par2 ? Int32x4.zzzw : var2) * (-(89))))))),
+        -14,
+        -88,
+        (var4++),
+        (var7[((var7[Float32x4.xxxx] % (~(var7[var4]))) | -16)] |
+            (var7[Float32x4.zwwz] ^ -9223372036854775681))
+      ]) {
+        var7[(par2 ? 60 : (-7 >> -53))] ??= Int32x4.yzxw;
+        for (int loc1
+            in (var3 ? (((loc0 * var7[16])).toString()).codeUnits : var7)) {
+          var0.forEach((loc2, loc3) {
+            var3 ??= (foo0()).isNotEmpty;
+            throw (var4++);
+          });
+        }
+      }
+    } finally {
+      try {
+        var8 = ((!(true))
+            ? {Float32x4.zzwy, 67, -6, 85}
+            : foo1(Float32x4.zwxy, var3));
+        var8 = foo1(
+            (-54).abs(),
+            ((var3 ? true : (!(var3)))
+                ? (!((Uri.encodeFull('aILQc')).endsWith('+7o0Q6b')))
+                : ((true ? ('bEIx').endsWith(par1[var2]) : par2)
+                    ? false
+                    : ({
+                          -77,
+                          (false ? -9223372036854775792 : 4294968296),
+                          var4,
+                          var7[var7[var7[var2]]]
+                        } !=
+                        {
+                          var7[-80],
+                          (true ? var7[22] : (-(58))),
+                          -77,
+                          (var7[Int32x4.wxwz] ~/ 66)
+                        }))));
+      } catch (exception, stackTrace) {
+        try {
+          var6 ??= par1[(('R12').isNotEmpty
+              ? (par2 ? 4294967396 : var2)
+              : (((var0).isEmpty ? true : par2) ? var4 : var2))];
+          var8 ??= (var8 ??
+              {
+                (~(((var7[var2] ?? 86) >>
+                    (((-(var7[var1]))).isNaN
+                        ? (var3 ? (false ? -4294901760 : (-(var7[32]))) : var1)
+                        : var4)))),
+                Int32x4.wyzy
+              });
+        } catch (exception, stackTrace) {
+          var9 = (Map.of({
+                59: var6,
+                3: var0[DateTime.may],
+                49: par1[var2],
+                71: '6',
+                77: ((!(true)) ? ('QB\u2665OU6' ?? 'r-\u2665') : foo0()),
+                88: foo0()
+              }) ??
+              var0);
+          var6 ??= ((('').substring(40, (~(Int32x4.yxxx))) ??
+                  ((var9[81] ?? '0(G') + ('u-+').toLowerCase())))
+              .trimRight();
+        }
+        var7 = [-9223372032559808512];
+      } finally {
+        var4 -= var7[(++var2)];
+      }
+      var0.forEach((loc0, loc1) {
+        switch (Int32x4.xyyw) {
+          case 2310807338:
+            {
+              var9[((var7[var7[var1]] % (~(49))) & (~((var7[34]).toInt())))] ??=
+                  ('5j' ?? 'jfHUh');
+              var8 ??= ((!((!(var3))))
+                  ? (par2
+                      ? var8
+                      : ((var7[(-38 - (var3 ? -38 : -91))]).isNegative
+                          ? (true
+                              ? (({-83, loc0} ??
+                                      {
+                                        var1,
+                                        27,
+                                        -73,
+                                        var7[var4],
+                                        (-88 +
+                                            (~(((var3
+                                                    ? ((-(-51)) + -60)
+                                                    : var7[-21]) ??
+                                                -65))))
+                                      }))
+                                  .difference({
+                                  (-(Float32x4.yxzw)),
+                                  (--var2),
+                                  Int32x4.wywz,
+                                  (-(((true
+                                          ? (true
+                                              ? (true ? (!(var3)) : true)
+                                              : true)
+                                          : (var8 != {(~(loc0)), 28, -96}))
+                                      ? (par2
+                                          ? ((par2
+                                                  ? var7[var7[(++var4)]]
+                                                  : (var4--)) +
+                                              57)
+                                          : ((((var3 ? false : true)
+                                                      ? par2
+                                                      : par2)
+                                                  ? (var4 * var7[-74])
+                                                  : var2) >>
+                                              (false ? 63 : -23)))
+                                      : (false ? -6 : (par2 ? 10 : var2))))),
+                                  -35,
+                                  (-(-92)),
+                                  var7[DateTime.saturday]
+                                })
+                              : Set.identity())
+                          : (par2
+                              ? {(-((var2 | (-(-57)))))}
+                              : ((var4 < 10)
+                                  ? foo1(var7[8], par2)
+                                  : (var3
+                                      ? {96, 82, var7[(++var4)]}
+                                      : {var2})))))
+                  : foo1(
+                      ((false || true)
+                          ? loc0
+                          : ((var3
+                                  ? 49
+                                  : ((var2 ?? var7[(-((~(23))))]) >> 97)) <<
+                              var7[34])),
+                      (!(par2))));
+            }
+            break;
+          case 2310807345:
+            {
+              var8 ??= ((foo1((false ? var1 : (var4++)), (!(par2))) ??
+                      ((var8 ??
+                              {
+                                var4,
+                                -22,
+                                (-(var7[((~(Float32x4.zyzx)) | var7[-23])])),
+                                -35
+                              }) ??
+                          {var1, 21, var2, var7[Float32x4.ywyw], loc0})) ??
+                  foo1(var7[(~(-75))], (!(false))));
+              {
+                int loc2 = 64;
+                while (--loc2 > 0) {
+                  var7 = var7;
+
+                  /// Single-line documentation comment.
+                  if (true) {
+                    par2 = (var8).add(((var7[var1] + (-(4294967425))) ??
+                        var7[((-(-9223372032559775745)) - (--var4))]));
+                    if ((Map.from(par1)).isEmpty) {
+                      var9 ??= ((Map.unmodifiable(Map.unmodifiable(par1)) ??
+                              (((var2).isInfinite ? var9 : par1) ??
+                                  Map.unmodifiable((par1 ?? par1)))) ??
+                          (Map.unmodifiable({
+                                51: par1[(~((~(Uint64List.bytesPerElement))))],
+                                14: foo0(),
+                                69: var0[var1],
+                                56: loc1,
+                                41: (false ? var0[Int32x4.yxwy] : loc1),
+                                30: ((!(var3)) ? '' : 'L'),
+                                80: 'UsR6'
+                              }) ??
+                              {
+                                67: loc1,
+                                73: ((var4).isEven
+                                    ? ('' ?? (var3 ? foo0() : var6))
+                                    : foo0())
+                              }));
+                    }
+                  } else {
+                    var7[(SecurityContext.alpnSupported
+                        ? (~((true ? Float32x4.ywzw : -97)))
+                        : loc2)] = (--var2);
+                  }
+                }
+              }
+            }
+            break;
+        }
+        print(true);
+      });
+    }
+    for (int loc0 in [
+      (++var1),
+      (var7[(~(((false ? (false && par2) : (71).isInfinite)
+              ? var7[87]
+              : -9223372028264841217)))] -
+          var7[var2]),
+      ((~((-(((true ? true : false)
+              ? var7[-78]
+              : (((false || false) ? true : (true && (false && true)))
+                  ? var2
+                  : (par2 ? -13 : 65))))))) >>
+          ((var3 ? false : false) ? (~((~(-97)))) : Uint8List.bytesPerElement))
+    ]) {
+      // Single-line comment.
+      break;
+    }
+  }
+  return 'F+\u2665';
+}
+
+main() {
+  try {
+    foo2(
+        ((var3 ? var9 : var0) ??
+            {
+              30: '',
+              58: '\u2665bc',
+              45: ' \u{1f600}',
+              79: 'zLuiBp',
+              2: 'X9\u{1f600}2Lq',
+              78: 'PP6NIH',
+              77: 'OB',
+              80: 'EcL\u{1f600}yp'
+            }),
+        (!(((47).toString()).isEmpty)));
+  } on OutOfMemoryError {
+    print('oom');
+    exit(254);
+  } catch (e, st) {
+    print('foo2 throws');
+  }
+}
diff --git a/runtime/tests/vm/dart_2/regress38965_test.dart b/runtime/tests/vm/dart_2/regress38965_test.dart
new file mode 100644
index 0000000..ef9f4fd
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress38965_test.dart
@@ -0,0 +1,11 @@
+// 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.
+
+// Regression test for dartbug.com/38965.
+
+int a = -1;
+
+main() {
+  false ? (-0.0 as int) : (++a);
+}
diff --git a/runtime/tests/vm/dart_2/regress38979_test.dart b/runtime/tests/vm/dart_2/regress38979_test.dart
new file mode 100644
index 0000000..b128249
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress38979_test.dart
@@ -0,0 +1,58 @@
+// 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.
+
+// Verifies that compiler doesn't crash on a particular piece of code.
+
+import "package:expect/expect.dart";
+import 'dart:typed_data';
+
+Int8List var3 = Int8List(1);
+bool var14 = true;
+Duration var15 = Duration();
+int var16 = 22;
+String var18 = '';
+Map<bool, bool> var25 = {};
+Map<bool, int> var26 = {};
+Map<int, String> var30 = {};
+Map<String, bool> var31 = {};
+
+int foo1(Int8List par1, Map<bool, int> par2) {
+  throw 'err';
+}
+
+class X0 {
+  Int32x4 foo0_0(Duration par1, Set<bool> par2) {
+    if (var14) {
+      {
+        int loc0 = 0;
+        do {
+          var31 = {
+            (String.fromCharCode(((true ? true : true)
+                    ? (var14 ? 33 : var16)
+                    : (-(foo1(var3,
+                        {(false ? false : var14): (true ? 20 : var3[27])})))))):
+                ((((var16 > (-((-(loc0))))) ? Duration() : Duration()) +
+                        (var14 ? (true ? var15 : par1) : Duration())) <
+                    Duration()),
+            (((var30[(Int32x4.yzxw as int)]).toUpperCase()) +
+                (Uri.encodeComponent(('2' ??
+                    (var25[true]
+                        ? (String.fromEnvironment(''))
+                        : var18))))): (!(var14)),
+            (var31['MgOdzM']
+                    ? var30[15]
+                    : (('D9q6Ma').substring(
+                        (~((--var16))), foo1(var3, (false ? {} : var26))))):
+                (!(false)),
+          };
+        } while (++loc0 < 39);
+      }
+    }
+  }
+}
+
+main() {
+  Expect.throws(() => X0().foo0_0(Duration(), {true, false}),
+      (e) => e is NoSuchMethodError);
+}
diff --git a/runtime/tests/vm/dart_2/regress40189_test.dart b/runtime/tests/vm/dart_2/regress40189_test.dart
new file mode 100644
index 0000000..9f30e0c
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress40189_test.dart
@@ -0,0 +1,18 @@
+// 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=--lazy-async-stacks --no-causal-async-stacks
+
+import "package:expect/expect.dart";
+
+import 'dart:collection';
+
+main() {
+  for (final value in [const [], const {}.values]) {
+    final other = List.from(value);
+    Expect.equals(other.length, value.length);
+    for (final entry in value) {
+      other.contains(entry);
+    }
+  }
+}
diff --git a/runtime/tests/vm/dart_2/regress_33999_test.dart b/runtime/tests/vm/dart_2/regress_33999_test.dart
new file mode 100644
index 0000000..e7e9e89
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_33999_test.dart
@@ -0,0 +1,58 @@
+// 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.
+
+// Test checking that canonicalization rules for AssertAssignable IL
+// instructions take into account that these instructions can be
+// on unreachable code paths.
+
+// Class with two type parameters.
+class A<U, T> {
+  T field1;
+  List<T> field2;
+  T Function(T) field3;
+}
+
+// Class with a single type parameter
+class B<T> {
+  T field1;
+  List<T> field2;
+  T Function(T) field3;
+}
+
+var TRUE = true;
+
+void foo(bool f) {
+  dynamic x = f ? new B<int>() : new A<String, int>();
+  if (f == TRUE) {
+    // Prevent constant folding by accessing a global
+    x.field1 = 10;
+    x.field2 = <int>[];
+    x.field3 = (int i) => ++i;
+  } else {
+    x.field1 = 10;
+    x.field2 = <int>[];
+    x.field3 = (int i) => ++i;
+  }
+}
+
+void bar() {
+  // When foo() is inlined into bar() a graph where
+  // allocation of B will flow into code-path that
+  // expects A will arise. On that code-path (which
+  // is dynamically unreachable because it is guarded
+  // by CheckClass) there will be an assert assignable
+  // against A.T.
+  // Canonicalization rule should not crash when it tries
+  // to instantiate this type.
+  foo(true);
+}
+
+void main() {
+  // Execute both paths to populate ICData.
+  foo(true);
+  foo(false);
+
+  // Force optimization of bar().
+  for (var i = 0; i < 100000; i++) bar();
+}
diff --git a/runtime/tests/vm/dart_2/regress_34755_test.dart b/runtime/tests/vm/dart_2/regress_34755_test.dart
new file mode 100644
index 0000000..c13cfcf
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_34755_test.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.
+
+// Test checking that null is handled correctly at the call-sites that
+// are tracking static type exactness.
+
+import 'package:expect/expect.dart';
+
+void invokeAdd(List<int> l) {
+  l.add(10);
+}
+
+void main() {
+  Expect.throws(() => invokeAdd(null), (error) => error is NoSuchMethodError);
+}
diff --git a/runtime/tests/vm/dart_2/regress_35481_test.dart b/runtime/tests/vm/dart_2/regress_35481_test.dart
new file mode 100644
index 0000000..21fd2ed
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_35481_test.dart
@@ -0,0 +1,26 @@
+// 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.
+
+// 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.
+//
+// Here, all phi nodes generated within the try block are kept alive, and one of
+// the phi nodes within toList (which gets inlined) uses the value of an
+// instance call to setLength. Inlining setLength wthin toList replaced the
+// (binding) InstanceCall instruction with a (non-binding) StoreInstanceField
+// instruction, which caused the phi node to have an invalid SSA index argument.
+
+void foo() {
+  try {
+    for (var i = 0; i < 1000; i++) {
+      List(10).toList(growable: true);
+    }
+  } catch (e) {}
+}
+
+void main() {
+  foo();
+  foo();
+}
diff --git a/runtime/tests/vm/dart_2/regress_35887_test.dart b/runtime/tests/vm/dart_2/regress_35887_test.dart
new file mode 100644
index 0000000..b0018fb
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_35887_test.dart
@@ -0,0 +1,36 @@
+// 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.
+//
+// Regression test for dartbug.com/35887.
+//
+// The call specializer inserts a "CheckNull" into main() here, but CheckNull
+// was broken in JIT because it didn't create a deopt-info to hold the
+// environment in case the it was inside a try/catch block.
+//
+// VMOptions=--optimization_counter_threshold=10 --no-background-compilation
+
+import 'package:expect/expect.dart';
+
+class Value {
+  const Value(this.val);
+
+  final int val;
+}
+
+const int limit = 50;
+
+Value maybeWrap(int i) => i < limit ? new Value(i) : null;
+
+Future<void> test() async {
+  for (int i = 0; i < 60; ++i) {
+    if (maybeWrap(i).val == -1) {
+      // never mind we just do something with it
+      print(i);
+    }
+  }
+}
+
+void main() {
+  test().catchError((e) {});
+}
diff --git a/runtime/tests/vm/dart_2/regress_36374_test.dart b/runtime/tests/vm/dart_2/regress_36374_test.dart
new file mode 100644
index 0000000..45df0f1
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_36374_test.dart
@@ -0,0 +1,29 @@
+// 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.
+//
+// Regression test for https://github.com/dart-lang/sdk/issues/36374.
+//
+// Bytecode flow graph builder should be able to correctly handle non-empty
+// expression stack when throwing an exception: dropping some of the entries,
+// while keeping entries which could still be used.
+//
+// VMOptions=--optimization_counter_threshold=10 --deterministic
+
+class Foo {
+  Foo(int x);
+}
+
+class Bar {
+  Bar(String y, Foo z);
+}
+
+foo(Object arg) {
+  return Bar('abc', arg == null ? null : Foo((throw 'Err')));
+}
+
+main() {
+  for (int i = 0; i < 20; ++i) {
+    foo(null);
+  }
+}
diff --git a/runtime/tests/vm/dart_2/regress_36590_test.dart b/runtime/tests/vm/dart_2/regress_36590_test.dart
new file mode 100644
index 0000000..645c45b
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_36590_test.dart
@@ -0,0 +1,58 @@
+// 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.
+//
+// Regression test for https://github.com/dart-lang/sdk/issues/36590.
+//
+// This test verifies that compiler does not crash if OSR occurs at
+// CheckStack bytecode instruction which is not at the beginning of a join
+// block in bytecode (if the end of the "loop" body is unreachable and hence
+// there is no backward jump).
+//
+// VMOptions=--deterministic
+
+var var6 = [1, 2, 3];
+
+void bar() {}
+
+var cond_true = true;
+
+void foo() {
+  for (int i = 0; i < 9995; ++i) {
+    var6[0] += 1;
+  }
+  if (cond_true) {
+    var6[0] += 1;
+    for (var loc1 in var6) {
+      break;
+    }
+  }
+  if (cond_true) {
+    var6[0] += 1;
+    for (var loc1 in var6) {
+      break;
+    }
+  }
+  if (cond_true) {
+    var6[0] += 1;
+    for (var loc1 in var6) {
+      break;
+    }
+  }
+  if (cond_true) {
+    var6[0] += 1;
+    for (var loc1 in var6) {
+      break;
+    }
+  }
+  if (cond_true) {
+    var6[0] += 1;
+    for (var loc1 in var6) {
+      break;
+    }
+  }
+}
+
+main() {
+  foo();
+}
diff --git a/runtime/tests/vm/dart_2/regress_36636_test.dart b/runtime/tests/vm/dart_2/regress_36636_test.dart
new file mode 100644
index 0000000..1daf616
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_36636_test.dart
@@ -0,0 +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.
+
+// 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
new file mode 100644
index 0000000..e0d818c
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_37382_test.dart
@@ -0,0 +1,14 @@
+// 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:expect/expect.dart';
+
+class A<X, Y> {
+  R f<R>(R Function<S, T>(A<S, T>) t) => t<X, Y>(this);
+}
+
+main() {
+  A<num, num> a = A<int, int>();
+  Expect.equals(a.f.runtimeType.toString(), '<R>(<S, T>(A<S, T>) => R) => R');
+}
diff --git a/runtime/tests/vm/dart_2/regress_38182_test.dart b/runtime/tests/vm/dart_2/regress_38182_test.dart
new file mode 100644
index 0000000..952bee4
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_38182_test.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.
+
+// VMOptions=--stacktrace_every=1 --deterministic
+
+void foo1(par) {
+  try {
+    () {
+      // The parameter `par` has to be captured within a closure, but it doesn't
+      // matter whether or not it's actually used.
+      print(par.runtimeType);
+    };
+    // We need to throw, otherwise the crash doesn't happen. We don't need to
+    // catch it explicitly, however.
+    throw '';
+  } finally {
+    // We need to trigger a lot of stack overflow checks. Somewhere around
+    // 20000 seems to work.
+    int x = 0;
+    for (int loc1 = 0; loc1 < 20000; loc1++) {
+      x += loc1;
+    }
+    print(x);
+  }
+}
+
+main() {
+  try {
+    // Parameter isn't important.
+    foo1(null);
+  } catch (e) {
+    print('foo1 threw');
+  }
+}
diff --git a/runtime/tests/vm/dart_2/regress_38661_test.dart b/runtime/tests/vm/dart_2/regress_38661_test.dart
new file mode 100644
index 0000000..2e1ba13
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_38661_test.dart
@@ -0,0 +1,27 @@
+// 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=--serialize_flow_graphs_to=il_tmp.txt
+// VMOptions=--serialize_flow_graphs_to=il_tmp.txt --populate_llvm_constant_pool
+// VMOptions=--serialize_flow_graphs_to=il_tmp.txt --no_serialize_flow_graph_types
+// VMOptions=--serialize_flow_graphs_to=il_tmp.txt --verbose_flow_graph_serialization
+// VMOptions=--serialize_flow_graphs_to=il_tmp.txt --no_serialize_flow_graph_types --verbose_flow_graph_serialization
+
+class A {
+  const A();
+}
+
+class B {
+  Object a = const A();
+}
+
+foo(int i) {
+  if (i == 3) {
+    new B();
+  }
+}
+
+main(args) {
+  foo(4);
+}
diff --git a/runtime/tests/vm/dart_2/regress_38700_test.dart b/runtime/tests/vm/dart_2/regress_38700_test.dart
new file mode 100644
index 0000000..cc6c0ee
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_38700_test.dart
@@ -0,0 +1,17 @@
+// 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:expect/expect.dart';
+
+Map<String, num> map = {'a': 1};
+
+main() {
+  var exception;
+  try {
+    print((map['b'] > 82) ? 'x' : 'y');
+  } catch (e, s) {
+    exception = e;
+  }
+  Expect.isTrue(exception is NoSuchMethodError);
+}
diff --git a/runtime/tests/vm/dart_2/regress_38743_test.dart b/runtime/tests/vm/dart_2/regress_38743_test.dart
new file mode 100644
index 0000000..f10dd93
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_38743_test.dart
@@ -0,0 +1,25 @@
+// 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=--stacktrace_every=1 --deterministic --optimization-counter-threshold=6 --optimization-filter=baz
+
+// Regression test for https://github.com/dart-lang/sdk/issues/38743.
+// Verifies that VM doesn't crash when collecting debugger stack traces in
+// closures inside instance methods.
+
+class A {
+  foo(unusedArg0) {
+    baz() {
+      for (int i = 0; i < 3; ++i) {
+        print('[$i] $unusedArg0');
+      }
+    }
+
+    baz();
+  }
+}
+
+main() {
+  A().foo(null);
+}
diff --git a/runtime/tests/vm/dart_2/regress_39152_test.dart b/runtime/tests/vm/dart_2/regress_39152_test.dart
new file mode 100644
index 0000000..343df24
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_39152_test.dart
@@ -0,0 +1,27 @@
+// 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.
+
+// 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.
+
+import 'package:expect/expect.dart';
+
+class A {
+  int foo() => 42;
+}
+
+A a = new A();
+int y;
+
+class B {
+  B(int x) {
+    y = x;
+  }
+}
+
+main() {
+  B(a.foo());
+  Expect.equals(42, y);
+}
diff --git a/runtime/tests/vm/dart_2/regress_39168_part1.dart b/runtime/tests/vm/dart_2/regress_39168_part1.dart
new file mode 100644
index 0000000..9f40bf1
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_39168_part1.dart
@@ -0,0 +1,13 @@
+// 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.
+
+part of regress_39168;
+
+// This class is not used and tree-shaken.
+// However, mixin application B with C is de-duplicated with
+// mixin application in regress_39168_part2.dart. This mixin application is
+// the only thing which is used from regress_39168_part1.dart.
+// As mixin application is a synthetic code, line numbers are not included
+// for regress_39168_part1.dart script.
+class A extends B with C {}
diff --git a/runtime/tests/vm/dart_2/regress_39168_part2.dart b/runtime/tests/vm/dart_2/regress_39168_part2.dart
new file mode 100644
index 0000000..787f700
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_39168_part2.dart
@@ -0,0 +1,17 @@
+// 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.
+
+part of regress_39168;
+
+class B {}
+
+abstract class C {}
+
+// Mixin application B with C is de-duplicated with mixin application
+// in regress_39168_part1.dart.
+class D extends B with C {}
+
+main() {
+  new D();
+}
diff --git a/runtime/tests/vm/dart_2/regress_39168_test.dart b/runtime/tests/vm/dart_2/regress_39168_test.dart
new file mode 100644
index 0000000..cf24d83
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_39168_test.dart
@@ -0,0 +1,12 @@
+// 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.
+
+// 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).
+
+library regress_39168;
+
+part 'regress_39168_part1.dart';
+part 'regress_39168_part2.dart';
diff --git a/runtime/tests/vm/dart_2/regress_39520_test.dart b/runtime/tests/vm/dart_2/regress_39520_test.dart
new file mode 100644
index 0000000..caf65ee
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_39520_test.dart
@@ -0,0 +1,28 @@
+// 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=--optimization_counter_threshold=1 --deterministic
+
+// Regression test for https://github.com/dart-lang/sdk/issues/39520.
+// Verifies that an attempt to inline SIMD shuffle operation doesn't
+// result in incorrect IL.
+
+import "package:expect/expect.dart";
+import 'dart:typed_data';
+
+class Foo {
+  bar() {
+    return Float32x4.zero().shuffleMix(Float32x4.zero(), -3);
+
+    // Although this code is unreachable, context is allocated
+    // for this closure. Context allocation is handled by
+    // allocation sinking, which explodes if an attempt to inline
+    // shuffleMix clobbered IL.
+    baz() => this;
+  }
+}
+
+main() {
+  Expect.throwsRangeError(() => new Foo().bar());
+}
diff --git a/runtime/tests/vm/dart_2/regress_39747_test.dart b/runtime/tests/vm/dart_2/regress_39747_test.dart
new file mode 100644
index 0000000..0d3d1f7
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_39747_test.dart
@@ -0,0 +1,33 @@
+// 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.7
+
+// Regression test for https://github.com/dart-lang/sdk/issues/39747.
+// Verifies that compiler doesn't crash on a particular piece of code.
+
+import "package:expect/expect.dart";
+
+double foo4() {}
+
+var par1 = 1.0.toStringAsPrecision(12);
+
+void doTest() {
+  for (int i = 0; i < 10; ++i) {
+    // foo4() returns constant null.
+    // foo4().toStringAsPrecision(-37) is a PolymorphicInstanceCall with
+    // a single target _Double.toStringAsPrecision.
+    // Type propagation narrows down receiver type and assigns type _Double to
+    // subsequent uses of null constant.
+    (foo4().toStringAsPrecision(-37));
+    // Add a Phi which uses double constant and null.
+    // Unboxed representation is selected for this Phi, causing
+    // Unbox instruction for null constant which can deoptimize.
+    (par1 != null ? 11.11 : foo4());
+  }
+}
+
+main() {
+  Expect.throws(() => doTest());
+}
diff --git a/runtime/tests/vm/dart_2/regress_39767_test.dart b/runtime/tests/vm/dart_2/regress_39767_test.dart
new file mode 100644
index 0000000..24e9b13
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_39767_test.dart
@@ -0,0 +1,32 @@
+// 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.7
+
+// VMOptions=--optimization_counter_threshold=1 --deterministic
+
+// Regression test for https://github.com/dart-lang/sdk/issues/39767.
+//
+// Verifies that pushing now-dead definitions as call arguments where the
+// PushArgumentInstrs end up outliving the original call in the IL due to
+// environmental uses do not remain after dead code elimination removes their
+// definitions.
+
+List<double> var25 = List<double>.filled(8, 0);
+
+double foo0(){
+    do {
+      throw {}; //# 01: runtime error
+    } while (false);
+}
+
+main() {
+      do {
+        switch (1){
+          case 1: {
+                var25[7] = foo0();
+          }
+        }
+      } while (false);
+}
diff --git a/runtime/tests/vm/dart_2/regress_39811_test.dart b/runtime/tests/vm/dart_2/regress_39811_test.dart
new file mode 100644
index 0000000..7fdc005
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_39811_test.dart
@@ -0,0 +1,26 @@
+// 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=--use-slow-path
+
+import 'dart:math';
+
+import 'package:expect/expect.dart';
+
+main() {
+  bool gotException = false;
+  try {
+    foo();
+  } on RangeError catch (e, s) {
+    gotException = true;
+  }
+  Expect.isTrue(gotException);
+}
+
+@pragma('vm:never-inline')
+foo() {
+  for (dynamic _ in [1, 2, 3]) {
+    [(log2e as double).toStringAsFixed(37)];
+  }
+}
diff --git a/runtime/tests/vm/dart_2/regress_39905_test.dart b/runtime/tests/vm/dart_2/regress_39905_test.dart
new file mode 100644
index 0000000..42a4531
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_39905_test.dart
@@ -0,0 +1,18 @@
+// 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=--optimization_counter_threshold=10 --deterministic
+
+// Regression test for https://github.com/dart-lang/sdk/issues/39905.
+//
+// Verifies that OSR when calculating arguments of string interpolation
+// doesn't crash optimizer.
+
+import "package:expect/expect.dart";
+
+main() {
+  Expect.equals(
+      'x[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]',
+      'x${[for (int i = 0; i < 20; ++i) i]}');
+}
diff --git a/runtime/tests/vm/dart/regress_40462_test.dart b/runtime/tests/vm/dart_2/regress_40462_test.dart
similarity index 100%
rename from runtime/tests/vm/dart/regress_40462_test.dart
rename to runtime/tests/vm/dart_2/regress_40462_test.dart
diff --git a/runtime/tests/vm/dart_2/regress_40635_test.dart b/runtime/tests/vm/dart_2/regress_40635_test.dart
new file mode 100644
index 0000000..eeb643f
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_40635_test.dart
@@ -0,0 +1,14 @@
+// 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.
+//
+// Tests that a basic test still works when instructions are deduplicated.
+// Test body comes from tests/corelib_2/apply2_test.dart, which is one of the
+// tests that were failing when --dedup-instructions was broken in bare payload
+// mode (precompiled + bare instructions).
+//
+// VMOptions=--dedup-instructions
+
+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
new file mode 100644
index 0000000..162cbae
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_40710_test.dart
@@ -0,0 +1,30 @@
+// 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=--optimization_counter_threshold=10 --deterministic
+
+// Regression test for https://dartbug.com/40710.
+// Verifies that specialized type testing stub can reject
+// instances with all-dynamic (null) type arguments.
+
+import "package:expect/expect.dart";
+
+class A<T> {
+  @pragma('vm:never-inline')
+  void foo(x) {
+    print(x as T);
+  }
+}
+
+class B<T> {}
+
+main(List<String> args) {
+  for (int i = 0; i < 20; ++i) {
+    final a = new A<B<String>>();
+    a.foo(new B<String>());
+    Expect.throwsTypeError(() {
+      a.foo(new B<dynamic>());
+    });
+  }
+}
diff --git a/runtime/tests/vm/dart_2/regress_40753_test.dart b/runtime/tests/vm/dart_2/regress_40753_test.dart
new file mode 100644
index 0000000..f257d3e
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_40753_test.dart
@@ -0,0 +1,26 @@
+// 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=--optimization-filter=var50 --deoptimize-every=1
+
+final var50 = Expando<int>('expando');
+
+foo(int arg) {
+  if (arg >= 14) {
+    return var50[15];
+  }
+  try {
+    return foo(arg + 1);
+  } catch (exception) {}
+
+  foo(arg + 1);
+}
+
+main() {
+  try {
+    foo(0);
+  } catch (e) {
+    print('rows');
+  }
+}
diff --git a/runtime/tests/vm/dart_2/regress_40754_test.dart b/runtime/tests/vm/dart_2/regress_40754_test.dart
new file mode 100644
index 0000000..a532eb2
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_40754_test.dart
@@ -0,0 +1,44 @@
+// 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=--deterministic --optimization_counter_threshold=1
+
+// A phi can have Smi type but non-Smi bounds if it is dominated by a smi check
+// which always deoptimizes. Test that bounds check generalizer guards against
+// such situations.
+
+@pragma('vm:prefer-inline')
+int checkSmi(int a) => ~a;
+
+@pragma('vm:prefer-inline')
+bool lessThan(int x, int y) => x < y;
+
+@pragma('vm:prefer-inline')
+int accessArray(List<int> arr, int i) => arr[i];
+
+void problem(List<int> arr, int n, bool f) {
+  final C = 0x7000000000000000;
+  for (var i = C, j = 0; lessThan(i, n); i++, j++) {
+    if (f) {
+      // Produce CheckSmi against C. This CheckSmi will be
+      // hoisted out of the loop turning phi for j into a Smi
+      // Phi.
+      checkSmi(C);
+      accessArray(arr, j); // Produce array access with bounds check for arr.
+    }
+  }
+}
+
+void main() {
+  // Prime type feedback in checkSmi and accessArray helpers.
+  // Note: we need these to be in separate helpers because we need
+  // problematic code to appear on a never executed code path.
+  // (It would trigger throw/deopt if it is ever executed).
+  checkSmi(0);
+  accessArray([1], 0);
+  lessThan(1, 1);
+
+  // Trigger the issue.
+  problem([], 1, false);
+}
diff --git a/runtime/tests/vm/dart_2/regress_40809_test.dart b/runtime/tests/vm/dart_2/regress_40809_test.dart
new file mode 100644
index 0000000..49bb8cf
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_40809_test.dart
@@ -0,0 +1,46 @@
+// 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.
+//
+// Test that ensure that we correctly handle this reference from within the
+// try/catch even if it is captured.
+
+import 'package:expect/expect.dart';
+
+var f;
+
+class X {
+  final String field;
+
+  X(this.field);
+
+  // We use toString as a selector here to make sure that it is not eligible
+  // for any potential transformations which remove named parameters.
+  @pragma('vm:never-inline')
+  String toString({String prefix}) {
+    f = () => this.field;
+    try {
+      return int.parse(prefix + this.field).toString();
+    } catch (e) {
+      return '${prefix}${this.field.length}';
+    }
+  }
+}
+
+void main() {
+  final tests = [
+    ['1', '11'],
+    ['2', '22'],
+    ['three', 'three5']
+  ];
+  for (var test in tests) {
+    final input = test[0];
+    final output = test[1];
+    Expect.equals(output, X(input).toString(prefix: input));
+    Expect.equals(input, f());
+  }
+
+  try {
+    f().toString(); // to have an invocation of toString from dynamic context.
+  } catch (e) {}
+}
diff --git a/runtime/tests/vm/dart_2/regress_40964_test.dart b/runtime/tests/vm/dart_2/regress_40964_test.dart
new file mode 100644
index 0000000..df3a4d7
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_40964_test.dart
@@ -0,0 +1,19 @@
+// 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 "package:expect/expect.dart";
+
+class A<T> {
+  test(x) => x as B<T>;
+}
+
+class B<T> {}
+
+class C<T> {}
+
+main() {
+  final a = A<C<int>>();
+  a.test(B<C<int>>());
+  Expect.throwsTypeError(() => a.test(B<C<num>>()));
+}
diff --git a/runtime/tests/vm/dart_2/regress_41971_test.dart b/runtime/tests/vm/dart_2/regress_41971_test.dart
new file mode 100644
index 0000000..28f63ad
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_41971_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// This test checks that late constant folding passes don't violate
+// representation requirements for uses of a definition that is being
+// folded away.
+
+import 'dart:ffi';
+
+import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
+
+class X {
+  int field;
+  X(this.field);
+}
+
+@pragma('vm:never-inline')
+int loadFrom(Pointer<Int32> p) {
+  final x = X(0);
+  x.field = 1;
+  if ((x.field + 1) == 2) {
+    x.field = 0;
+  }
+
+  // The code above tries to delay folding of x.field into a constant
+  // until later passes. Inside p[...] there will be an unboxed Int64
+  // arithmetic used to compute an index which will get constant folded
+  // as soon as x.field is constant folded. CP should insert unboxed constant
+  // or an unbox of a constant as a result of constant folding. If it does
+  // not - then we will get an incorrect graph where a tagged value is flowing
+  // into a LoadIndexed instruction without a deopt-id.
+  return p[x.field];
+}
+
+void main() {
+  final p = allocate<Int32>(count: 128);
+  p[0] = 42;
+  Expect.equals(42, loadFrom(p));
+  free(p);
+}
diff --git a/runtime/tests/vm/dart_2/regress_42065_test.dart b/runtime/tests/vm/dart_2/regress_42065_test.dart
new file mode 100644
index 0000000..28079af
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_42065_test.dart
@@ -0,0 +1,22 @@
+// 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.
+
+// 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.
+
+import "package:expect/expect.dart";
+
+List<int> foo0(int par1) {
+  if (par1 >= 39) {
+    return <int>[];
+  }
+  throw 'hi';
+}
+
+main() {
+  Expect.throws(() {
+    (foo0(0)).add(42);
+  }, (e) => e == 'hi');
+}
diff --git a/runtime/tests/vm/dart_2/regress_flutter16182_test.dart b/runtime/tests/vm/dart_2/regress_flutter16182_test.dart
new file mode 100644
index 0000000..81c386e
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_flutter16182_test.dart
@@ -0,0 +1,143 @@
+// 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.
+
+// Regression test for https://github.com/flutter/flutter/issues/16182
+// Verifies that TFA correctly handles calls via fields/getters.
+
+import "package:expect/expect.dart";
+
+bool ok;
+
+class T1 {
+  // Should be reachable.
+  void doTest1() {
+    ok = true;
+  }
+}
+
+class A1 {
+  T1 foo;
+
+  void call([a1, a2, a3, a4, a5]) {
+    foo = a5;
+  }
+}
+
+class B1 {
+  A1 aa1 = new A1();
+}
+
+void test1() {
+  B1 bb = new B1();
+  bb.aa1(1, 2, 3, 4, new T1());
+
+  ok = false;
+  bb.aa1.foo.doTest1();
+  Expect.isTrue(ok);
+}
+
+class T2 {
+  // Should be reachable.
+  void doTest2() {
+    ok = true;
+  }
+}
+
+class A2 {
+  dynamic foo;
+
+  void call([a1, a2, a3, a4, a5, a6]) {
+    foo = a6;
+  }
+}
+
+class B2Base {
+  dynamic _aa = new A2();
+  dynamic get aa2 => _aa;
+}
+
+class B2 extends B2Base {
+  void doSuperCall() {
+    super.aa2(1, 2, 3, 4, 5, new T2());
+  }
+}
+
+void test2() {
+  var bb = new B2();
+  bb.doSuperCall();
+
+  ok = false;
+  bb.aa2.foo.doTest2();
+  Expect.isTrue(ok);
+}
+
+class T3 {
+  // Should be reachable.
+  void doTest3() {
+    ok = true;
+  }
+}
+
+class A3 {
+  dynamic foo;
+
+  void call([a1, a2, a3, a4, a5, a6, a7]) {
+    foo = a7;
+  }
+}
+
+class B3 {
+  A3 aa3 = new A3();
+}
+
+dynamic bb3 = new B3();
+Function unknown3 = () => bb3;
+getDynamic3() => unknown3.call();
+
+void test3() {
+  getDynamic3().aa3(1, 2, 3, 4, 5, 6, new T3());
+
+  ok = false;
+  bb3.aa3.foo.doTest3();
+  Expect.isTrue(ok);
+}
+
+class T4 {
+  // Should be reachable.
+  void doTest4() {
+    ok = true;
+  }
+}
+
+class A4 {
+  dynamic foo;
+
+  void call([a1, a2, a3, a4, a5, a6, a7, a8]) {
+    foo = a8;
+  }
+}
+
+class B4 {
+  dynamic _aa = new A4();
+  dynamic get aa4 => _aa;
+}
+
+dynamic bb4 = new B4();
+Function unknown4 = () => bb4;
+getDynamic4() => unknown4.call();
+
+void test4() {
+  getDynamic4().aa4(1, 2, 3, 4, 5, 6, 7, new T4());
+
+  ok = false;
+  getDynamic4().aa4.foo.doTest4();
+  Expect.isTrue(ok);
+}
+
+void main() {
+  test1();
+  test2();
+  test3();
+  test4();
+}
diff --git a/runtime/tests/vm/dart_2/regress_flutter20122_test.dart b/runtime/tests/vm/dart_2/regress_flutter20122_test.dart
new file mode 100644
index 0000000..8693c63
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_flutter20122_test.dart
@@ -0,0 +1,24 @@
+// 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.
+
+// Regression test for https://github.com/flutter/flutter/issues/20122
+// Verifies that identityHashCode for strings does not interfere
+// with normal hashCode.
+
+import 'package:expect/expect.dart';
+
+var prefix = 'x';
+
+make(v) => '${prefix}${v}'; // to inhibit constant folding.
+
+void main() {
+  final x = make('test');
+  final y = make('test');
+  // On 64-bit platforms there is a field in the header that is used to cache
+  // hash value for both Object.get:hashCode and identityHashCode(...).
+  // Which means that implementation of these two methods should match
+  // otherwise you will get different hash codes for otherwise identical objects.
+  identityHashCode(y);
+  Expect.equals(x.hashCode, y.hashCode);
+}
diff --git a/runtime/tests/vm/dart_2/regress_flutter35121_test.dart b/runtime/tests/vm/dart_2/regress_flutter35121_test.dart
new file mode 100644
index 0000000..a4d21b6
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_flutter35121_test.dart
@@ -0,0 +1,15 @@
+// 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.
+
+// This is a regression test for
+// https://github.com/flutter/flutter/issues/35121
+
+class A {
+  static List<int> values = const [1, 2, 3];
+  static int get length => values.length;
+}
+
+main() {
+  print(A.length);
+}
diff --git a/runtime/tests/vm/dart_2/regress_flutter51298_test.dart b/runtime/tests/vm/dart_2/regress_flutter51298_test.dart
new file mode 100644
index 0000000..9e7bb8c
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_flutter51298_test.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.
+
+// VMOptions=--async_igoto_threshold=0 --optimization_counter_threshold=10 --deterministic
+
+// Regression test for https://github.com/flutter/flutter/issues/51298.
+// This would cause a crash due to bad offsets causing entry to hit the pre-code
+// barrier of int3s.
+
+import 'dart:async';
+
+Iterable<bool> state_machine() sync* {
+  bool a = true;
+
+  for (var i = 0; i < 2; i++) {
+    switch (a) {
+      case true:
+        a = false;
+        break;
+    }
+  }
+
+  switch (a) {
+    case false:
+      if (!a) {
+        yield a;
+      }
+  }
+}
+
+void main() {
+  // This would crash due to bad flowgraph entry offsets.
+  for (final _ in state_machine()) {}
+}
diff --git a/runtime/tests/vm/dart_2/regress_flutter_57398_test.dart b/runtime/tests/vm/dart_2/regress_flutter_57398_test.dart
new file mode 100644
index 0000000..79c5614
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_flutter_57398_test.dart
@@ -0,0 +1,36 @@
+// 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.
+//
+// Check that we correctly handle FutureOr<T> when computing if a location
+// of the given static type can contain Smi or not.
+import 'dart:async';
+
+import 'package:expect/expect.dart';
+
+class W<T> {
+  final FutureOr<T> v;
+  W({this.v});
+
+  @pragma('vm:never-inline')
+  bool compare(W<T> o) {
+    // We will emit a dispatch table call here which uses LoadClassId
+    // instruction to get class id of o. If FutureOr<T> is treated incorrectly
+    // then optimizer will assume that v can't be a Smi and remove smi
+    // handling from LoadClassId - leading to a crash.
+    return this.v == o.v;
+  }
+}
+
+@pragma('vm:never-inline')
+FutureOr<int> make(int v) {
+  return v > 0 ? v : Future.value(v);
+}
+
+void main(List<String> args) {
+  final i0 = args.length == 0 ? 1 : -2;
+  final i1 = args.length == 1 ? -3 : 4;
+  var w = W(v: make(i0));
+  Expect.isTrue(w.compare(W(v: make(i0))));
+  Expect.isFalse(w.compare(W(v: make(i1))));
+}
diff --git a/runtime/tests/vm/dart_2/regress_merge_blocks_with_phis_test.dart b/runtime/tests/vm/dart_2/regress_merge_blocks_with_phis_test.dart
new file mode 100644
index 0000000..606e4c5
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_merge_blocks_with_phis_test.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.
+//
+// VMOptions=--optimization-counter-threshold=5 --use-bytecode-compiler
+//
+// Test that block merging takes phis into account.
+//
+// The problem only reproduces with bytecode compiler (--use-bytecode-compiler)
+// as bytecode doesn't have backward branches for the redundant loops.
+// OSR handling code inserts Phi instructions to JoinEntry
+// even when there is only one predecessor. This results in a flow graph
+// suitable for block merging with a successor block containing Phi.
+
+import 'package:expect/expect.dart';
+
+void testBottomUpInference() {
+  Expect.type<List<int>>([for (; false;) 1]);
+  Expect.type<List<int>>([for (; false;) 1]);
+  Expect.type<List<int>>([for (; false;) 1]);
+  Expect.type<List<int>>([for (; false;) 1]);
+  Expect.type<List<int>>([for (; false;) 1]);
+  Expect.type<List<int>>([for (; false;) 1]);
+  Expect.type<List<int>>([for (; false;) 1]);
+  Expect.type<List<int>>([for (; false;) 1]);
+  Expect.type<List<int>>([for (; false;) 1]);
+  Expect.type<List<int>>([for (; false;) 1]);
+  Expect.type<List<int>>([for (; false;) 1]);
+  Expect.type<List<int>>([for (; false;) 1]);
+  Expect.type<List<int>>([for (; false;) 1]);
+}
+
+main() {
+  testBottomUpInference();
+}
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
new file mode 100644
index 0000000..f30a370
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_range_analysis_shift_test.dart
@@ -0,0 +1,30 @@
+// 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=--optimization-counter-threshold=10 --no-background-compilation
+//
+// Test that SpeculativeInt64ShiftOp's range is correctly inferred when the RHS
+// is a nullable smi.
+
+import 'package:expect/expect.dart';
+
+int getShift(List<String> args) {
+  return args.length == -1 ? null : 40;
+}
+
+void test(List<String> args) {
+  int x = 1;
+  if (args.length <= 0) {
+    int s = getShift(args);
+    x = x << s;
+  }
+  x += 1;
+  Expect.equals(x, 1099511627777);
+}
+
+void main(List<String> args) {
+  for (int i = 0; i < 100; ++i) {
+    test(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
new file mode 100644
index 0000000..8442c38
--- /dev/null
+++ b/runtime/tests/vm/dart_2/rematerialize_unboxed_double_field_test.dart
@@ -0,0 +1,42 @@
+// 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=--deterministic --optimization-counter-threshold=10 --unbox-numeric-fields
+
+import 'package:expect/expect.dart';
+
+const magicDouble = 42.0;
+
+class C {
+  double d = magicDouble;
+}
+
+class NoopSink {
+  void leak(C c) {}
+}
+
+class RealSink {
+  static C o;
+  void leak(C c) {
+    o = c;
+  }
+}
+
+void foo(sink) {
+  sink.leak(C());
+}
+
+void main(List<String> args) {
+  var c = C();
+  for (var i = 0; i < 100; i++) c.d = 2.0;
+
+  for (var i = 0; i < 100; i++) {
+    foo(NoopSink());
+  }
+
+  foo(RealSink());
+  RealSink.o.d += 1234.0;
+  final TWO = args.length > 1024 ? "~" : 2;
+  Expect.equals(double.parse("4${TWO}.0"), magicDouble);
+}
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
new file mode 100644
index 0000000..a931e48
--- /dev/null
+++ b/runtime/tests/vm/dart_2/run_appended_aot_snapshot_test.dart
@@ -0,0 +1,84 @@
+// 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:async';
+import 'dart:io';
+import 'dart:typed_data';
+
+import 'package:dart2native/dart2native.dart';
+import 'package:path/path.dart' as path;
+import 'package:expect/expect.dart';
+
+import 'snapshot_test_helper.dart';
+
+Future<void> main(List<String> args) async {
+  if (args.length == 1 && args[0] == '--child') {
+    print('Hello, Appended AOT');
+    return;
+  }
+
+  final String sourcePath = path.join('runtime', 'tests', 'vm', 'dart_2',
+      'run_appended_aot_snapshot_test.dart');
+
+  await withTempDir((String tmp) async {
+    final String exeName = 'test.exe';
+    final String dillPath = path.join(tmp, 'test.dill');
+    final String aotPath = path.join(tmp, 'test.aot');
+    final String exePath = path.join(tmp, exeName);
+
+    {
+      final result = await generateAotKernel(checkedInDartVM, genKernel,
+          platformDill, sourcePath, dillPath, null, []);
+      Expect.equals(result.stderr, '');
+      Expect.equals(result.exitCode, 0);
+      Expect.equals(result.stdout, '');
+    }
+
+    {
+      final result = await generateAotSnapshot(
+          genSnapshot, dillPath, aotPath, null, false, []);
+      Expect.equals(result.stderr, '');
+      Expect.equals(result.exitCode, 0);
+      Expect.equals(result.stdout, '');
+    }
+
+    await writeAppendedExecutable(dartPrecompiledRuntime, aotPath, exePath);
+
+    if (Platform.isLinux || Platform.isMacOS) {
+      final result = await markExecutable(exePath);
+      Expect.equals(result.stderr, '');
+      Expect.equals(result.exitCode, 0);
+      Expect.equals(result.stdout, '');
+    }
+
+    {
+      final runResult =
+          await runBinary('run appended aot snapshot', exePath, ['--child']);
+      expectOutput('Hello, Appended AOT', runResult);
+    }
+
+    {
+      // Test that it runs when invoked via PATH as well.
+      Map<String, String> environment = {'PATH': tmp};
+      final runResult = await runBinary(
+          'run appended aot snapshot from PATH', exeName, ['--child'],
+          environment: environment, runInShell: true);
+      expectOutput('Hello, Appended AOT', runResult);
+    }
+
+    // Windows allows leaving out .exe. Make sure we can load that as well.
+    if (Platform.isWindows) {
+      final String exeNameWithoutExt =
+          exeName.replaceFirst(new RegExp(r'.exe$'), '');
+      Map<String, String> environment = {'PATH': tmp};
+      final runResult = await runBinary(
+          'run appended aot snapshot without extension',
+          exeNameWithoutExt,
+          ['--child'],
+          environment: environment,
+          runInShell: true);
+      expectOutput('Hello, Appended AOT', runResult);
+    }
+  });
+}
diff --git a/runtime/tests/vm/dart_2/sendandexit_test.dart b/runtime/tests/vm/dart_2/sendandexit_test.dart
new file mode 100644
index 0000000..f1fb1db
--- /dev/null
+++ b/runtime/tests/vm/dart_2/sendandexit_test.dart
@@ -0,0 +1,108 @@
+// 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
+//
+// Validates functionality of sendAndExit.
+
+import 'dart:_internal' show sendAndExit;
+import 'dart:async';
+import 'dart:isolate';
+import 'dart:nativewrappers';
+
+import "package:expect/expect.dart";
+
+doNothingWorker(data) {}
+
+spawnWorker(worker, data) async {
+  Completer completer = Completer();
+  runZoned(() async {
+    final isolate = await Isolate.spawn(worker, [data]);
+    completer.complete(isolate);
+  }, onError: (e, st) => completer.complete(e));
+  return await completer.future;
+}
+
+verifyCantSendAnonymousClosure() async {
+  final result = await spawnWorker(doNothingWorker, () {});
+  Expect.equals(
+      "Invalid argument(s): Illegal argument in isolate message :"
+      " (object is a closure - Function '<anonymous closure>': static.)",
+      result.toString());
+}
+
+class NativeWrapperClass extends NativeFieldWrapperClass1 {}
+
+verifyCantSendNative() async {
+  final result = await spawnWorker(doNothingWorker, NativeWrapperClass());
+  Expect.isTrue(result.toString().startsWith("Invalid argument(s): "
+      "Illegal argument in isolate message : "
+      "(object extends NativeWrapper"));
+}
+
+verifyCantSendRegexp() async {
+  var receivePort = ReceivePort();
+  final result = await spawnWorker(doNothingWorker, receivePort);
+  Expect.equals(
+      "Invalid argument(s): Illegal argument in isolate message : "
+      "(object is a ReceivePort)",
+      result.toString());
+  receivePort.close();
+}
+
+class Message {
+  SendPort sendPort;
+  Function closure;
+
+  Message(this.sendPort, this.closure);
+}
+
+add(a, b) => a + b;
+
+worker(Message message) async {
+  final port = new ReceivePort();
+  final inbox = new StreamIterator<dynamic>(port);
+  message.sendPort.send(message.closure(2, 3));
+  port.close();
+}
+
+verifyCanSendStaticMethod() async {
+  final port = ReceivePort();
+  final inbox = StreamIterator<dynamic>(port);
+  final isolate = await Isolate.spawn(worker, Message(port.sendPort, add));
+
+  await inbox.moveNext();
+  Expect.equals(inbox.current, 5);
+  port.close();
+}
+
+verifyExitMessageIsPostedLast() async {
+  final port = ReceivePort();
+  final inbox = new StreamIterator<dynamic>(port);
+  final isolate = await Isolate.spawn(worker, Message(port.sendPort, add),
+      onExit: port.sendPort);
+
+  final receivedData = Completer<dynamic>();
+  final isolateExited = Completer<bool>();
+  port.listen((dynamic resultData) {
+    if (receivedData.isCompleted) {
+      Expect.equals(
+          resultData, null); // exit message comes after data is receivedData
+      isolateExited.complete(true);
+    } else {
+      receivedData.complete(resultData);
+    }
+  });
+  Expect.equals(await isolateExited.future, true);
+  Expect.equals(await receivedData.future, 5);
+  port.close();
+}
+
+main() async {
+  await verifyCantSendAnonymousClosure();
+  await verifyCantSendNative();
+  await verifyCantSendRegexp();
+  await verifyCanSendStaticMethod();
+  await verifyExitMessageIsPostedLast();
+}
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
new file mode 100644
index 0000000..09d44a0
--- /dev/null
+++ b/runtime/tests/vm/dart_2/single_target_and_method_extractors2_test.dart
@@ -0,0 +1,43 @@
+// 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.
+
+// This test verifies that AOT compiler is correctly handling method extractors
+// when resolving targets of method invocations.
+
+import "package:expect/expect.dart";
+
+abstract class MyQueue<E> {}
+
+class MyListQueue<E> implements MyQueue<E> {
+  String toString() => 'good';
+}
+
+class NextRound {
+  runNextRound() {
+    // During the 2nd iteration of precompilation loop (Precompiler::Iterate)
+    // we're going to discover a call to get:toString() which is only resolved
+    // to Object.get:toString at this time, as MyListQueue.get:toString method
+    // extractor is not created yet. Verify that compiler doesn't use that
+    // target.
+    MyQueue q = new MyListQueue();
+    dynamic x = q.toString;
+    Expect.equals("good", x.call());
+  }
+}
+
+class NextRound2 {
+  runNextRound() {}
+}
+
+getNextRound(i) => i > 5 ? new NextRound() : new NextRound2();
+
+void main() {
+  // During the 1st iteration of precompilation loop (Precompiler::Iterate)
+  // we need to create method extractor for Object.toString.
+  var x = new Object().toString;
+  x.call();
+  // Trigger the next round via new dynamic selector.
+  dynamic y = getNextRound(17);
+  y.runNextRound();
+}
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
new file mode 100644
index 0000000..eb82966
--- /dev/null
+++ b/runtime/tests/vm/dart_2/single_target_and_method_extractors_test.dart
@@ -0,0 +1,49 @@
+// 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:expect/expect.dart";
+
+// Note: below we are using tear-offs instead of calling methods directly
+// to guarantee very specific compilation order:
+//
+//    - compile main, add get:methodM and get:callMethodM to selector set.
+//    - compile A.callMethodM and add get:createB to selector set.
+//    - compile A.createB and mark B as allocated.
+//
+// Class B is not marked as allocated until A.createB is compiled, which means
+// that when A.callMethodM is compiled only class A has get:methodM method
+// extractor injected.
+//
+// This test is verifying that optimizing compiler does not treat this method
+// extractor as a single target for this.get:methodM call.
+main() {
+  // This adds selector 'get:methodM' into the sent selector set and
+  // marks class A as allocated.
+  new A().methodM;
+
+  // This adds get:callMethodM to the sent selector set.
+  final callMethodMOnA = new A().callMethodM;
+  final b = callMethodMOnA("A");
+  final callMethodMOnB = b.callMethodM;
+  callMethodMOnB("B");
+}
+
+class A {
+  B callMethodM(String expected) {
+    final f = methodM;
+    Expect.equals(expected, f());
+
+    final newB = createB;
+    return newB();
+  }
+
+  B createB() => new B();
+
+  String methodM() => 'A';
+}
+
+class B extends A {
+  @override
+  String methodM() => 'B';
+}
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
new file mode 100644
index 0000000..7c50e88
--- /dev/null
+++ b/runtime/tests/vm/dart_2/slow_path_shared_stub_test.dart
@@ -0,0 +1,84 @@
+// 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=--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
+
+// This tests the stackmaps and environments for safepoints corresponding to
+// slow-path code which uses shared runtime stubs.
+
+import 'package:expect/expect.dart';
+import 'dart:math';
+
+class C {
+  C talk(C _) => _;
+}
+
+int getPositiveNum() {
+  return (new DateTime.now()).millisecondsSinceEpoch;
+}
+
+C getC() {
+  if (getPositiveNum() == 0) {
+    return new C();
+  } else {
+    return null;
+  }
+}
+
+int global;
+
+int getNum() {
+  return global++;
+}
+
+test0(int k) {
+  var x = getC();
+  var y = getNum();
+  try {
+    y = getNum();
+    x = getC();
+    x.talk(x).talk(x);
+    y = getNum();
+  } catch (e) {
+    Expect.equals(x, null);
+    Expect.equals(y, k);
+  }
+}
+
+test1(int k) {
+  var x = getC();
+  var y = getNum();
+  double z = getPositiveNum().toDouble();
+  while (z > 1) {
+    z = sqrt(z - 0.1);
+  }
+  try {
+    y = getNum();
+    x = getC();
+    z = z.ceil().toDouble();
+    var k = z / 2;
+    x.talk(x).talk(x);
+    z = k / 2;
+    y = getNum();
+  } catch (e) {
+    Expect.equals(x, null);
+    Expect.equals(y, k);
+    Expect.equals(z, 1);
+  }
+}
+
+main() {
+  global = 1;
+
+  for (int i = 0; i < 100; ++i) {
+    test0(2 * (i + 1));
+  }
+
+  global = 1;
+
+  for (int i = 0; i < 100; ++i) {
+    test1(2 * (i + 1));
+  }
+}
diff --git a/runtime/tests/vm/dart_2/snapshot_depfile_test.dart b/runtime/tests/vm/dart_2/snapshot_depfile_test.dart
new file mode 100644
index 0000000..1465b17
--- /dev/null
+++ b/runtime/tests/vm/dart_2/snapshot_depfile_test.dart
@@ -0,0 +1,37 @@
+// 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:async';
+import 'dart:io';
+
+import 'package:expect/expect.dart';
+import 'package:path/path.dart' as p;
+
+import 'snapshot_test_helper.dart';
+
+Future<void> main(List<String> args) async {
+  if (!Platform.script.toFilePath().endsWith('.dart')) {
+    print('This test must run from source');
+    return;
+  }
+
+  await withTempDir((String temp) async {
+    final snapshotPath = p.join(temp, 'snapshot_depfile_test.snapshot');
+    final depfilePath = p.join(temp, 'snapshot_depfile_test.snapshot.d');
+
+    await runDart('GENERATE SNAPSHOT', [
+      '--snapshot=$snapshotPath',
+      '--snapshot-depfile=$depfilePath',
+      Platform.script.toFilePath(),
+      '--child',
+    ]);
+
+    var depfileContents = await new File(depfilePath).readAsString();
+    print(depfileContents);
+    Expect.isTrue(depfileContents.contains('snapshot_depfile_test.snapshot:'),
+        'depfile contains output');
+    Expect.isTrue(depfileContents.contains('snapshot_depfile_test.dart'),
+        'depfile contains input');
+  });
+}
diff --git a/runtime/tests/vm/dart_2/snapshot_test_helper.dart b/runtime/tests/vm/dart_2/snapshot_test_helper.dart
new file mode 100644
index 0000000..a66c247
--- /dev/null
+++ b/runtime/tests/vm/dart_2/snapshot_test_helper.dart
@@ -0,0 +1,195 @@
+// 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 'dart:async';
+import 'dart:io';
+import 'dart:math';
+
+import 'package:expect/expect.dart';
+import 'package:path/path.dart' as p;
+
+class Result {
+  final String cmdline;
+  final ProcessResult processResult;
+
+  Result(this.cmdline, this.processResult);
+
+  String get output => processResult.stdout.trim();
+}
+
+void reportError(Result result, String msg) {
+  print('running ${result.cmdline}:');
+  if (result.processResult.stdout.isNotEmpty) {
+    print('''
+
+Command stdout:
+${result.processResult.stdout}''');
+  }
+
+  if (result.processResult.stderr.isNotEmpty) {
+    print('''
+
+Command stderr:
+${result.processResult.stderr}''');
+  }
+
+  Expect.fail(msg);
+}
+
+void expectOutput(String what, Result result) {
+  if (result.output != what) {
+    reportError(result, 'Expected test to print \'${what}\' to stdout');
+  }
+}
+
+final String scriptSuffix = Platform.isWindows ? ".bat" : "";
+final String executableSuffix = Platform.isWindows ? ".exe" : "";
+final String buildDir = p.dirname(Platform.executable);
+final String platformDill = p.join(buildDir, "vm_platform_strong.dill");
+final String genSnapshot = p.join(buildDir, "gen_snapshot${executableSuffix}");
+final String dartPrecompiledRuntime =
+    p.join(buildDir, "dart_precompiled_runtime${executableSuffix}");
+final String genKernel = p.join("pkg", "vm", "bin", "gen_kernel.dart");
+final String checkedInDartVM =
+    p.join("tools", "sdks", "dart-sdk", "bin", "dart${executableSuffix}");
+
+Future<Result> runDart(String prefix, List<String> arguments) {
+  final augmentedArguments = <String>[]
+    ..addAll(Platform.executableArguments)
+    ..addAll(arguments);
+  return runBinary(prefix, Platform.executable, augmentedArguments);
+}
+
+Future<Result> runGenKernel(String prefix, List<String> arguments) {
+  final augmentedArguments = <String>[]
+    ..add(genKernel)
+    ..add("--platform")
+    ..add(platformDill)
+    ..addAll(arguments);
+  return runBinary(prefix, checkedInDartVM, augmentedArguments);
+}
+
+Future<Result> runGenSnapshot(String prefix, List<String> arguments) {
+  return runBinary(prefix, genSnapshot, arguments);
+}
+
+Future<Result> runBinary(String prefix, String binary, List<String> arguments,
+    {Map<String, String> environment, bool runInShell: false}) async {
+  print("+ $binary " + arguments.join(" "));
+  final processResult = await Process.run(binary, arguments,
+      environment: environment, runInShell: runInShell);
+  final result =
+      new Result('[$prefix] ${binary} ${arguments.join(' ')}', processResult);
+
+  if (processResult.stdout.isNotEmpty) {
+    print('''
+
+Command stdout:
+${processResult.stdout}''');
+  }
+
+  if (processResult.stderr.isNotEmpty) {
+    print('''
+
+Command stderr:
+${processResult.stderr}''');
+  }
+
+  if (result.processResult.exitCode != 0) {
+    reportError(result,
+        '[$prefix] Process finished with non-zero exit code ${result.processResult.exitCode}');
+  }
+  return result;
+}
+
+withTempDir(Future fun(String dir)) async {
+  final Directory tempDir = Directory.systemTemp.createTempSync();
+  try {
+    await fun(tempDir.path);
+  } finally {
+    tempDir.deleteSync(recursive: true);
+  }
+}
+
+checkDeterministicSnapshot(String snapshotKind, String expectedStdout) async {
+  await withTempDir((String temp) async {
+    final snapshot1Path = p.join(temp, 'snapshot1');
+    final snapshot2Path = p.join(temp, 'snapshot2');
+
+    print("Version ${Platform.version}");
+
+    final generate1Result = await runDart('GENERATE SNAPSHOT 1', [
+      '--deterministic',
+      '--trace_class_finalization',
+      '--trace_type_finalization',
+      '--trace_compiler',
+      '--verbose_gc',
+      '--snapshot=$snapshot1Path',
+      '--snapshot-kind=$snapshotKind',
+      Platform.script.toFilePath(),
+      '--child',
+    ]);
+    expectOutput(expectedStdout, generate1Result);
+
+    final generate2Result = await runDart('GENERATE SNAPSHOT 2', [
+      '--deterministic',
+      '--trace_class_finalization',
+      '--trace_type_finalization',
+      '--trace_compiler',
+      '--verbose_gc',
+      '--snapshot=$snapshot2Path',
+      '--snapshot-kind=$snapshotKind',
+      Platform.script.toFilePath(),
+      '--child',
+    ]);
+    expectOutput(expectedStdout, generate2Result);
+
+    var snapshot1Bytes = await new File(snapshot1Path).readAsBytes();
+    var snapshot2Bytes = await new File(snapshot2Path).readAsBytes();
+
+    var minLength = min(snapshot1Bytes.length, snapshot2Bytes.length);
+    for (var i = 0; i < minLength; i++) {
+      if (snapshot1Bytes[i] != snapshot2Bytes[i]) {
+        Expect.fail("Snapshots differ at byte $i");
+      }
+    }
+    Expect.equals(snapshot1Bytes.length, snapshot2Bytes.length);
+  });
+}
+
+runAppJitTest(Uri testScriptUri) async {
+  await withTempDir((String temp) async {
+    final snapshotPath = p.join(temp, 'app.jit');
+    final testPath = testScriptUri.toFilePath();
+
+    final trainingResult = await runDart('TRAINING RUN', [
+      '--snapshot=$snapshotPath',
+      '--snapshot-kind=app-jit',
+      testPath,
+      '--train'
+    ]);
+    expectOutput("OK(Trained)", trainingResult);
+    final runResult = await runDart('RUN FROM SNAPSHOT', [snapshotPath]);
+    expectOutput("OK(Run)", runResult);
+  });
+}
+
+Future<void> runAppJitBytecodeTest(Uri testScriptUri) async {
+  await withTempDir((String temp) async {
+    final snapshotPath = p.join(temp, 'app.jit');
+    final testPath = testScriptUri.toFilePath();
+
+    final trainingResult = await runDart('TRAINING RUN', [
+      '--enable_interpreter',
+      '--snapshot=$snapshotPath',
+      '--snapshot-kind=app-jit',
+      testPath,
+      '--train'
+    ]);
+    expectOutput("OK(Trained)", trainingResult);
+    final runResult = await runDart(
+        'RUN FROM SNAPSHOT', ['--enable_interpreter', snapshotPath]);
+    expectOutput("OK(Run)", runResult);
+  });
+}
diff --git a/runtime/tests/vm/dart_2/snapshot_version_test.dart b/runtime/tests/vm/dart_2/snapshot_version_test.dart
new file mode 100644
index 0000000..2dcde10
--- /dev/null
+++ b/runtime/tests/vm/dart_2/snapshot_version_test.dart
@@ -0,0 +1,14 @@
+// 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:io";
+import "package:expect/expect.dart";
+
+main() {
+  var result = Process.runSync(Platform.executable,
+      [Platform.script.resolve('./bad_snapshot').toFilePath()]);
+  print("=== stdout ===\n ${result.stdout}");
+  print("=== stderr ===\n ${result.stderr}");
+  Expect.equals(253, result.exitCode);
+}
diff --git a/runtime/tests/vm/dart_2/spawn_infinite_loop_test.dart b/runtime/tests/vm/dart_2/spawn_infinite_loop_test.dart
new file mode 100644
index 0000000..3a89e80
--- /dev/null
+++ b/runtime/tests/vm/dart_2/spawn_infinite_loop_test.dart
@@ -0,0 +1,21 @@
+// 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-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:isolate';
+
+// This test ensures that the VM can kill the spawned isolate during VM
+// shutdown even when the isolate is in an infinite loop and will not finish
+// on its own.
+
+void loop(msg) {
+  while (true) {}
+  throw "Unreachable";
+}
+
+void main() {
+  Isolate.spawn(loop, []);
+}
diff --git a/runtime/tests/vm/dart_2/spawn_shutdown_test.dart b/runtime/tests/vm/dart_2/spawn_shutdown_test.dart
new file mode 100644
index 0000000..6e42f3e
--- /dev/null
+++ b/runtime/tests/vm/dart_2/spawn_shutdown_test.dart
@@ -0,0 +1,61 @@
+// 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';
+import 'dart:io';
+import 'dart:isolate';
+
+// This test attempts to check that the vm can shutdown cleanly when
+// isolates are starting and stopping.
+//
+// We spawn a set of workers.  Each worker will kill its parent
+// worker (if any) and then spawn a child worker.  We start these
+// workers in a staggered fashion in an attempt to see a variety of
+// isolate states at the time that this program terminates.
+
+trySpawn(Function f, Object o) async {
+  try {
+    await Isolate.spawn<SendPort>(f, o);
+  } catch (e) {
+    // Isolate spawning may fail if the program is ending.
+    assert(e is IsolateSpawnException);
+  }
+}
+
+void worker(SendPort parentPort) {
+  var port = new RawReceivePort();
+
+  // This worker will exit when it receives any message.
+  port.handler = (_) {
+    port.close();
+  };
+
+  // Send a message to terminate our parent isolate.
+  if (parentPort != null) {
+    parentPort.send(null);
+  }
+
+  // Spawn a child worker.
+  trySpawn(worker, port.sendPort);
+}
+
+void main() {
+  const numWorkers = 50;
+  const delay = const Duration(milliseconds: (1000 ~/ numWorkers));
+  const exitDelay = const Duration(seconds: 2);
+
+  // Take about a second to spin up our workers in a staggered
+  // fashion. We want to maximize the chance that they will be in a
+  // variety of states when the vm shuts down.
+  print('Starting ${numWorkers} workers...');
+  for (int i = 0; i < numWorkers; i++) {
+    trySpawn(worker, null);
+    sleep(delay);
+  }
+
+  // Let them spin for a bit before terminating the program.
+  print('Waiting for ${exitDelay} before exit...');
+  sleep(exitDelay);
+}
diff --git a/runtime/tests/vm/dart_2/splay_test.dart b/runtime/tests/vm/dart_2/splay_test.dart
new file mode 100644
index 0000000..eae1cbb
--- /dev/null
+++ b/runtime/tests/vm/dart_2/splay_test.dart
@@ -0,0 +1,323 @@
+// 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.
+
+// This benchmark is based on a JavaScript log processing module used
+// by the V8 profiler to generate execution time profiles for runs of
+// JavaScript applications, and it effectively measures how fast the
+// JavaScript engine is at allocating nodes and reclaiming the memory
+// used for old nodes. Because of the way splay trees work, the engine
+// also has to deal with a lot of changes to the large tree object
+// graph.
+
+// VMOptions=
+// VMOptions=--no_concurrent_mark --no_concurrent_sweep
+// VMOptions=--no_concurrent_mark --concurrent_sweep
+// VMOptions=--no_concurrent_mark --use_compactor
+// VMOptions=--no_concurrent_mark --use_compactor --force_evacuation
+// VMOptions=--concurrent_mark --no_concurrent_sweep
+// VMOptions=--concurrent_mark --concurrent_sweep
+// VMOptions=--concurrent_mark --use_compactor
+// VMOptions=--concurrent_mark --use_compactor --force_evacuation
+// VMOptions=--scavenger_tasks=0
+// VMOptions=--scavenger_tasks=1
+// VMOptions=--scavenger_tasks=2
+// VMOptions=--scavenger_tasks=3
+// VMOptions=--verify_before_gc
+// VMOptions=--verify_after_gc
+// VMOptions=--verify_before_gc --verify_after_gc
+// VMOptions=--verify_store_buffer
+
+import "dart:math";
+import 'package:benchmark_harness/benchmark_harness.dart';
+
+void main() {
+  Splay.main();
+}
+
+class Splay extends BenchmarkBase {
+  const Splay() : super("Splay");
+
+  // Configuration.
+  static final int kTreeSize = 8000;
+  static final int kTreeModifications = 80;
+  static final int kTreePayloadDepth = 5;
+
+  static SplayTree tree;
+
+  static Random rnd = new Random(12345);
+
+  // Insert new node with a unique key.
+  static num insertNewNode() {
+    num key;
+    do {
+      key = rnd.nextDouble();
+    } while (tree.find(key) != null);
+    Payload payload = Payload.generate(kTreePayloadDepth, key.toString());
+    tree.insert(key, payload);
+    return key;
+  }
+
+  static void mysetup() {
+    tree = new SplayTree();
+    for (int i = 0; i < kTreeSize; i++) insertNewNode();
+  }
+
+  static void tearDown() {
+    // Allow the garbage collector to reclaim the memory
+    // used by the splay tree no matter how we exit the
+    // tear down function.
+    List<num> keys = tree.exportKeys();
+    tree = null;
+
+    // Verify that the splay tree has the right size.
+    int length = keys.length;
+    if (length != kTreeSize) throw new Error("Splay tree has wrong size");
+
+    // Verify that the splay tree has sorted, unique keys.
+    for (int i = 0; i < length - 1; i++) {
+      if (keys[i] >= keys[i + 1]) throw new Error("Splay tree not sorted");
+    }
+  }
+
+  void warmup() {
+    exercise();
+  }
+
+  void exercise() {
+    // Replace a few nodes in the splay tree.
+    for (int i = 0; i < kTreeModifications; i++) {
+      num key = insertNewNode();
+      Node greatest = tree.findGreatestLessThan(key);
+      if (greatest == null) tree.remove(key);
+      else tree.remove(greatest.key);
+    }
+  }
+
+  static void main() {
+    mysetup();
+    new Splay().report();
+    tearDown();
+  }
+}
+
+
+class Leaf {
+  Leaf(String tag) {
+    string = "String for key $tag in leaf node";
+    array = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ];
+  }
+  String string;
+  List<num> array;
+}
+
+
+class Payload {
+  Payload(this.left, this.right);
+  var left, right;
+
+  static generate(depth, tag) {
+    if (depth == 0) return new Leaf(tag);
+    return new Payload(generate(depth - 1, tag),
+                       generate(depth - 1, tag));
+  }
+}
+
+class Error implements Exception {
+  const Error(this.message);
+  final String message;
+}
+
+
+/**
+ * A splay tree is a self-balancing binary search tree with the additional
+ * property that recently accessed elements are quick to access again.
+ * It performs basic operations such as insertion, look-up and removal
+ * in O(log(n)) amortized time.
+ */
+class SplayTree {
+  SplayTree();
+
+  /**
+   * Inserts a node into the tree with the specified [key] and value if
+   * the tree does not already contain a node with the specified key. If
+   * the value is inserted, it becomes the root of the tree.
+   */
+  void insert(num key, value) {
+    if (isEmpty) {
+      root = new Node(key, value);
+      return;
+    }
+    // Splay on the key to move the last node on the search path for
+    // the key to the root of the tree.
+    splay(key);
+    if (root.key == key) return;
+    Node node = new Node(key, value);
+    if (key > root.key) {
+      node.left = root;
+      node.right = root.right;
+      root.right = null;
+    } else {
+      node.right = root;
+      node.left = root.left;
+      root.left = null;
+    }
+    root = node;
+  }
+
+  /**
+   * Removes a node with the specified key from the tree if the tree
+   * contains a node with this key. The removed node is returned. If
+   * [key] is not found, an exception is thrown.
+   */
+  Node remove(num key) {
+    if (isEmpty) throw new Error('Key not found: $key');
+    splay(key);
+    if (root.key != key) throw new Error('Key not found: $key');
+    Node removed = root;
+    if (root.left == null) {
+      root = root.right;
+    } else {
+      Node right = root.right;
+      root = root.left;
+      // Splay to make sure that the new root has an empty right child.
+      splay(key);
+      // Insert the original right child as the right child of the new
+      // root.
+      root.right = right;
+    }
+    return removed;
+  }
+
+  /**
+   * Returns the node having the specified [key] or null if the tree doesn't
+   * contain a node with the specified [key].
+   */
+  Node find(num key) {
+    if (isEmpty) return null;
+    splay(key);
+    return root.key == key ? root : null;
+  }
+
+  /**
+   * Returns the Node having the maximum key value.
+   */
+  Node findMax([Node start]) {
+    if (isEmpty) return null;
+    Node current = null == start ? root : start;
+    while (current.right != null) current = current.right;
+    return current;
+  }
+
+  /**
+   * Returns the Node having the maximum key value that
+   * is less than the specified [key].
+   */
+  Node findGreatestLessThan(num key) {
+    if (isEmpty) return null;
+    // Splay on the key to move the node with the given key or the last
+    // node on the search path to the top of the tree.
+    splay(key);
+    // Now the result is either the root node or the greatest node in
+    // the left subtree.
+    if (root.key < key) return root;
+    if (root.left != null) return findMax(root.left);
+    return null;
+  }
+
+  /**
+   * Perform the splay operation for the given key. Moves the node with
+   * the given key to the top of the tree.  If no node has the given
+   * key, the last node on the search path is moved to the top of the
+   * tree. This is the simplified top-down splaying algorithm from:
+   * "Self-adjusting Binary Search Trees" by Sleator and Tarjan
+   */
+  void splay(num key) {
+    if (isEmpty) return;
+    // Create a dummy node.  The use of the dummy node is a bit
+    // counter-intuitive: The right child of the dummy node will hold
+    // the L tree of the algorithm.  The left child of the dummy node
+    // will hold the R tree of the algorithm.  Using a dummy node, left
+    // and right will always be nodes and we avoid special cases.
+    final Node dummy = new Node(null, null);
+    Node left = dummy;
+    Node right = dummy;
+    Node current = root;
+    while (true) {
+      if (key < current.key) {
+        if (current.left == null) break;
+        if (key < current.left.key) {
+          // Rotate right.
+          Node tmp = current.left;
+          current.left = tmp.right;
+          tmp.right = current;
+          current = tmp;
+          if (current.left == null) break;
+        }
+        // Link right.
+        right.left = current;
+        right = current;
+        current = current.left;
+      } else if (key > current.key) {
+        if (current.right == null) break;
+        if (key > current.right.key) {
+          // Rotate left.
+          Node tmp = current.right;
+          current.right = tmp.left;
+          tmp.left = current;
+          current = tmp;
+          if (current.right == null) break;
+        }
+        // Link left.
+        left.right = current;
+        left = current;
+        current = current.right;
+      } else {
+        break;
+      }
+    }
+    // Assemble.
+    left.right = current.left;
+    right.left = current.right;
+    current.left = dummy.right;
+    current.right = dummy.left;
+    root = current;
+  }
+
+  /**
+   * Returns a list with all the keys of the tree.
+   */
+  List<num> exportKeys() {
+    List<num> result = [];
+    if (!isEmpty) root.traverse((Node node) => result.add(node.key));
+    return result;
+  }
+
+  // Tells whether the tree is empty.
+  bool get isEmpty => null == root;
+
+  // Pointer to the root node of the tree.
+  Node root;
+}
+
+
+class Node {
+  Node(this.key, this.value);
+  final num key;
+  final Object value;
+
+  Node left, right;
+
+  /**
+   * Performs an ordered traversal of the subtree starting here.
+   */
+  void traverse(void f(Node n)) {
+    Node current = this;
+    while (current != null) {
+      Node left = current.left;
+      if (left != null) left.traverse(f);
+      f(current);
+      current = current.right;
+    }
+  }
+}
diff --git a/runtime/tests/vm/dart_2/stack_overflow_shared_test.dart b/runtime/tests/vm/dart_2/stack_overflow_shared_test.dart
new file mode 100644
index 0000000..56fa08c
--- /dev/null
+++ b/runtime/tests/vm/dart_2/stack_overflow_shared_test.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.
+
+// 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
+// slow-path stack overflow checks which uses shared runtime stubs.
+
+import 'package:expect/expect.dart';
+import 'dart:math';
+
+filter_me() {
+  int s = 0;
+  for (int i = 0; i < 100; ++i) {
+    if (i % 2 == 0) {
+      s += i;
+    } else {
+      s -= i;
+    }
+  }
+  Expect.equals(s, -50);
+  double x = 0.0;
+  for (int i = 0; i < 100; ++i) {
+    if (i % 2 == 0) {
+      x = x / 3;
+    } else {
+      x = x * 2 + 1;
+    }
+  }
+  Expect.isTrue(x - 0.00001 < 3 && x + 0.00001 > 3);
+}
+
+main() {
+  filter_me();
+}
diff --git a/runtime/tests/vm/dart_2/stacktrace_mixin_application_test.dart b/runtime/tests/vm/dart_2/stacktrace_mixin_application_test.dart
new file mode 100644
index 0000000..04371a3
--- /dev/null
+++ b/runtime/tests/vm/dart_2/stacktrace_mixin_application_test.dart
@@ -0,0 +1,28 @@
+// 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:expect/expect.dart";
+
+mixin Bar {
+  bar() => throw "bar";
+}
+
+mixin Baz {}
+
+class Foo with Baz, Bar {}
+
+main() {
+  final foo = Foo();
+  try {
+    foo.bar();
+  } catch (e, st) {
+    final stack = st.toString();
+    // Check that stack frames for methods defined in a mixin Bar actually show
+    // only the mixin name rather than some combination of the name of the class
+    // that mixed in Bar along with other mixin names.
+    //
+    // Prior to the fix for issue #36999, this frame would have been named
+    // Foo&Baz&Bar.bar rather than simply Bar.bar.
+    Expect.isTrue(stack.contains('#0      Bar.bar'));
+  }
+}
diff --git a/runtime/tests/vm/dart_2/transferable_test.dart b/runtime/tests/vm/dart_2/transferable_test.dart
new file mode 100644
index 0000000..8daf5a0
--- /dev/null
+++ b/runtime/tests/vm/dart_2/transferable_test.dart
@@ -0,0 +1,130 @@
+// 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=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Test that validates that transferables are faster than regular typed data.
+
+import 'dart:async';
+import 'dart:isolate';
+import 'dart:typed_data';
+
+import "package:expect/expect.dart";
+
+const int toIsolateSize = 100 * 1024 * 1024;
+const int fromIsolateSize = 100 * 1024 * 1024;
+
+const int nIterations = 5;
+
+int iteration;
+bool keepTimerRunning;
+
+main() async {
+  keepTimerRunning = true;
+
+  print('--- standard');
+  iteration = nIterations;
+  final stopwatch = new Stopwatch()..start();
+  await runBatch(useTransferable: false);
+  final standard = stopwatch.elapsedMilliseconds;
+
+  print('--- transferable');
+  iteration = nIterations;
+  stopwatch.reset();
+  await runBatch(useTransferable: true);
+  final transferable = stopwatch.elapsedMilliseconds;
+  print(
+      'standard($standard ms)/transferable($transferable ms): ${standard / transferable}x');
+  keepTimerRunning = false;
+}
+
+packageList(Uint8List data, bool useTransferable) {
+  return useTransferable
+      ? TransferableTypedData.fromList(<Uint8List>[data])
+      : data;
+}
+
+class StartMessage {
+  final SendPort sendPort;
+  final bool useTransferable;
+
+  StartMessage(this.sendPort, this.useTransferable);
+}
+
+runBatch({bool useTransferable}) async {
+  Timer.run(idleTimer);
+  final port = ReceivePort();
+  final inbox = StreamIterator<dynamic>(port);
+  final worker = await Isolate.spawn(
+      isolateMain, StartMessage(port.sendPort, useTransferable),
+      paused: true);
+  final workerCompleted = Completer<bool>();
+  final workerExitedPort = ReceivePort()
+    ..listen((_) => workerCompleted.complete(true));
+  worker.addOnExitListener(workerExitedPort.sendPort);
+  worker.resume(worker.pauseCapability);
+
+  await inbox.moveNext();
+  final outbox = inbox.current;
+  final workWatch = new Stopwatch();
+  final data = new Uint8List(toIsolateSize);
+
+  while (iteration-- > 0) {
+    final packagedData = packageList(data, useTransferable);
+    workWatch.start();
+    outbox.send(packagedData);
+    await inbox.moveNext();
+
+    final received = inbox.current;
+    final receivedData = received is TransferableTypedData
+        ? received.materialize().asUint8List()
+        : received;
+
+    int time = workWatch.elapsedMilliseconds;
+    print('${time}ms for round-trip');
+    workWatch.reset();
+
+    Expect.equals(data.length, receivedData.length);
+  }
+  outbox.send(null);
+
+  await workerCompleted.future;
+  workerExitedPort.close();
+  port.close();
+}
+
+Future<Null> isolateMain(StartMessage startMessage) async {
+  final port = new ReceivePort();
+  final inbox = new StreamIterator<dynamic>(port);
+  startMessage.sendPort.send(port.sendPort);
+  final data = Uint8List.view(new Uint8List(fromIsolateSize).buffer);
+  while (true) {
+    await inbox.moveNext();
+    final received = inbox.current;
+    if (received == null) {
+      break;
+    }
+    final receivedData =
+        received is TransferableTypedData ? received.materialize() : received;
+
+    final packagedData = packageList(data, startMessage.useTransferable);
+
+    startMessage.sendPort.send(packagedData);
+  }
+  port.close();
+}
+
+final Stopwatch idleWatch = new Stopwatch();
+
+void idleTimer() {
+  idleWatch.stop();
+  final time = idleWatch.elapsedMilliseconds;
+  if (time > 5) print('${time}ms since last checkin');
+  idleWatch.reset();
+  idleWatch.start();
+  if (keepTimerRunning) {
+    Timer.run(idleTimer);
+  }
+}
diff --git a/runtime/tests/vm/dart_2/transferable_throws_oom_test.dart b/runtime/tests/vm/dart_2/transferable_throws_oom_test.dart
new file mode 100644
index 0000000..6930795
--- /dev/null
+++ b/runtime/tests/vm/dart_2/transferable_throws_oom_test.dart
@@ -0,0 +1,32 @@
+// 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.
+
+// 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
+// Environment=LSAN_OPTIONS=handle_segv=0:detect_stack_use_after_return=1:allocator_may_return_null=1
+// Environment=MSAN_OPTIONS=handle_segv=0:detect_stack_use_after_return=1:allocator_may_return_null=1
+// Environment=TSAN_OPTIONS=handle_segv=0:detect_stack_use_after_return=1:allocator_may_return_null=1
+
+// Test that ensures correct exception when running out of memory for
+// really large transferable.
+
+import 'dart:async';
+import 'dart:collection';
+import 'dart:core';
+import 'dart:io';
+import 'dart:isolate';
+import 'dart:typed_data';
+import 'dart:math';
+
+import "package:expect/expect.dart";
+
+main() {
+  // Attempt to create total 1tb uint8list which should fail on 32 and 64-bit
+  // platforms.
+  final bytes100MB = Uint8List(100 * 1024 * 1024);
+  final total1TB = List<Uint8List>.filled(10000, bytes100MB);
+  // Try to make a 1 TB transferable.
+  Expect.throws(() => TransferableTypedData.fromList(total1TB));
+}
diff --git a/runtime/tests/vm/dart_2/transferable_throws_test.dart b/runtime/tests/vm/dart_2/transferable_throws_test.dart
new file mode 100644
index 0000000..6f4d55b
--- /dev/null
+++ b/runtime/tests/vm/dart_2/transferable_throws_test.dart
@@ -0,0 +1,115 @@
+// 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=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Test that ensures correct exceptions are thrown when misusing
+// [TransferableTypedData].
+
+import 'dart:async';
+import 'dart:collection';
+import 'dart:core';
+import 'dart:io';
+import 'dart:isolate';
+import 'dart:typed_data';
+import 'dart:math';
+
+import "package:expect/expect.dart";
+
+throwsIfMaterializeAfterSend() async {
+  final completer = Completer<bool>();
+  final rp = ReceivePort()
+    ..listen((e) {
+      completer.complete(true);
+    });
+  final transferable = TransferableTypedData.fromList([Uint8List(1024)]);
+  rp.sendPort.send(transferable);
+  Expect.throwsArgumentError(() => transferable.materialize());
+  await completer.future;
+  rp.close();
+}
+
+throwsIfSendMoreThanOnce() async {
+  final completer = Completer<bool>();
+  final rp = ReceivePort()
+    ..listen((e) {
+      completer.complete(true);
+    });
+  final bytes = Uint8List(1024);
+  final transferable = TransferableTypedData.fromList([bytes]);
+  rp.sendPort.send(transferable);
+  Expect.throwsArgumentError(() => rp.sendPort.send(transferable));
+  await completer.future;
+  rp.close();
+}
+
+throwsIfMaterializeMoreThanOnce() {
+  final transferable = TransferableTypedData.fromList([Uint8List(1024)]);
+  transferable.materialize();
+  Expect.throwsArgumentError(() => transferable.materialize());
+}
+
+throwsIfReceiverMaterializesMoreThanOnce() async {
+  final completer = Completer<List>();
+  final isolateErrors = ReceivePort()..listen((e) => completer.complete(e));
+  await Isolate.spawn(
+      receiver, TransferableTypedData.fromList([Uint8List(1024)]),
+      onError: isolateErrors.sendPort);
+  final error = await completer.future;
+  Expect.equals(
+      error[0],
+      "Invalid argument(s): Attempt to materialize object that was"
+      " transferred already.");
+  isolateErrors.close();
+}
+
+void receiver(final transferable) {
+  transferable.materialize();
+  transferable.materialize();
+}
+
+throwsIfCummulativeListIsTooLargeOn32bitPlatform() {
+  try {
+    int maxUint8ListSize = pow(2, 30);
+    // Check whether we are on 32-bit or 64-bit platform.
+    new Uint8List(maxUint8ListSize);
+    // On 64-bit platform we will have difficulty allocating large enough
+    // Uint8List to verify "too large" use case, so do nothing.
+    return;
+  } catch (_) {}
+
+  var halfmax = new Uint8List(pow(2, 29) - 1);
+  Expect.throwsArgumentError(
+      () => TransferableTypedData.fromList([halfmax, halfmax, Uint8List(2)]));
+}
+
+class MyList<T> extends ListBase<T> {
+  @override
+  int length;
+
+  @override
+  T operator [](int index) => null;
+  @override
+  void operator []=(int index, T value) {}
+}
+
+class MyTypedData implements TypedData {
+  noSuchMethod(_) {}
+}
+
+main() async {
+  await throwsIfMaterializeAfterSend();
+  await throwsIfSendMoreThanOnce();
+  throwsIfMaterializeMoreThanOnce();
+  await throwsIfReceiverMaterializesMoreThanOnce();
+  throwsIfCummulativeListIsTooLargeOn32bitPlatform();
+
+  Expect.throwsArgumentError(() => TransferableTypedData.fromList(null));
+  Expect.throwsArgumentError(() => TransferableTypedData.fromList([null]));
+  Expect.throwsArgumentError(
+      () => TransferableTypedData.fromList(MyList<Uint8List>()));
+  Expect.throwsArgumentError(
+      () => TransferableTypedData.fromList([MyTypedData()]));
+}
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
new file mode 100644
index 0000000..4205fa6
--- /dev/null
+++ b/runtime/tests/vm/dart_2/trigger_gc_in_native_test.dart
@@ -0,0 +1,31 @@
+// 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=--no_concurrent_mark --no_concurrent_sweep
+// VMOptions=--no_concurrent_mark --concurrent_sweep
+// VMOptions=--no_concurrent_mark --use_compactor
+// VMOptions=--no_concurrent_mark --use_compactor --force_evacuation
+// VMOptions=--concurrent_mark --no_concurrent_sweep
+// VMOptions=--concurrent_mark --concurrent_sweep
+// VMOptions=--concurrent_mark --use_compactor
+// VMOptions=--concurrent_mark --use_compactor --force_evacuation
+
+import 'dart:typed_data';
+
+main() {
+  final List<List> arrays = [];
+  // Fill up heap with alternate large-small items.
+  for (int i = 0; i < 500000; i++) {
+    arrays.add(new Uint32List(260));
+    arrays.add(new Uint32List(1));
+  }
+  // Clear the large items so the heap has large gaps.
+  for (int i = 0; i < arrays.length; i += 2) {
+    arrays[i] = null;
+  }
+  // Allocate a lot of large items which don't fit in the gaps created above.
+  for (int i = 0; i < 600000; i++) {
+    arrays.add(new Uint32List(300));
+  }
+}
diff --git a/runtime/tests/vm/dart_2/truncating_ints_test.dart b/runtime/tests/vm/dart_2/truncating_ints_test.dart
new file mode 100644
index 0000000..a988482
--- /dev/null
+++ b/runtime/tests/vm/dart_2/truncating_ints_test.dart
@@ -0,0 +1,193 @@
+// 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.
+
+// VMOptions=--optimization_counter_threshold=10 --no-use-osr --no-background-compilation
+
+// Test for truncating (wrap-around) integer arithmetic.
+
+import "package:expect/expect.dart";
+
+@pragma('vm:never-inline')
+add_smi(var a, var b) => a + b;
+
+@pragma('vm:never-inline')
+add_mint(var a, var b) => a + b;
+
+@pragma('vm:never-inline')
+add_mint_consts() => 0x5000000000000000 + 0x6000000000000000;
+
+@pragma('vm:never-inline')
+test_add(var v2, var v3, var v3fxx, var v5fxx, var v7fxx, var n60xx) {
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(5, add_smi(v2, v3));
+  }
+
+  // Trigger deoptimization and re-compilation
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(0x4000000000000001, add_smi(v2, v3fxx));
+  }
+
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(-1, add_mint(v5fxx, n60xx));
+  }
+
+  // Wrap-around
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(-0x2000000000000002, add_mint(v5fxx, v7fxx));
+  }
+
+  // Constant folding
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(-0x5000000000000000, add_mint_consts());
+  }
+}
+
+@pragma('vm:never-inline')
+sub_smi(var a, var b) => a - b;
+
+@pragma('vm:never-inline')
+sub_mint(var a, var b) => a - b;
+
+@pragma('vm:never-inline')
+sub_mint_consts() => (-0x5000000000000000) - 0x6000000000000000;
+
+@pragma('vm:never-inline')
+test_sub(var v2, var v3, var v3fxx, var v5fxx, var v7fxx, var n60xx) {
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(1, sub_smi(v3, v2));
+  }
+
+  // Trigger deoptimization and re-compilation
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(-0x7ffffffffffffffe, sub_smi(-v3fxx, v3fxx));
+  }
+
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(0x2000000000000000, sub_mint(v7fxx, v5fxx));
+  }
+
+  // Wrap-around
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(0x4000000000000001, sub_mint(n60xx, v5fxx));
+  }
+
+  // Constant folding
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(0x5000000000000000, sub_mint_consts());
+  }
+}
+
+@pragma('vm:never-inline')
+mul_smi(var a, var b) => a * b;
+
+@pragma('vm:never-inline')
+mul_mint(var a, var b) => a * b;
+
+@pragma('vm:never-inline')
+mul_mint_consts() => 0x5000000000000001 * 0x6000000000000001;
+
+@pragma('vm:never-inline')
+test_mul(var v2, var v3, var v3fxx, var v5fxx, var v7fxx, var n60xx) {
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(6, mul_smi(v2, v3));
+  }
+
+  // Trigger deoptimization and re-compilation
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(0x7ffffffffffffffe, mul_smi(v2, v3fxx));
+  }
+
+  // Wrap around
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(0x1ffffffffffffffd, mul_mint(v5fxx, 3));
+  }
+
+  // Constant folding
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(-0x4fffffffffffffff, mul_mint_consts());
+  }
+}
+
+@pragma('vm:never-inline')
+shl_smi(var a, var b) => a << b;
+
+@pragma('vm:never-inline')
+shl_mint(var a, var b) => a << b;
+
+@pragma('vm:never-inline')
+shl_mint_by_const16(var a) => a << 16;
+
+@pragma('vm:never-inline')
+shl_smi_by_const96(var a) => a << 96;
+
+@pragma('vm:never-inline')
+shl_mint_by_const96(var a) => a << 96;
+
+@pragma('vm:never-inline')
+shl_mint_consts() => 0x77665544aabbccdd << 48;
+
+@pragma('vm:never-inline')
+test_shl(var v2, var v3, var v8, var v40) {
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(16, shl_smi(v2, v3));
+  }
+
+  // Trigger deoptimization and re-compilation, wrap-around
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(0x5566770000000000, shl_smi(0x0011223344556677, v40));
+  }
+
+  // Wrap around
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(-0x554433ffeeddcd00, shl_mint(0x7faabbcc00112233, v8));
+  }
+
+  // Shift mint by small constant
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(0x5544332211aa0000, shl_mint_by_const16(0x77665544332211aa));
+  }
+
+  // Shift smi by large constant
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(0, shl_smi_by_const96(0x77665544332211));
+  }
+
+  // Shift mint by large constant
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(0, shl_mint_by_const96(0x77665544332211aa));
+  }
+
+  // Constant folding
+  for (var i = 0; i < 20; i++) {
+    Expect.equals(-0x3323000000000000, shl_mint_consts());
+  }
+}
+
+test_literals() {
+  Expect.equals(0x7fffffffffffffff, 9223372036854775807);
+  Expect.equals(0x8000000000000000, -9223372036854775808);
+  Expect.equals(0x8000000000000000, -0x8000000000000000);
+  Expect.equals(0x8000000000000001, -0x7fffffffffffffff);
+  Expect.equals(0xabcdef0123456789, -0x543210FEDCBA9877);
+  Expect.equals(0xffffffffffffffff, -1);
+  Expect.equals(-9223372036854775808, -0x8000000000000000);
+  Expect.equals(9223372036854775807 + 1, -9223372036854775808);
+}
+
+main() {
+  var v2 = 2; // smi
+  var v3 = 3; // smi
+  var v8 = 8; // smi
+  var v40 = 40; // smi
+  var v3fxx = 0x3fffffffffffffff; // max smi
+  var v5fxx = 0x5fffffffffffffff; // mint
+  var v7fxx = 0x7fffffffffffffff; // max mint
+  var n60xx = -0x6000000000000000; // negative mint
+
+  test_add(v2, v3, v3fxx, v5fxx, v7fxx, n60xx);
+  test_sub(v2, v3, v3fxx, v5fxx, v7fxx, n60xx);
+  test_mul(v2, v3, v3fxx, v5fxx, v7fxx, n60xx);
+  test_shl(v2, v3, v8, v40);
+  test_literals();
+}
diff --git a/runtime/tests/vm/dart_2/tts_regression39716_test.dart b/runtime/tests/vm/dart_2/tts_regression39716_test.dart
new file mode 100644
index 0000000..782f3fa
--- /dev/null
+++ b/runtime/tests/vm/dart_2/tts_regression39716_test.dart
@@ -0,0 +1,50 @@
+// 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:expect/expect.dart';
+
+main() {
+  // Ensure all classes are used.
+  final l = <dynamic>[Base(), A<int>(), B<int>(), I<int>()];
+  print(l);
+
+  // Call `add(T)` with `T = A<int/String>` (the VM will not generate an
+  // optimized TTS for `A<int>` because there's two classes implementing
+  // `A`, both have type argument vector at a different offset, so it wouldn't
+  // know where to load it from)
+
+  // Populate the SubtypeTestCache with successfull `add(I<String>())`.
+  final x = <dynamic>[<A<String>>[]];
+  x.single.add(I<String>());
+
+  // Ensure type check fails if list type is now `A<int>`.
+  final y = <dynamic>[<A<int>>[]];
+  String exception = '';
+  try {
+    y.single.add(I<String>());
+  } catch (e) {
+    exception = e.toString();
+  }
+  print(exception);
+  Expect.isTrue(exception.contains('is not a subtype of'));
+}
+
+// Ensure depth-first preorder cid numbering will have the cid for [A] in the
+// middle and ensure type argument vector will be second field.
+class Base {
+  final int baseField = int.parse('1');
+}
+
+class A<T> extends Base {
+  T foo(T arg) => arg;
+}
+
+class B<T> extends A<T> {}
+
+// Make another implementation of A<T> where type argument vector is first
+// field.
+class I<T> implements A<T> {
+  int get baseField => int.parse('2');
+  T foo(T arg) => arg;
+}
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
new file mode 100644
index 0000000..58bac74
--- /dev/null
+++ b/runtime/tests/vm/dart_2/type_argument_factory_constructor_test.dart
@@ -0,0 +1,21 @@
+// 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.
+
+// Regression test for Issue https://github.com/dart-lang/sdk/issues/37264.
+typedef SomeCb = T Function<T>(T val);
+
+class A<T> {
+  final SomeCb cb;
+
+  A(this.cb);
+
+  factory A.b(SomeCb cb) {
+    return A(cb);
+  }
+}
+
+main() {
+  // VM should not crash on this case
+  A<int>.b(<String>(v) => v);
+}
diff --git a/runtime/tests/vm/dart_2/type_feedback_test.dart b/runtime/tests/vm/dart_2/type_feedback_test.dart
new file mode 100644
index 0000000..6211c70
--- /dev/null
+++ b/runtime/tests/vm/dart_2/type_feedback_test.dart
@@ -0,0 +1,45 @@
+// 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:async";
+import "dart:io";
+
+import "package:path/path.dart" as p;
+
+import "snapshot_test_helper.dart";
+
+int fib(int n) {
+  if (n <= 1) return 1;
+  return fib(n - 1) + fib(n - 2);
+}
+
+Future<void> main(List<String> args) async {
+  if (args.contains("--child")) {
+    print(fib(35));
+    return;
+  }
+
+  if (!Platform.script.toString().endsWith(".dart")) {
+    print("This test must run from source");
+    return;
+  }
+
+  await withTempDir((String tmp) async {
+    final String feedbackPath = p.join(tmp, "type_feedback.bin");
+
+    final result1 = await runDart("generate type feedback", [
+      "--save_type_feedback=$feedbackPath",
+      Platform.script.toFilePath(),
+      "--child",
+    ]);
+    expectOutput("14930352", result1);
+
+    final result2 = await runDart("use type feedback", [
+      "--load_type_feedback=$feedbackPath",
+      Platform.script.toFilePath(),
+      "--child",
+    ]);
+    expectOutput("14930352", result2);
+  });
+}
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
new file mode 100644
index 0000000..d19c5e9
--- /dev/null
+++ b/runtime/tests/vm/dart_2/unboxed_fields_type_args_test.dart
@@ -0,0 +1,59 @@
+// 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:typed_data';
+import 'dart:async';
+import 'dart:isolate';
+
+import "package:expect/expect.dart";
+
+double getDoubleWithHeapObjectTag() {
+  final bd = ByteData(8);
+  bd.setUint64(0, 0x8000000000000001, Endian.host);
+  final double v = bd.getFloat64(0, Endian.host);
+  return v;
+}
+
+class Foo {
+  final String clazz = "foo";
+  final double x = getDoubleWithHeapObjectTag();
+}
+
+// Here we ensure to have a GC pointer and a non-GC pointer field, and then a
+// type argument vector, so the offset in number of words for the type arguments
+// will be different between host and target when compiling from 64-bit to
+// 32-bit architectures.
+class Bar<T> extends Foo {
+  final String clazz = "bar";
+  final double y = getDoubleWithHeapObjectTag();
+  final T value;
+  Bar(T val) : value = val;
+}
+
+main() async {
+  final receivePort = new ReceivePort();
+  receivePort.sendPort.send(Foo());
+  receivePort.sendPort.send(Bar<String>("StringBar"));
+  receivePort.sendPort.send(Bar<double>(4.2));
+  final it = StreamIterator(receivePort);
+
+  Expect.isTrue(await it.moveNext());
+  final foo = it.current as Foo;
+
+  Expect.isTrue(await it.moveNext());
+  final string_bar = it.current as Bar<String>;
+
+  Expect.isTrue(await it.moveNext());
+  final double_bar = it.current as Bar<double>;
+
+  Expect.equals(string_bar.value, "StringBar");
+  Expect.equals(string_bar.clazz, "bar");
+  Expect.equals(string_bar.y, getDoubleWithHeapObjectTag());
+  Expect.equals(string_bar.x, getDoubleWithHeapObjectTag());
+  Expect.equals(double_bar.value, 4.2);
+  Expect.equals(foo.clazz, "foo");
+  Expect.equals(foo.x, getDoubleWithHeapObjectTag());
+
+  await it.cancel();
+}
diff --git a/runtime/tests/vm/dart_2/unboxed_many_fields_test.dart b/runtime/tests/vm/dart_2/unboxed_many_fields_test.dart
new file mode 100644
index 0000000..84b4f1d
--- /dev/null
+++ b/runtime/tests/vm/dart_2/unboxed_many_fields_test.dart
@@ -0,0 +1,281 @@
+// 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:_internal' show VMInternalsForTesting;
+
+import 'package:expect/expect.dart';
+
+// The VM class finalizer ensures that we only unbox fields which can be
+// represented in the unboxed field bitmap in the target architecture (even when
+// cross-compiling from 64-bit to 32-bit), see `Class::CalculateFieldOffsets()`.
+
+// Make an integer that would look like an object pointer (irrespective of
+// we compile to 32-bit or 64-bit and whether we use little or big endian
+// encoding of the integer).
+int get integerFieldValue =>
+    int.parse('1') == 1 ? constIntegerFieldValue : 0x8000900180009001;
+const int constIntegerFieldValue = 0x8000000180000001;
+
+int i = 0;
+final Object objectFieldValue = Foo('i${i++}');
+
+void main() {
+  final object = buildTargetLayout64Bit();
+
+  // Ensure all fields of the class are used.
+  print(object);
+
+  Expect.identical(object.field1, objectFieldValue);
+  Expect.identical(object.field2, constIntegerFieldValue);
+  Expect.identical(object.field64, objectFieldValue);
+  Expect.identical(object.field65, constIntegerFieldValue);
+  Expect.identical(object.field66, objectFieldValue);
+  Expect.equals('i0', object.field66.value);
+
+  // Forcefully cause a GC.
+  VMInternalsForTesting.collectAllGarbage();
+
+  Expect.identical(object.field1, objectFieldValue);
+  Expect.identical(object.field2, constIntegerFieldValue);
+  Expect.identical(object.field64, objectFieldValue);
+  Expect.identical(object.field65, constIntegerFieldValue);
+  Expect.identical(object.field66, objectFieldValue);
+  Expect.equals('i0', object.field66.value);
+
+  print(object);
+}
+
+class Foo {
+  final String value;
+  Foo(this.value);
+}
+
+class TargetLayout64Bit {
+  // field0 is header word.
+  final Object field1;
+  final int field2;
+  final int field3;
+  final int field4;
+  final int field5;
+  final int field6;
+  final int field7;
+  final int field8;
+  final int field9;
+  final int field10;
+  final int field11;
+  final int field12;
+  final int field13;
+  final int field14;
+  final int field15;
+  final int field16;
+  final int field17;
+  final int field18;
+  final int field19;
+  final int field20;
+  final int field21;
+  final int field22;
+  final int field23;
+  final int field24;
+  final int field25;
+  final int field26;
+  final int field27;
+  final int field28;
+  final int field29;
+  final int field30;
+  final int field31;
+  final int field32;
+  final int field33;
+  final int field34;
+  final int field35;
+  final int field36;
+  final int field37;
+  final int field38;
+  final int field39;
+  final int field40;
+  final int field41;
+  final int field42;
+  final int field43;
+  final int field44;
+  final int field45;
+  final int field46;
+  final int field47;
+  final int field48;
+  final int field49;
+  final int field50;
+  final int field51;
+  final int field52;
+  final int field53;
+  final int field54;
+  final int field55;
+  final int field56;
+  final int field57;
+  final int field58;
+  final int field59;
+  final int field60;
+  final int field61;
+  final int field62;
+  final int field63;
+
+  // For 64-bit targets there are no more bits available so we need to start
+  // boxing all fields from here (this is performed in the class finalizer).
+
+  final Object field64;
+
+  // If GC incorrectly uses (bitmap & (1 << 65)) then will access bit of
+  // [field1] and incorrectly think it is an object pointer.
+  final int field65;
+
+  // If GC incorrectly uses (bitmap & (1 << 66)) then will access bit of
+  // [field2] and incorrectly think it is a unboxed value.
+  final Object field66;
+
+  const TargetLayout64Bit(
+      this.field1,
+      this.field2,
+      this.field3,
+      this.field4,
+      this.field5,
+      this.field6,
+      this.field7,
+      this.field8,
+      this.field9,
+      this.field10,
+      this.field11,
+      this.field12,
+      this.field13,
+      this.field14,
+      this.field15,
+      this.field16,
+      this.field17,
+      this.field18,
+      this.field19,
+      this.field20,
+      this.field21,
+      this.field22,
+      this.field23,
+      this.field24,
+      this.field25,
+      this.field26,
+      this.field27,
+      this.field28,
+      this.field29,
+      this.field30,
+      this.field31,
+      this.field32,
+      this.field33,
+      this.field34,
+      this.field35,
+      this.field36,
+      this.field37,
+      this.field38,
+      this.field39,
+      this.field40,
+      this.field41,
+      this.field42,
+      this.field43,
+      this.field44,
+      this.field45,
+      this.field46,
+      this.field47,
+      this.field48,
+      this.field49,
+      this.field50,
+      this.field51,
+      this.field52,
+      this.field53,
+      this.field54,
+      this.field55,
+      this.field56,
+      this.field57,
+      this.field58,
+      this.field59,
+      this.field60,
+      this.field61,
+      this.field62,
+      this.field63,
+      this.field64,
+      this.field65,
+      this.field66);
+
+  // Ensure all fields are used.
+  String toString() => '''
+      <header>, $field1, $field2, $field3, $field4, $field5, $field6, $field7,
+      $field8, $field9, $field10, $field11, $field12, $field13, $field14, $field15,
+      $field16, $field17, $field18, $field19, $field20, $field21, $field22, $field23,
+      $field24, $field25, $field26, $field27, $field28, $field29, $field30, $field31,
+      $field32, $field33, $field34, $field35, $field36, $field37, $field38, $field39,
+      $field40, $field41, $field42, $field43, $field44, $field45, $field46, $field47,
+      $field48, $field49, $field50, $field51, $field52, $field53, $field54, $field55,
+      $field56, $field57, $field58, $field59, $field60, $field61, $field62, $field63,
+      $field64, $field65, $field66''';
+}
+
+@pragma('vm:never-inline')
+buildTargetLayout64Bit() => TargetLayout64Bit(
+    objectFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    integerFieldValue,
+    objectFieldValue,
+    integerFieldValue,
+    objectFieldValue);
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
new file mode 100644
index 0000000..6606fc4
--- /dev/null
+++ b/runtime/tests/vm/dart_2/unboxed_param_args_descriptor_test.dart
@@ -0,0 +1,23 @@
+// 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.
+//
+// SharedObjects=ffi_test_functions
+
+import 'package:expect/expect.dart';
+
+import 'dylib_utils.dart';
+
+@pragma('vm:never-inline')
+int foo<T>(int i, T j, Type t) {
+  triggerGc();
+  Expect.equals(T, t);
+  return i + 2;
+}
+
+main() {
+  final x = foo(1, 0.0, double);
+  final y = foo(2, 0, int);
+  Expect.equals(3, x);
+  Expect.equals(4, y);
+}
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
new file mode 100644
index 0000000..4ef1f7f
--- /dev/null
+++ b/runtime/tests/vm/dart_2/unboxed_param_tear_off_test.dart
@@ -0,0 +1,42 @@
+// 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.
+//
+// SharedObjects=ffi_test_functions
+
+import 'package:expect/expect.dart';
+
+import 'dylib_utils.dart';
+import 'unboxed_parameter_helper.dart';
+
+class Foo {
+  int val;
+  Foo(this.val);
+}
+
+var globalFoo;
+
+@pragma('vm:never-inline')
+int bar(int i, Foo foo, double j) {
+  triggerGc();
+  globalFoo.val = 0;
+  return i + 2 + j.toInt() - j.toInt() + foo.val;
+}
+
+@pragma('vm:never-inline')
+createFoo() {
+  globalFoo = Foo(1);
+}
+
+final bool kTrue = int.parse('1') == 1;
+
+@pragma('vm:never-inline')
+testExecution(func, double param) {
+  Expect.equals(3, func(kTrue ? 1 : 2, globalFoo, kTrue ? param : 1.0));
+}
+
+main() {
+  createFoo();
+  final dbl = getDoubleWithHeapObjectTag();
+  testExecution(bar, dbl);
+}
diff --git a/runtime/tests/vm/dart_2/unboxed_param_test.dart b/runtime/tests/vm/dart_2/unboxed_param_test.dart
new file mode 100644
index 0000000..0ce12da
--- /dev/null
+++ b/runtime/tests/vm/dart_2/unboxed_param_test.dart
@@ -0,0 +1,44 @@
+// 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.
+//
+// SharedObjects=ffi_test_functions
+
+import 'package:expect/expect.dart';
+
+import 'dylib_utils.dart';
+import 'unboxed_parameter_helper.dart';
+
+class Foo {
+  int val;
+  Foo(this.val);
+}
+
+var globalFoo;
+
+final dbl2 = getDoubleWithHeapObjectTag();
+
+@pragma('vm:never-inline')
+double bar(int i, double k, Foo foo, double j, [int optional = 1]) {
+  triggerGc();
+  globalFoo.val = 0;
+  return (i + 2 + j.toInt() - j.toInt() + globalFoo.val + optional).toDouble();
+}
+
+@pragma('vm:never-inline')
+createFoo() {
+  globalFoo = Foo(1);
+}
+
+final bool kTrue = int.parse('1') == 1;
+
+main() {
+  createFoo();
+  final dbl = getDoubleWithHeapObjectTag();
+  Expect.equals(4.0,
+      bar(kTrue ? 1 : 2, kTrue ? 2 * dbl : 0.0, globalFoo, kTrue ? dbl : 1.0));
+  Expect.equals(
+      3.0,
+      bar(kTrue ? 1 : 2, kTrue ? 2 * dbl : 0.0, globalFoo, kTrue ? dbl : 1.0,
+          0));
+}
diff --git a/runtime/tests/vm/dart_2/unboxed_parameter_helper.dart b/runtime/tests/vm/dart_2/unboxed_parameter_helper.dart
new file mode 100644
index 0000000..b0ee815
--- /dev/null
+++ b/runtime/tests/vm/dart_2/unboxed_parameter_helper.dart
@@ -0,0 +1,13 @@
+// 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:typed_data';
+
+@pragma('vm:never-inline')
+double getDoubleWithHeapObjectTag() {
+  final bd = ByteData(8);
+  bd.setUint64(0, 0x8000000180000001, Endian.host);
+  final double v = bd.getFloat64(0, Endian.host);
+  return v;
+}
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
new file mode 100644
index 0000000..eead3b6
--- /dev/null
+++ b/runtime/tests/vm/dart_2/use_bare_instructions_flag_test.dart
@@ -0,0 +1,103 @@
+// 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.
+
+// 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).
+
+import "dart:async";
+import "dart:io";
+
+import 'package:expect/expect.dart';
+import 'package:path/path.dart' as path;
+
+import 'use_flag_test_helper.dart';
+
+main(List<String> args) async {
+  if (!isAOTRuntime) {
+    return; // Running in JIT: AOT binaries not available.
+  }
+
+  if (Platform.isAndroid) {
+    return; // SDK tree and dart_bootstrap not available on the test device.
+  }
+
+  await withTempDir('bare-flag-test', (String tempDir) async {
+    final script = path.join(sdkDir, 'pkg/kernel/bin/dump.dart');
+    final scriptDill = path.join(tempDir, 'kernel_dump.dill');
+
+    // Compile script to Kernel IR.
+    await run(genKernel, <String>[
+      '--aot',
+      '--platform=$platformDill',
+      '-o',
+      scriptDill,
+      script,
+    ]);
+
+    // Run the AOT compiler with/without bare instructions.
+    final scriptBareSnapshot = path.join(tempDir, 'bare.snapshot');
+    final scriptNonBareSnapshot = path.join(tempDir, 'non_bare.snapshot');
+    await Future.wait(<Future>[
+      run(genSnapshot, <String>[
+        '--use-bare-instructions',
+        '--snapshot-kind=app-aot-elf',
+        '--elf=$scriptBareSnapshot',
+        scriptDill,
+      ]),
+      run(genSnapshot, <String>[
+        '--no-use-bare-instructions',
+        '--snapshot-kind=app-aot-elf',
+        '--elf=$scriptNonBareSnapshot',
+        scriptDill,
+      ]),
+    ]);
+
+    // Run the resulting bare-AOT compiled script.
+    final bareOut1 = path.join(tempDir, 'bare-out1.txt');
+    final bareOut2 = path.join(tempDir, 'bare-out2.txt');
+    await Future.wait(<Future>[
+      run(aotRuntime, <String>[
+        '--use-bare-instructions',
+        scriptBareSnapshot,
+        scriptDill,
+        bareOut1,
+      ]),
+      run(aotRuntime, <String>[
+        '--no-use-bare-instructions',
+        scriptBareSnapshot,
+        scriptDill,
+        bareOut2,
+      ]),
+    ]);
+
+    // Run the resulting non-bare-AOT compiled script.
+    final nonBareOut1 = path.join(tempDir, 'non-bare-out1.txt');
+    final nonBareOut2 = path.join(tempDir, 'non-bare-out2.txt');
+    await Future.wait(<Future>[
+      run(aotRuntime, <String>[
+        '--use-bare-instructions',
+        scriptNonBareSnapshot,
+        scriptDill,
+        nonBareOut1,
+      ]),
+      run(aotRuntime, <String>[
+        '--no-use-bare-instructions',
+        scriptNonBareSnapshot,
+        scriptDill,
+        nonBareOut2,
+      ]),
+    ]);
+
+    // Ensure we got 4 times the same result.
+    final output = await readFile(bareOut1);
+    Expect.equals(output, await readFile(bareOut2));
+    Expect.equals(output, await readFile(nonBareOut1));
+    Expect.equals(output, await readFile(nonBareOut2));
+  });
+}
+
+Future<String> readFile(String file) {
+  return new File(file).readAsString();
+}
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
new file mode 100644
index 0000000..c422f18
--- /dev/null
+++ b/runtime/tests/vm/dart_2/use_dwarf_stack_traces_flag_program.dart
@@ -0,0 +1,19 @@
+// 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.
+// Test that the full stacktrace in an error object matches the stacktrace
+// handed to the catch clause.
+
+import "package:expect/expect.dart";
+
+class C {
+  // operator*(o) is missing to trigger a noSuchMethodError when a C object
+  // is used in the multiplication below.
+}
+
+bar(c) => c * 4;
+foo(c) => bar(c);
+
+main() {
+  var a = foo(new 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
new file mode 100644
index 0000000..c67b5ef
--- /dev/null
+++ b/runtime/tests/vm/dart_2/use_dwarf_stack_traces_flag_test.dart
@@ -0,0 +1,200 @@
+// 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.
+
+// 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).
+
+// OtherResources=use_dwarf_stack_traces_flag_program.dart
+
+import "dart:async";
+import "dart:io";
+
+import 'package:expect/expect.dart';
+import 'package:native_stack_traces/native_stack_traces.dart';
+import 'package:path/path.dart' as path;
+
+import 'use_flag_test_helper.dart';
+
+main(List<String> args) async {
+  if (!isAOTRuntime) {
+    return; // Running in JIT: AOT binaries not available.
+  }
+
+  if (Platform.isAndroid) {
+    return; // SDK tree and dart_bootstrap not available on the test device.
+  }
+
+  // These are the tools we need to be available to run on a given platform:
+  if (!await testExecutable(genSnapshot)) {
+    throw "Cannot run test as $genSnapshot not available";
+  }
+  if (!await testExecutable(aotRuntime)) {
+    throw "Cannot run test as $aotRuntime not available";
+  }
+  if (!File(platformDill).existsSync()) {
+    throw "Cannot run test as $platformDill does not exist";
+  }
+
+  await withTempDir('dwarf-flag-test', (String tempDir) async {
+    final cwDir = path.dirname(Platform.script.toFilePath());
+    final script = path.join(cwDir, 'use_dwarf_stack_traces_flag_program.dart');
+    final scriptDill = path.join(tempDir, 'flag_program.dill');
+
+    // Compile script to Kernel IR.
+    await run(genKernel, <String>[
+      '--aot',
+      '--platform=$platformDill',
+      '-o',
+      scriptDill,
+      script,
+    ]);
+
+    // Run the AOT compiler with/without Dwarf stack traces.
+    final scriptDwarfSnapshot = path.join(tempDir, 'dwarf.so');
+    final scriptNonDwarfSnapshot = path.join(tempDir, 'non_dwarf.so');
+    final scriptDwarfDebugInfo = path.join(tempDir, 'debug_info.so');
+    await Future.wait(<Future>[
+      run(genSnapshot, <String>[
+        // We test --dwarf-stack-traces-mode, not --dwarf-stack-traces, because
+        // the latter is a handler that sets the former and also may change
+        // other flags. This way, we limit the difference between the two
+        // snapshots and also directly test the flag saved as a VM global flag.
+        '--dwarf-stack-traces-mode',
+        '--save-debugging-info=$scriptDwarfDebugInfo',
+        '--snapshot-kind=app-aot-elf',
+        '--elf=$scriptDwarfSnapshot',
+        scriptDill,
+      ]),
+      run(genSnapshot, <String>[
+        '--no-dwarf-stack-traces-mode',
+        '--snapshot-kind=app-aot-elf',
+        '--elf=$scriptNonDwarfSnapshot',
+        scriptDill,
+      ]),
+    ]);
+
+    // Run the resulting Dwarf-AOT compiled script.
+    final dwarfTrace1 = await runError(aotRuntime, <String>[
+      '--dwarf-stack-traces-mode',
+      scriptDwarfSnapshot,
+      scriptDill,
+    ]);
+    final dwarfTrace2 = await runError(aotRuntime, <String>[
+      '--no-dwarf-stack-traces-mode',
+      scriptDwarfSnapshot,
+      scriptDill,
+    ]);
+
+    // Run the resulting non-Dwarf-AOT compiled script.
+    final nonDwarfTrace1 = await runError(aotRuntime, <String>[
+      '--dwarf-stack-traces-mode',
+      scriptNonDwarfSnapshot,
+      scriptDill,
+    ]);
+    final nonDwarfTrace2 = await runError(aotRuntime, <String>[
+      '--no-dwarf-stack-traces-mode',
+      scriptNonDwarfSnapshot,
+      scriptDill,
+    ]);
+
+    // Ensure the result is based off the flag passed to gen_snapshot, not
+    // the one passed to the runtime.
+    Expect.deepEquals(nonDwarfTrace1, nonDwarfTrace2);
+
+    // For DWARF stack traces, we can't guarantee that the stack traces are
+    // textually equal on all platforms, but if we retrieve the PC offsets
+    // out of the stack trace, those should be equal.
+    final tracePCOffsets1 = collectPCOffsets(dwarfTrace1);
+    final tracePCOffsets2 = collectPCOffsets(dwarfTrace2);
+    Expect.deepEquals(tracePCOffsets1, tracePCOffsets2);
+
+    // Check that translating the DWARF stack trace (without internal frames)
+    // matches the symbolic stack trace.
+    final dwarf = Dwarf.fromFile(scriptDwarfDebugInfo);
+    assert(dwarf != null);
+    final translatedDwarfTrace1 = await Stream.fromIterable(dwarfTrace1)
+        .transform(DwarfStackTraceDecoder(dwarf))
+        .toList();
+
+    final translatedStackFrames = onlySymbolicFrameLines(translatedDwarfTrace1);
+    final originalStackFrames = onlySymbolicFrameLines(nonDwarfTrace1);
+
+    print('Stack frames from translated non-symbolic stack trace:');
+    translatedStackFrames.forEach(print);
+    print('');
+
+    print('Stack frames from original symbolic stack trace:');
+    originalStackFrames.forEach(print);
+    print('');
+
+    Expect.isTrue(translatedStackFrames.length > 0);
+    Expect.isTrue(originalStackFrames.length > 0);
+
+    Expect.deepEquals(translatedStackFrames, originalStackFrames);
+
+    // Since we compiled directly to ELF, there should be a DSO base address
+    // in the stack trace header and 'virt' markers in the stack frames.
+
+    // The offsets of absolute addresses from their respective DSO base
+    // should be the same for both traces.
+    final dsoBase1 = dsoBaseAddresses(dwarfTrace1).single;
+    final dsoBase2 = dsoBaseAddresses(dwarfTrace2).single;
+
+    final absTrace1 = absoluteAddresses(dwarfTrace1);
+    final absTrace2 = absoluteAddresses(dwarfTrace2);
+
+    final relocatedFromDso1 = absTrace1.map((a) => a - dsoBase1);
+    final relocatedFromDso2 = absTrace2.map((a) => a - dsoBase2);
+
+    Expect.deepEquals(relocatedFromDso1, relocatedFromDso2);
+
+    // The relocated addresses marked with 'virt' should match between the
+    // different runs, and they should also match the relocated address
+    // calculated from the PCOffset for each frame as well as the relocated
+    // address for each frame calculated using the respective DSO base.
+    final virtTrace1 = explicitVirtualAddresses(dwarfTrace1);
+    final virtTrace2 = explicitVirtualAddresses(dwarfTrace2);
+
+    Expect.deepEquals(virtTrace1, virtTrace2);
+
+    Expect.deepEquals(
+        virtTrace1, tracePCOffsets1.map((o) => o.virtualAddressIn(dwarf)));
+    Expect.deepEquals(
+        virtTrace2, tracePCOffsets2.map((o) => o.virtualAddressIn(dwarf)));
+
+    Expect.deepEquals(virtTrace1, relocatedFromDso1);
+    Expect.deepEquals(virtTrace2, relocatedFromDso2);
+  });
+}
+
+final _symbolicFrameRE = RegExp(r'^#\d+\s+');
+
+Iterable<String> onlySymbolicFrameLines(Iterable<String> lines) {
+  return lines.where((line) => _symbolicFrameRE.hasMatch(line));
+}
+
+Iterable<int> parseUsingAddressRegExp(RegExp re, Iterable<String> lines) sync* {
+  for (final line in lines) {
+    final match = re.firstMatch(line);
+    if (match != null) {
+      yield int.parse(match.group(1), radix: 16);
+    }
+  }
+}
+
+final _absRE = RegExp(r'abs ([a-f\d]+)');
+
+Iterable<int> absoluteAddresses(Iterable<String> lines) =>
+    parseUsingAddressRegExp(_absRE, lines);
+
+final _virtRE = RegExp(r'virt ([a-f\d]+)');
+
+Iterable<int> explicitVirtualAddresses(Iterable<String> lines) =>
+    parseUsingAddressRegExp(_virtRE, lines);
+
+final _dsoBaseRE = RegExp(r'isolate_dso_base: ([a-f\d]+)');
+
+Iterable<int> dsoBaseAddresses(Iterable<String> lines) =>
+    parseUsingAddressRegExp(_dsoBaseRE, lines);
diff --git a/runtime/tests/vm/dart_2/use_flag_test_helper.dart b/runtime/tests/vm/dart_2/use_flag_test_helper.dart
new file mode 100644
index 0000000..fe9c511
--- /dev/null
+++ b/runtime/tests/vm/dart_2/use_flag_test_helper.dart
@@ -0,0 +1,187 @@
+// 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:io';
+
+import 'package:expect/expect.dart';
+import 'package:path/path.dart' as path;
+
+final isAOTRuntime = path.basenameWithoutExtension(Platform.executable) ==
+    'dart_precompiled_runtime';
+final buildDir = path.dirname(Platform.executable);
+final sdkDir = path.dirname(path.dirname(buildDir));
+final platformDill = path.join(buildDir, 'vm_platform_strong.dill');
+final genKernel = path.join(sdkDir, 'pkg', 'vm', 'tool',
+    'gen_kernel' + (Platform.isWindows ? '.bat' : ''));
+final _genSnapshotBase = 'gen_snapshot' + (Platform.isWindows ? '.exe' : '');
+// Slight hack to work around issue that gen_snapshot for simarm_x64 is not
+// in the same subdirectory as dart_precompiled_runtime (${MODE}SIMARM), but
+// instead it's in ${MODE}SIMARM_X64.
+final genSnapshot = File(path.join(buildDir, _genSnapshotBase)).existsSync()
+    ? path.join(buildDir, _genSnapshotBase)
+    : path.join(buildDir + '_X64', _genSnapshotBase);
+final aotRuntime = path.join(
+    buildDir, 'dart_precompiled_runtime' + (Platform.isWindows ? '.exe' : ''));
+
+String get clangBuildToolsDir {
+  String archDir;
+  if (Platform.isLinux) {
+    archDir = 'linux-x64';
+  } else if (Platform.isMacOS) {
+    archDir = 'mac-x64';
+  } else {
+    return null;
+  }
+  var clangDir = path.join(sdkDir, 'buildtools', archDir, 'clang', 'bin');
+  return Directory(clangDir).existsSync() ? clangDir : null;
+}
+
+Future<void> assembleSnapshot(String assemblyPath, String snapshotPath) async {
+  if (!Platform.isLinux && !Platform.isMacOS) {
+    throw "Unsupported platform ${Platform.operatingSystem} for assembling";
+  }
+
+  final ccFlags = <String>[];
+  final ldFlags = <String>[];
+  String cc = 'gcc';
+  String shared = '-shared';
+
+  if (Platform.isMacOS) {
+    cc = 'clang';
+  } else if (buildDir.endsWith('SIMARM') || buildDir.endsWith('SIMARM64')) {
+    if (clangBuildToolsDir != null) {
+      cc = path.join(clangBuildToolsDir, 'clang');
+    } else {
+      throw 'Cannot assemble for ${path.basename(buildDir)} '
+          'without //buildtools on ${Platform.operatingSystem}';
+    }
+  }
+
+  if (Platform.isMacOS) {
+    shared = '-dynamiclib';
+    // Tell Mac linker to give up generating eh_frame from dwarf.
+    ldFlags.add('-Wl,-no_compact_unwind');
+  } else if (buildDir.endsWith('SIMARM')) {
+    ccFlags.add('--target=armv7-linux-gnueabihf');
+  } else if (buildDir.endsWith('SIMARM64')) {
+    ccFlags.add('--target=aarch64-linux-gnu');
+  }
+
+  if (buildDir.endsWith('X64') || buildDir.endsWith('SIMARM64')) {
+    ccFlags.add('-m64');
+  }
+
+  await run(cc, <String>[
+    ...ccFlags,
+    ...ldFlags,
+    shared,
+    '-nostdlib',
+    '-o',
+    snapshotPath,
+    assemblyPath,
+  ]);
+}
+
+Future<void> stripSnapshot(String snapshotPath, String strippedPath,
+    {bool forceElf = false}) async {
+  if (!Platform.isLinux && !Platform.isMacOS) {
+    throw "Unsupported platform ${Platform.operatingSystem} for stripping";
+  }
+
+  var strip = 'strip';
+
+  if ((Platform.isLinux &&
+          (buildDir.endsWith('SIMARM') || buildDir.endsWith('SIMARM64'))) ||
+      (Platform.isMacOS && forceElf)) {
+    if (clangBuildToolsDir != null) {
+      strip = path.join(clangBuildToolsDir, 'llvm-strip');
+    } else {
+      throw 'Cannot strip ELF files for ${path.basename(buildDir)} '
+          'without //buildtools on ${Platform.operatingSystem}';
+    }
+  }
+
+  await run(strip, <String>[
+    '-o',
+    strippedPath,
+    snapshotPath,
+  ]);
+}
+
+Future<ProcessResult> runHelper(String executable, List<String> args) async {
+  print('Running $executable ${args.join(' ')}');
+
+  final result = await Process.run(executable, args);
+  if (result.stdout.isNotEmpty) {
+    print('Subcommand stdout:');
+    print(result.stdout);
+  }
+  if (result.stderr.isNotEmpty) {
+    print('Subcommand stderr:');
+    print(result.stderr);
+  }
+
+  return result;
+}
+
+Future<bool> testExecutable(String executable) async {
+  try {
+    final result = await runHelper(executable, <String>['--version']);
+    return result.exitCode == 0;
+  } on ProcessException catch (e) {
+    print('Got process exception: $e');
+    return false;
+  }
+}
+
+Future<void> run(String executable, List<String> args) async {
+  final result = await runHelper(executable, args);
+
+  if (result.exitCode != 0) {
+    throw 'Command failed with unexpected exit code (was ${result.exitCode})';
+  }
+}
+
+Future<Iterable<String>> runOutput(String executable, List<String> args) async {
+  final result = await runHelper(executable, args);
+
+  if (result.exitCode != 0) {
+    throw 'Command failed with unexpected exit code (was ${result.exitCode})';
+  }
+  Expect.isTrue(result.stdout.isNotEmpty);
+  Expect.isTrue(result.stderr.isEmpty);
+
+  return await Stream.value(result.stdout as String)
+      .transform(const LineSplitter())
+      .toList();
+}
+
+Future<Iterable<String>> runError(String executable, List<String> args) async {
+  final result = await runHelper(executable, args);
+
+  if (result.exitCode == 0) {
+    throw 'Command did not fail with non-zero exit code';
+  }
+  Expect.isTrue(result.stdout.isEmpty);
+  Expect.isTrue(result.stderr.isNotEmpty);
+
+  return await Stream.value(result.stderr as String)
+      .transform(const LineSplitter())
+      .toList();
+}
+
+const keepTempKey = 'KEEP_TEMPORARY_DIRECTORIES';
+
+Future<void> withTempDir(String name, Future<void> fun(String dir)) async {
+  final tempDir = Directory.systemTemp.createTempSync(name);
+  try {
+    await fun(tempDir.path);
+  } finally {
+    if (!Platform.environment.containsKey(keepTempKey) ||
+        Platform.environment[keepTempKey].isEmpty) {
+      tempDir.deleteSync(recursive: true);
+    }
+  }
+}
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
new file mode 100644
index 0000000..e098c5a
--- /dev/null
+++ b/runtime/tests/vm/dart_2/use_save_debugging_info_flag_test.dart
@@ -0,0 +1,186 @@
+// 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.
+
+// 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.
+
+// OtherResources=use_dwarf_stack_traces_flag_program.dart
+
+import "dart:io";
+import "dart:math";
+import "dart:typed_data";
+
+import 'package:expect/expect.dart';
+import 'package:native_stack_traces/native_stack_traces.dart';
+import 'package:path/path.dart' as path;
+
+import 'use_flag_test_helper.dart';
+
+main(List<String> args) async {
+  if (!isAOTRuntime) {
+    return; // Running in JIT: AOT binaries not available.
+  }
+
+  if (Platform.isAndroid) {
+    return; // SDK tree and dart_bootstrap not available on the test device.
+  }
+
+  // These are the tools we need to be available to run on a given platform:
+  if (!await testExecutable(genSnapshot)) {
+    throw "Cannot run test as $genSnapshot not available";
+  }
+  if (!await testExecutable(aotRuntime)) {
+    throw "Cannot run test as $aotRuntime not available";
+  }
+  if (!File(platformDill).existsSync()) {
+    throw "Cannot run test as $platformDill does not exist";
+  }
+
+  await withTempDir('save-debug-info-flag-test', (String tempDir) async {
+    final cwDir = path.dirname(Platform.script.toFilePath());
+    // We can just reuse the program for the use_dwarf_stack_traces test.
+    final script = path.join(cwDir, 'use_dwarf_stack_traces_flag_program.dart');
+    final scriptDill = path.join(tempDir, 'flag_program.dill');
+
+    // Compile script to Kernel IR.
+    await run(genKernel, <String>[
+      '--aot',
+      '--platform=$platformDill',
+      '-o',
+      scriptDill,
+      script,
+    ]);
+
+    // Run the AOT compiler with Dwarf stack traces, once without stripping,
+    // once with stripping, and once with stripping and saving debugging
+    // information.
+    final scriptWholeSnapshot = path.join(tempDir, 'whole.so');
+    await run(genSnapshot, <String>[
+      '--dwarf-stack-traces',
+      '--snapshot-kind=app-aot-elf',
+      '--elf=$scriptWholeSnapshot',
+      scriptDill,
+    ]);
+
+    final scriptStrippedOnlySnapshot = path.join(tempDir, 'stripped_only.so');
+    await run(genSnapshot, <String>[
+      '--dwarf-stack-traces',
+      '--snapshot-kind=app-aot-elf',
+      '--elf=$scriptStrippedOnlySnapshot',
+      '--strip',
+      scriptDill,
+    ]);
+
+    final scriptStrippedSnapshot = path.join(tempDir, 'stripped.so');
+    final scriptDebuggingInfo = path.join(tempDir, 'debug.so');
+    await run(genSnapshot, <String>[
+      '--dwarf-stack-traces',
+      '--snapshot-kind=app-aot-elf',
+      '--elf=$scriptStrippedSnapshot',
+      '--strip',
+      '--save-debugging-info=$scriptDebuggingInfo',
+      scriptDill,
+    ]);
+
+    // Run the resulting scripts, saving the stack traces.
+    final wholeTrace = await runError(aotRuntime, <String>[
+      scriptWholeSnapshot,
+      scriptDill,
+    ]);
+    final wholeOffsets = collectPCOffsets(wholeTrace);
+
+    final strippedOnlyTrace = await runError(aotRuntime, <String>[
+      scriptStrippedOnlySnapshot,
+      scriptDill,
+    ]);
+    final strippedOnlyOffsets = collectPCOffsets(strippedOnlyTrace);
+
+    final strippedTrace = await runError(aotRuntime, <String>[
+      scriptStrippedSnapshot,
+      scriptDill,
+    ]);
+    final strippedOffsets = collectPCOffsets(strippedTrace);
+
+    // The retrieved offsets should be the same for all runs.
+    Expect.deepEquals(wholeOffsets, strippedOffsets);
+    Expect.deepEquals(strippedOnlyOffsets, strippedOffsets);
+
+    // Stripped output should not change when --save-debugging-info is used.
+    compareSnapshots(scriptStrippedOnlySnapshot, scriptStrippedSnapshot);
+
+    print('');
+    print("Original stack trace:");
+    strippedTrace.forEach(print);
+
+    final debugDwarf = Dwarf.fromFile(scriptDebuggingInfo);
+    final wholeDwarf = Dwarf.fromFile(scriptWholeSnapshot);
+
+    final fromDebug = await Stream.fromIterable(strippedTrace)
+        .transform(DwarfStackTraceDecoder(debugDwarf))
+        .toList();
+    print("\nStack trace converted using separate debugging info:");
+    print(fromDebug.join());
+
+    final fromWhole = await Stream.fromIterable(strippedTrace)
+        .transform(DwarfStackTraceDecoder(wholeDwarf))
+        .toList();
+    print("\nStack trace converted using unstripped ELF file:");
+    print(fromWhole.join());
+
+    Expect.deepEquals(fromDebug, fromWhole);
+  });
+}
+
+void compareSnapshots(String file1, String file2) {
+  final bytes1 = File(file1).readAsBytesSync();
+  final bytes2 = File(file2).readAsBytesSync();
+  final diff = diffBinary(bytes1, bytes2);
+  if (diff.isNotEmpty) {
+    print("\nFound differences between $file1 and $file2:");
+    printDiff(diff);
+  }
+  Expect.equals(bytes1.length, bytes2.length);
+  Expect.equals(0, diff.length);
+}
+
+Map<int, List<int>> diffBinary(Uint8List bytes1, Uint8List bytes2) {
+  final ret = Map<int, List<int>>();
+  final len = min(bytes1.length, bytes2.length);
+  for (var i = 0; i < len; i++) {
+    if (bytes1[i] != bytes2[i]) {
+      ret[i] = <int>[bytes1[i], bytes2[i]];
+    }
+  }
+  if (bytes1.length > len) {
+    for (var i = len; i < bytes1.length; i++) {
+      ret[i] = <int>[bytes1[i], -1];
+    }
+  } else if (bytes2.length > len) {
+    for (var i = len; i < bytes2.length; i++) {
+      ret[i] = <int>[-1, bytes2[i]];
+    }
+  }
+  return ret;
+}
+
+void printDiff(Map<int, List<int>> map, [int maxOutput = 100]) {
+  int lines = 0;
+  for (var index in map.keys) {
+    final pair = map[index];
+    if (pair[0] == -1) {
+      print('$index: <>, ${pair[1]}');
+      lines++;
+    } else if (pair[1] == -1) {
+      print('$index: ${pair[0]}, <>');
+      lines++;
+    } else {
+      print('$index: ${pair[0]}, ${pair[1]}');
+      lines++;
+    }
+    if (lines >= maxOutput) {
+      return;
+    }
+  }
+}
diff --git a/runtime/tests/vm/dart_2/use_strip_flag_test.dart b/runtime/tests/vm/dart_2/use_strip_flag_test.dart
new file mode 100644
index 0000000..385fb36
--- /dev/null
+++ b/runtime/tests/vm/dart_2/use_strip_flag_test.dart
@@ -0,0 +1,99 @@
+// 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.
+
+// 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.
+
+// OtherResources=use_dwarf_stack_traces_flag_program.dart
+
+import "dart:io";
+
+import 'package:expect/expect.dart';
+import 'package:path/path.dart' as path;
+
+import 'use_flag_test_helper.dart';
+
+main(List<String> args) async {
+  if (!isAOTRuntime) {
+    return; // Running in JIT: AOT binaries not available.
+  }
+
+  if (Platform.isAndroid) {
+    return; // SDK tree not available on the test device.
+  }
+
+  // These are the tools we need to be available to run on a given platform:
+  if (!File(platformDill).existsSync()) {
+    throw "Cannot run test as $platformDill does not exist";
+  }
+  if (!await testExecutable(genSnapshot)) {
+    throw "Cannot run test as $genSnapshot not available";
+  }
+
+  await withTempDir('strip-flag-test', (String tempDir) async {
+    final cwDir = path.dirname(Platform.script.toFilePath());
+    // We can just reuse the program for the use_dwarf_stack_traces test.
+    final script = path.join(cwDir, 'use_dwarf_stack_traces_flag_program.dart');
+    final scriptDill = path.join(tempDir, 'flag_program.dill');
+
+    // Compile script to Kernel IR.
+    await run(genKernel, <String>[
+      '--aot',
+      '--platform=$platformDill',
+      '-o',
+      scriptDill,
+      script,
+    ]);
+
+    // Run the AOT compiler to generate stripped and unstripped ELF snapshots.
+    final unstrippedSnapshot = path.join(tempDir, 'whole.so');
+    await run(genSnapshot, <String>[
+      '--snapshot-kind=app-aot-elf',
+      '--elf=$unstrippedSnapshot',
+      scriptDill,
+    ]);
+
+    final strippedSnapshot = path.join(tempDir, 'stripped.so');
+    await run(genSnapshot, <String>[
+      '--snapshot-kind=app-aot-elf',
+      '--elf=$strippedSnapshot',
+      '--strip',
+      scriptDill,
+    ]);
+
+    compareStrippedAndUnstripped(
+        stripped: strippedSnapshot, unstripped: unstrippedSnapshot);
+
+    if (Platform.isWindows) {
+      return; // No assembly generation on Windows.
+    }
+
+    final unstrippedCode = path.join(tempDir, 'whole.S');
+    await run(genSnapshot, <String>[
+      '--snapshot-kind=app-aot-assembly',
+      '--assembly=$unstrippedCode',
+      scriptDill,
+    ]);
+
+    final strippedCode = path.join(tempDir, 'stripped.S');
+    await run(genSnapshot, <String>[
+      '--snapshot-kind=app-aot-assembly',
+      '--assembly=$strippedCode',
+      '--strip',
+      scriptDill,
+    ]);
+
+    compareStrippedAndUnstripped(
+        stripped: strippedCode, unstripped: unstrippedCode);
+  });
+}
+
+void compareStrippedAndUnstripped({String stripped, String unstripped}) {
+  final strippedSize = File(stripped).lengthSync();
+  final unstrippedSize = File(unstripped).lengthSync();
+  print("File size for stripped file $stripped: $strippedSize");
+  print("File size for stripped file $unstripped: $unstrippedSize");
+  Expect.isTrue(strippedSize < unstrippedSize);
+}
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
new file mode 100644
index 0000000..de3795c
--- /dev/null
+++ b/runtime/tests/vm/dart_2/v8_snapshot_profile_writer_test.dart
@@ -0,0 +1,302 @@
+// 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 "dart:convert";
+import "dart:io";
+
+import "package:expect/expect.dart";
+import 'package:path/path.dart' as path;
+import "package:vm/v8_snapshot_profile.dart";
+
+import 'use_flag_test_helper.dart';
+
+test(
+    {String dillPath,
+    bool useAsm,
+    bool useBare,
+    bool stripFlag,
+    bool stripUtil}) async {
+  // The assembler may add extra unnecessary information to the compiled
+  // snapshot whether or not we generate DWARF information in the assembly, so
+  // we force the use of a utility when generating assembly.
+  if (useAsm) Expect.isTrue(stripUtil);
+
+  // We must strip the output in some way when generating ELF snapshots,
+  // else the debugging information added will cause the test to fail.
+  if (!stripUtil) Expect.isTrue(stripFlag);
+
+  final tempDirPrefix = 'v8-snapshot-profile' +
+      (useAsm ? '-assembly' : '-elf') +
+      (useBare ? '-bare' : '-nonbare') +
+      (stripFlag ? '-intstrip' : '') +
+      (stripUtil ? '-extstrip' : '');
+
+  await withTempDir(tempDirPrefix, (String tempDir) async {
+    // Generate the snapshot profile.
+    final profilePath = path.join(tempDir, 'profile.heapsnapshot');
+    final snapshotPath = path.join(tempDir, 'test.snap');
+    final commonSnapshotArgs = [
+      if (stripFlag) '--strip',
+      useBare ? '--use-bare-instructions' : '--no-use-bare-instructions',
+      "--write-v8-snapshot-profile-to=$profilePath",
+      // Regression test for dartbug.com/41149. We don't assume forced
+      // disassembler support in Product mode.
+      if (!const bool.fromEnvironment('dart.vm.product'))
+        '--disassemble',
+      '--ignore-unrecognized-flags',
+      dillPath,
+    ];
+
+    if (useAsm) {
+      final assemblyPath = path.join(tempDir, 'test.S');
+
+      await run(genSnapshot, <String>[
+        '--snapshot-kind=app-aot-assembly',
+        '--assembly=$assemblyPath',
+        ...commonSnapshotArgs,
+      ]);
+
+      await assembleSnapshot(assemblyPath, snapshotPath);
+    } else {
+      await run(genSnapshot, <String>[
+        '--snapshot-kind=app-aot-elf',
+        '--elf=$snapshotPath',
+        ...commonSnapshotArgs,
+      ]);
+    }
+
+    String strippedPath;
+    if (stripUtil) {
+      strippedPath = snapshotPath + '.stripped';
+      await stripSnapshot(snapshotPath, strippedPath, forceElf: !useAsm);
+    } else {
+      strippedPath = snapshotPath;
+    }
+
+    final V8SnapshotProfile profile = V8SnapshotProfile.fromJson(
+        JsonDecoder().convert(File(profilePath).readAsStringSync()));
+
+    // Verify that there are no "unknown" nodes. These are emitted when we see a
+    // reference to an some object but no other metadata about the object was
+    // recorded. We should at least record the type for every object in the
+    // graph (in some cases the shallow size can legitimately be 0, e.g. for
+    // "base objects").
+    for (final int node in profile.nodes) {
+      Expect.notEquals("Unknown", profile[node].type,
+          "unknown node at ID ${profile[node].id}");
+    }
+
+    // Verify that all nodes are reachable from the declared roots.
+    int unreachableNodes = 0;
+    Set<int> nodesReachableFromRoots = profile.preOrder(profile.root).toSet();
+    for (final int node in profile.nodes) {
+      Expect.isTrue(nodesReachableFromRoots.contains(node),
+          "unreachable node at ID ${profile[node].id}");
+    }
+
+    // Verify that the actual size of the snapshot is close to the sum of the
+    // shallow sizes of all objects in the profile. They will not be exactly
+    // equal because of global headers and padding.
+    final actual = await File(strippedPath).length();
+    final expected = profile.accountedBytes;
+
+    final bareUsed = useBare ? "bare" : "non-bare";
+    final fileType = useAsm ? "assembly" : "ELF";
+    String stripPrefix = "";
+    if (stripFlag && stripUtil) {
+      stripPrefix = "internally and externally stripped ";
+    } else if (stripFlag) {
+      stripPrefix = "internally stripped ";
+    } else if (stripUtil) {
+      stripPrefix = "externally stripped ";
+    }
+
+    Expect.approxEquals(expected, actual, 0.03 * actual,
+        "failed on $bareUsed $stripPrefix$fileType snapshot type.");
+  });
+}
+
+Match matchComplete(RegExp regexp, String line) {
+  Match match = regexp.firstMatch(line);
+  if (match == null) return match;
+  if (match.start != 0 || match.end != line.length) return null;
+  return match;
+}
+
+// All fields of "Raw..." classes defined in "raw_object.h" must be included in
+// the giant macro in "raw_object_fields.cc". This function attempts to check
+// that with some basic regexes.
+testMacros() async {
+  const String className = "([a-z0-9A-Z]+)";
+  const String rawClass = "Raw$className";
+  const String fieldName = "([a-z0-9A-Z_]+)";
+
+  final Map<String, Set<String>> fields = {};
+
+  final String rawObjectFieldsPath =
+      path.join(sdkDir, 'runtime', 'vm', 'raw_object_fields.cc');
+  final RegExp fieldEntry = RegExp(" *F\\($className, $fieldName\\) *\\\\?");
+
+  await for (String line in File(rawObjectFieldsPath)
+      .openRead()
+      .cast<List<int>>()
+      .transform(utf8.decoder)
+      .transform(LineSplitter())) {
+    Match match = matchComplete(fieldEntry, line);
+    if (match != null) {
+      fields
+          .putIfAbsent(match.group(1), () => Set<String>())
+          .add(match.group(2));
+    }
+  }
+
+  final RegExp classStart = RegExp("class $rawClass : public $rawClass {");
+  final RegExp classEnd = RegExp("}");
+  final RegExp field = RegExp("  $rawClass. +$fieldName;.*");
+
+  final String rawObjectPath =
+      path.join(sdkDir, 'runtime', 'vm', 'raw_object.h');
+
+  String currentClass;
+  bool hasMissingFields = false;
+  await for (String line in File(rawObjectPath)
+      .openRead()
+      .cast<List<int>>()
+      .transform(utf8.decoder)
+      .transform(LineSplitter())) {
+    Match match = matchComplete(classStart, line);
+    if (match != null) {
+      currentClass = match.group(1);
+      continue;
+    }
+
+    match = matchComplete(classEnd, line);
+    if (match != null) {
+      currentClass = null;
+      continue;
+    }
+
+    match = matchComplete(field, line);
+    if (match != null && currentClass != null) {
+      if (fields[currentClass] == null) {
+        hasMissingFields = true;
+        print("$currentClass is missing entirely.");
+        continue;
+      }
+      if (!fields[currentClass].contains(match.group(2))) {
+        hasMissingFields = true;
+        print("$currentClass is missing ${match.group(2)}.");
+      }
+    }
+  }
+
+  if (hasMissingFields) {
+    Expect.fail("$rawObjectFieldsPath is missing some fields. "
+        "Please update it to match $rawObjectPath.");
+  }
+}
+
+main() async {
+  void printSkip(String description) =>
+      print('Skipping $description for ${path.basename(buildDir)} '
+              'on ${Platform.operatingSystem}' +
+          (clangBuildToolsDir == null ? ' without //buildtools' : ''));
+
+  // We don't have access to the SDK on Android.
+  if (Platform.isAndroid) {
+    printSkip('all tests');
+    return;
+  }
+
+  await testMacros();
+
+  await withTempDir('v8-snapshot-profile-writer', (String tempDir) async {
+    // We only need to generate the dill file once.
+    final _thisTestPath = path.join(sdkDir, 'runtime', 'tests', 'vm', 'dart_2',
+        'v8_snapshot_profile_writer_test.dart');
+    final dillPath = path.join(tempDir, 'test.dill');
+    await run(genKernel, <String>[
+      '--aot',
+      '--platform',
+      platformDill,
+      '-o',
+      dillPath,
+      _thisTestPath
+    ]);
+
+    // Test stripped ELF generation directly.
+    await test(
+        dillPath: dillPath,
+        stripFlag: true,
+        stripUtil: false,
+        useAsm: false,
+        useBare: false);
+    await test(
+        dillPath: dillPath,
+        stripFlag: true,
+        stripUtil: false,
+        useAsm: false,
+        useBare: true);
+
+    // We neither generate assembly nor have a stripping utility on Windows.
+    if (Platform.isWindows) {
+      printSkip('external stripping and assembly tests');
+      return;
+    }
+
+    // The native strip utility on Mac OS X doesn't recognize ELF files.
+    if (Platform.isMacOS && clangBuildToolsDir == null) {
+      printSkip('ELF external stripping test');
+    } else {
+      // Test unstripped ELF generation that is then stripped externally.
+      await test(
+          dillPath: dillPath,
+          stripFlag: false,
+          stripUtil: true,
+          useAsm: false,
+          useBare: false);
+      await test(
+          dillPath: dillPath,
+          stripFlag: false,
+          stripUtil: true,
+          useAsm: false,
+          useBare: true);
+    }
+
+    // TODO(sstrickl): Currently we can't assemble for SIMARM64 on MacOSX.
+    // For example, the test runner still uses blobs for dartkp-mac-*-simarm64.
+    // Change assembleSnapshot and remove this check when we can.
+    if (Platform.isMacOS && buildDir.endsWith('SIMARM64')) {
+      printSkip('assembly tests');
+      return;
+    }
+
+    // Test stripped assembly generation that is then compiled and stripped.
+    await test(
+        dillPath: dillPath,
+        stripFlag: true,
+        stripUtil: true,
+        useAsm: true,
+        useBare: false);
+    await test(
+        dillPath: dillPath,
+        stripFlag: true,
+        stripUtil: true,
+        useAsm: true,
+        useBare: true);
+    // Test unstripped assembly generation that is then compiled and stripped.
+    await test(
+        dillPath: dillPath,
+        stripFlag: false,
+        stripUtil: true,
+        useAsm: true,
+        useBare: false);
+    await test(
+        dillPath: dillPath,
+        stripFlag: false,
+        stripUtil: true,
+        useAsm: true,
+        useBare: true);
+  });
+}
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
new file mode 100644
index 0000000..67fc82d
--- /dev/null
+++ b/runtime/tests/vm/dart_2/wrap_around_in_range_analysis_test.dart
@@ -0,0 +1,24 @@
+// 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.
+
+// Test for overflow (wrap-around) during computations in range analysis.
+
+import "package:expect/expect.dart";
+
+@pragma('vm:never-inline')
+int foofoo(int b) {
+  for (int i = 0x7ffffffffffffffc; i <= b; i += 2) {
+    if (i < 0) {
+      return i - 0x4000000000000000;
+    }
+  }
+  return 0;
+}
+
+main() {
+  for (var i = 0; i < 10000; i++) {
+    foofoo(0x7fffffffffffffff);
+  }
+  Expect.equals(foofoo(0x7fffffffffffffff), 4611686018427387904);
+}
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index d565a24..96f6b1a 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -3,6 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 dart/isolates/*: Pass, Slow # Tests use many isolates and take a longer time.
+dart_2/isolates/*: Pass, Slow # Tests use many isolates and take a longer time.
 
 cc/Fail0: Fail # These tests are expected to crash on all platforms.
 cc/Fail1: Fail # These tests are expected to crash on all platforms.
@@ -22,6 +23,15 @@
 dart/snapshot_version_test: Skip # This test is a Dart1 test (script snapshot)
 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/data_uri_import_test/none: SkipByDesign
+dart_2/emit_aot_size_info_flag_test: Pass, Slow # Spawns several subprocesses
+dart_2/minimal_kernel_bytecode_test: Pass, Slow # Spawns several subprocesses
+dart_2/minimal_kernel_test: Pass, Slow # Spawns several subprocesses
+dart_2/null_safety_autodetection_in_kernel_compiler_test: Pass, Slow # Spawns several subprocesses
+dart_2/slow_path_shared_stub_test: Pass, Slow # Uses --shared-slow-path-triggers-gc flag.
+dart_2/snapshot_version_test: Skip # This test is a Dart1 test (script snapshot)
+dart_2/stack_overflow_shared_test: Pass, Slow # Uses --shared-slow-path-triggers-gc flag.
+dart_2/use_bare_instructions_flag_test: Pass, Slow # Spawns several subprocesses
 
 [ $runtime != dart_precompiled || $system == android ]
 dart/isolates/fibonacci_call_ig_test: Skip # Only AOT has lightweight enough isolates to run those tests, JIT work is pending.
@@ -35,6 +45,17 @@
 dart/isolates/sum_recursive_tail_call_ig_test: Skip # Only AOT has lightweight enough isolates to run those tests.
 dart/isolates/sum_recursive_tail_call_test: Skip # Only AOT has lightweight enough isolates to run those tests.
 dart/isolates/thread_pool_test: Skip # Only AOT has lightweight enough isolates to run those tests.
+dart_2/isolates/fibonacci_call_ig_test: Skip # Only AOT has lightweight enough isolates to run those tests, JIT work is pending.
+dart_2/isolates/fibonacci_call_test: Skip # Only AOT has lightweight enough isolates to run those tests.
+dart_2/isolates/internal: Skip # Only AOT has lightweight enough isolates to run those tests.
+dart_2/isolates/limited_active_mutator_test:  Skip # Only AOT has lightweight enough isolates to run those tests.
+dart_2/isolates/ring_gc_sendAndExit_test: Skip # Only AOT has lightweight enough isolates to run those tests.
+dart_2/isolates/ring_gc_test: Skip # Only AOT has lightweight enough isolates to run those tests.
+dart_2/isolates/sum_recursive_call_ig_test: Skip # Only AOT has lightweight enough isolates to run those tests.
+dart_2/isolates/sum_recursive_call_test: Skip # Only AOT has lightweight enough isolates to run those tests.
+dart_2/isolates/sum_recursive_tail_call_ig_test: Skip # Only AOT has lightweight enough isolates to run those tests.
+dart_2/isolates/sum_recursive_tail_call_test: Skip # Only AOT has lightweight enough isolates to run those tests.
+dart_2/isolates/thread_pool_test: Skip # Only AOT has lightweight enough isolates to run those tests.
 
 [ $arch == simarm || $arch == simarm64 ]
 dart/isolates/thread_pool_test: SkipByDesign # Test uses dart:ffi which is not supported on simulators.
@@ -42,19 +63,31 @@
 dart/unboxed_param_tear_off_test: SkipByDesign # FFI helper not supported on simulator
 dart/unboxed_param_test: SkipByDesign # FFI helper not supported on simulator
 dart/regress_41971_test: SkipByDesign # dart:ffi is not supported on simulator
+dart_2/isolates/thread_pool_test: SkipByDesign # Test uses dart:ffi which is not supported on simulators.
+dart_2/unboxed_param_args_descriptor_test: SkipByDesign # FFI helper not supported on simulator
+dart_2/unboxed_param_tear_off_test: SkipByDesign # FFI helper not supported on simulator
+dart_2/unboxed_param_test: SkipByDesign # FFI helper not supported on simulator
+dart_2/regress_41971_test: SkipByDesign # dart:ffi is not supported on simulator
 
 [ $builder_tag == asan ]
 dart/transferable_throws_oom_test: SkipByDesign # This test tries to allocate too much memory on purpose. Still dartbug.com/37188
+dart_2/transferable_throws_oom_test: SkipByDesign # This test tries to allocate too much memory on purpose. Still dartbug.com/37188
 
 [ $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/bytecode_with_ast_in_aot_test: SkipByDesign # The test doesn't know location of cross-platform gen_snapshot
+dart_2/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_2/bytecode_with_ast_in_aot_test: SkipByDesign # The test doesn't know location of cross-platform gen_snapshot
 
 [ $builder_tag == obfuscated ]
 dart/causal_stacks/async_throws_stack_lazy_test: SkipByDesign # Asserts exact stacktrace output.
 dart/causal_stacks/async_throws_stack_no_causal_test: SkipByDesign # Asserts exact stacktrace output.
 dart/causal_stacks/async_throws_stack_test: SkipByDesign # Asserts exact stacktrace output.
 dart/causal_stacks/sync_async_start_pkg_test_test: SkipByDesign # Asserts exact stacktrace output.
+dart_2/causal_stacks/async_throws_stack_lazy_test: SkipByDesign # Asserts exact stacktrace output.
+dart_2/causal_stacks/async_throws_stack_no_causal_test: SkipByDesign # Asserts exact stacktrace output.
+dart_2/causal_stacks/async_throws_stack_test: SkipByDesign # Asserts exact stacktrace output.
+dart_2/causal_stacks/sync_async_start_pkg_test_test: SkipByDesign # Asserts exact stacktrace output.
 
 [ $builder_tag == optimization_counter_threshold ]
 cc/*: Skip # Many tests want see unoptimized code running
@@ -63,25 +96,45 @@
 dart/minimal_kernel_bytecode_test: SkipSlow # gen_kernel is too slow with optimization_counter_threshold
 dart/minimal_kernel_test: SkipSlow # gen_kernel is too slow with optimization_counter_threshold
 dart/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow with optimization_counter_threshold
+dart_2/appjit*: SkipByDesign # Test needs to a particular opt-counter value
+dart_2/kernel_determinism_test: SkipSlow
+dart_2/minimal_kernel_bytecode_test: SkipSlow # gen_kernel is too slow with optimization_counter_threshold
+dart_2/minimal_kernel_test: SkipSlow # gen_kernel is too slow with optimization_counter_threshold
+dart_2/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow with optimization_counter_threshold
 
 [ $builder_tag == tsan ]
 dart/appjit_cha_deopt_test: SkipSlow
 dart/regress_40462_test: SkipSlow
 dart/trigger_gc_in_native_test: Skip # This test crashes on the bot, but not locally, and infrastructure repeatly fails to locate its coredump.
+dart_2/appjit_cha_deopt_test: SkipSlow
+dart_2/regress_40462_test: SkipSlow
+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.
+
+[ $builder_tag == vm_nnbd ]
+dart_2/*: SkipByDesign # Legacy tests are not supposed to run on NNBD bots.
+
+[ $builder_tag != vm_nnbd ]
+dart/*: SkipByDesign # Migrated tests are not supposed to run on non-NNBD bots.
 
 [ $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 == dartkp ]
 dart/v8_snapshot_profile_writer_test: Pass, Slow # Can be slow due to re-invoking the precompiler.
+dart_2/v8_snapshot_profile_writer_test: Pass, Slow # Can be slow due to re-invoking the precompiler.
 
 [ $compiler != dartkp ]
 dart/base_il_serialization: SkipByDesign # Serialization currently supported only when compiling with --aot.
 dart/entrypoints/aot/*: SkipByDesign # These tests should only run on AOT.
+dart_2/base_il_serialization: SkipByDesign # Serialization currently supported only when compiling with --aot.
+dart_2/entrypoints/aot/*: SkipByDesign # These tests should only run on AOT.
 
 [ $compiler == fasta ]
 dart/data_uri_import_test/badencodeddate: CompileTimeError
+dart_2/data_uri_import_test/badencodeddate: CompileTimeError
 
 [ $mode == debug ]
 cc/CorelibIsolateStartup: SkipByDesign # This is a benchmark that is not informative in debug mode.
@@ -92,21 +145,30 @@
 dart/minimal_kernel_test: SkipSlow # gen_kernel is too slow in debug mode
 dart/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow in debug mode
 dart/spawn_shutdown_test: Pass, Slow # VM Shutdown test, It can take some time for all the isolates to shutdown in a Debug build.
+dart_2/appjit_cha_deopt_test: Pass, Slow # Quite slow in debug mode, uses --optimization-counter-threshold=100
+dart_2/minimal_kernel_bytecode_test: SkipSlow # gen_kernel is too slow in debug mode
+dart_2/minimal_kernel_test: SkipSlow # gen_kernel is too slow in debug mode
+dart_2/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow in debug mode
+dart_2/spawn_shutdown_test: Pass, Slow # VM Shutdown test, It can take some time for all the isolates to shutdown in a Debug build.
 
 [ $mode == product ]
 cc/CoreSnapshotSize: SkipByDesign # Imports dart:mirrors
 cc/CreateMirrorSystem: SkipByDesign # Imports dart:mirrors
 cc/StandaloneSnapshotSize: SkipByDesign # Imports dart:mirrors
 dart/redirection_type_shuffling_test: SkipByDesign # Imports dart:mirrors
+dart_2/redirection_type_shuffling_test: SkipByDesign # Imports dart:mirrors
 
 [ $system == fuchsia ]
 cc/CorelibIsolateStartup: Skip # OOM crash can bring down the OS.
 cc/Read: Fail # TODO(zra): Investigate, ../../dart/runtime/bin/file_test.cc: 34: error: expected: !file->WriteByte(1)
 dart/data_uri_spawn_test: Skip # TODO(zra): package:unittest is not in the image.
 dart/spawn_shutdown_test: Skip # OOM crash can bring down the OS.
+dart_2/data_uri_spawn_test: Skip # TODO(zra): package:unittest is not in the image.
+dart_2/spawn_shutdown_test: Skip # OOM crash can bring down the OS.
 
 [ $system == macos ]
 dart/transferable_throws_oom_test: SkipByDesign # Allocating too much memory to cause OOM doesn't work on mac
+dart_2/transferable_throws_oom_test: SkipByDesign # Allocating too much memory to cause OOM doesn't work on mac
 
 [ $system == windows ]
 cc/CorelibCompilerStats: Skip
@@ -116,9 +178,12 @@
 cc/GenKernelKernelReadAllBytecode: Skip # Issue 34393.
 dart/appjit_bytecode_simple_test: Skip # Issue 34393.
 dart/disassemble_determinism_test: Slow, Pass # Times out on slower bots.
+dart_2/appjit_bytecode_simple_test: Skip # Issue 34393.
+dart_2/disassemble_determinism_test: Slow, Pass # Times out on slower bots.
 
 [ $arch == ia32 && $mode == debug && $system == windows ]
 dart/transferable_test: Skip # This is performance test and somehow debug win ia32 bot's performance is unpredictable
+dart_2/transferable_test: Skip # This is performance test and somehow debug win ia32 bot's performance is unpredictable
 
 [ $arch != simarm && $arch != simarm64 && $hot_reload && ($compiler == dartk || $compiler == dartkb) ]
 dart/data_uri_import_test/base64: Crash
@@ -127,6 +192,12 @@
 dart/data_uri_import_test/percentencoded: Crash
 dart/data_uri_import_test/utf16: Crash
 dart/data_uri_import_test/wrongmime: Crash
+dart_2/data_uri_import_test/base64: Crash
+dart_2/data_uri_import_test/nocharset: Crash
+dart_2/data_uri_import_test/nomime: Crash
+dart_2/data_uri_import_test/percentencoded: Crash
+dart_2/data_uri_import_test/utf16: Crash
+dart_2/data_uri_import_test/wrongmime: Crash
 
 [ $builder_tag == obfuscated && $compiler == dartkp ]
 dart/extension_names_test: SkipByDesign # No demangling (obfuscated).
@@ -134,6 +205,11 @@
 dart/optimized_stacktrace_line_and_column_test: SkipByDesign # Looks for filenames in stacktrace output
 dart/optimized_stacktrace_line_test: SkipByDesign # Looks for filenames in stacktrace output
 dart/regress_37382_test: SkipByDesign # Matches the type arguments names
+dart_2/extension_names_test: SkipByDesign # No demangling (obfuscated).
+dart_2/extension_unnamed_names_test: SkipByDesign # No demangling (obfuscated).
+dart_2/optimized_stacktrace_line_and_column_test: SkipByDesign # Looks for filenames in stacktrace output
+dart_2/optimized_stacktrace_line_test: SkipByDesign # Looks for filenames in stacktrace output
+dart_2/regress_37382_test: SkipByDesign # Matches the type arguments names
 
 [ $compiler == dartk && $mode == product && $runtime == vm ]
 cc/CorelibIsolateStartup: Timeout, Pass
@@ -146,6 +222,7 @@
 cc/Mixin_PrivateSuperResolution: Skip
 cc/Mixin_PrivateSuperResolutionCrossLibraryShouldFail: Skip
 dart/entrypoints/jit/*: SkipByDesign # These tests should only run on JIT.
+dart_2/entrypoints/jit/*: SkipByDesign # These tests should only run on JIT.
 
 [ $compiler != dartk && $compiler != dartkb && $compiler != none ]
 dart/appjit*: SkipByDesign # Test needs to run from source
@@ -155,13 +232,23 @@
 dart/minimal_kernel_test: SkipByDesign # Test needs to run from source
 dart/null_safety_autodetection_in_kernel_compiler_test: SkipByDesign # Test needs to run from source
 dart/snapshot_depfile_test: SkipByDesign # Test needs to run from source
+dart_2/appjit*: SkipByDesign # Test needs to run from source
+dart_2/bytecode_and_ast_mix_test: SkipByDesign # Test needs to run from source
+dart_2/kernel_determinism_test: SkipByDesign # Test needs to run from source
+dart_2/minimal_kernel_bytecode_test: SkipByDesign # Test needs to run from source
+dart_2/minimal_kernel_test: SkipByDesign # Test needs to run from source
+dart_2/null_safety_autodetection_in_kernel_compiler_test: SkipByDesign # Test needs to run from source
+dart_2/snapshot_depfile_test: SkipByDesign # Test needs to run from source
 
 [ $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 ]
 dart/spawn_shutdown_test: Skip # Flaky crashes unable to start thread; likely low memory on the bot.
+dart_2/spawn_shutdown_test: Skip # Flaky crashes unable to start thread; likely low memory on the bot.
 
 # Enabling of dartk for sim{arm,arm64} revelaed these test failures, which
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
@@ -178,10 +265,14 @@
 [ $runtime == dart_precompiled && $minified ]
 dart/inline_stack_frame_test: Skip
 dart/optimized_stacktrace_line_test: Skip
+dart_2/inline_stack_frame_test: Skip
+dart_2/optimized_stacktrace_line_test: Skip
 
 [ $runtime != dart_precompiled && $runtime != vm ]
 dart/*: SkipByDesign # VM specific tests
 dart/catch_entry_state: SkipByDesign
+dart_2/*: SkipByDesign # VM specific tests
+dart_2/catch_entry_state: SkipByDesign
 
 [ $runtime == vm && $system == macos && ($compiler == dartk || $compiler == dartkb) ]
 cc/IsolateReload_LibraryLookup: Fail, Crash
@@ -200,6 +291,7 @@
 cc/IsolateReload_NotTypedefToTypedef: Fail
 cc/IsolateReload_TypedefToNotTypedef: Fail
 dart/spawn_shutdown_test: SkipSlow
+dart_2/spawn_shutdown_test: SkipSlow
 
 [ $system == linux && ($compiler == dartk || $compiler == dartkb) ]
 cc/IsolateReload_LibraryLookup: Fail, Crash
@@ -209,6 +301,7 @@
 
 [ $checked && ($compiler == dartk || $compiler == dartkb) ]
 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.
 
 [ ($arch == simarm || $arch == simarm64) && ($compiler == dartk || $compiler == dartkb) ]
 dart/appjit*: SkipSlow # DFE too slow
@@ -217,16 +310,26 @@
 dart/minimal_kernel_test: SkipSlow # gen_kernel is too slow on simulated architectures
 dart/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow on simulated architectures
 dart/snapshot_version_test: RuntimeError # Please triage.
+dart_2/appjit*: SkipSlow # DFE too slow
+dart_2/data_uri_spawn_test: Skip # Please triage.
+dart_2/minimal_kernel_bytecode_test: SkipSlow # gen_kernel is too slow on simulated architectures
+dart_2/minimal_kernel_test: SkipSlow # gen_kernel is too slow on simulated architectures
+dart_2/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow on simulated architectures
+dart_2/snapshot_version_test: RuntimeError # Please triage.
 
 [ $hot_reload || $hot_reload_rollback ]
 dart/isolates/spawn_function_test: Skip # This test explicitly enables isolate groups (off-by-default atm). It will be enabled once full IG reloading is implemented.
+dart_2/isolates/spawn_function_test: Skip # This test explicitly enables isolate groups (off-by-default atm). It will be enabled once full IG reloading is implemented.
 
 [ ($compiler == dartk || $compiler == dartkb) && ($hot_reload || $hot_reload_rollback) ]
 dart/data_uri_spawn_test: Skip # Timeout
 dart/kernel_determinism_test: SkipSlow
+dart_2/data_uri_spawn_test: Skip # Timeout
+dart_2/kernel_determinism_test: SkipSlow
 
 [ $arch == arm || $arch == arm64 || $builder_tag == crossword || $builder_tag == crossword_ast || $compiler != dartkp ]
 dart/v8_snapshot_profile_writer_test: SkipByDesign # Only relevant for AOT. Doesn't work in cross-compilation (has to run on the host).
+dart_2/v8_snapshot_profile_writer_test: SkipByDesign # Only relevant for AOT. Doesn't work in cross-compilation (has to run on the host).
 
 [ $arch == arm || $arch == ia32 || $arch == simarm ]
 cc/GenKernelKernelCombined: SkipByDesign # No interpreter support.
@@ -267,31 +370,35 @@
 
 [ $compiler == dartkb ]
 dart/generic_field_invocation_test: SkipByDesign # KBC interpreters do not support --no_lazy_dispatchers
+dart_2/generic_field_invocation_test: SkipByDesign # KBC interpreters do not support --no_lazy_dispatchers
 
 [ $builder_tag == bytecode_interpreter || $hot_reload || $hot_reload_rollback || $compiler != dartk && $compiler != dartkp && $compiler != dartkb ]
 dart/entrypoints/*: SkipByDesign # These tests are for compiler optimizations and very sensitive to when functions are optimized, so they are disabled on hotreload and optcounter bots.
+dart_2/entrypoints/*: SkipByDesign # These tests are for compiler optimizations and very sensitive to when functions are optimized, so they are disabled on hotreload and optcounter bots.
 
 [ $builder_tag == crossword || $builder_tag == crossword_ast || $compiler != dartkp || $system != linux && $system != macos && $system != windows ]
 dart/run_appended_aot_snapshot_test: SkipByDesign # Tests the precompiled runtime.
+dart_2/run_appended_aot_snapshot_test: SkipByDesign # Tests the precompiled runtime.
 
 [ $compiler == dart2analyzer || $compiler == dart2js ]
 dart/data_uri*test: Skip # Data uri's not supported by dart2js or the analyzer.
+dart_2/data_uri*test: Skip # Data uri's not supported by dart2js or the analyzer.
 
 [ $compiler == dartk || $compiler == dartkb ]
 cc/DartAPI_New: Fail # Issue #33041
-cc/DartGeneratedArrayLiteralMessages: Crash # Issue 32190
-cc/FullSnapshot1: Crash # Issue 32190
 cc/IsolateReload_LibraryLookup: Fail, Crash # Issue 32190
-cc/MismatchedSnapshotKinds: Fail, Crash, OK # Script snapshots not supported in Dart 2
-cc/ScriptSnapshot1: Fail, Crash, OK # Script snapshots not supported in Dart 2
-cc/ScriptSnapshotsUpdateSubclasses: Fail, Crash, OK # Script snapshots not supported in Dart 2
 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
 
 [ $mode == debug || $runtime != dart_precompiled || $system == android ]
 dart/emit_aot_size_info_flag_test: SkipByDesign # This test is for VM AOT only and is quite slow (so we don't run it in debug mode).
 dart/use_bare_instructions_flag_test: SkipByDesign # This test is for VM AOT only and is quite slow (so we don't run it in debug mode).
 dart/bytecode_with_ast_in_aot_test: SkipByDesign # This test is for VM AOT only and is quite slow (so we don't run it in debug mode).
+dart_2/emit_aot_size_info_flag_test: SkipByDesign # This test is for VM AOT only and is quite slow (so we don't run it in debug mode).
+dart_2/use_bare_instructions_flag_test: SkipByDesign # This test is for VM AOT only and is quite slow (so we don't run it in debug mode).
+dart_2/bytecode_with_ast_in_aot_test: SkipByDesign # This test is for VM AOT only and is quite slow (so we don't run it in debug mode).
 
 # It makes no sense to run any test that uses spawnURI under the simulator
 # as that would involve running CFE (the front end) in simulator mode
@@ -300,9 +407,12 @@
 [ $runtime == dart_precompiled || $runtime == vm && ($arch == simarm || $arch == simarm64) ]
 dart/data_uri_spawn_test: SkipByDesign # Isolate.spawnUri
 dart/issue32950_test: SkipByDesign # uses spawnUri.
+dart_2/data_uri_spawn_test: SkipByDesign # Isolate.spawnUri
+dart_2/issue32950_test: SkipByDesign # uses spawnUri.
 
 [ $runtime != dart_precompiled || $system == android ]
 dart/bare_instructions_trampolines_test: SkipByDesign # This test is for VM AOT only (android fails due to listing interfaces).
+dart_2/bare_instructions_trampolines_test: SkipByDesign # This test is for VM AOT only (android fails due to listing interfaces).
 
 [ $hot_reload || $hot_reload_rollback ]
 dart/appjit*: SkipByDesign # Cannot reload with URI pointing to app snapshot.
@@ -319,6 +429,20 @@
 dart/splay_test: SkipSlow
 dart/stack_overflow_shared_test: SkipSlow # Too slow with --shared-slow-path-triggers-gc flag and not relevant outside precompiled.
 dart/type_feedback_test: Pass, Slow
+dart_2/appjit*: SkipByDesign # Cannot reload with URI pointing to app snapshot.
+dart_2/compilation_trace_test: Pass, Slow
+dart_2/disassemble_determinism_test: SkipSlow # Runs expensive fibonacci(32) computation in 2 subprocesses
+dart_2/issue_31959_31960_test: SkipSlow
+dart_2/minimal_kernel_bytecode_test: SkipSlow # gen_kernel is too slow in hot reload testing mode
+dart_2/minimal_kernel_test: SkipSlow # gen_kernel is too slow in hot reload testing mode
+dart_2/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow in hot reload testing mode
+dart_2/print_flow_graph_determinism_test: SkipSlow
+dart_2/slow_path_shared_stub_test: SkipSlow # Too slow with --shared-slow-path-triggers-gc flag and not relevant outside precompiled.
+dart_2/spawn_infinite_loop_test: Skip # We can shutdown an isolate before it reloads.
+dart_2/spawn_shutdown_test: Skip # We can shutdown an isolate before it reloads.
+dart_2/splay_test: SkipSlow
+dart_2/stack_overflow_shared_test: SkipSlow # Too slow with --shared-slow-path-triggers-gc flag and not relevant outside precompiled.
+dart_2/type_feedback_test: Pass, Slow
 
 [ $mode != debug || $runtime != dart_precompiled ]
 in_memory_elf_test: Skip  # Tests a debug-mode flag to dart_precompiled_runtime.
diff --git a/runtime/vm/benchmark_test.cc b/runtime/vm/benchmark_test.cc
index c7512c4..f76f58b 100644
--- a/runtime/vm/benchmark_test.cc
+++ b/runtime/vm/benchmark_test.cc
@@ -280,9 +280,8 @@
       "  }\n"
       "}\n";
 
-  Dart_Handle lib = TestCase::LoadTestScript(
-      kScriptChars, reinterpret_cast<Dart_NativeEntryResolver>(bm_uda_lookup),
-      RESOLVED_USER_TEST_URI, false);
+  Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, bm_uda_lookup,
+                                             RESOLVED_USER_TEST_URI, false);
   Dart_Handle result = Dart_FinalizeLoading(false);
   EXPECT_VALID(result);
 
@@ -381,9 +380,7 @@
   EXPECT_VALID(result);
   Dart_Handle service_lib = Dart_LookupLibrary(NewString("dart:vmservice_io"));
   ASSERT(!Dart_IsError(service_lib));
-  Dart_SetNativeResolver(
-      service_lib, reinterpret_cast<Dart_NativeEntryResolver>(NativeResolver),
-      NULL);
+  Dart_SetNativeResolver(service_lib, NativeResolver, NULL);
   result = Dart_FinalizeLoading(false);
   EXPECT_VALID(result);
 
@@ -491,9 +488,8 @@
       "    return obj.method1(1);"
       "  }"
       "}";
-  Dart_Handle lib = TestCase::LoadTestScript(
-      kScriptChars,
-      reinterpret_cast<Dart_NativeEntryResolver>(StackFrameNativeResolver));
+  Dart_Handle lib =
+      TestCase::LoadTestScript(kScriptChars, StackFrameNativeResolver);
   Dart_Handle cls = Dart_GetClass(lib, NewString("StackFrameTest"));
   Dart_Handle result = Dart_Invoke(cls, NewString("testMain"), 0, NULL);
   EXPECT_VALID(result);
diff --git a/runtime/vm/compiler/backend/constant_propagator.cc b/runtime/vm/compiler/backend/constant_propagator.cc
index ee60614..28f5aa5 100644
--- a/runtime/vm/compiler/backend/constant_propagator.cc
+++ b/runtime/vm/compiler/backend/constant_propagator.cc
@@ -815,21 +815,12 @@
   SetValue(instr, non_constant_);
 }
 
-void ConstantPropagator::VisitInitInstanceField(InitInstanceFieldInstr* instr) {
-  // Nothing to do.
-}
-
-void ConstantPropagator::VisitInitStaticField(InitStaticFieldInstr* instr) {
-  // Nothing to do.
-}
-
 void ConstantPropagator::VisitLoadStaticField(LoadStaticFieldInstr* instr) {
   if (!FLAG_fields_may_be_reset) {
-    const Field& field = instr->StaticField();
+    const Field& field = instr->field();
     ASSERT(field.is_static());
-    Instance& obj = Instance::Handle(Z, field.StaticValue());
-    if (field.is_final() && (obj.raw() != Object::sentinel().raw()) &&
-        (obj.raw() != Object::transition_sentinel().raw())) {
+    if (field.is_final() && instr->IsFieldInitialized()) {
+      Instance& obj = Instance::Handle(Z, field.StaticValue());
       if (obj.IsSmi() || (obj.IsOld() && obj.IsCanonical())) {
         SetValue(instr, obj);
         return;
diff --git a/runtime/vm/compiler/backend/constant_propagator_test.cc b/runtime/vm/compiler/backend/constant_propagator_test.cc
index df5c09b..24e7df1 100644
--- a/runtime/vm/compiler/backend/constant_propagator_test.cc
+++ b/runtime/vm/compiler/backend/constant_propagator_test.cc
@@ -110,26 +110,43 @@
     int64_t lhs,
     int64_t rhs,
     std::function<Definition*(Definition*, Definition*, intptr_t)> make_op,
+    bool redundant_phi,
     FoldingResult expected) {
   using compiler::BlockBuilder;
 
   CompilerState S(thread, /*is_aot=*/false);
   FlowGraphBuilderHelper H;
 
+  // Add a variable into the scope which would provide static type for the
+  // parameter.
+  LocalVariable* v0_var =
+      new LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource,
+                        String::Handle(Symbols::New(thread, "v0")),
+                        AbstractType::ZoneHandle(Type::IntType()));
+  v0_var->set_type_check_mode(LocalVariable::kTypeCheckedByCaller);
+  H.flow_graph()->parsed_function().scope()->AddVariable(v0_var);
+
   // We are going to build the following graph:
   //
   // B0[graph_entry]
   // B1[function_entry]:
-  //   if 1 == 1 then B2 else B3
+  //   v0 <- Parameter(0)
+  //   if 1 == ${redundant_phi ? 1 : v0} then B2 else B3
   // B2:
   //   goto B4
   // B3:
   //   goto B4
   // B4:
-  //   v1 <- Phi(lhs, -1) repr
+  //   v1 <- Phi(lhs, ${redundant_phi ? -1 : lhs}) repr
   //   v2 <- Constant(rhs)
   //   v3 <- make_op(v1, v2)
   //   Return(v3)
+  //
+  // Note that we test both the case when v1 is fully redundant (has a single
+  // live predecessor) and when it is not redundant but has a constant value.
+  // These two cases are handled by different code paths - so we need to cover
+  // them both to ensure that we properly insert any unbox operations
+  // which are needed.
 
   auto b1 = H.flow_graph()->graph_entry()->normal_entry();
   auto b2 = H.TargetEntry();
@@ -139,12 +156,14 @@
 
   {
     BlockBuilder builder(H.flow_graph(), b1);
-    builder.AddBranch(
-        new StrictCompareInstr(
-            TokenPosition::kNoSource, Token::kEQ_STRICT,
-            new Value(H.IntConstant(1)), new Value(H.IntConstant(1)),
-            /*needs_number_check=*/false, S.GetNextDeoptId()),
-        b2, b3);
+    auto v0 = builder.AddParameter(/*index=*/0, /*param_offset=*/0,
+                                   /*with_frame=*/true, kTagged);
+    builder.AddBranch(new StrictCompareInstr(
+                          TokenPosition::kNoSource, Token::kEQ_STRICT,
+                          new Value(H.IntConstant(1)),
+                          new Value(redundant_phi ? H.IntConstant(1) : v0),
+                          /*needs_number_check=*/false, S.GetNextDeoptId()),
+                      b2, b3);
   }
 
   {
@@ -161,7 +180,8 @@
   Definition* op;
   {
     BlockBuilder builder(H.flow_graph(), b4);
-    v1 = H.Phi(b4, {{b2, H.IntConstant(lhs)}, {b3, H.IntConstant(-1)}});
+    v1 = H.Phi(b4, {{b2, H.IntConstant(lhs)},
+                    {b3, H.IntConstant(redundant_phi ? -1 : lhs)}});
     builder.AddPhi(v1);
     op = builder.AddDefinition(
         make_op(v1, H.IntConstant(rhs), S.GetNextDeoptId()));
@@ -209,6 +229,19 @@
     }
   }
 }
+
+void ConstantPropagatorUnboxedOpTest(
+    Thread* thread,
+    int64_t lhs,
+    int64_t rhs,
+    std::function<Definition*(Definition*, Definition*, intptr_t)> make_op,
+    FoldingResult expected) {
+  ConstantPropagatorUnboxedOpTest(thread, lhs, rhs, make_op,
+                                  /*redundant_phi=*/false, expected);
+  ConstantPropagatorUnboxedOpTest(thread, lhs, rhs, make_op,
+                                  /*redundant_phi=*/true, expected);
+}
+
 }  // namespace
 
 // This test verifies that constant propagation respects representations when
@@ -246,7 +279,8 @@
                                   make_int32_add,
                                   FoldingResult::FoldsTo(kMaxInt32));
 
-  // Overflow of int32 representation and operation is not marked as truncating.
+  // Overflow of int32 representation and operation is not marked as
+  // truncating.
   ConstantPropagatorUnboxedOpTest(thread, /*lhs=*/kMaxInt32, /*lhs=*/1,
                                   make_int32_add, FoldingResult::NoFold());
 
diff --git a/runtime/vm/compiler/backend/flow_graph.cc b/runtime/vm/compiler/backend/flow_graph.cc
index ac20228..fd395e0 100644
--- a/runtime/vm/compiler/backend/flow_graph.cc
+++ b/runtime/vm/compiler/backend/flow_graph.cc
@@ -233,7 +233,14 @@
     // We checked above that constant can be safely unboxed.
     result = UnboxInstr::Create(op->representation(), new Value(result),
                                 DeoptId::kNone, Instruction::kNotSpeculative);
-    InsertBefore(op, result, nullptr, FlowGraph::kValue);
+    // If the current instruction is a phi we need to insert the replacement
+    // into the block which contains this phi - because phis exist separately
+    // from all other instructions.
+    if (auto phi = op->AsPhi()) {
+      InsertAfter(phi->GetBlock(), result, nullptr, FlowGraph::kValue);
+    } else {
+      InsertBefore(op, result, nullptr, FlowGraph::kValue);
+    }
   }
 
   return result;
@@ -1284,10 +1291,10 @@
                                   GrowableArray<Definition*>* env) {
   Environment* deopt_env =
       Environment::From(zone(), *env, num_direct_parameters_, parsed_function_);
-  if (instr->IsClosureCall() || instr->IsInitInstanceField()) {
-    // Trim extra inputs of ClosureCall and InitInstanceField instructions.
-    // Inputs of those instructions are not pushed onto the stack at the
-    // point where deoptimization can occur.
+  if (instr->IsClosureCall() || instr->IsLoadField()) {
+    // Trim extra inputs of ClosureCall and LoadField instructions from
+    // the environment. Inputs of those instructions are not pushed onto
+    // the stack at the point where deoptimization can occur.
     deopt_env =
         deopt_env->DeepCopy(zone(), deopt_env->Length() - instr->InputCount() +
                                         instr->ArgumentCount());
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.h b/runtime/vm/compiler/backend/flow_graph_compiler.h
index 0e57c12..ba064b7 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.h
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.h
@@ -967,7 +967,6 @@
   friend class CheckStackOverflowSlowPath;  // For pending_deoptimization_env_.
   friend class CheckedSmiSlowPath;          // Same.
   friend class CheckedSmiComparisonSlowPath;  // Same.
-  friend class InitInstanceFieldInstr;        // Same.
 
   // Architecture specific implementation of simple native moves.
   void EmitNativeMoveArchitecture(const compiler::ffi::NativeLocation& dst,
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 34d0381..cad054f 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -600,11 +600,15 @@
   return (*a)->cid_start - (*b)->cid_start;
 }
 
-static int OrderByFrequency(CidRange* const* a, CidRange* const* b) {
+static int OrderByFrequencyThenId(CidRange* const* a, CidRange* const* b) {
   const TargetInfo* target_info_a = static_cast<const TargetInfo*>(*a);
   const TargetInfo* target_info_b = static_cast<const TargetInfo*>(*b);
   // Negative if 'a' should sort before 'b'.
-  return target_info_b->count - target_info_a->count;
+  if (target_info_b->count != target_info_a->count) {
+    return (target_info_b->count - target_info_a->count);
+  } else {
+    return (*a)->cid_start - (*b)->cid_start;
+  }
 }
 
 bool Cids::Equals(const Cids& other) const {
@@ -1035,34 +1039,27 @@
   return &this->slot_ == &other_load->slot_;
 }
 
-Instruction* InitInstanceFieldInstr::Canonicalize(FlowGraph* flow_graph) {
-  return this;
+bool LoadStaticFieldInstr::AttributesEqual(Instruction* other) const {
+  ASSERT(IsFieldInitialized());
+  return field().raw() == other->AsLoadStaticField()->field().raw();
 }
 
-Instruction* InitStaticFieldInstr::Canonicalize(FlowGraph* flow_graph) {
-  const bool is_initialized =
-      (field_.StaticValue() != Object::sentinel().raw()) &&
-      (field_.StaticValue() != Object::transition_sentinel().raw());
+bool LoadStaticFieldInstr::IsFieldInitialized() const {
+  const Field& field = this->field();
+  return (field.StaticValue() != Object::sentinel().raw()) &&
+         (field.StaticValue() != Object::transition_sentinel().raw());
+}
+
+Definition* LoadStaticFieldInstr::Canonicalize(FlowGraph* flow_graph) {
   // When precompiling, the fact that a field is currently initialized does not
   // make it safe to omit code that checks if the field needs initialization
   // because the field will be reset so it starts uninitialized in the process
   // running the precompiled code. We must be prepared to reinitialize fields.
-  return is_initialized && !FLAG_fields_may_be_reset ? NULL : this;
-}
-
-bool LoadStaticFieldInstr::AttributesEqual(Instruction* other) const {
-  LoadStaticFieldInstr* other_load = other->AsLoadStaticField();
-  ASSERT(other_load != NULL);
-  // Assert that the field is initialized.
-  ASSERT(StaticField().StaticValue() != Object::sentinel().raw());
-  ASSERT(StaticField().StaticValue() != Object::transition_sentinel().raw());
-  return StaticField().raw() == other_load->StaticField().raw();
-}
-
-bool LoadStaticFieldInstr::IsFieldInitialized() const {
-  const Field& field = StaticField();
-  return (field.StaticValue() != Object::sentinel().raw()) &&
-         (field.StaticValue() != Object::transition_sentinel().raw());
+  if (calls_initializer() && !FLAG_fields_may_be_reset &&
+      IsFieldInitialized()) {
+    set_calls_initializer(false);
+  }
+  return this;
 }
 
 ConstantInstr::ConstantInstr(const Object& value, TokenPosition token_pos)
@@ -2704,9 +2701,10 @@
 }
 
 Definition* LoadFieldInstr::Canonicalize(FlowGraph* flow_graph) {
-  if (!HasUses()) return nullptr;
+  if (!HasUses() && !calls_initializer()) return nullptr;
 
   if (IsImmutableLengthLoad()) {
+    ASSERT(!calls_initializer());
     Definition* array = instance()->definition()->OriginalDefinition();
     if (StaticCallInstr* call = array->AsStaticCall()) {
       // For fixed length arrays if the array is the result of a known
@@ -2749,6 +2747,7 @@
   } else if (slot().kind() == Slot::Kind::kTypedDataView_data) {
     // This case cover the first explicit argument to typed data view
     // factories, the data (buffer).
+    ASSERT(!calls_initializer());
     Definition* array = instance()->definition()->OriginalDefinition();
     if (StaticCallInstr* call = array->AsStaticCall()) {
       if (IsTypedDataViewFactory(call->function())) {
@@ -2758,6 +2757,7 @@
   } else if (slot().kind() == Slot::Kind::kTypedDataView_offset_in_bytes) {
     // This case cover the second explicit argument to typed data view
     // factories, the offset into the buffer.
+    ASSERT(!calls_initializer());
     Definition* array = instance()->definition()->OriginalDefinition();
     if (StaticCallInstr* call = array->AsStaticCall()) {
       if (IsTypedDataViewFactory(call->function())) {
@@ -2770,6 +2770,7 @@
       }
     }
   } else if (slot().IsTypeArguments()) {
+    ASSERT(!calls_initializer());
     Definition* array = instance()->definition()->OriginalDefinition();
     if (StaticCallInstr* call = array->AsStaticCall()) {
       if (call->is_known_list_constructor()) {
@@ -3827,7 +3828,7 @@
     }
   }
   SetLength(dest + 1);
-  Sort(OrderByFrequency);
+  Sort(OrderByFrequencyThenId);
 }
 
 void CallTargets::Print() const {
@@ -4033,86 +4034,86 @@
   JoinEntryInstr::EmitNativeCode(compiler);
 }
 
-LocationSummary* InitStaticFieldInstr::MakeLocationSummary(Zone* zone,
+LocationSummary* LoadStaticFieldInstr::MakeLocationSummary(Zone* zone,
                                                            bool opt) const {
   const intptr_t kNumInputs = 0;
   const intptr_t kNumTemps = 0;
-  LocationSummary* locs = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
+  LocationSummary* locs = new (zone) LocationSummary(
+      zone, kNumInputs, kNumTemps,
+      calls_initializer() ? LocationSummary::kCall : LocationSummary::kNoCall);
+  locs->set_out(0, calls_initializer() ? Location::RegisterLocation(
+                                             InitStaticFieldABI::kResultReg)
+                                       : Location::RequiresRegister());
   return locs;
 }
 
-void InitStaticFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void LoadStaticFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  const Register result = locs()->out(0).reg();
+
+  compiler->used_static_fields().Add(&field());
+
   // Note: static fields ids won't be changed by hot-reload.
   const intptr_t field_table_offset =
       compiler::target::Thread::field_table_values_offset();
   const intptr_t field_offset = compiler::target::FieldTable::OffsetOf(field());
 
-  auto object_store = compiler->isolate()->object_store();
-  const auto& init_static_field_stub = Code::ZoneHandle(
-      compiler->zone(), object_store->init_static_field_stub());
+  __ LoadMemoryValue(result, THR, static_cast<int32_t>(field_table_offset));
+  __ LoadMemoryValue(result, result, static_cast<int32_t>(field_offset));
 
-  const Register temp = InitStaticFieldABI::kFieldReg;
-  __ LoadMemoryValue(temp, THR, static_cast<int32_t>(field_table_offset));
-  __ LoadMemoryValue(temp, temp, static_cast<int32_t>(field_offset));
+  if (calls_initializer()) {
+    compiler::Label call_runtime, no_call;
+    __ CompareObject(result, Object::sentinel());
 
-  compiler::Label call_runtime, no_call;
-  __ CompareObject(temp, Object::sentinel());
+    if (!field().is_late()) {
+      __ BranchIf(EQUAL, &call_runtime);
+      __ CompareObject(result, Object::transition_sentinel());
+    }
 
-  if (!field().is_late()) {
-    __ BranchIf(EQUAL, &call_runtime);
-    __ CompareObject(temp, Object::transition_sentinel());
+    __ BranchIf(NOT_EQUAL, &no_call);
+
+    __ Bind(&call_runtime);
+    __ LoadObject(InitStaticFieldABI::kFieldReg,
+                  Field::ZoneHandle(field().Original()));
+
+    auto object_store = compiler->isolate()->object_store();
+    const auto& init_static_field_stub = Code::ZoneHandle(
+        compiler->zone(), object_store->init_static_field_stub());
+    compiler->GenerateStubCall(token_pos(), init_static_field_stub,
+                               /*kind=*/PcDescriptorsLayout::kOther, locs(),
+                               deopt_id());
+    __ Bind(&no_call);
   }
-
-  __ BranchIf(NOT_EQUAL, &no_call);
-
-  __ Bind(&call_runtime);
-  __ LoadObject(InitStaticFieldABI::kFieldReg,
-                Field::ZoneHandle(field().Original()));
-  compiler->GenerateStubCall(token_pos(), init_static_field_stub,
-                             /*kind=*/PcDescriptorsLayout::kOther, locs(),
-                             deopt_id());
-  __ Bind(&no_call);
 }
 
-LocationSummary* InitInstanceFieldInstr::MakeLocationSummary(Zone* zone,
-                                                             bool opt) const {
-  const intptr_t kNumInputs = 1;
-  const intptr_t kNumTemps = 0;
-  auto const locs = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
-  locs->set_in(0,
-               Location::RegisterLocation(InitInstanceFieldABI::kInstanceReg));
-  return locs;
-}
-
-void InitInstanceFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  const Register temp = InitInstanceFieldABI::kFieldReg;
-
-  __ LoadField(temp, compiler::FieldAddress(InitInstanceFieldABI::kInstanceReg,
-                                            field().TargetOffset()));
+void LoadFieldInstr::EmitNativeCodeForInitializerCall(
+    FlowGraphCompiler* compiler) {
+  ASSERT(calls_initializer());
+  ASSERT(locs()->in(0).reg() == InitInstanceFieldABI::kInstanceReg);
+  ASSERT(locs()->out(0).reg() == InitInstanceFieldABI::kResultReg);
+  ASSERT(slot().IsDartField());
+  const Field& field = slot().field();
 
   compiler::Label no_call;
-  __ CompareObject(temp, Object::sentinel());
+  __ CompareObject(InitInstanceFieldABI::kResultReg, Object::sentinel());
   __ BranchIf(NOT_EQUAL, &no_call);
 
   __ LoadObject(InitInstanceFieldABI::kFieldReg,
-                Field::ZoneHandle(field().Original()));
+                Field::ZoneHandle(field.Original()));
 
   auto object_store = compiler->isolate()->object_store();
   auto& stub = Code::ZoneHandle(compiler->zone());
-  if (field().needs_load_guard()) {
+  if (field.needs_load_guard()) {
     stub = object_store->init_instance_field_stub();
-  } else if (field().is_late()) {
-    if (!field().has_nontrivial_initializer()) {
+  } else if (field.is_late()) {
+    if (!field.has_nontrivial_initializer()) {
       // Common stub calls runtime which will throw an exception.
       stub = object_store->init_instance_field_stub();
     } else {
       // Stubs for late field initialization call initializer
       // function directly, so make sure one is created.
-      field().EnsureInitializerFunction();
+      field.EnsureInitializerFunction();
 
-      if (field().is_final()) {
+      if (field.is_final()) {
         stub = object_store->init_late_final_instance_field_stub();
       } else {
         stub = object_store->init_late_instance_field_stub();
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index 28e44b9..7e04032 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -411,15 +411,13 @@
   M(LoadCodeUnits, kNoGC)                                                      \
   M(StoreIndexed, kNoGC)                                                       \
   M(StoreInstanceField, _)                                                     \
-  M(InitInstanceField, _)                                                      \
-  M(InitStaticField, _)                                                        \
-  M(LoadStaticField, kNoGC)                                                    \
+  M(LoadStaticField, _)                                                        \
   M(StoreStaticField, kNoGC)                                                   \
   M(BooleanNegate, kNoGC)                                                      \
   M(InstanceOf, _)                                                             \
   M(CreateArray, _)                                                            \
   M(AllocateObject, _)                                                         \
-  M(LoadField, kNoGC)                                                          \
+  M(LoadField, _)                                                              \
   M(LoadUntagged, kNoGC)                                                       \
   M(StoreUntagged, kNoGC)                                                      \
   M(LoadClassId, kNoGC)                                                        \
@@ -5250,23 +5248,39 @@
   DISALLOW_COPY_AND_ASSIGN(GuardFieldTypeInstr);
 };
 
-class LoadStaticFieldInstr : public TemplateDefinition<0, NoThrow> {
+class LoadStaticFieldInstr : public TemplateDefinition<0, Throws> {
  public:
-  LoadStaticFieldInstr(const Field& field, TokenPosition token_pos)
-      : field_(field), token_pos_(token_pos) {}
+  LoadStaticFieldInstr(const Field& field,
+                       TokenPosition token_pos,
+                       bool calls_initializer = false,
+                       intptr_t deopt_id = DeoptId::kNone)
+      : TemplateDefinition(deopt_id),
+        field_(field),
+        token_pos_(token_pos),
+        calls_initializer_(calls_initializer) {
+    ASSERT(!calls_initializer || (deopt_id != DeoptId::kNone));
+  }
 
   DECLARE_INSTRUCTION(LoadStaticField)
+
   virtual CompileType ComputeType() const;
 
-  const Field& StaticField() const { return field_; }
+  const Field& field() const { return field_; }
   bool IsFieldInitialized() const;
 
-  virtual bool ComputeCanDeoptimize() const { return false; }
+  bool calls_initializer() const { return calls_initializer_; }
+  void set_calls_initializer(bool value) { calls_initializer_ = value; }
 
   virtual bool AllowsCSE() const {
-    return StaticField().is_final() && !FLAG_fields_may_be_reset;
+    return field().is_final() && !FLAG_fields_may_be_reset;
   }
-  virtual bool HasUnknownSideEffects() const { return false; }
+
+  virtual bool ComputeCanDeoptimize() const { return calls_initializer(); }
+  virtual bool HasUnknownSideEffects() const { return calls_initializer(); }
+  virtual bool CanTriggerGC() const { return calls_initializer(); }
+  virtual bool MayThrow() const { return calls_initializer(); }
+
+  virtual Definition* Canonicalize(FlowGraph* flow_graph);
 
   virtual bool AttributesEqual(Instruction* other) const;
 
@@ -5277,6 +5291,7 @@
  private:
   const Field& field_;
   const TokenPosition token_pos_;
+  bool calls_initializer_;
 
   DISALLOW_COPY_AND_ASSIGN(LoadStaticFieldInstr);
 };
@@ -6110,15 +6125,25 @@
 };
 
 // LoadFieldInstr represents a load from the given [slot] in the given
-// [instance].
+// [instance]. If calls_initializer(), then LoadFieldInstr also calls field
+// initializer if field is not initialized yet (contains sentinel value).
 //
 // Note: if slot was a subject of the field unboxing optimization then this load
 // would both load the box stored in the field and then load the content of
 // the box.
-class LoadFieldInstr : public TemplateDefinition<1, NoThrow> {
+class LoadFieldInstr : public TemplateDefinition<1, Throws> {
  public:
-  LoadFieldInstr(Value* instance, const Slot& slot, TokenPosition token_pos)
-      : slot_(slot), token_pos_(token_pos) {
+  LoadFieldInstr(Value* instance,
+                 const Slot& slot,
+                 TokenPosition token_pos,
+                 bool calls_initializer = false,
+                 intptr_t deopt_id = DeoptId::kNone)
+      : TemplateDefinition(deopt_id),
+        slot_(slot),
+        token_pos_(token_pos),
+        calls_initializer_(calls_initializer) {
+    ASSERT(!calls_initializer || (deopt_id != DeoptId::kNone));
+    ASSERT(!calls_initializer || slot.IsDartField());
     SetInputAt(0, instance);
   }
 
@@ -6127,6 +6152,9 @@
 
   virtual TokenPosition token_pos() const { return token_pos_; }
 
+  bool calls_initializer() const { return calls_initializer_; }
+  void set_calls_initializer(bool value) { calls_initializer_ = value; }
+
   virtual Representation representation() const;
 
   bool IsUnboxedLoad() const;
@@ -6135,7 +6163,10 @@
   DECLARE_INSTRUCTION(LoadField)
   virtual CompileType ComputeType() const;
 
-  virtual bool ComputeCanDeoptimize() const { return false; }
+  virtual bool ComputeCanDeoptimize() const { return calls_initializer(); }
+  virtual bool HasUnknownSideEffects() const { return calls_initializer(); }
+  virtual bool CanTriggerGC() const { return calls_initializer(); }
+  virtual bool MayThrow() const { return calls_initializer(); }
 
   virtual void InferRange(RangeAnalysis* analysis, Range* range);
 
@@ -6162,18 +6193,23 @@
   static bool IsTypedDataViewFactory(const Function& function);
 
   virtual bool AllowsCSE() const { return slot_.is_immutable(); }
-  virtual bool HasUnknownSideEffects() const { return false; }
 
   virtual bool AttributesEqual(Instruction* other) const;
 
   PRINT_OPERANDS_TO_SUPPORT
   ADD_OPERANDS_TO_S_EXPRESSION_SUPPORT
+  ADD_EXTRA_INFO_TO_S_EXPRESSION_SUPPORT
 
  private:
   intptr_t OffsetInBytes() const { return slot().offset_in_bytes(); }
 
+  // Generate code which checks if field is initialized and
+  // calls initializer if it is not. Field value is already loaded.
+  void EmitNativeCodeForInitializerCall(FlowGraphCompiler* compiler);
+
   const Slot& slot_;
   const TokenPosition token_pos_;
+  bool calls_initializer_;
 
   DISALLOW_COPY_AND_ASSIGN(LoadFieldInstr);
 };
@@ -6312,67 +6348,6 @@
   DISALLOW_COPY_AND_ASSIGN(AllocateContextInstr);
 };
 
-class InitInstanceFieldInstr : public TemplateInstruction<1, Throws> {
- public:
-  InitInstanceFieldInstr(Value* input, const Field& field, intptr_t deopt_id)
-      : TemplateInstruction(deopt_id), field_(field) {
-    SetInputAt(0, input);
-    CheckField(field);
-  }
-
-  virtual TokenPosition token_pos() const { return field_.token_pos(); }
-  const Field& field() const { return field_; }
-
-  DECLARE_INSTRUCTION(InitInstanceField)
-
-  virtual bool ComputeCanDeoptimize() const {
-    return !CompilerState::Current().is_aot();
-  }
-  virtual bool HasUnknownSideEffects() const { return true; }
-  virtual Instruction* Canonicalize(FlowGraph* flow_graph);
-
-  virtual bool AllowsCSE() const { return true; }
-  virtual bool AttributesEqual(Instruction* other) const {
-    return other->AsInitInstanceField()->field().raw() == field().raw();
-  }
-
- private:
-  const Field& field_;
-
-  DISALLOW_COPY_AND_ASSIGN(InitInstanceFieldInstr);
-};
-
-class InitStaticFieldInstr : public TemplateInstruction<0, Throws> {
- public:
-  InitStaticFieldInstr(const Field& field, intptr_t deopt_id)
-      : TemplateInstruction(deopt_id), field_(field) {
-    CheckField(field);
-  }
-
-  virtual TokenPosition token_pos() const { return field_.token_pos(); }
-  const Field& field() const { return field_; }
-
-  DECLARE_INSTRUCTION(InitStaticField)
-
-  virtual bool ComputeCanDeoptimize() const {
-    return !CompilerState::Current().is_aot();
-  }
-  virtual bool HasUnknownSideEffects() const { return true; }
-  virtual Instruction* Canonicalize(FlowGraph* flow_graph);
-
-  // Two InitStaticField instructions can be canonicalized into one
-  // instruction if both are initializing the same field.
-  virtual bool AllowsCSE() const { return true; }
-  virtual bool AttributesEqual(Instruction* other) const {
-    return other->AsInitStaticField()->field().raw() == field().raw();
-  }
-
- private:
-  const Field& field_;
-
-  DISALLOW_COPY_AND_ASSIGN(InitStaticFieldInstr);
-};
-
 // [CloneContext] instruction clones the given Context object assuming that
 // it contains exactly the provided [context_variables].
 class CloneContextInstr : public TemplateDefinition<1, NoThrow> {
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index 2e30d5d..f5ddae7 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -2840,38 +2840,6 @@
   __ Bind(&skip_store);
 }
 
-LocationSummary* LoadStaticFieldInstr::MakeLocationSummary(Zone* zone,
-                                                           bool opt) const {
-  const intptr_t kNumInputs = 0;
-  const intptr_t kNumTemps = 1;
-  LocationSummary* summary = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  summary->set_out(0, Location::RequiresRegister());
-  summary->set_temp(0, Location::RequiresRegister());
-  return summary;
-}
-
-// When the parser is building an implicit static getter for optimization,
-// it can generate a function body where deoptimization ids do not line up
-// with the unoptimized code.
-//
-// This is safe only so long as LoadStaticFieldInstr cannot deoptimize.
-void LoadStaticFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  const Register result = locs()->out(0).reg();
-  const Register temp = locs()->temp(0).reg();
-
-  compiler->used_static_fields().Add(&StaticField());
-
-  __ LoadFromOffset(kWord, temp, THR,
-                    compiler::target::Thread::field_table_values_offset());
-  // Hot-reload has to guarantee that static fields will never change their
-  // "id", so we can embed the offset directly in the unoptimized code.
-  // The hot-reload code seems to maintain this guarantee only for non-enum
-  // classes.
-  __ LoadFromOffset(kWord, result, temp,
-                    compiler::target::FieldTable::OffsetOf(StaticField()));
-}
-
 LocationSummary* StoreStaticFieldInstr::MakeLocationSummary(Zone* zone,
                                                             bool opt) const {
   const intptr_t kNumInputs = 1;
@@ -3041,14 +3009,23 @@
                                  ? (FLAG_precompiled_mode ? 0 : 1)
                                  : (IsPotentialUnboxedLoad() ? 3 : 0);
 
-  LocationSummary* locs = new (zone) LocationSummary(
-      zone, kNumInputs, kNumTemps,
-      (opt && !IsPotentialUnboxedLoad()) ? LocationSummary::kNoCall
-                                         : LocationSummary::kCallOnSlowPath);
+  const auto contains_call =
+      (IsUnboxedLoad() && opt)
+          ? LocationSummary::kNoCall
+          : (IsPotentialUnboxedLoad()
+                 ? LocationSummary::kCallOnSlowPath
+                 : (calls_initializer() ? LocationSummary::kCall
+                                        : LocationSummary::kNoCall));
 
-  locs->set_in(0, Location::RequiresRegister());
+  LocationSummary* locs =
+      new (zone) LocationSummary(zone, kNumInputs, kNumTemps, contains_call);
+
+  locs->set_in(0, calls_initializer() ? Location::RegisterLocation(
+                                            InitInstanceFieldABI::kInstanceReg)
+                                      : Location::RequiresRegister());
 
   if (IsUnboxedLoad() && opt) {
+    ASSERT(!calls_initializer());
     if (!FLAG_precompiled_mode) {
       locs->set_temp(0, Location::RequiresRegister());
     }
@@ -3060,11 +3037,15 @@
       locs->set_out(0, Location::RequiresFpuRegister());
     }
   } else if (IsPotentialUnboxedLoad()) {
+    ASSERT(!calls_initializer());
     locs->set_temp(0, opt ? Location::RequiresFpuRegister()
                           : Location::FpuRegisterLocation(Q1));
     locs->set_temp(1, Location::RequiresRegister());
     locs->set_temp(2, Location::RequiresRegister());
     locs->set_out(0, Location::RequiresRegister());
+  } else if (calls_initializer()) {
+    locs->set_out(0,
+                  Location::RegisterLocation(InitInstanceFieldABI::kResultReg));
   } else {
     locs->set_out(0, Location::RequiresRegister());
   }
@@ -3076,6 +3057,7 @@
 
   const Register instance_reg = locs()->in(0).reg();
   if (IsUnboxedLoad() && compiler->is_optimizing()) {
+    ASSERT(!calls_initializer());
     if (slot().field().is_non_nullable_integer()) {
       const PairLocation* out_pair = locs()->out(0).AsPairLocation();
       const Register out_lo = out_pair->At(0).reg();
@@ -3144,6 +3126,7 @@
   compiler::Label done;
   const Register result_reg = locs()->out(0).reg();
   if (IsPotentialUnboxedLoad()) {
+    ASSERT(!calls_initializer());
     const DRegister value = EvenDRegisterOf(locs()->temp(0).fpu_reg());
     const Register temp = locs()->temp(1).reg();
     const Register temp2 = locs()->temp(2).reg();
@@ -3212,7 +3195,13 @@
 
     __ Bind(&load_pointer);
   }
+
   __ LoadFieldFromOffset(kWord, result_reg, instance_reg, OffsetInBytes());
+
+  if (calls_initializer()) {
+    EmitNativeCodeForInitializerCall(compiler);
+  }
+
   __ Bind(&done);
 }
 
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index d3b004e..044db73 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -2361,35 +2361,6 @@
   __ Bind(&skip_store);
 }
 
-LocationSummary* LoadStaticFieldInstr::MakeLocationSummary(Zone* zone,
-                                                           bool opt) const {
-  const intptr_t kNumInputs = 0;
-  const intptr_t kNumTemps = 1;
-  LocationSummary* summary = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  summary->set_out(0, Location::RequiresRegister());
-  summary->set_temp(0, Location::RequiresRegister());
-  return summary;
-}
-
-// When the parser is building an implicit static getter for optimization,
-// it can generate a function body where deoptimization ids do not line up
-// with the unoptimized code.
-//
-// This is safe only so long as LoadStaticFieldInstr cannot deoptimize.
-void LoadStaticFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  const Register result = locs()->out(0).reg();
-  const Register temp = locs()->temp(0).reg();
-
-  compiler->used_static_fields().Add(&StaticField());
-
-  __ LoadFromOffset(temp, THR,
-                    compiler::target::Thread::field_table_values_offset());
-  // Note: static fields ids won't be changed by hot-reload.
-  __ LoadFromOffset(result, temp,
-                    compiler::target::FieldTable::OffsetOf(StaticField()));
-}
-
 LocationSummary* StoreStaticFieldInstr::MakeLocationSummary(Zone* zone,
                                                             bool opt) const {
   const intptr_t kNumInputs = 1;
@@ -2555,14 +2526,23 @@
   const intptr_t kNumTemps = (IsUnboxedLoad() && opt)
                                  ? (FLAG_precompiled_mode ? 0 : 1)
                                  : (IsPotentialUnboxedLoad() ? 1 : 0);
-  LocationSummary* locs = new (zone) LocationSummary(
-      zone, kNumInputs, kNumTemps,
-      (opt && !IsPotentialUnboxedLoad()) ? LocationSummary::kNoCall
-                                         : LocationSummary::kCallOnSlowPath);
+  const auto contains_call =
+      (IsUnboxedLoad() && opt)
+          ? LocationSummary::kNoCall
+          : (IsPotentialUnboxedLoad()
+                 ? LocationSummary::kCallOnSlowPath
+                 : (calls_initializer() ? LocationSummary::kCall
+                                        : LocationSummary::kNoCall));
 
-  locs->set_in(0, Location::RequiresRegister());
+  LocationSummary* locs =
+      new (zone) LocationSummary(zone, kNumInputs, kNumTemps, contains_call);
+
+  locs->set_in(0, calls_initializer() ? Location::RegisterLocation(
+                                            InitInstanceFieldABI::kInstanceReg)
+                                      : Location::RequiresRegister());
 
   if (IsUnboxedLoad() && opt) {
+    ASSERT(!calls_initializer());
     if (!FLAG_precompiled_mode) {
       locs->set_temp(0, Location::RequiresRegister());
     }
@@ -2573,8 +2553,12 @@
       locs->set_out(0, Location::RequiresFpuRegister());
     }
   } else if (IsPotentialUnboxedLoad()) {
+    ASSERT(!calls_initializer());
     locs->set_temp(0, Location::RequiresRegister());
     locs->set_out(0, Location::RequiresRegister());
+  } else if (calls_initializer()) {
+    locs->set_out(0,
+                  Location::RegisterLocation(InitInstanceFieldABI::kResultReg));
   } else {
     locs->set_out(0, Location::RequiresRegister());
   }
@@ -2585,6 +2569,7 @@
   ASSERT(sizeof(classid_t) == kInt16Size);
   const Register instance_reg = locs()->in(0).reg();
   if (IsUnboxedLoad() && compiler->is_optimizing()) {
+    ASSERT(!calls_initializer());
     if (slot().field().is_non_nullable_integer()) {
       const Register result = locs()->out(0).reg();
       __ Comment("UnboxedIntegerLoadFieldInstr");
@@ -2637,6 +2622,7 @@
   compiler::Label done;
   const Register result_reg = locs()->out(0).reg();
   if (IsPotentialUnboxedLoad()) {
+    ASSERT(!calls_initializer());
     const Register temp = locs()->temp(0).reg();
 
     compiler::Label load_pointer;
@@ -2706,7 +2692,13 @@
 
     __ Bind(&load_pointer);
   }
+
   __ LoadFieldFromOffset(result_reg, instance_reg, OffsetInBytes());
+
+  if (calls_initializer()) {
+    EmitNativeCodeForInitializerCall(compiler);
+  }
+
   __ Bind(&done);
 }
 
diff --git a/runtime/vm/compiler/backend/il_deserializer.cc b/runtime/vm/compiler/backend/il_deserializer.cc
index cf78000..47ac11a 100644
--- a/runtime/vm/compiler/backend/il_deserializer.cc
+++ b/runtime/vm/compiler/backend/il_deserializer.cc
@@ -1111,7 +1111,14 @@
   const Slot* slot;
   if (!ParseSlot(CheckTaggedList(Retrieve(sexp, 2)), &slot)) return nullptr;
 
-  return new (zone()) LoadFieldInstr(instance, *slot, info.token_pos);
+  bool calls_initializer = false;
+  if (auto const calls_initializer_sexp =
+          CheckBool(sexp->ExtraLookupValue("calls_initializer"))) {
+    calls_initializer = calls_initializer_sexp->value();
+  }
+
+  return new (zone()) LoadFieldInstr(instance, *slot, info.token_pos,
+                                     calls_initializer, info.deopt_id);
 }
 
 NativeCallInstr* FlowGraphDeserializer::DeserializeNativeCall(
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index b9a8c06..7c35e2e 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -2093,37 +2093,6 @@
   __ Bind(&skip_store);
 }
 
-LocationSummary* LoadStaticFieldInstr::MakeLocationSummary(Zone* zone,
-                                                           bool opt) const {
-  const intptr_t kNumInputs = 0;
-  const intptr_t kNumTemps = 1;
-  LocationSummary* summary = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  summary->set_temp(0, Location::RequiresRegister());
-  summary->set_out(0, Location::RequiresRegister());
-  return summary;
-}
-
-// When the parser is building an implicit static getter for optimization,
-// it can generate a function body where deoptimization ids do not line up
-// with the unoptimized code.
-//
-// This is safe only so long as LoadStaticFieldInstr cannot deoptimize.
-void LoadStaticFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  Register result = locs()->out(0).reg();
-  Register temp = locs()->temp(0).reg();
-
-  compiler->used_static_fields().Add(&StaticField());
-
-  __ movl(temp,
-          compiler::Address(
-              THR, compiler::target::Thread::field_table_values_offset()));
-  // Note: static fields ids won't be changed by hot-reload.
-  __ movl(result,
-          compiler::Address(
-              temp, compiler::target::FieldTable::OffsetOf(StaticField())));
-}
-
 LocationSummary* StoreStaticFieldInstr::MakeLocationSummary(Zone* zone,
                                                             bool opt) const {
   LocationSummary* locs =
@@ -2286,22 +2255,33 @@
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps =
       (IsUnboxedLoad() && opt) ? 1 : ((IsPotentialUnboxedLoad()) ? 2 : 0);
+  const auto contains_call =
+      (IsUnboxedLoad() && opt)
+          ? LocationSummary::kNoCall
+          : (IsPotentialUnboxedLoad()
+                 ? LocationSummary::kCallOnSlowPath
+                 : (calls_initializer() ? LocationSummary::kCall
+                                        : LocationSummary::kNoCall));
 
-  LocationSummary* locs = new (zone) LocationSummary(
-      zone, kNumInputs, kNumTemps,
-      (opt && !IsPotentialUnboxedLoad()) ? LocationSummary::kNoCall
-                                         : LocationSummary::kCallOnSlowPath);
+  LocationSummary* locs =
+      new (zone) LocationSummary(zone, kNumInputs, kNumTemps, contains_call);
 
-  locs->set_in(0, Location::RequiresRegister());
+  locs->set_in(0, calls_initializer() ? Location::RegisterLocation(
+                                            InitInstanceFieldABI::kInstanceReg)
+                                      : Location::RequiresRegister());
 
   if (IsUnboxedLoad() && opt) {
+    ASSERT(!calls_initializer());
     locs->set_temp(0, Location::RequiresRegister());
   } else if (IsPotentialUnboxedLoad()) {
+    ASSERT(!calls_initializer());
     locs->set_temp(0, opt ? Location::RequiresFpuRegister()
                           : Location::FpuRegisterLocation(XMM1));
     locs->set_temp(1, Location::RequiresRegister());
   }
-  locs->set_out(0, Location::RequiresRegister());
+  locs->set_out(0, calls_initializer() ? Location::RegisterLocation(
+                                             InitInstanceFieldABI::kResultReg)
+                                       : Location::RequiresRegister());
   return locs;
 }
 
@@ -2310,6 +2290,7 @@
 
   Register instance_reg = locs()->in(0).reg();
   if (IsUnboxedLoad() && compiler->is_optimizing()) {
+    ASSERT(!calls_initializer());
     XmmRegister result = locs()->out(0).fpu_reg();
     Register temp = locs()->temp(0).reg();
     __ movl(temp, compiler::FieldAddress(instance_reg, OffsetInBytes()));
@@ -2338,6 +2319,7 @@
   compiler::Label done;
   Register result = locs()->out(0).reg();
   if (IsPotentialUnboxedLoad()) {
+    ASSERT(!calls_initializer());
     Register temp = locs()->temp(1).reg();
     XmmRegister value = locs()->temp(0).fpu_reg();
 
@@ -2406,7 +2388,13 @@
 
     __ Bind(&load_pointer);
   }
+
   __ movl(result, compiler::FieldAddress(instance_reg, OffsetInBytes()));
+
+  if (calls_initializer()) {
+    EmitNativeCodeForInitializerCall(compiler);
+  }
+
   __ Bind(&done);
 }
 
diff --git a/runtime/vm/compiler/backend/il_printer.cc b/runtime/vm/compiler/backend/il_printer.cc
index ee55212..0f2c71c 100644
--- a/runtime/vm/compiler/backend/il_printer.cc
+++ b/runtime/vm/compiler/backend/il_printer.cc
@@ -595,7 +595,10 @@
 }
 
 void LoadStaticFieldInstr::PrintOperandsTo(BufferFormatter* f) const {
-  f->Print("%s", String::Handle(StaticField().name()).ToCString());
+  f->Print("%s", String::Handle(field().name()).ToCString());
+  if (calls_initializer()) {
+    f->Print(", CallsInitializer");
+  }
 }
 
 void StoreStaticFieldInstr::PrintOperandsTo(BufferFormatter* f) const {
@@ -643,6 +646,9 @@
 void LoadFieldInstr::PrintOperandsTo(BufferFormatter* f) const {
   instance()->PrintTo(f);
   f->Print(" . %s%s", slot().Name(), slot().is_immutable() ? " {final}" : "");
+  if (calls_initializer()) {
+    f->Print(", CallsInitializer");
+  }
 }
 
 void LoadUntaggedInstr::PrintOperandsTo(BufferFormatter* f) const {
diff --git a/runtime/vm/compiler/backend/il_serializer.cc b/runtime/vm/compiler/backend/il_serializer.cc
index 8d2f489..309224d 100644
--- a/runtime/vm/compiler/backend/il_serializer.cc
+++ b/runtime/vm/compiler/backend/il_serializer.cc
@@ -976,6 +976,14 @@
   sexp->Add(s->SlotToSExp(slot()));
 }
 
+void LoadFieldInstr::AddExtraInfoToSExpression(SExpList* sexp,
+                                               FlowGraphSerializer* s) const {
+  Instruction::AddExtraInfoToSExpression(sexp, s);
+  if (calls_initializer() || FLAG_verbose_flow_graph_serialization) {
+    s->AddExtraBool(sexp, "calls_initializer", calls_initializer());
+  }
+}
+
 void StoreInstanceFieldInstr::AddOperandsToSExpression(
     SExpList* sexp,
     FlowGraphSerializer* s) const {
diff --git a/runtime/vm/compiler/backend/il_test.cc b/runtime/vm/compiler/backend/il_test.cc
index ad763a3..a07557f 100644
--- a/runtime/vm/compiler/backend/il_test.cc
+++ b/runtime/vm/compiler/backend/il_test.cc
@@ -46,7 +46,7 @@
 }
 
 ISOLATE_UNIT_TEST_CASE(IRTest_EliminateWriteBarrier) {
-  const char* tag = (FLAG_null_safety == kNullSafetyOptionStrong) ? "?" : "";
+  const char* nullable_tag = TestCase::NullableTag();
   // clang-format off
   auto kScript = Utils::CStringUniquePtr(OS::SCreate(nullptr, R"(
       class Container<T> {
@@ -64,7 +64,7 @@
           x[i] = i;
         }
       }
-    )", tag, tag), std::free);
+    )", nullable_tag, nullable_tag), std::free);
   // clang-format on
 
   const auto& root_library = Library::Handle(LoadTestScript(kScript.get()));
@@ -131,7 +131,6 @@
 }
 
 ISOLATE_UNIT_TEST_CASE(IRTest_InitializingStores) {
-  const char* tag = (FLAG_null_safety == kNullSafetyOptionStrong) ? "?" : "";
   // clang-format off
   auto kScript = Utils::CStringUniquePtr(OS::SCreate(nullptr, R"(
     class Bar {
@@ -155,7 +154,7 @@
       f4();
     }
   )",
-  tag), std::free);
+  TestCase::NullableTag()), std::free);
   // clang-format on
 
   const auto& root_library = Library::Handle(LoadTestScript(kScript.get()));
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index 857d0ce..69ed80b9 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -2333,37 +2333,6 @@
   __ Bind(&skip_store);
 }
 
-LocationSummary* LoadStaticFieldInstr::MakeLocationSummary(Zone* zone,
-                                                           bool opt) const {
-  const intptr_t kNumInputs = 0;
-  const intptr_t kNumTemps = 1;
-  LocationSummary* locs = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  locs->set_out(0, Location::RequiresRegister());
-  locs->set_temp(0, Location::RequiresRegister());
-  return locs;
-}
-
-// When the parser is building an implicit static getter for optimization,
-// it can generate a function body where deoptimization ids do not line up
-// with the unoptimized code.
-//
-// This is safe only so long as LoadStaticFieldInstr cannot deoptimize.
-void LoadStaticFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  Register result = locs()->out(0).reg();
-  Register temp = locs()->temp(0).reg();
-
-  compiler->used_static_fields().Add(&StaticField());
-
-  __ movq(temp,
-          compiler::Address(
-              THR, compiler::target::Thread::field_table_values_offset()));
-  // Note: static fields ids won't be changed by hot-reload.
-  __ movq(result,
-          compiler::Address(
-              temp, compiler::target::FieldTable::OffsetOf(StaticField())));
-}
-
 LocationSummary* StoreStaticFieldInstr::MakeLocationSummary(Zone* zone,
                                                             bool opt) const {
   const intptr_t kNumInputs = 1;
@@ -2535,14 +2504,23 @@
   const intptr_t kNumTemps = (IsUnboxedLoad() && opt)
                                  ? (FLAG_precompiled_mode ? 0 : 1)
                                  : (IsPotentialUnboxedLoad() ? 2 : 0);
-  LocationSummary* locs = new (zone) LocationSummary(
-      zone, kNumInputs, kNumTemps,
-      (opt && !IsPotentialUnboxedLoad()) ? LocationSummary::kNoCall
-                                         : LocationSummary::kCallOnSlowPath);
+  const auto contains_call =
+      (IsUnboxedLoad() && opt)
+          ? LocationSummary::kNoCall
+          : (IsPotentialUnboxedLoad()
+                 ? LocationSummary::kCallOnSlowPath
+                 : (calls_initializer() ? LocationSummary::kCall
+                                        : LocationSummary::kNoCall));
 
-  locs->set_in(0, Location::RequiresRegister());
+  LocationSummary* locs =
+      new (zone) LocationSummary(zone, kNumInputs, kNumTemps, contains_call);
+
+  locs->set_in(0, calls_initializer() ? Location::RegisterLocation(
+                                            InitInstanceFieldABI::kInstanceReg)
+                                      : Location::RequiresRegister());
 
   if (IsUnboxedLoad() && opt) {
+    ASSERT(!calls_initializer());
     if (!FLAG_precompiled_mode) {
       locs->set_temp(0, Location::RequiresRegister());
     }
@@ -2553,10 +2531,14 @@
       locs->set_out(0, Location::RequiresFpuRegister());
     }
   } else if (IsPotentialUnboxedLoad()) {
+    ASSERT(!calls_initializer());
     locs->set_temp(0, opt ? Location::RequiresFpuRegister()
                           : Location::FpuRegisterLocation(XMM1));
     locs->set_temp(1, Location::RequiresRegister());
     locs->set_out(0, Location::RequiresRegister());
+  } else if (calls_initializer()) {
+    locs->set_out(0,
+                  Location::RegisterLocation(InitInstanceFieldABI::kResultReg));
   } else {
     locs->set_out(0, Location::RequiresRegister());
   }
@@ -2567,6 +2549,7 @@
   ASSERT(sizeof(classid_t) == kInt16Size);
   Register instance_reg = locs()->in(0).reg();
   if (IsUnboxedLoad() && compiler->is_optimizing()) {
+    ASSERT(!calls_initializer());
     if (slot().field().is_non_nullable_integer()) {
       const Register result = locs()->out(0).reg();
       __ Comment("UnboxedIntegerLoadFieldInstr");
@@ -2627,6 +2610,7 @@
   compiler::Label done;
   Register result = locs()->out(0).reg();
   if (IsPotentialUnboxedLoad()) {
+    ASSERT(!calls_initializer());
     Register temp = locs()->temp(1).reg();
     XmmRegister value = locs()->temp(0).fpu_reg();
 
@@ -2695,7 +2679,13 @@
 
     __ Bind(&load_pointer);
   }
+
   __ movq(result, compiler::FieldAddress(instance_reg, OffsetInBytes()));
+
+  if (calls_initializer()) {
+    EmitNativeCodeForInitializerCall(compiler);
+  }
+
   __ Bind(&done);
 }
 
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index 58c4c88..25c3e44 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -3658,6 +3658,13 @@
     Definition** result,
     SpeculativeInliningPolicy* policy,
     FlowGraphInliner::ExactnessInfo* exactness) {
+  if (receiver_cid == kNeverCid) {
+    // Receiver was defined in dead code and was replaced by the sentinel.
+    // Original receiver cid is lost, so don't try to inline recognized
+    // methods.
+    return false;
+  }
+
   const bool can_speculate = policy->IsAllowedForInlining(call->deopt_id());
 
   const MethodRecognizer::Kind kind = target.recognized_kind();
diff --git a/runtime/vm/compiler/backend/reachability_fence_test.cc b/runtime/vm/compiler/backend/reachability_fence_test.cc
index d0e6e8f..e26bf4e 100644
--- a/runtime/vm/compiler/backend/reachability_fence_test.cc
+++ b/runtime/vm/compiler/backend/reachability_fence_test.cc
@@ -15,9 +15,6 @@
 namespace dart {
 
 ISOLATE_UNIT_TEST_CASE(ReachabilityFence_Simple) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = null_safety ? "?" : "";
-  const char* nullAssertTag = null_safety ? "!" : "";
   // clang-format off
   auto kScript =
       Utils::CStringUniquePtr(OS::SCreate(nullptr,
@@ -40,7 +37,7 @@
         reachabilityFence(object);
       }
       )",
-      nullableTag, nullAssertTag), std::free);
+      TestCase::NullableTag(), TestCase::NullAssertTag()), std::free);
   // clang-format on
 
   const auto& root_library = Library::Handle(LoadTestScript(kScript.get()));
@@ -78,9 +75,6 @@
 }
 
 ISOLATE_UNIT_TEST_CASE(ReachabilityFence_Loop) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = null_safety ? "?" : "";
-  const char* nullAssertTag = null_safety ? "!" : "";
   // clang-format off
   auto kScript =
       Utils::CStringUniquePtr(OS::SCreate(nullptr, R"(
@@ -108,7 +102,7 @@
           reachabilityFence(object);
         }
       }
-      )", nullableTag, nullAssertTag), std::free);
+      )", TestCase::NullableTag(), TestCase::NullAssertTag()), std::free);
   // clang-format on
 
   const auto& root_library = Library::Handle(LoadTestScript(kScript.get()));
@@ -146,9 +140,6 @@
 }
 
 ISOLATE_UNIT_TEST_CASE(ReachabilityFence_NoCanonicalize) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = null_safety ? "?" : "";
-  const char* nullAssertTag = null_safety ? "!" : "";
   // clang-format off
   auto kScript =
       Utils::CStringUniquePtr(OS::SCreate(nullptr, R"(
@@ -179,7 +170,7 @@
         reachabilityFence(object);
         reachabilityFence(object);
       }
-      )", nullableTag, nullAssertTag), std::free);
+      )", TestCase::NullableTag(), TestCase::NullAssertTag()), std::free);
   // clang-format on
 
   const auto& root_library = Library::Handle(LoadTestScript(kScript.get()));
diff --git a/runtime/vm/compiler/backend/redundancy_elimination.cc b/runtime/vm/compiler/backend/redundancy_elimination.cc
index c211abb..b86b8b6 100644
--- a/runtime/vm/compiler/backend/redundancy_elimination.cc
+++ b/runtime/vm/compiler/backend/redundancy_elimination.cc
@@ -17,6 +17,10 @@
 DEFINE_FLAG(bool, dead_store_elimination, true, "Eliminate dead stores");
 DEFINE_FLAG(bool, load_cse, true, "Use redundant load elimination.");
 DEFINE_FLAG(bool,
+            optimize_lazy_initializer_calls,
+            true,
+            "Eliminate redundant lazy initializer calls.");
+DEFINE_FLAG(bool,
             trace_load_optimization,
             false,
             "Print live sets for load optimization pass.");
@@ -93,7 +97,7 @@
 //   - given allocations X and Y no place inside X can be aliased with any place
 //     inside Y even if any of them or both escape.
 //
-// It important to realize that single place can belong to multiple aliases.
+// It is important to realize that single place can belong to multiple aliases.
 // For example place X.f with aliased allocation X belongs both to X.f and *.f
 // aliases. Likewise X[C] with non-aliased allocation X belongs to X[C] and X[*]
 // aliases.
@@ -183,7 +187,7 @@
       case Instruction::kLoadStaticField:
         set_kind(kStaticField);
         set_representation(instr->AsLoadStaticField()->representation());
-        static_field_ = &instr->AsLoadStaticField()->StaticField();
+        static_field_ = &instr->AsLoadStaticField()->field();
         *is_load = true;
         break;
 
@@ -628,11 +632,9 @@
                           intptr_t from,
                           intptr_t to) {
     const intptr_t block_num = block->preorder_number();
-    while (moves_.length() <= block_num) {
-      moves_.Add(NULL);
-    }
+    moves_.EnsureLength(block_num + 1, nullptr);
 
-    if (moves_[block_num] == NULL) {
+    if (moves_[block_num] == nullptr) {
       moves_[block_num] = new (zone) ZoneGrowableArray<Move>(5);
     }
 
@@ -1247,14 +1249,15 @@
   instr->SetPassSpecificId(CompilerPass::kCSE, id);
 }
 
-DART_FORCE_INLINE static intptr_t GetPlaceId(const Instruction* instr) {
-  return instr->GetPassSpecificId(CompilerPass::kCSE);
-}
-
 DART_FORCE_INLINE static bool HasPlaceId(const Instruction* instr) {
   return instr->HasPassSpecificId(CompilerPass::kCSE);
 }
 
+DART_FORCE_INLINE static intptr_t GetPlaceId(const Instruction* instr) {
+  ASSERT(HasPlaceId(instr));
+  return instr->GetPassSpecificId(CompilerPass::kCSE);
+}
+
 enum CSEMode { kOptimizeLoads, kOptimizeStores };
 
 static AliasedSet* NumberPlaces(
@@ -1597,6 +1600,10 @@
 
  private:
   bool Optimize() {
+    // Initializer calls should be eliminated before ComputeInitialSets()
+    // in order to calculate kill sets more precisely.
+    OptimizeLazyInitialization();
+
     ComputeInitialSets();
     ComputeOutSets();
     ComputeOutValues();
@@ -1608,6 +1615,155 @@
     return forwarded_;
   }
 
+  bool CallsInitializer(Instruction* instr) {
+    if (auto* load_field = instr->AsLoadField()) {
+      return load_field->calls_initializer();
+    } else if (auto* load_static = instr->AsLoadStaticField()) {
+      return load_static->calls_initializer();
+    }
+    return false;
+  }
+
+  void ClearCallsInitializer(Instruction* instr) {
+    if (auto* load_field = instr->AsLoadField()) {
+      load_field->set_calls_initializer(false);
+    } else if (auto* load_static = instr->AsLoadStaticField()) {
+      load_static->set_calls_initializer(false);
+    } else {
+      UNREACHABLE();
+    }
+  }
+
+  // Returns true if given instruction stores the sentinel value.
+  // Such a store doesn't initialize corresponding field.
+  bool IsSentinelStore(Instruction* instr) {
+    Value* value = nullptr;
+    if (auto* store_field = instr->AsStoreInstanceField()) {
+      value = store_field->value();
+    } else if (auto* store_static = instr->AsStoreStaticField()) {
+      value = store_static->value();
+    }
+    return value != nullptr && value->BindsToConstant() &&
+           (value->BoundConstant().raw() == Object::sentinel().raw());
+  }
+
+  // This optimization pass tries to get rid of lazy initializer calls in
+  // LoadField and LoadStaticField instructions. The "initialized" state of
+  // places is propagated through the flow graph.
+  void OptimizeLazyInitialization() {
+    if (!FLAG_optimize_lazy_initializer_calls) {
+      return;
+    }
+
+    // 1) Populate 'gen' sets with places which are initialized at each basic
+    // block. Optimize lazy initializer calls within basic block and
+    // figure out if there are lazy intializer calls left to optimize.
+    bool has_lazy_initializer_calls = false;
+    for (BlockIterator block_it = graph_->reverse_postorder_iterator();
+         !block_it.Done(); block_it.Advance()) {
+      BlockEntryInstr* block = block_it.Current();
+      BitVector* gen = gen_[block->preorder_number()];
+
+      for (ForwardInstructionIterator instr_it(block); !instr_it.Done();
+           instr_it.Advance()) {
+        Instruction* instr = instr_it.Current();
+
+        bool is_load = false, is_store = false;
+        Place place(instr, &is_load, &is_store);
+
+        if (is_store && !IsSentinelStore(instr)) {
+          gen->Add(GetPlaceId(instr));
+        } else if (is_load) {
+          const auto place_id = GetPlaceId(instr);
+          if (CallsInitializer(instr)) {
+            if (gen->Contains(place_id)) {
+              ClearCallsInitializer(instr);
+            } else {
+              has_lazy_initializer_calls = true;
+            }
+          }
+          gen->Add(place_id);
+        }
+      }
+
+      // Spread initialized state through outgoing phis.
+      PhiPlaceMoves::MovesList phi_moves =
+          aliased_set_->phi_moves()->GetOutgoingMoves(block);
+      if (phi_moves != nullptr) {
+        for (intptr_t i = 0, n = phi_moves->length(); i < n; ++i) {
+          const intptr_t from = (*phi_moves)[i].from();
+          const intptr_t to = (*phi_moves)[i].to();
+          if ((from != to) && gen->Contains(from)) {
+            gen->Add(to);
+          }
+        }
+      }
+    }
+
+    if (has_lazy_initializer_calls) {
+      // 2) Propagate initialized state between blocks, calculating
+      // incoming initialized state. Iterate until reaching fixed point.
+      BitVector* temp = new (Z) BitVector(Z, aliased_set_->max_place_id());
+      bool changed = true;
+      while (changed) {
+        changed = false;
+
+        for (BlockIterator block_it = graph_->reverse_postorder_iterator();
+             !block_it.Done(); block_it.Advance()) {
+          BlockEntryInstr* block = block_it.Current();
+          BitVector* block_in = in_[block->preorder_number()];
+          BitVector* gen = gen_[block->preorder_number()];
+
+          // Incoming initialized state is the intersection of all
+          // outgoing initialized states of predecessors.
+          if (block->IsGraphEntry()) {
+            temp->Clear();
+          } else {
+            temp->SetAll();
+            ASSERT(block->PredecessorCount() > 0);
+            for (intptr_t i = 0, pred_count = block->PredecessorCount();
+                 i < pred_count; ++i) {
+              BlockEntryInstr* pred = block->PredecessorAt(i);
+              BitVector* pred_out = gen_[pred->preorder_number()];
+              temp->Intersect(pred_out);
+            }
+          }
+
+          if (!temp->Equals(*block_in)) {
+            ASSERT(block_in->SubsetOf(*temp));
+            block_in->AddAll(temp);
+            gen->AddAll(temp);
+            changed = true;
+          }
+        }
+      }
+
+      // 3) Single pass through basic blocks to optimize lazy
+      // initializer calls using calculated incoming inter-block
+      // initialized state.
+      for (BlockIterator block_it = graph_->reverse_postorder_iterator();
+           !block_it.Done(); block_it.Advance()) {
+        BlockEntryInstr* block = block_it.Current();
+        BitVector* block_in = in_[block->preorder_number()];
+
+        for (ForwardInstructionIterator instr_it(block); !instr_it.Done();
+             instr_it.Advance()) {
+          Instruction* instr = instr_it.Current();
+          if (CallsInitializer(instr) &&
+              block_in->Contains(GetPlaceId(instr))) {
+            ClearCallsInitializer(instr);
+          }
+        }
+      }
+    }
+
+    // Clear sets which are also used in the main part of load forwarding.
+    for (intptr_t i = 0, n = graph_->preorder().length(); i < n; ++i) {
+      gen_[i]->Clear();
+      in_[i]->Clear();
+    }
+  }
+
   // Only forward stores to normal arrays, float64, and simd arrays
   // to loads because other array stores (intXX/uintXX/float32)
   // may implicitly convert the value stored.
@@ -1733,7 +1889,6 @@
           // set because only those values that are in the GEN set
           // will ever be used.
           gen->RemoveAll(aliased_set_->aliased_by_effects());
-          continue;
         }
 
         Definition* defn = instr->AsDefinition();
diff --git a/runtime/vm/compiler/backend/redundancy_elimination_test.cc b/runtime/vm/compiler/backend/redundancy_elimination_test.cc
index 5027e27..21d67ff 100644
--- a/runtime/vm/compiler/backend/redundancy_elimination_test.cc
+++ b/runtime/vm/compiler/backend/redundancy_elimination_test.cc
@@ -17,6 +17,7 @@
 #include "vm/compiler/frontend/kernel_to_il.h"
 #include "vm/compiler/jit/jit_call_specializer.h"
 #include "vm/flags.h"
+#include "vm/kernel_isolate.h"
 #include "vm/log.h"
 #include "vm/object.h"
 #include "vm/parser.h"
@@ -955,7 +956,7 @@
   EXPECT_EQ(1, aft_stores);
 }
 
-ISOLATE_UNIT_TEST_CASE(CSE_RedundantInitStaticField) {
+ISOLATE_UNIT_TEST_CASE(LoadOptimizer_RedundantStaticFieldInitialization) {
   const char* kScript = R"(
     int getX() => 2;
     int x = getX();
@@ -967,7 +968,7 @@
     }
   )";
 
-  // Make sure InitStaticField is not removed because
+  // Make sure static field initialization is not removed because
   // field is already initialized.
   SetFlagScope<bool> sfs(&FLAG_fields_may_be_reset, true);
 
@@ -985,8 +986,8 @@
   RELEASE_ASSERT(cursor.TryMatch({
       kMatchAndMoveFunctionEntry,
       kMatchAndMoveCheckStackOverflow,
-      kMatchAndMoveInitStaticField,
       kMatchAndMoveLoadStaticField,
+      kMoveParallelMoves,
       kMatchAndMoveCheckSmi,
       kMoveParallelMoves,
       kMatchAndMoveBinarySmiOp,
@@ -995,4 +996,122 @@
   }));
 }
 
+ISOLATE_UNIT_TEST_CASE(LoadOptimizer_RedundantInitializerCallAfterIf) {
+  const char* kScript = R"(
+    int x = int.parse('1');
+
+    @pragma('vm:never-inline')
+    use(int arg) {}
+
+    foo(bool condition) {
+      if (condition) {
+        x = 3;
+      } else {
+        use(x);
+      }
+      use(x);
+    }
+
+    main() {
+      foo(true);
+    }
+  )";
+
+  // Make sure static field initialization is not removed because
+  // field is already initialized.
+  SetFlagScope<bool> sfs(&FLAG_fields_may_be_reset, true);
+
+  const auto& root_library = Library::Handle(LoadTestScript(kScript));
+  Invoke(root_library, "main");
+  const auto& function = Function::Handle(GetFunction(root_library, "foo"));
+  TestPipeline pipeline(function, CompilerPass::kJIT);
+  FlowGraph* flow_graph = pipeline.RunPasses({});
+  ASSERT(flow_graph != nullptr);
+
+  auto entry = flow_graph->graph_entry()->normal_entry();
+  EXPECT(entry != nullptr);
+
+  LoadStaticFieldInstr* load_static_after_if = nullptr;
+
+  ILMatcher cursor(flow_graph, entry);
+  RELEASE_ASSERT(cursor.TryMatch({
+      kMoveGlob,
+      kMatchAndMoveBranchTrue,
+      kMoveGlob,
+      kMatchAndMoveGoto,
+      kMatchAndMoveJoinEntry,
+      kMoveParallelMoves,
+      {kMatchAndMoveLoadStaticField, &load_static_after_if},
+      kMoveGlob,
+      kMatchReturn,
+  }));
+  EXPECT(!load_static_after_if->calls_initializer());
+}
+
+ISOLATE_UNIT_TEST_CASE(LoadOptimizer_RedundantInitializerCallInLoop) {
+  if (!TestCase::IsNNBD()) {
+    return;
+  }
+
+  const char* kScript = R"(
+    class A {
+      late int x = int.parse('1');
+      A? next;
+    }
+
+    @pragma('vm:never-inline')
+    use(int arg) {}
+
+    foo(A obj) {
+      use(obj.x);
+      for (;;) {
+        use(obj.x);
+        final next = obj.next;
+        if (next == null) {
+          break;
+        }
+        obj = next;
+        use(obj.x);
+      }
+    }
+
+    main() {
+      foo(A()..next = A());
+    }
+  )";
+
+  const auto& root_library = Library::Handle(LoadTestScript(kScript));
+  Invoke(root_library, "main");
+  const auto& function = Function::Handle(GetFunction(root_library, "foo"));
+  TestPipeline pipeline(function, CompilerPass::kJIT);
+  FlowGraph* flow_graph = pipeline.RunPasses({});
+  ASSERT(flow_graph != nullptr);
+
+  auto entry = flow_graph->graph_entry()->normal_entry();
+  EXPECT(entry != nullptr);
+
+  LoadFieldInstr* load_field_before_loop = nullptr;
+  LoadFieldInstr* load_field_in_loop1 = nullptr;
+  LoadFieldInstr* load_field_in_loop2 = nullptr;
+
+  ILMatcher cursor(flow_graph, entry);
+  RELEASE_ASSERT(cursor.TryMatch({
+      kMoveGlob,
+      {kMatchAndMoveLoadField, &load_field_before_loop},
+      kMoveGlob,
+      kMatchAndMoveGoto,
+      kMatchAndMoveJoinEntry,
+      kMoveGlob,
+      {kMatchAndMoveLoadField, &load_field_in_loop1},
+      kMoveGlob,
+      kMatchAndMoveBranchFalse,
+      kMoveGlob,
+      {kMatchAndMoveLoadField, &load_field_in_loop2},
+  }));
+
+  EXPECT(load_field_before_loop->calls_initializer());
+  EXPECT(!load_field_in_loop1->calls_initializer());
+  EXPECT(load_field_in_loop2->calls_initializer());
+}
+
 }  // namespace dart
diff --git a/runtime/vm/compiler/backend/type_propagator.cc b/runtime/vm/compiler/backend/type_propagator.cc
index 97efd0f..8d9253f 100644
--- a/runtime/vm/compiler/backend/type_propagator.cc
+++ b/runtime/vm/compiler/backend/type_propagator.cc
@@ -1400,7 +1400,7 @@
 }
 
 CompileType LoadStaticFieldInstr::ComputeType() const {
-  const Field& field = this->StaticField();
+  const Field& field = this->field();
   bool is_nullable = CompileType::kNullable;
   intptr_t cid = kIllegalCid;  // Abstract type is known, calculate cid lazily.
   AbstractType* abstract_type = &AbstractType::ZoneHandle(field.type());
diff --git a/runtime/vm/compiler/backend/type_propagator_test.cc b/runtime/vm/compiler/backend/type_propagator_test.cc
index b28c415..73d4014 100644
--- a/runtime/vm/compiler/backend/type_propagator_test.cc
+++ b/runtime/vm/compiler/backend/type_propagator_test.cc
@@ -399,7 +399,9 @@
 ISOLATE_UNIT_TEST_CASE(CompileType_CanBeSmi) {
   CompilerState S(thread, /*is_aot=*/false);
 
-  const auto& lib = Library::Handle(LoadTestScript(R"(
+  const char* late_tag = TestCase::LateTag();
+  auto script_chars = Utils::CStringUniquePtr(
+      OS::SCreate(nullptr, R"(
 import 'dart:async';
 
 class G<T> {}
@@ -409,42 +411,50 @@
         ComparableBound extends Comparable,
         StringBound extends String> {
   // Simple instantiated types.
-  @pragma('vm-test:can-be-smi') int t1;
-  @pragma('vm-test:can-be-smi') num t2;
-  @pragma('vm-test:can-be-smi') Object t3;
-  String t4;
+  @pragma('vm-test:can-be-smi') %s int t1;
+  @pragma('vm-test:can-be-smi') %s num t2;
+  @pragma('vm-test:can-be-smi') %s Object t3;
+  %s String t4;
 
   // Type parameters.
-  @pragma('vm-test:can-be-smi') NoBound tp1;
-  @pragma('vm-test:can-be-smi') NumBound tp2;
-  @pragma('vm-test:can-be-smi') ComparableBound tp3;
-  StringBound tp4;
+  @pragma('vm-test:can-be-smi') %s NoBound tp1;
+  @pragma('vm-test:can-be-smi') %s NumBound tp2;
+  @pragma('vm-test:can-be-smi') %s ComparableBound tp3;
+  %s StringBound tp4;
 
   // Comparable<T> instantiations.
-  @pragma('vm-test:can-be-smi') Comparable c1;
-  Comparable<String> c2;
-  @pragma('vm-test:can-be-smi') Comparable<num> c3;
-  Comparable<int> c4;  // int is not a subtype of Comparable<int>.
-  @pragma('vm-test:can-be-smi') Comparable<NoBound> c5;
-  @pragma('vm-test:can-be-smi') Comparable<NumBound> c6;
-  @pragma('vm-test:can-be-smi') Comparable<ComparableBound> c7;
-  Comparable<StringBound> c8;
+  @pragma('vm-test:can-be-smi') %s Comparable c1;
+  %s Comparable<String> c2;
+  @pragma('vm-test:can-be-smi') %s Comparable<num> c3;
+  %s Comparable<int> c4;  // int is not a subtype of Comparable<int>.
+  @pragma('vm-test:can-be-smi') %s Comparable<NoBound> c5;
+  @pragma('vm-test:can-be-smi') %s Comparable<NumBound> c6;
+  @pragma('vm-test:can-be-smi') %s Comparable<ComparableBound> c7;
+  %s Comparable<StringBound> c8;
 
   // FutureOr<T> instantiations.
-  @pragma('vm-test:can-be-smi') FutureOr fo1;
-  FutureOr<String> fo2;
-  @pragma('vm-test:can-be-smi') FutureOr<num> fo3;
-  @pragma('vm-test:can-be-smi') FutureOr<int> fo4;
-  @pragma('vm-test:can-be-smi') FutureOr<NoBound> fo5;
-  @pragma('vm-test:can-be-smi') FutureOr<NumBound> fo6;
-  @pragma('vm-test:can-be-smi') FutureOr<ComparableBound> fo7;
-  FutureOr<StringBound> fo8;
+  @pragma('vm-test:can-be-smi') %s FutureOr fo1;
+  %s FutureOr<String> fo2;
+  @pragma('vm-test:can-be-smi') %s FutureOr<num> fo3;
+  @pragma('vm-test:can-be-smi') %s FutureOr<int> fo4;
+  @pragma('vm-test:can-be-smi') %s FutureOr<NoBound> fo5;
+  @pragma('vm-test:can-be-smi') %s FutureOr<NumBound> fo6;
+  @pragma('vm-test:can-be-smi') %s FutureOr<ComparableBound> fo7;
+  %s FutureOr<StringBound> fo8;
 
   // Other generic classes.
-  G<int> g1;
-  G<NoBound> g2;
+  %s G<int> g1;
+  %s G<NoBound> g2;
 }
-)"));
+)",
+                  late_tag, late_tag, late_tag, late_tag, late_tag, late_tag,
+                  late_tag, late_tag, late_tag, late_tag, late_tag, late_tag,
+                  late_tag, late_tag, late_tag, late_tag, late_tag, late_tag,
+                  late_tag, late_tag, late_tag, late_tag, late_tag, late_tag,
+                  late_tag, late_tag),
+      std::free);
+
+  const auto& lib = Library::Handle(LoadTestScript(script_chars.get()));
 
   const auto& pragma_can_be_smi =
       String::Handle(Symbols::New(thread, "vm-test:can-be-smi"));
diff --git a/runtime/vm/compiler/backend/typed_data_aot_test.cc b/runtime/vm/compiler/backend/typed_data_aot_test.cc
index fd0870f..b1dd7c0 100644
--- a/runtime/vm/compiler/backend/typed_data_aot_test.cc
+++ b/runtime/vm/compiler/backend/typed_data_aot_test.cc
@@ -45,20 +45,36 @@
   LoadIndexedInstr* load_indexed = nullptr;
 
   ILMatcher cursor(flow_graph, entry);
-  RELEASE_ASSERT(cursor.TryMatch({
-      kMoveGlob,
-      {kMatchAndMoveCheckNull, &check_null},
-      {kMatchAndMoveLoadField, &load_field},
-      kMoveGlob,
-      kMatchAndMoveBranchTrue,
-      kMoveGlob,
-      {kMatchAndMoveGenericCheckBound, &bounds_check},
-      {kMatchAndMoveLoadUntagged, &load_untagged},
-      kMoveParallelMoves,
-      {kMatchAndMoveLoadIndexed, &load_indexed},
-      kMoveGlob,
-      kMatchReturn,
-  }));
+  if (Isolate::Current()->null_safety()) {
+    RELEASE_ASSERT(cursor.TryMatch({
+        kMoveGlob,
+        {kMatchAndMoveLoadField, &load_field},
+        kMoveGlob,
+        kMatchAndMoveBranchTrue,
+        kMoveGlob,
+        {kMatchAndMoveGenericCheckBound, &bounds_check},
+        {kMatchAndMoveLoadUntagged, &load_untagged},
+        kMoveParallelMoves,
+        {kMatchAndMoveLoadIndexed, &load_indexed},
+        kMoveGlob,
+        kMatchReturn,
+    }));
+  } else {
+    RELEASE_ASSERT(cursor.TryMatch({
+        kMoveGlob,
+        {kMatchAndMoveCheckNull, &check_null},
+        {kMatchAndMoveLoadField, &load_field},
+        kMoveGlob,
+        kMatchAndMoveBranchTrue,
+        kMoveGlob,
+        {kMatchAndMoveGenericCheckBound, &bounds_check},
+        {kMatchAndMoveLoadUntagged, &load_untagged},
+        kMoveParallelMoves,
+        {kMatchAndMoveLoadIndexed, &load_indexed},
+        kMoveGlob,
+        kMatchReturn,
+    }));
+  }
 
   EXPECT(load_field->InputAt(0)->definition()->IsParameter());
   EXPECT(bounds_check->InputAt(0)->definition() == load_field);
@@ -141,51 +157,6 @@
       }
       )";
 
-  std::initializer_list<MatchCode> expected_il = {
-      // Before loop
-      kMoveGlob,
-      kMatchAndMoveCheckNull,
-      kMatchAndMoveLoadField,
-      kMoveGlob,
-      kMatchAndMoveBranchTrue,
-
-      // Loop
-      kMoveGlob,
-      // Load 1
-      kMatchAndMoveGenericCheckBound,
-      kMoveGlob,
-      kMatchAndMoveLoadUntagged,
-      kMoveParallelMoves,
-      kMatchAndMoveLoadIndexed,
-      kMoveGlob,
-      // Load 2
-      kMatchAndMoveGenericCheckBound,
-      kMoveGlob,
-      kMatchAndMoveLoadUntagged,
-      kMoveParallelMoves,
-      kMatchAndMoveLoadIndexed,
-      kMoveGlob,
-      // Store 1
-      kMatchAndMoveGenericCheckBound,
-      kMoveGlob,
-      kMoveParallelMoves,
-      kMatchAndMoveLoadUntagged,
-      kMoveParallelMoves,
-      kMatchAndMoveStoreIndexed,
-      kMoveGlob,
-      // Store 2
-      kMoveParallelMoves,
-      kMatchAndMoveLoadUntagged,
-      kMoveParallelMoves,
-      kMatchAndMoveStoreIndexed,
-      kMoveGlob,
-
-      // Exit the loop.
-      kMatchAndMoveBranchFalse,
-      kMoveGlob,
-      kMatchReturn,
-  };
-
   char script_buffer[1024];
   char uri_buffer[1024];
   char function_name[1024];
@@ -209,7 +180,96 @@
 
     // Ensure the IL matches what we expect.
     ILMatcher cursor(flow_graph, entry);
-    EXPECT(cursor.TryMatch(expected_il));
+    if (Isolate::Current()->null_safety()) {
+      EXPECT(cursor.TryMatch({
+          // Before loop
+          kMoveGlob,
+          kMatchAndMoveLoadField,
+          kMoveGlob,
+          kMatchAndMoveBranchTrue,
+
+          // Loop
+          kMoveGlob,
+          // Load 1
+          kMatchAndMoveGenericCheckBound,
+          kMoveGlob,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveLoadIndexed,
+          kMoveGlob,
+          // Load 2
+          kMatchAndMoveGenericCheckBound,
+          kMoveGlob,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveLoadIndexed,
+          kMoveGlob,
+          // Store 1
+          kMatchAndMoveGenericCheckBound,
+          kMoveGlob,
+          kMoveParallelMoves,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveStoreIndexed,
+          kMoveGlob,
+          // Store 2
+          kMoveParallelMoves,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveStoreIndexed,
+          kMoveGlob,
+
+          // Exit the loop.
+          kMatchAndMoveBranchFalse,
+          kMoveGlob,
+          kMatchReturn,
+      }));
+    } else {
+      EXPECT(cursor.TryMatch({
+          // Before loop
+          kMoveGlob,
+          kMatchAndMoveCheckNull,
+          kMatchAndMoveLoadField,
+          kMoveGlob,
+          kMatchAndMoveBranchTrue,
+
+          // Loop
+          kMoveGlob,
+          // Load 1
+          kMatchAndMoveGenericCheckBound,
+          kMoveGlob,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveLoadIndexed,
+          kMoveGlob,
+          // Load 2
+          kMatchAndMoveGenericCheckBound,
+          kMoveGlob,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveLoadIndexed,
+          kMoveGlob,
+          // Store 1
+          kMatchAndMoveGenericCheckBound,
+          kMoveGlob,
+          kMoveParallelMoves,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveStoreIndexed,
+          kMoveGlob,
+          // Store 2
+          kMoveParallelMoves,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveStoreIndexed,
+          kMoveGlob,
+
+          // Exit the loop.
+          kMatchAndMoveBranchFalse,
+          kMoveGlob,
+          kMatchReturn,
+      }));
+    }
   };
 
   check_il("Uint8List");
@@ -235,40 +295,6 @@
       }
       )";
 
-  std::initializer_list<MatchCode> expected_il = {
-      // Receiver null check
-      kMoveGlob,
-      kMatchAndMoveCheckNull,
-
-      // Index null check
-      kMoveGlob,
-      kMatchAndMoveCheckNull,
-
-      // Value null check
-      kMoveGlob,
-      kMatchAndMoveCheckNull,
-
-      // LoadField length
-      kMoveGlob,
-      kMatchAndMoveLoadField,
-
-      // Bounds check
-      kMoveGlob,
-      kMatchAndMoveGenericCheckBound,
-
-      // Store value.
-      kMoveGlob,
-      kMatchAndMoveLoadUntagged,
-      kMoveParallelMoves,
-      kMatchAndMoveOptionalUnbox,
-      kMoveParallelMoves,
-      kMatchAndMoveStoreIndexed,
-
-      // Return
-      kMoveGlob,
-      kMatchReturn,
-  };
-
   char script_buffer[1024];
   char uri_buffer[1024];
   char function_name[1024];
@@ -299,7 +325,63 @@
 
     // Ensure the IL matches what we expect.
     ILMatcher cursor(flow_graph, entry, /*trace=*/true);
-    EXPECT(cursor.TryMatch(expected_il));
+    if (Isolate::Current()->null_safety()) {
+      EXPECT(cursor.TryMatch({
+          // LoadField length
+          kMoveGlob,
+          kMatchAndMoveLoadField,
+
+          // Bounds check
+          kMoveGlob,
+          kMatchAndMoveGenericCheckBound,
+
+          // Store value.
+          kMoveGlob,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveOptionalUnbox,
+          kMoveParallelMoves,
+          kMatchAndMoveStoreIndexed,
+
+          // Return
+          kMoveGlob,
+          kMatchReturn,
+      }));
+    } else {
+      EXPECT(cursor.TryMatch({
+          // Receiver null check
+          kMoveGlob,
+          kMatchAndMoveCheckNull,
+
+          // Index null check
+          kMoveGlob,
+          kMatchAndMoveCheckNull,
+
+          // Value null check
+          kMoveGlob,
+          kMatchAndMoveCheckNull,
+
+          // LoadField length
+          kMoveGlob,
+          kMatchAndMoveLoadField,
+
+          // Bounds check
+          kMoveGlob,
+          kMatchAndMoveGenericCheckBound,
+
+          // Store value.
+          kMoveGlob,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveOptionalUnbox,
+          kMoveParallelMoves,
+          kMatchAndMoveStoreIndexed,
+
+          // Return
+          kMoveGlob,
+          kMatchReturn,
+      }));
+    }
 
     // Compile the graph and attach the code.
     pipeline.CompileGraphAndAttachFunction();
@@ -348,7 +430,11 @@
       TypedData::Handle(TypedData::New(kTypedDataInt8ArrayCid, 16));
   const auto& int_value = Integer::Handle(Integer::New(42));
   const auto& float_value = Double::Handle(Double::New(4.2));
-  for (intptr_t stage = 0; stage <= kLastStage; ++stage) {
+  // With null safety nulls cannot be passed as non-nullable arguments, so
+  // skip all error stages and only run the last stage.
+  const intptr_t first_stage =
+      Isolate::Current()->null_safety() ? kLastStage : 0;
+  for (intptr_t stage = first_stage; stage <= kLastStage; ++stage) {
     run_test("Uint8List", "int", int8_list, int_value, stage);
     run_test("Int8List", "int", uint8_list, int_value, stage);
     run_test("Uint8ClampedList", "int", uint8c_list, int_value, stage);
diff --git a/runtime/vm/compiler/call_specializer.cc b/runtime/vm/compiler/call_specializer.cc
index 2d88440..ab58fa0 100644
--- a/runtime/vm/compiler/call_specializer.cc
+++ b/runtime/vm/compiler/call_specializer.cc
@@ -768,21 +768,24 @@
   ASSERT(field.is_instance());
   Definition* receiver = call->ArgumentAt(0);
 
-  if (field.NeedsInitializationCheckOnLoad()) {
-    InsertBefore(call,
-                 new (Z) InitInstanceFieldInstr(new (Z) Value(receiver), field,
-                                                call->deopt_id()),
-                 call->env(), FlowGraph::kEffect);
-  }
-
+  const bool calls_initializer = field.NeedsInitializationCheckOnLoad();
   const Slot& slot = Slot::Get(field, &flow_graph()->parsed_function());
-  LoadFieldInstr* load =
-      new (Z) LoadFieldInstr(new (Z) Value(receiver), slot, call->token_pos());
+  LoadFieldInstr* load = new (Z) LoadFieldInstr(
+      new (Z) Value(receiver), slot, call->token_pos(), calls_initializer,
+      calls_initializer ? call->deopt_id() : DeoptId::kNone);
 
-  // Discard the environment from the original instruction because the load
-  // can't deoptimize.
+  Environment* load_env = nullptr;
+  if (calls_initializer) {
+    // Drop getter argument from the environment as it is not
+    // pushed on the stack when initializer is called.
+    load_env =
+        call->env()->DeepCopy(Z, call->env()->Length() - call->ArgumentCount());
+  }
   call->RemoveEnvironment();
   ReplaceCall(call, load);
+  if (calls_initializer) {
+    load_env->DeepCopyTo(Z, load);
+  }
 
   if (load->slot().nullable_cid() != kDynamicCid) {
     // Reset value types if we know concrete cid.
diff --git a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
index 0e1da45..4deaede 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
@@ -426,13 +426,17 @@
   return Fragment(instr);
 }
 
-Fragment BaseFlowGraphBuilder::LoadField(const Field& field) {
-  return LoadNativeField(Slot::Get(MayCloneField(field), parsed_function_));
+Fragment BaseFlowGraphBuilder::LoadField(const Field& field,
+                                         bool calls_initializer) {
+  return LoadNativeField(Slot::Get(MayCloneField(field), parsed_function_),
+                         calls_initializer);
 }
 
-Fragment BaseFlowGraphBuilder::LoadNativeField(const Slot& native_field) {
-  LoadFieldInstr* load =
-      new (Z) LoadFieldInstr(Pop(), native_field, TokenPosition::kNoSource);
+Fragment BaseFlowGraphBuilder::LoadNativeField(const Slot& native_field,
+                                               bool calls_initializer) {
+  LoadFieldInstr* load = new (Z) LoadFieldInstr(
+      Pop(), native_field, TokenPosition::kNoSource, calls_initializer,
+      calls_initializer ? GetNextDeoptId() : DeoptId::kNone);
   Push(load);
   return Fragment(load);
 }
@@ -538,9 +542,11 @@
   return instructions;
 }
 
-Fragment BaseFlowGraphBuilder::LoadStaticField(const Field& field) {
-  LoadStaticFieldInstr* load =
-      new (Z) LoadStaticFieldInstr(field, TokenPosition::kNoSource);
+Fragment BaseFlowGraphBuilder::LoadStaticField(const Field& field,
+                                               bool calls_initializer) {
+  LoadStaticFieldInstr* load = new (Z) LoadStaticFieldInstr(
+      field, TokenPosition::kNoSource, calls_initializer,
+      calls_initializer ? GetNextDeoptId() : DeoptId::kNone);
   Push(load);
   return Fragment(load);
 }
diff --git a/runtime/vm/compiler/frontend/base_flow_graph_builder.h b/runtime/vm/compiler/frontend/base_flow_graph_builder.h
index 846ba73..b40e7db 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.h
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.h
@@ -157,8 +157,9 @@
         exit_collector_(exit_collector),
         inlining_unchecked_entry_(inlining_unchecked_entry) {}
 
-  Fragment LoadField(const Field& field);
-  Fragment LoadNativeField(const Slot& native_field);
+  Fragment LoadField(const Field& field, bool calls_initializer);
+  Fragment LoadNativeField(const Slot& native_field,
+                           bool calls_initializer = false);
   Fragment LoadIndexed(intptr_t index_scale);
   // Takes a [class_id] valid for StoreIndexed.
   Fragment LoadIndexedTypedData(classid_t class_id,
@@ -198,7 +199,7 @@
   Fragment StoreInstanceFieldGuarded(const Field& field,
                                      StoreInstanceFieldInstr::Kind kind =
                                          StoreInstanceFieldInstr::Kind::kOther);
-  Fragment LoadStaticField(const Field& field);
+  Fragment LoadStaticField(const Field& field, bool calls_initializer);
   Fragment RedefinitionWithType(const AbstractType& type);
   Fragment ReachabilityFence();
   Fragment StoreStaticField(TokenPosition position, const Field& field);
diff --git a/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc b/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc
index b4079a9..d1e60cd 100644
--- a/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc
@@ -1208,7 +1208,7 @@
     // Loads from _Closure fields are lower-level.
     code_ += B->LoadNativeField(ClosureSlotByField(field));
   } else {
-    code_ += B->LoadField(field);
+    code_ += B->LoadField(field, /*calls_initializer=*/false);
   }
 }
 
@@ -1319,7 +1319,7 @@
     code_ += B->Constant(value);
     return;
   }
-  code_ += B->LoadStaticField(field);
+  code_ += B->LoadStaticField(field, /*calls_initializer=*/false);
 }
 
 void BytecodeFlowGraphBuilder::BuildStoreIndexedTOS() {
diff --git a/runtime/vm/compiler/frontend/flow_graph_builder.cc b/runtime/vm/compiler/frontend/flow_graph_builder.cc
index 4a13620..95fc854 100644
--- a/runtime/vm/compiler/frontend/flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/flow_graph_builder.cc
@@ -273,9 +273,9 @@
     call_->previous()->AppendInstruction(branch);
     call_block->set_last_instruction(branch);
 
-    // Replace uses of the return value with null to maintain valid
-    // SSA form - even though the rest of the caller is unreachable.
-    call_->ReplaceUsesWith(caller_graph_->constant_null());
+    // Replace uses of the return value with sentinel constant to maintain
+    // valid SSA form - even though the rest of the caller is unreachable.
+    call_->ReplaceUsesWith(caller_graph_->GetConstant(Object::sentinel()));
 
     // Update dominator tree.
     for (intptr_t i = 0, n = callee_entry->dominated_blocks().length(); i < n;
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 121aff8..aba146c 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -1698,8 +1698,9 @@
   return flow_graph_builder_->IntConstant(value);
 }
 
-Fragment StreamingFlowGraphBuilder::LoadStaticField(const Field& field) {
-  return flow_graph_builder_->LoadStaticField(field);
+Fragment StreamingFlowGraphBuilder::LoadStaticField(const Field& field,
+                                                    bool calls_initializer) {
+  return flow_graph_builder_->LoadStaticField(field, calls_initializer);
 }
 
 Fragment StreamingFlowGraphBuilder::RedefinitionWithType(
@@ -2780,7 +2781,7 @@
         if (result_type.IsConstant()) {
           return Constant(result_type.constant_value);
         }
-        return LoadStaticField(field);
+        return LoadStaticField(field, /*calls_initializer=*/false);
       }
     }
   } else {
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index d694a83..2b1ba41 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -169,7 +169,7 @@
   Fragment ThrowNoSuchMethodError(const Function& target);
   Fragment Constant(const Object& value);
   Fragment IntConstant(int64_t value);
-  Fragment LoadStaticField(const Field& field);
+  Fragment LoadStaticField(const Field& field, bool calls_initializer);
   Fragment RedefinitionWithType(const AbstractType& type);
   Fragment CheckNull(TokenPosition position,
                      LocalVariable* receiver,
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index c640174..08c0227 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -469,10 +469,10 @@
   if (is_final) {
     // Check whether the field has been initialized already.
     if (is_static) {
-      instructions += LoadStaticField(field);
+      instructions += LoadStaticField(field, /*calls_initializer=*/false);
     } else {
       instructions += LoadLocal(instance);
-      instructions += LoadField(field);
+      instructions += LoadField(field, /*calls_initializer=*/false);
     }
     instructions += Constant(Object::sentinel());
     instructions += BranchIfStrictEqual(&is_uninitialized, &is_initialized);
@@ -508,20 +508,6 @@
   return instructions;
 }
 
-Fragment FlowGraphBuilder::InitInstanceField(const Field& field) {
-  ASSERT(field.is_instance());
-  ASSERT(field.NeedsInitializationCheckOnLoad());
-  InitInstanceFieldInstr* init = new (Z)
-      InitInstanceFieldInstr(Pop(), MayCloneField(field), GetNextDeoptId());
-  return Fragment(init);
-}
-
-Fragment FlowGraphBuilder::InitStaticField(const Field& field) {
-  InitStaticFieldInstr* init =
-      new (Z) InitStaticFieldInstr(MayCloneField(field), GetNextDeoptId());
-  return Fragment(init);
-}
-
 Fragment FlowGraphBuilder::NativeCall(const String* name,
                                       const Function* function) {
   InlineBailout("kernel::FlowGraphBuilder::NativeCall");
@@ -2577,13 +2563,9 @@
   } else if (is_method) {
     ASSERT(!field.needs_load_guard()
                 NOT_IN_PRODUCT(|| I->HasAttemptedReload()));
-    if (field.NeedsInitializationCheckOnLoad()) {
-      body += LoadLocal(parsed_function_->ParameterVariable(0));
-      body += InitInstanceField(field);
-    }
-
     body += LoadLocal(parsed_function_->ParameterVariable(0));
-    body += LoadField(field);
+    body += LoadField(
+        field, /*calls_initializer=*/field.NeedsInitializationCheckOnLoad());
     if (field.needs_load_guard()) {
 #if defined(PRODUCT)
       UNREACHABLE();
@@ -2593,12 +2575,6 @@
 #endif
     }
   } else if (field.is_const()) {
-    // If the parser needs to know the value of an uninitialized constant field
-    // it will set the value to the transition sentinel (used to detect circular
-    // initialization) and then call the implicit getter.  Thus, the getter
-    // cannot contain the InitStaticField instruction that normal static getters
-    // contain because it would detect spurious circular initialization when it
-    // checks for the transition sentinel.
     ASSERT(!field.IsUninitialized());
     body += Constant(Instance::ZoneHandle(Z, field.StaticValue()));
   } else {
@@ -2611,8 +2587,7 @@
     // to make sure they are already initialized.
     ASSERT(field.has_nontrivial_initializer() ||
            (field.is_late() && !field.has_initializer()));
-    body += InitStaticField(field);
-    body += LoadStaticField(field);
+    body += LoadStaticField(field, /*calls_initializer=*/true);
     if (field.needs_load_guard()) {
 #if defined(PRODUCT)
       UNREACHABLE();
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.h b/runtime/vm/compiler/frontend/kernel_to_il.h
index fbee853..3bf1230 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.h
+++ b/runtime/vm/compiler/frontend/kernel_to_il.h
@@ -139,8 +139,6 @@
   Fragment StoreLateField(const Field& field,
                           LocalVariable* instance,
                           LocalVariable* setter_value);
-  Fragment InitInstanceField(const Field& field);
-  Fragment InitStaticField(const Field& field);
   Fragment NativeCall(const String* name, const Function* function);
   Fragment Return(
       TokenPosition position,
diff --git a/runtime/vm/compiler/stub_code_compiler.cc b/runtime/vm/compiler/stub_code_compiler.cc
index bb23702..8f96b82 100644
--- a/runtime/vm/compiler/stub_code_compiler.cc
+++ b/runtime/vm/compiler/stub_code_compiler.cc
@@ -19,43 +19,46 @@
 
 void StubCodeCompiler::GenerateInitStaticFieldStub(Assembler* assembler) {
   __ EnterStubFrame();
-  __ PushObject(NullObject());  // Make room for (unused) result.
+  __ PushObject(NullObject());  // Make room for result.
   __ PushRegister(InitStaticFieldABI::kFieldReg);
   __ CallRuntime(kInitStaticFieldRuntimeEntry, /*argument_count=*/1);
-  __ Drop(2);
+  __ Drop(1);
+  __ PopRegister(InitStaticFieldABI::kResultReg);
   __ LeaveStubFrame();
   __ Ret();
 }
 
 void StubCodeCompiler::GenerateInitInstanceFieldStub(Assembler* assembler) {
   __ EnterStubFrame();
-  __ PushObject(NullObject());  // Make room for (unused) result.
+  __ PushObject(NullObject());  // Make room for result.
   __ PushRegister(InitInstanceFieldABI::kInstanceReg);
   __ PushRegister(InitInstanceFieldABI::kFieldReg);
   __ CallRuntime(kInitInstanceFieldRuntimeEntry, /*argument_count=*/2);
-  __ Drop(3);
+  __ Drop(2);
+  __ PopRegister(InitInstanceFieldABI::kResultReg);
   __ LeaveStubFrame();
   __ Ret();
 }
 
 void StubCodeCompiler::GenerateInitLateInstanceFieldStub(Assembler* assembler,
                                                          bool is_final) {
-  __ EnterStubFrame();
-  // Save for later.
-  __ PushRegisterPair(InitInstanceFieldABI::kInstanceReg,
-                      InitInstanceFieldABI::kFieldReg);
-
-  // Call initializer function.
-  __ PushRegister(InitInstanceFieldABI::kInstanceReg);
-
   const Register kFunctionReg = InitLateInstanceFieldInternalRegs::kFunctionReg;
-  const Register kInitializerResultReg =
-      InitLateInstanceFieldInternalRegs::kInitializerResultReg;
-  const Register kInstanceReg = InitLateInstanceFieldInternalRegs::kInstanceReg;
-  const Register kFieldReg = InitLateInstanceFieldInternalRegs::kFieldReg;
+  const Register kInstanceReg = InitInstanceFieldABI::kInstanceReg;
+  const Register kFieldReg = InitInstanceFieldABI::kFieldReg;
   const Register kAddressReg = InitLateInstanceFieldInternalRegs::kAddressReg;
   const Register kScratchReg = InitLateInstanceFieldInternalRegs::kScratchReg;
 
+  __ EnterStubFrame();
+  // Save for later.
+  __ PushRegisterPair(kInstanceReg, kFieldReg);
+
+  // Call initializer function.
+  __ PushRegister(kInstanceReg);
+
+  static_assert(
+      InitInstanceFieldABI::kResultReg == CallingConventions::kReturnReg,
+      "Result is a return value from initializer");
+
   __ LoadField(kFunctionReg,
                FieldAddress(InitInstanceFieldABI::kFieldReg,
                             target::Field::initializer_function_offset()));
@@ -87,8 +90,15 @@
     __ BranchIf(NOT_EQUAL, &throw_exception);
   }
 
+#if defined(TARGET_ARCH_IA32)
+  // On IA32 StoreIntoObject clobbers value register, so scratch
+  // register is used in StoreIntoObject to preserve kResultReg.
+  __ MoveRegister(kScratchReg, InitInstanceFieldABI::kResultReg);
+  __ StoreIntoObject(kInstanceReg, Address(kAddressReg, 0), kScratchReg);
+#else
   __ StoreIntoObject(kInstanceReg, Address(kAddressReg, 0),
-                     kInitializerResultReg);
+                     InitInstanceFieldABI::kResultReg);
+#endif  // defined(TARGET_ARCH_IA32)
 
   __ LeaveStubFrame();
   __ Ret();
diff --git a/runtime/vm/compiler/stub_code_compiler_x64.cc b/runtime/vm/compiler/stub_code_compiler_x64.cc
index a65b7e4..a11128f 100644
--- a/runtime/vm/compiler/stub_code_compiler_x64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_x64.cc
@@ -124,7 +124,7 @@
           Immediate(1 * target::kWordSize));  // Retval is next to 1st argument.
   __ movq(Address(RSP, retval_offset),
           RAX);  // Set retval in target::NativeArguments.
-#if defined(_WIN64)
+#if defined(TARGET_OS_WINDOWS)
   ASSERT(target::NativeArguments::StructSize() >
          CallingConventions::kRegisterTransferLimit);
   __ movq(CallingConventions::kArg1Reg, RSP);
@@ -542,7 +542,7 @@
 void StubCodeCompiler::GeneratePrintStopMessageStub(Assembler* assembler) {
   __ EnterCallRuntimeFrame(0);
 // Call the runtime leaf function. RDI already contains the parameter.
-#if defined(_WIN64)
+#if defined(TARGET_OS_WINDOWS)
   __ movq(CallingConventions::kArg1Reg, RDI);
 #endif
   __ CallRuntime(kPrintStopMessageRuntimeEntry, 1);
@@ -2810,7 +2810,7 @@
   __ movq(CallingConventions::kArg3Reg, R11);         // Negative argc.
   __ movq(CallingConventions::kArg4Reg, R12);         // Argv.
 
-#if defined(_WIN64)
+#if defined(TARGET_OS_WINDOWS)
   __ movq(Address(RSP, 0 * target::kWordSize), THR);  // Thread.
 #else
   __ movq(CallingConventions::kArg5Reg, THR);  // Thread.
diff --git a/runtime/vm/compiler/write_barrier_elimination_test.cc b/runtime/vm/compiler/write_barrier_elimination_test.cc
index 53b16e8..88d4e7c 100644
--- a/runtime/vm/compiler/write_barrier_elimination_test.cc
+++ b/runtime/vm/compiler/write_barrier_elimination_test.cc
@@ -13,9 +13,8 @@
 
 ISOLATE_UNIT_TEST_CASE(IRTest_WriteBarrierElimination_JoinSuccessors) {
   DEBUG_ONLY(FLAG_trace_write_barrier_elimination = true);
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = null_safety ? "?" : "";
-  const char* nullAssertTag = null_safety ? "!" : "";
+  const char* nullable_tag = TestCase::NullableTag();
+  const char* null_assert_tag = TestCase::NullAssertTag();
 
   // This is a regression test for a bug where we were using
   // JoinEntry::SuccessorCount() to determine the number of outgoing blocks
@@ -48,8 +47,8 @@
 
       main() { foo(10); }
       )",
-      nullableTag, nullableTag, nullableTag, nullableTag,
-      nullableTag, nullAssertTag), std::free);
+      nullable_tag, nullable_tag, nullable_tag, nullable_tag,
+      nullable_tag, null_assert_tag), std::free);
   // clang-format on
 
   const auto& root_library = Library::Handle(LoadTestScript(kScript.get()));
@@ -84,8 +83,6 @@
 
 ISOLATE_UNIT_TEST_CASE(IRTest_WriteBarrierElimination_AtLeastOnce) {
   DEBUG_ONLY(FLAG_trace_write_barrier_elimination = true);
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
   // Ensure that we process every block at least once during the analysis
   // phase so that the out-sets will be initialized. If we don't process
   // each block at least once, the store "c.next = n" will be marked
@@ -111,7 +108,7 @@
       }
 
       main() { foo(0); foo(10); }
-      )", lateTag), std::free);
+      )", TestCase::LateTag()), std::free);
   // clang-format on
   const auto& root_library = Library::Handle(LoadTestScript(kScript.get()));
 
@@ -141,10 +138,7 @@
 
 ISOLATE_UNIT_TEST_CASE(IRTest_WriteBarrierElimination_Arrays) {
   DEBUG_ONLY(FLAG_trace_write_barrier_elimination = true);
-
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = null_safety ? "?" : "";
-  const char* lateTag = null_safety ? "late" : "";
+  const char* nullable_tag = TestCase::NullableTag();
 
   // Test that array allocations are not considered usable after a
   // may-trigger-GC instruction (in this case CheckStackOverflow), unlike
@@ -173,7 +167,7 @@
       }
 
       main() { foo(10); }
-      )", lateTag, nullableTag, nullableTag), std::free);
+      )", TestCase::LateTag(), nullable_tag, nullable_tag), std::free);
   // clang-format on
 
   const auto& root_library = Library::Handle(LoadTestScript(kScript.get()));
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index 04b3f76..7a34b6e 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.h
@@ -348,20 +348,19 @@
 // ABI for InitStaticFieldStub.
 struct InitStaticFieldABI {
   static const Register kFieldReg = R0;
+  static const Register kResultReg = R0;
 };
 
 // ABI for InitInstanceFieldStub.
 struct InitInstanceFieldABI {
-  static const Register kInstanceReg = R0;
-  static const Register kFieldReg = R1;
+  static const Register kInstanceReg = R1;
+  static const Register kFieldReg = R2;
+  static const Register kResultReg = R0;
 };
 
 // Registers used inside the implementation of InitLateInstanceFieldStub.
 struct InitLateInstanceFieldInternalRegs {
   static const Register kFunctionReg = R0;
-  static const Register kInitializerResultReg = R0;
-  static const Register kInstanceReg = R1;
-  static const Register kFieldReg = R2;
   static const Register kAddressReg = R3;
   static const Register kScratchReg = R4;
 };
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index 1ce41e1..1568201 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -180,20 +180,19 @@
 // ABI for InitStaticFieldStub.
 struct InitStaticFieldABI {
   static const Register kFieldReg = R0;
+  static const Register kResultReg = R0;
 };
 
 // ABI for InitInstanceFieldStub.
 struct InitInstanceFieldABI {
-  static const Register kInstanceReg = R0;
-  static const Register kFieldReg = R1;
+  static const Register kInstanceReg = R1;
+  static const Register kFieldReg = R2;
+  static const Register kResultReg = R0;
 };
 
 // Registers used inside the implementation of InitLateInstanceFieldStub.
 struct InitLateInstanceFieldInternalRegs {
   static const Register kFunctionReg = R0;
-  static const Register kInitializerResultReg = R0;
-  static const Register kInstanceReg = R1;
-  static const Register kFieldReg = R2;
   static const Register kAddressReg = R3;
   static const Register kScratchReg = R4;
 };
diff --git a/runtime/vm/constants_ia32.h b/runtime/vm/constants_ia32.h
index cfa49ee..ff82b2f 100644
--- a/runtime/vm/constants_ia32.h
+++ b/runtime/vm/constants_ia32.h
@@ -119,20 +119,19 @@
 // ABI for InitStaticFieldStub.
 struct InitStaticFieldABI {
   static const Register kFieldReg = EAX;
+  static const Register kResultReg = EAX;
 };
 
 // ABI for InitInstanceFieldStub.
 struct InitInstanceFieldABI {
-  static const Register kInstanceReg = EAX;
-  static const Register kFieldReg = EBX;
+  static const Register kInstanceReg = EBX;
+  static const Register kFieldReg = EDX;
+  static const Register kResultReg = EAX;
 };
 
 // Registers used inside the implementation of InitLateInstanceFieldStub.
 struct InitLateInstanceFieldInternalRegs {
   static const Register kFunctionReg = EAX;
-  static const Register kInitializerResultReg = EAX;
-  static const Register kInstanceReg = EBX;
-  static const Register kFieldReg = EDX;
   static const Register kAddressReg = ECX;
   static const Register kScratchReg = EDI;
 };
diff --git a/runtime/vm/constants_x64.cc b/runtime/vm/constants_x64.cc
index afd0a97..24e9abc 100644
--- a/runtime/vm/constants_x64.cc
+++ b/runtime/vm/constants_x64.cc
@@ -18,7 +18,7 @@
     "xmm0", "xmm1", "xmm2",  "xmm3",  "xmm4",  "xmm5",  "xmm6",  "xmm7",
     "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15"};
 
-#if defined(_WIN64)
+#if defined(TARGET_OS_WINDOWS)
 const Register CallingConventions::ArgumentRegisters[] = {
     CallingConventions::kArg1Reg, CallingConventions::kArg2Reg,
     CallingConventions::kArg3Reg, CallingConventions::kArg4Reg};
diff --git a/runtime/vm/constants_x64.h b/runtime/vm/constants_x64.h
index 7f99877..84d27c1 100644
--- a/runtime/vm/constants_x64.h
+++ b/runtime/vm/constants_x64.h
@@ -161,20 +161,19 @@
 // ABI for InitStaticFieldStub.
 struct InitStaticFieldABI {
   static const Register kFieldReg = RAX;
+  static const Register kResultReg = RAX;
 };
 
 // ABI for InitInstanceFieldStub.
 struct InitInstanceFieldABI {
-  static const Register kInstanceReg = RAX;
-  static const Register kFieldReg = RBX;
+  static const Register kInstanceReg = RBX;
+  static const Register kFieldReg = RDX;
+  static const Register kResultReg = RAX;
 };
 
 // Registers used inside the implementation of InitLateInstanceFieldStub.
 struct InitLateInstanceFieldInternalRegs {
   static const Register kFunctionReg = RAX;
-  static const Register kInitializerResultReg = RAX;
-  static const Register kInstanceReg = RBX;
-  static const Register kFieldReg = RDX;
   static const Register kAddressReg = RCX;
   static const Register kScratchReg = RSI;
 };
@@ -245,7 +244,7 @@
 
 class CallingConventions {
  public:
-#if defined(_WIN64)
+#if defined(TARGET_OS_WINDOWS)
   static const Register kArg1Reg = RCX;
   static const Register kArg2Reg = RDX;
   static const Register kArg3Reg = R8;
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index 979bd2b..06afb21 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -617,7 +617,12 @@
   Timeline::Cleanup();
 #endif
   Zone::Cleanup();
-  OSThread::Cleanup();
+  // Delete the current thread's TLS and set it's TLS to null.
+  // If it is the last thread then the destructor would call
+  // OSThread::Cleanup.
+  OSThread* os_thread = OSThread::Current();
+  OSThread::SetCurrent(NULL);
+  delete os_thread;
   if (FLAG_trace_shutdown) {
     OS::PrintErr("[+%" Pd64 "ms] SHUTDOWN: Deleted os_thread\n",
                  UptimeMillis());
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index f8467df..75e22e7 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -1000,6 +1000,18 @@
                                    external_allocation_size, callback);
 }
 
+DART_EXPORT void Dart_UpdateExternalSize(Dart_WeakPersistentHandle object,
+                                         intptr_t external_size) {
+  IsolateGroup* isolate_group = IsolateGroup::Current();
+  CHECK_ISOLATE_GROUP(isolate_group);
+  NoSafepointScope no_safepoint_scope;
+  ApiState* state = isolate_group->api_state();
+  ASSERT(state != NULL);
+  ASSERT(state->IsActiveWeakPersistentHandle(object));
+  auto weak_ref = FinalizablePersistentHandle::Cast(object);
+  weak_ref->UpdateExternalSize(external_size, isolate_group);
+}
+
 DART_EXPORT void Dart_DeletePersistentHandle(Dart_PersistentHandle object) {
   IsolateGroup* isolate_group = IsolateGroup::Current();
   CHECK_ISOLATE_GROUP(isolate_group);
@@ -1023,7 +1035,7 @@
   ASSERT(state != NULL);
   ASSERT(state->IsActiveWeakPersistentHandle(object));
   auto weak_ref = FinalizablePersistentHandle::Cast(object);
-  weak_ref->EnsureFreeExternal(isolate_group);
+  weak_ref->EnsureFreedExternal(isolate_group);
   state->FreeWeakPersistentHandle(weak_ref);
 }
 
@@ -5999,37 +6011,6 @@
   return result;
 }
 
-DART_EXPORT Dart_KernelCompilationResult
-Dart_CompileSourcesToKernel(const char* script_uri,
-                            const uint8_t* platform_kernel,
-                            intptr_t platform_kernel_size,
-                            int source_files_count,
-                            Dart_SourceFile sources[],
-                            bool incremental_compile,
-                            const char* package_config,
-                            const char* multiroot_filepaths,
-                            const char* multiroot_scheme) {
-  Dart_KernelCompilationResult result = {};
-#if defined(DART_PRECOMPILED_RUNTIME)
-  result.status = Dart_KernelCompilationStatus_Unknown;
-  result.error = strdup("Dart_CompileSourcesToKernel is unsupported.");
-#else
-  result = KernelIsolate::CompileToKernel(
-      script_uri, platform_kernel, platform_kernel_size, source_files_count,
-      sources, incremental_compile, package_config, multiroot_filepaths,
-      multiroot_scheme);
-  if (result.status == Dart_KernelCompilationStatus_Ok) {
-    if (KernelIsolate::AcceptCompilation().status !=
-        Dart_KernelCompilationStatus_Ok) {
-      FATAL(
-          "An error occurred in the CFE while accepting the most recent"
-          " compilation results.");
-    }
-  }
-#endif
-  return result;
-}
-
 DART_EXPORT Dart_KernelCompilationResult Dart_KernelListDependencies() {
   Dart_KernelCompilationResult result = {};
 #if defined(DART_PRECOMPILED_RUNTIME)
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 6b501e6..e329d2c 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -3512,6 +3512,125 @@
   }
 }
 
+#define EXAMPLE_RESOURCE_NATIVE_LIST(V)                                        \
+  V(ExampleResource_Allocate, 1)                                               \
+  V(ExampleResource_Use, 1)                                                    \
+  V(ExampleResource_Dispose, 1)
+
+EXAMPLE_RESOURCE_NATIVE_LIST(DECLARE_FUNCTION);
+
+static struct NativeEntries {
+  const char* name_;
+  Dart_NativeFunction function_;
+  int argument_count_;
+} ExampleResourceEntries[] = {EXAMPLE_RESOURCE_NATIVE_LIST(REGISTER_FUNCTION)};
+
+static Dart_NativeFunction ExampleResourceNativeResolver(
+    Dart_Handle name,
+    int argument_count,
+    bool* auto_setup_scope) {
+  const char* function_name = nullptr;
+  Dart_Handle result = Dart_StringToCString(name, &function_name);
+  ASSERT(!Dart_IsError(result));
+  ASSERT(function_name != nullptr);
+  ASSERT(auto_setup_scope != nullptr);
+  *auto_setup_scope = true;
+  int num_entries =
+      sizeof(ExampleResourceEntries) / sizeof(struct NativeEntries);
+  for (int i = 0; i < num_entries; i++) {
+    struct NativeEntries* entry = &(ExampleResourceEntries[i]);
+    if ((strcmp(function_name, entry->name_) == 0) &&
+        (entry->argument_count_ == argument_count)) {
+      return reinterpret_cast<Dart_NativeFunction>(entry->function_);
+    }
+  }
+  return nullptr;
+}
+
+struct ExampleResource {
+  Dart_WeakPersistentHandle self;
+  void* lots_of_memory;
+};
+
+void ExampleResourceFinalizer(void* isolate_peer,
+                              Dart_WeakPersistentHandle handle,
+                              void* peer) {
+  ExampleResource* resource = reinterpret_cast<ExampleResource*>(peer);
+  free(resource->lots_of_memory);
+  delete resource;
+}
+
+void FUNCTION_NAME(ExampleResource_Allocate)(Dart_NativeArguments native_args) {
+  Dart_Handle receiver = Dart_GetNativeArgument(native_args, 0);
+  intptr_t external_size = 10 * MB;
+  ExampleResource* resource = new ExampleResource();
+  resource->lots_of_memory = malloc(external_size);
+  resource->self = Dart_NewWeakPersistentHandle(
+      receiver, resource, external_size, ExampleResourceFinalizer);
+  EXPECT_VALID(Dart_SetNativeInstanceField(
+      receiver, 0, reinterpret_cast<intptr_t>(resource)));
+  // Some pretend resource initialization.
+  *reinterpret_cast<uint8_t*>(resource->lots_of_memory) = 123;
+}
+
+void FUNCTION_NAME(ExampleResource_Use)(Dart_NativeArguments native_args) {
+  Dart_Handle receiver = Dart_GetNativeArgument(native_args, 0);
+  intptr_t native_field = 0;
+  EXPECT_VALID(Dart_GetNativeInstanceField(receiver, 0, &native_field));
+  ExampleResource* resource = reinterpret_cast<ExampleResource*>(native_field);
+  if (resource->lots_of_memory == nullptr) {
+    Dart_ThrowException(Dart_NewStringFromCString(
+        "Attempt to use a disposed ExampleResource!"));
+    UNREACHABLE();
+  } else {
+    // Some pretend resource use.
+    EXPECT_EQ(123, *reinterpret_cast<uint8_t*>(resource->lots_of_memory));
+  }
+}
+
+void FUNCTION_NAME(ExampleResource_Dispose)(Dart_NativeArguments native_args) {
+  Dart_Handle receiver = Dart_GetNativeArgument(native_args, 0);
+  intptr_t native_field = 0;
+  EXPECT_VALID(Dart_GetNativeInstanceField(receiver, 0, &native_field));
+  ExampleResource* resource = reinterpret_cast<ExampleResource*>(native_field);
+  if (resource->lots_of_memory != nullptr) {
+    free(resource->lots_of_memory);
+    resource->lots_of_memory = nullptr;
+    Dart_UpdateExternalSize(resource->self, 0);
+  }
+}
+
+TEST_CASE(DartAPI_WeakPersistentHandleUpdateSize) {
+  const char* kScriptChars = R"(
+    import "dart:nativewrappers";
+    class ExampleResource extends NativeFieldWrapperClass1 {
+      ExampleResource() { _allocate(); }
+      void _allocate() native "ExampleResource_Allocate";
+      void use() native "ExampleResource_Use";
+      void dispose() native "ExampleResource_Dispose";
+    }
+    main() {
+      var res = new ExampleResource();
+      res.use();
+      res.dispose();
+      res.dispose();  // Idempotent
+      bool threw = false;
+      try {
+        res.use();
+      } catch (_) {
+        threw = true;
+      }
+      if (!threw) {
+        throw "Exception expected";
+      }
+    }
+  )";
+
+  Dart_Handle lib =
+      TestCase::LoadTestScript(kScriptChars, ExampleResourceNativeResolver);
+  EXPECT_VALID(Dart_Invoke(lib, NewString("main"), 0, NULL));
+}
+
 static Dart_WeakPersistentHandle weak1 = NULL;
 static Dart_WeakPersistentHandle weak2 = NULL;
 static Dart_WeakPersistentHandle weak3 = NULL;
@@ -4034,7 +4153,7 @@
   EXPECT_VALID(double_type);
   EXPECT_VALID(Dart_ListSetAt(type_args, 1, double_type));
   Dart_Handle myclass0_type =
-      (FLAG_null_safety == kNullSafetyOptionStrong)
+      TestCase::IsNNBD()
           ? Dart_GetNonNullableType(lib, NewString("MyClass0"), 2, &type_args)
           : Dart_GetType(lib, NewString("MyClass0"), 2, &type_args);
   EXPECT_VALID(myclass0_type);
@@ -4048,7 +4167,7 @@
   EXPECT_VALID(list_type);
   EXPECT_VALID(Dart_ListSetAt(type_args, 1, list_type));
   Dart_Handle myclass1_type =
-      (FLAG_null_safety == kNullSafetyOptionStrong)
+      TestCase::IsNNBD()
           ? Dart_GetNonNullableType(lib, NewString("MyClass1"), 2, &type_args)
           : Dart_GetType(lib, NewString("MyClass1"), 2, &type_args);
   EXPECT_VALID(myclass1_type);
@@ -4417,9 +4536,8 @@
 }
 
 TEST_CASE(DartAPI_SetField_BadType) {
-  const char* kScriptChars = (FLAG_null_safety == kNullSafetyOptionStrong)
-                                 ? "late int foo;\n"
-                                 : "int foo;\n";
+  const char* kScriptChars =
+      TestCase::IsNNBD() ? "late int foo;\n" : "int foo;\n";
   Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
   Dart_Handle name = NewString("foo");
   Dart_Handle result = Dart_SetField(lib, name, Dart_True());
@@ -4441,8 +4559,6 @@
 }
 
 TEST_CASE(DartAPI_InjectNativeFields2) {
-  bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = null_safety ? "?" : "";
   // clang-format off
   auto kScriptChars = Utils::CStringUniquePtr(
       OS::SCreate(nullptr,
@@ -4457,7 +4573,7 @@
                   "  NativeFields obj = new NativeFields(10, 20);\n"
                   "  return obj;\n"
                   "}\n",
-                  nullableTag), std::free);
+                  TestCase::NullableTag()), std::free);
   // clang-format on
 
   Dart_Handle result;
@@ -4475,8 +4591,6 @@
 }
 
 TEST_CASE(DartAPI_InjectNativeFields3) {
-  bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = null_safety ? "?" : "";
   // clang-format off
   auto kScriptChars = Utils::CStringUniquePtr(
       OS::SCreate(nullptr,
@@ -4492,7 +4606,7 @@
                   "  NativeFields obj = new NativeFields(10, 20);\n"
                   "  return obj;\n"
                   "}\n",
-                  nullableTag), std::free);
+                  TestCase::NullableTag()), std::free);
   // clang-format on
   Dart_Handle result;
   const int kNumNativeFields = 2;
@@ -4524,8 +4638,6 @@
 }
 
 TEST_CASE(DartAPI_InjectNativeFields4) {
-  bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = null_safety ? "?" : "";
   // clang-format off
   auto kScriptChars = Utils::CStringUniquePtr(
       OS::SCreate(nullptr,
@@ -4540,7 +4652,7 @@
                   "  NativeFields obj = new NativeFields(10, 20);\n"
                   "  return obj;\n"
                   "}\n",
-                  nullableTag), std::free);
+                  TestCase::NullableTag()), std::free);
   // clang-format on
   Dart_Handle result;
   // Load up a test script in the test library.
@@ -4610,8 +4722,7 @@
 }
 
 TEST_CASE(DartAPI_TestNativeFieldsAccess) {
-  bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = null_safety ? "?" : "";
+  const char* nullable_tag = TestCase::NullableTag();
   // clang-format off
   auto kScriptChars = Utils::CStringUniquePtr(
       OS::SCreate(
@@ -4633,7 +4744,7 @@
           "  obj.accessNativeFlds(null);\n"
           "  return obj;\n"
           "}\n",
-          nullableTag, nullableTag, nullableTag, nullableTag),
+          nullable_tag, nullable_tag, nullable_tag, nullable_tag),
       std::free);
   // clang-format on
 
@@ -4751,8 +4862,7 @@
 }
 
 TEST_CASE(DartAPI_ImplicitNativeFieldAccess) {
-  bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = null_safety ? "?" : "";
+  const char* nullable_tag = TestCase::NullableTag();
   // clang-format off
   auto kScriptChars = Utils::CStringUniquePtr(
       OS::SCreate(nullptr,
@@ -4769,7 +4879,7 @@
                   "  NativeFields obj = new NativeFields(10, 20);\n"
                   "  return obj;\n"
                   "}\n",
-                  nullableTag, nullableTag),
+                  nullable_tag, nullable_tag),
       std::free);
   // clang-format on
   // Load up a test script in the test library.
@@ -4785,8 +4895,6 @@
 }
 
 TEST_CASE(DartAPI_NegativeNativeFieldAccess) {
-  bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = null_safety ? "?" : "";
   // clang-format off
   auto kScriptChars = Utils::CStringUniquePtr(
       OS::SCreate(nullptr,
@@ -4805,7 +4913,7 @@
                   "Function testMain2() {\n"
                   "  return () {};\n"
                   "}\n",
-                  nullableTag),
+                  TestCase::NullableTag()),
       std::free);
   // clang-format on
 
@@ -5856,8 +5964,7 @@
   Dart_EnterScope();  // Start a Dart API scope for invoking API functions.
 
   // Load up a test script which extends the native wrapper class.
-  Dart_Handle lib = TestCase::LoadTestScript(
-      kScriptChars, reinterpret_cast<Dart_NativeEntryResolver>(native_lookup));
+  Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, native_lookup);
 
   // Throwing an exception here should result in an error.
   result = Dart_ThrowException(NewString("This doesn't work"));
@@ -6043,9 +6150,7 @@
       "                           obj2);"
       "}";
 
-  Dart_Handle lib = TestCase::LoadTestScript(
-      kScriptChars,
-      reinterpret_cast<Dart_NativeEntryResolver>(native_args_lookup));
+  Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, native_args_lookup);
 
   const char* ascii_str = "string";
   intptr_t ascii_str_length = strlen(ascii_str);
@@ -6086,8 +6191,7 @@
       "  return obj.method1(77, 125);"
       "}";
 
-  Dart_Handle lib = TestCase::LoadTestScript(
-      kScriptChars, reinterpret_cast<Dart_NativeEntryResolver>(gnac_lookup));
+  Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, gnac_lookup);
 
   Dart_Handle result = Dart_Invoke(lib, NewString("testMain"), 0, NULL);
   EXPECT_VALID(result);
diff --git a/runtime/vm/dart_api_state.h b/runtime/vm/dart_api_state.h
index a986121..5b22c93 100644
--- a/runtime/vm/dart_api_state.h
+++ b/runtime/vm/dart_api_state.h
@@ -219,29 +219,39 @@
     if (SpaceForExternal() == Heap::kNew) {
       SetExternalNewSpaceBit();
     }
-    isolate_group->heap()->AllocateExternal(
-        raw()->GetClassIdMayBeSmi(), external_size(), SpaceForExternal());
+    isolate_group->heap()->AllocatedExternal(external_size(),
+                                             SpaceForExternal());
+  }
+  void UpdateExternalSize(intptr_t size, IsolateGroup* isolate_group) {
+    ASSERT(size >= 0);
+    intptr_t old_size = external_size();
+    set_external_size(size);
+    if (size > old_size) {
+      isolate_group->heap()->AllocatedExternal(size - old_size,
+                                               SpaceForExternal());
+    } else {
+      isolate_group->heap()->FreedExternal(old_size - size, SpaceForExternal());
+    }
   }
 
   // Called when the referent becomes unreachable.
   void UpdateUnreachable(IsolateGroup* isolate_group) {
-    EnsureFreeExternal(isolate_group);
+    EnsureFreedExternal(isolate_group);
     Finalize(isolate_group, this);
   }
 
   // Called when the referent has moved, potentially between generations.
   void UpdateRelocated(IsolateGroup* isolate_group) {
     if (IsSetNewSpaceBit() && (SpaceForExternal() == Heap::kOld)) {
-      isolate_group->heap()->PromoteExternal(raw()->GetClassIdMayBeSmi(),
-                                             external_size());
+      isolate_group->heap()->PromotedExternal(external_size());
       ClearExternalNewSpaceBit();
     }
   }
 
   // Idempotent. Called when the handle is explicitly deleted or the
   // referent becomes unreachable.
-  void EnsureFreeExternal(IsolateGroup* isolate_group) {
-    isolate_group->heap()->FreeExternal(external_size(), SpaceForExternal());
+  void EnsureFreedExternal(IsolateGroup* isolate_group) {
+    isolate_group->heap()->FreedExternal(external_size(), SpaceForExternal());
     set_external_size(0);
   }
 
diff --git a/runtime/vm/exceptions_test.cc b/runtime/vm/exceptions_test.cc
index 722ffef..0e62b99 100644
--- a/runtime/vm/exceptions_test.cc
+++ b/runtime/vm/exceptions_test.cc
@@ -114,8 +114,7 @@
       "  UnhandledExceptions.equals(2, Second.method1(1));\n"
       "  UnhandledExceptions.equals(3, Second.method3(1));\n"
       "}";
-  Dart_Handle lib = TestCase::LoadTestScript(
-      kScriptChars, reinterpret_cast<Dart_NativeEntryResolver>(native_lookup));
+  Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, native_lookup);
   EXPECT_VALID(Dart_Invoke(lib, NewString("testMain"), 0, NULL));
 }
 
diff --git a/runtime/vm/heap/heap.cc b/runtime/vm/heap/heap.cc
index 8a4cdf9..28a36fe 100644
--- a/runtime/vm/heap/heap.cc
+++ b/runtime/vm/heap/heap.cc
@@ -67,6 +67,7 @@
       read_only_(false),
       gc_new_space_in_progress_(false),
       gc_old_space_in_progress_(false),
+      last_gc_was_old_space_(false),
       gc_on_nth_allocation_(kNoForcedGarbageCollection) {
   UpdateGlobalMaxUsed();
   for (int sel = 0; sel < kNumWeakSelectors; sel++) {
@@ -157,11 +158,11 @@
   return 0;
 }
 
-void Heap::AllocateExternal(intptr_t cid, intptr_t size, Space space) {
+void Heap::AllocatedExternal(intptr_t size, Space space) {
   ASSERT(Thread::Current()->no_safepoint_scope_depth() == 0);
   if (space == kNew) {
     Isolate::Current()->AssertCurrentThreadIsMutator();
-    new_space_.AllocateExternal(cid, size);
+    new_space_.AllocatedExternal(size);
     if (new_space_.ExternalInWords() <= (4 * new_space_.CapacityInWords())) {
       return;
     }
@@ -172,7 +173,7 @@
     // space GC check.
   } else {
     ASSERT(space == kOld);
-    old_space_.AllocateExternal(cid, size);
+    old_space_.AllocatedExternal(size);
   }
 
   if (old_space_.NeedsGarbageCollection()) {
@@ -182,18 +183,18 @@
   }
 }
 
-void Heap::FreeExternal(intptr_t size, Space space) {
+void Heap::FreedExternal(intptr_t size, Space space) {
   if (space == kNew) {
-    new_space_.FreeExternal(size);
+    new_space_.FreedExternal(size);
   } else {
     ASSERT(space == kOld);
-    old_space_.FreeExternal(size);
+    old_space_.FreedExternal(size);
   }
 }
 
-void Heap::PromoteExternal(intptr_t cid, intptr_t size) {
-  new_space_.FreeExternal(size);
-  old_space_.PromoteExternal(cid, size);
+void Heap::PromotedExternal(intptr_t size) {
+  new_space_.FreedExternal(size);
+  old_space_.AllocatedExternal(size);
 }
 
 bool Heap::Contains(uword addr) const {
@@ -376,6 +377,7 @@
   MonitorLocker ml(&gc_in_progress_monitor_);
   ASSERT(gc_new_space_in_progress_);
   gc_new_space_in_progress_ = false;
+  last_gc_was_old_space_ = false;
   ml.NotifyAll();
 }
 
@@ -397,6 +399,7 @@
   MonitorLocker ml(&gc_in_progress_monitor_);
   ASSERT(gc_old_space_in_progress_);
   gc_old_space_in_progress_ = false;
+  last_gc_was_old_space_ = true;
   ml.NotifyAll();
 }
 
@@ -590,6 +593,19 @@
   }
 
   if (old_space_.AlmostNeedsGarbageCollection()) {
+    // New-space objects are roots during old-space GC. This means that even
+    // unreachable new-space objects prevent old-space objects they reference
+    // from being collected during an old-space GC. Normally this is not an
+    // issue because new-space GCs run much more frequently than old-space GCs.
+    // If new-space allocation is low and direct old-space allocation is high,
+    // which can happen in a program that allocates large objects and little
+    // else, old-space can fill up with unreachable objects until the next
+    // new-space GC. This check is the concurrent-marking equivalent to the
+    // new-space GC before synchronous-marking in CollectMostGarbage.
+    if (last_gc_was_old_space_) {
+      CollectNewSpaceGarbage(thread, kFull);
+    }
+
     StartConcurrentMarking(thread);
   }
 }
diff --git a/runtime/vm/heap/heap.h b/runtime/vm/heap/heap.h
index afeb2de..ac74209 100644
--- a/runtime/vm/heap/heap.h
+++ b/runtime/vm/heap/heap.h
@@ -95,10 +95,10 @@
   }
 
   // Track external data.
-  void AllocateExternal(intptr_t cid, intptr_t size, Space space);
-  void FreeExternal(intptr_t size, Space space);
+  void AllocatedExternal(intptr_t size, Space space);
+  void FreedExternal(intptr_t size, Space space);
   // Move external size from new to old space. Does not by itself trigger GC.
-  void PromoteExternal(intptr_t cid, intptr_t size);
+  void PromotedExternal(intptr_t size);
 
   // Heap contains the specified address.
   bool Contains(uword addr) const;
@@ -409,6 +409,7 @@
   Monitor gc_in_progress_monitor_;
   bool gc_new_space_in_progress_;
   bool gc_old_space_in_progress_;
+  bool last_gc_was_old_space_;
 
   static const intptr_t kNoForcedGarbageCollection = -1;
 
diff --git a/runtime/vm/heap/heap_test.cc b/runtime/vm/heap/heap_test.cc
index 461513d..30bd4d4 100644
--- a/runtime/vm/heap/heap_test.cc
+++ b/runtime/vm/heap/heap_test.cc
@@ -111,6 +111,11 @@
   Dart_Handle h_lib = TestCase::LoadTestScript(kScriptChars, NULL);
   Isolate* isolate = Isolate::Current();
   ClassTable* class_table = isolate->class_table();
+  {
+    // GC before main so allocations during the tests don't cause unexpected GC.
+    TransitionNativeToVM transition(thread);
+    GCTestHelper::CollectAllGarbage();
+  }
   Dart_EnterScope();
   Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
   EXPECT_VALID(result);
diff --git a/runtime/vm/heap/pages.cc b/runtime/vm/heap/pages.cc
index 796d64c..4a7c0bb 100644
--- a/runtime/vm/heap/pages.cc
+++ b/runtime/vm/heap/pages.cc
@@ -569,21 +569,6 @@
   freelist->mutex()->Unlock();
 }
 
-void PageSpace::AllocateExternal(intptr_t cid, intptr_t size) {
-  intptr_t size_in_words = size >> kWordSizeLog2;
-  usage_.external_in_words += size_in_words;
-}
-
-void PageSpace::PromoteExternal(intptr_t cid, intptr_t size) {
-  intptr_t size_in_words = size >> kWordSizeLog2;
-  usage_.external_in_words += size_in_words;
-}
-
-void PageSpace::FreeExternal(intptr_t size) {
-  intptr_t size_in_words = size >> kWordSizeLog2;
-  usage_.external_in_words -= size_in_words;
-}
-
 class BasePageIterator : ValueObject {
  public:
   explicit BasePageIterator(const PageSpace* space) : space_(space) {}
diff --git a/runtime/vm/heap/pages.h b/runtime/vm/heap/pages.h
index 951e95b..3e789ea 100644
--- a/runtime/vm/heap/pages.h
+++ b/runtime/vm/heap/pages.h
@@ -409,9 +409,16 @@
     allocated_black_in_words_.fetch_add(size >> kWordSizeLog2);
   }
 
-  void AllocateExternal(intptr_t cid, intptr_t size);
-  void PromoteExternal(intptr_t cid, intptr_t size);
-  void FreeExternal(intptr_t size);
+  void AllocatedExternal(intptr_t size) {
+    ASSERT(size >= 0);
+    intptr_t size_in_words = size >> kWordSizeLog2;
+    usage_.external_in_words += size_in_words;
+  }
+  void FreedExternal(intptr_t size) {
+    ASSERT(size >= 0);
+    intptr_t size_in_words = size >> kWordSizeLog2;
+    usage_.external_in_words -= size_in_words;
+  }
 
   // Bulk data allocation.
   FreeList* DataFreeList(intptr_t i = 0) {
diff --git a/runtime/vm/heap/scavenger.cc b/runtime/vm/heap/scavenger.cc
index 489e47d..dcd9f18 100644
--- a/runtime/vm/heap/scavenger.cc
+++ b/runtime/vm/heap/scavenger.cc
@@ -278,7 +278,7 @@
           // To-space was exhausted by fragmentation and old-space could not
           // grow.
           if (UNLIKELY(new_addr == 0)) {
-            FATAL("Failed to allocate during scavenge");
+            OUT_OF_MEMORY();
           }
         }
       }
@@ -1545,17 +1545,6 @@
 }
 #endif  // !PRODUCT
 
-void Scavenger::AllocateExternal(intptr_t cid, intptr_t size) {
-  ASSERT(size >= 0);
-  external_size_ += size;
-}
-
-void Scavenger::FreeExternal(intptr_t size) {
-  ASSERT(size >= 0);
-  external_size_ -= size;
-  ASSERT(external_size_ >= 0);
-}
-
 void Scavenger::Evacuate() {
   // We need a safepoint here to prevent allocation right before or right after
   // the scavenge.
diff --git a/runtime/vm/heap/scavenger.h b/runtime/vm/heap/scavenger.h
index 098d96f..81db5fc 100644
--- a/runtime/vm/heap/scavenger.h
+++ b/runtime/vm/heap/scavenger.h
@@ -314,8 +314,16 @@
   void PrintToJSONObject(JSONObject* object) const;
 #endif  // !PRODUCT
 
-  void AllocateExternal(intptr_t cid, intptr_t size);
-  void FreeExternal(intptr_t size);
+  void AllocatedExternal(intptr_t size) {
+    ASSERT(size >= 0);
+    external_size_ += size;
+    ASSERT(external_size_ >= 0);
+  }
+  void FreedExternal(intptr_t size) {
+    ASSERT(size >= 0);
+    external_size_ -= size;
+    ASSERT(external_size_ >= 0);
+  }
 
   void MakeNewSpaceIterable();
   int64_t FreeSpaceInWords(Isolate* isolate) const;
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 050a118..dfb80a5 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -747,7 +747,7 @@
 bool IsolateGroup::HasApplicationIsolateGroups() {
   ReadRwLocker wl(ThreadState::Current(), isolate_groups_rwlock_);
   for (auto group : *isolate_groups_) {
-    if (!IsolateGroup::IsVMInternalIsolate(group)) {
+    if (!IsolateGroup::IsVMInternalIsolateGroup(group)) {
       return true;
     }
   }
@@ -3564,7 +3564,7 @@
   return creation_enabled_;
 }
 
-bool IsolateGroup::IsVMInternalIsolate(const IsolateGroup* group) {
+bool IsolateGroup::IsVMInternalIsolateGroup(const IsolateGroup* group) {
   // We use a name comparison here because this method can be called during
   // shutdown, where the actual isolate pointers might've already been cleared.
   const char* name = group->source()->name;
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 5be2999..2ae1e0d 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -500,7 +500,7 @@
 
   static bool HasApplicationIsolateGroups();
   static bool HasOnlyVMIsolateGroup();
-  static bool IsVMInternalIsolate(const IsolateGroup* group);
+  static bool IsVMInternalIsolateGroup(const IsolateGroup* group);
 
   int64_t UptimeMicros() const;
 
@@ -1262,7 +1262,7 @@
   static void EnableIsolateCreation();
   static bool IsolateCreationEnabled();
   static bool IsVMInternalIsolate(const Isolate* isolate) {
-    return IsolateGroup::IsVMInternalIsolate(isolate->group());
+    return IsolateGroup::IsVMInternalIsolateGroup(isolate->group());
   }
 
 #if !defined(PRODUCT)
diff --git a/runtime/vm/isolate_reload_test.cc b/runtime/vm/isolate_reload_test.cc
index da66a90..f22bcc1 100644
--- a/runtime/vm/isolate_reload_test.cc
+++ b/runtime/vm/isolate_reload_test.cc
@@ -274,8 +274,7 @@
 }
 
 TEST_CASE(IsolateReload_KernelIncrementalCompileBaseClass) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = null_safety ? "?" : "";
+  const char* nullable_tag = TestCase::NullableTag();
   // clang-format off
   auto kSourceFile1 =
       Utils::CStringUniquePtr(OS::SCreate(nullptr,
@@ -287,7 +286,7 @@
                                 "    u = l[1] is U ? l[1] : null;\n"
                                 "  }\n"
                                 "}\n",
-                                nullableTag, nullableTag),
+                                nullable_tag, nullable_tag),
                               std::free);
   Dart_SourceFile sourcefiles[3] = {
       {
@@ -334,7 +333,7 @@
                                           "    u = l[1] is U ? l[1] : null;\n"
                                           "  }\n"
                                           "}\n",
-                                          nullableTag, nullableTag),
+                                          nullable_tag, nullable_tag),
                               std::free);
   Dart_SourceFile updated_sourcefiles[1] = {{
       "file:///test-lib.dart",
@@ -727,8 +726,7 @@
 }
 
 TEST_CASE(IsolateReload_ConstructorChanged) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript = Utils::CStringUniquePtr(
       OS::SCreate(nullptr,
@@ -741,7 +739,7 @@
                   "  var newA = A();\n"
                   "  return 'saved:${savedA.field} new:${newA.field}';\n"
                   "}\n",
-                  lateTag),
+                  late_tag),
       std::free);
   // clang-format on
 
@@ -762,7 +760,7 @@
                   "  var newA = A();\n"
                   "  return 'saved:${savedA.field} new:${newA.field}';\n"
                   "}\n",
-                  lateTag),
+                  late_tag),
       std::free);
   // clang-format on
 
@@ -3445,8 +3443,7 @@
 }
 
 TEST_CASE(IsolateReload_RunNewFieldInitializers) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript = Utils::CStringUniquePtr(OS::SCreate(nullptr,
                                             "class Foo {\n"
@@ -3457,7 +3454,7 @@
                                             "  value = Foo();\n"
                                             "  return value.x;\n"
                                             "}\n",
-                                            lateTag),
+                                            late_tag),
                                          std::free);
   // clang-format on
 
@@ -3476,7 +3473,7 @@
                                                   "main() {\n"
                                                   "  return value.y;\n"
                                                   "}\n",
-                                                  lateTag),
+                                                  late_tag),
                                                std::free);
   // clang-format on
 
@@ -3487,8 +3484,7 @@
 }
 
 TEST_CASE(IsolateReload_RunNewFieldInitializersReferenceStaticField) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript =
       Utils::CStringUniquePtr(OS::SCreate(nullptr,
@@ -3501,7 +3497,7 @@
                                           "  value = Foo();\n"
                                           "  return value.x;\n"
                                           "}\n",
-                                          lateTag),
+                                          late_tag),
                               std::free);
   // clang-format on
 
@@ -3522,7 +3518,7 @@
                                           "main() {\n"
                                           "  return value.y;\n"
                                           "}\n",
-                                          lateTag),
+                                          late_tag),
                               std::free);
   // clang-format on
 
@@ -3533,8 +3529,7 @@
 }
 
 TEST_CASE(IsolateReload_RunNewFieldInitializersLazy) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript =
       Utils::CStringUniquePtr(OS::SCreate(nullptr,
@@ -3549,7 +3544,7 @@
                                 "  value1 = Foo();\n"
                                 "  return value.x;\n"
                                 "}\n",
-                                lateTag, lateTag),
+                                late_tag, late_tag),
                               std::free);
   // clang-format on
 
@@ -3572,7 +3567,7 @@
                   "  return '${myInitialValue} ${value.y} ${value1.y} "
                   "${myInitialValue}';\n"
                   "}\n",
-                  lateTag, lateTag),
+                  late_tag, late_tag),
       std::free);
   // clang-format on
 
@@ -3583,8 +3578,7 @@
 }
 
 TEST_CASE(IsolateReload_RunNewFieldInitializersLazyConst) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript = Utils::CStringUniquePtr(OS::SCreate(nullptr,
                                             "class Foo {\n"
@@ -3595,7 +3589,7 @@
                                             "  value = Foo();\n"
                                             "  return value.x;\n"
                                             "}\n",
-                                            lateTag),
+                                            late_tag),
                                          std::free);
   // clang-format on
 
@@ -3617,7 +3611,7 @@
                                                   "main() {\n"
                                                   "  return 0;\n"
                                                   "}\n",
-                                                  lateTag),
+                                                  late_tag),
                                                std::free);
   // clang-format on
 
@@ -3636,7 +3630,7 @@
                                           "main() {\n"
                                           "  return value.y;\n"
                                           "}\n",
-                                          lateTag),
+                                          late_tag),
                               std::free);
 
   lib = TestCase::ReloadTestScript(kReloadScript2.get());
@@ -3645,8 +3639,7 @@
 }
 
 TEST_CASE(IsolateReload_RunNewFieldInitializersLazyTransitive) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript =
       Utils::CStringUniquePtr(OS::SCreate(nullptr,
@@ -3661,7 +3654,7 @@
                                 "  value1 = Foo();\n"
                                 "  return value.x;\n"
                                 "}\n",
-                                lateTag, lateTag),
+                                late_tag, late_tag),
                               std::free);
   // clang-format on
 
@@ -3683,7 +3676,7 @@
                                 "main() {\n"
                                 "  return '${myInitialValue}';\n"
                                 "}\n",
-                                lateTag, lateTag),
+                                late_tag, late_tag),
                               std::free);
   // clang-format on
 
@@ -3707,7 +3700,7 @@
                   "  return '${myInitialValue} ${value.y} ${value1.y} "
                   "${myInitialValue}';\n"
                   "}\n",
-                  lateTag, lateTag),
+                  late_tag, late_tag),
       std::free);
   // clang-format on
 
@@ -3718,8 +3711,7 @@
 }
 
 TEST_CASE(IsolateReload_RunNewFieldInitializersThrows) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript = Utils::CStringUniquePtr(OS::SCreate(nullptr,
                                             "class Foo {\n"
@@ -3730,7 +3722,7 @@
                                             "  value = Foo();\n"
                                             "  return value.x;\n"
                                             "}\n",
-                                            lateTag),
+                                            late_tag),
                                          std::free);
   // clang-format on
 
@@ -3754,7 +3746,7 @@
                                 "    return e.toString();\n"
                                 "  }\n"
                                 "}\n",
-                                lateTag),
+                                late_tag),
                               std::free);
   // clang-format on
 
@@ -3765,8 +3757,7 @@
 }
 
 TEST_CASE(IsolateReload_RunNewFieldInitializersCyclicInitialization) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript = Utils::CStringUniquePtr(OS::SCreate(nullptr,
                                           "class Foo {\n"
@@ -3777,7 +3768,7 @@
                                             "  value = Foo();\n"
                                             "  return value.x;\n"
                                             "}\n",
-                                            lateTag),
+                                            late_tag),
                                          std::free);
   // clang-format on
 
@@ -3801,7 +3792,7 @@
                                 "    return e.toString();\n"
                                 "  }\n"
                                 "}\n",
-                                lateTag),
+                                late_tag),
                               std::free);
   // clang-format on
   lib = TestCase::ReloadTestScript(kReloadScript.get());
@@ -3812,8 +3803,7 @@
 // When an initializer expression has a syntax error, we detect it at reload
 // time.
 TEST_CASE(IsolateReload_RunNewFieldInitializersSyntaxError) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript = Utils::CStringUniquePtr(OS::SCreate(nullptr,
                                             "class Foo {\n"
@@ -3824,7 +3814,7 @@
                                             "  value = Foo();\n"
                                             "  return value.x;\n"
                                             "}\n",
-                                            lateTag),
+                                            late_tag),
                                          std::free);
   // clang-format on
 
@@ -3844,7 +3834,7 @@
                                 "main() {\n"
                                 "  return '${value.y == null}';"
                                 "}\n",
-                                lateTag),
+                                late_tag),
                               std::free);
   // clang-format on
 
@@ -3857,8 +3847,7 @@
 // When an initializer expression has a syntax error, we detect it at reload
 // time.
 TEST_CASE(IsolateReload_RunNewFieldInitializersSyntaxError2) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript = Utils::CStringUniquePtr(
       OS::SCreate(nullptr,
@@ -3871,7 +3860,7 @@
                   "  value = Foo();\n"
                   "  return value.x;\n"
                   "}\n",
-                  lateTag),
+                  late_tag),
       std::free);
   // clang-format on
 
@@ -3892,7 +3881,7 @@
                   "main() {\n"
                   "  return '${value.y == null}';"
                   "}\n",
-                  lateTag),
+                  late_tag),
       std::free);
   // clang-format on
 
@@ -3905,8 +3894,7 @@
 // When an initializer expression has a syntax error, we detect it at reload
 // time.
 TEST_CASE(IsolateReload_RunNewFieldInitializersSyntaxError3) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript = Utils::CStringUniquePtr(
       OS::SCreate(nullptr,
@@ -3919,7 +3907,7 @@
                   "  value = Foo();\n"
                   "  return value.x;\n"
                   "}\n",
-                  lateTag),
+                  late_tag),
       std::free);
   // clang-format on
 
@@ -3940,7 +3928,7 @@
                   "main() {\n"
                   "  return '${value.y == null}';"
                   "}\n",
-                  lateTag),
+                  late_tag),
       std::free);
   // clang-format on
 
@@ -3951,8 +3939,7 @@
 }
 
 TEST_CASE(IsolateReload_RunNewFieldInitializersSuperClass) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript =
       Utils::CStringUniquePtr(OS::SCreate(nullptr,
@@ -3969,7 +3956,7 @@
                                 "  value = Foo();\n"
                                 "  return 0;\n"
                                 "}\n",
-                                lateTag),
+                                late_tag),
                               std::free);
   // clang-format on
 
@@ -3991,7 +3978,7 @@
                                           "main() {\n"
                                           "  return value.newField;\n"
                                           "}\n",
-                                          lateTag),
+                                          late_tag),
                               std::free);
   // clang-format off
 
@@ -4007,8 +3994,7 @@
 }
 
 TEST_CASE(IsolateReload_RunNewFieldInitializersWithConsts) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript =
       Utils::CStringUniquePtr(OS::SCreate(nullptr,
@@ -4028,7 +4014,7 @@
                                 "  a; b; c; d;\n"
                                 "  return 'Okay';\n"
                                 "}\n",
-                                lateTag),
+                                late_tag),
                               std::free);
   // clang-format on
 
@@ -4059,7 +4045,7 @@
           "  return '${identical(a, value.a)} ${identical(b, value.b)}'"
           "      ' ${identical(c, value.c)} ${identical(d, value.d)}';\n"
           "}\n",
-          lateTag),
+          late_tag),
       std::free);
   // clang-format on
   lib = TestCase::ReloadTestScript(kReloadScript.get());
@@ -4070,9 +4056,8 @@
 }
 
 TEST_CASE(IsolateReload_RunNewFieldInitializersWithGenerics) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = null_safety ? "?" : "";
-  const char* lateTag = null_safety ? "late" : "";
+  const char* nullable_tag = TestCase::NullableTag();
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript =
       Utils::CStringUniquePtr(OS::SCreate(nullptr,
@@ -4086,7 +4071,7 @@
                                 "  value2 = Foo<int>();\n"
                                 "  return 'Okay';\n"
                                 "}\n",
-                                nullableTag, lateTag, lateTag),
+                                nullable_tag, late_tag, late_tag),
                               std::free);
   // clang-format on
 
@@ -4108,7 +4093,7 @@
                   "  return '${value1.y.runtimeType} ${value1.z.runtimeType}'"
                   "      ' ${value2.y.runtimeType} ${value2.z.runtimeType}';\n"
                   "}\n",
-                  nullableTag, lateTag, lateTag),
+                  nullable_tag, late_tag, late_tag),
       std::free);
   // clang-format on
 
@@ -4247,8 +4232,7 @@
 }
 
 TEST_CASE(IsolateReload_ExistingFieldChangesType) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript = Utils::CStringUniquePtr(OS::SCreate(nullptr,
                                                      R"(
@@ -4261,7 +4245,7 @@
       return 'Okay';
     }
   )",
-  lateTag), std::free);
+  late_tag), std::free);
   // clang-format on
 
   Dart_Handle lib = TestCase::LoadTestScript(kScript.get(), NULL);
@@ -4282,7 +4266,7 @@
       }
     }
   )",
-  lateTag), std::free);
+  late_tag), std::free);
   // clang-format on
 
   lib = TestCase::ReloadTestScript(kReloadScript.get());
@@ -4325,8 +4309,7 @@
 }
 
 TEST_CASE(IsolateReload_ExistingFieldChangesTypeIndirect) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript = Utils::CStringUniquePtr(OS::SCreate(nullptr, R"(
     class A {}
@@ -4340,7 +4323,7 @@
       value = Foo(B());
       return 'Okay';
     }
-  )", lateTag), std::free);
+  )", late_tag), std::free);
   // clang-format on
 
   Dart_Handle lib = TestCase::LoadTestScript(kScript.get(), NULL);
@@ -4364,7 +4347,7 @@
         return e.toString();
       }
     }
-  )", lateTag), std::free);
+  )", late_tag), std::free);
   // clang-format on
 
   lib = TestCase::ReloadTestScript(kReloadScript.get());
@@ -4410,8 +4393,7 @@
 }
 
 TEST_CASE(IsolateReload_ExistingFieldChangesTypeIndirectGeneric) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript = Utils::CStringUniquePtr(OS::SCreate(nullptr, R"(
     class A {}
@@ -4425,7 +4407,7 @@
       value = Foo(List<B>.empty());
       return 'Okay';
     }
-  )", lateTag), std::free);
+  )", late_tag), std::free);
   // clang-format on
 
   Dart_Handle lib = TestCase::LoadTestScript(kScript.get(), NULL);
@@ -4449,7 +4431,7 @@
         return e.toString();
       }
     }
-  )", lateTag), std::free);
+  )", late_tag), std::free);
   // clang-format on
 
   lib = TestCase::ReloadTestScript(kReloadScript.get());
@@ -4497,9 +4479,7 @@
 }
 
 TEST_CASE(IsolateReload_ExistingFieldChangesTypeIndirectFunction) {
-  const bool null_safety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* lateTag = null_safety ? "late" : "";
-
+  const char* late_tag = TestCase::LateTag();
   // clang-format off
   auto kScript = Utils::CStringUniquePtr(OS::SCreate(nullptr, R"(
     class A {}
@@ -4514,7 +4494,7 @@
       value = Foo((A a) => true);
       return 'Okay';
     }
-  )", lateTag), std::free);
+  )", late_tag), std::free);
   // clang-format on
 
   Dart_Handle lib = TestCase::LoadTestScript(kScript.get(), NULL);
@@ -4539,7 +4519,7 @@
         return e.toString();
       }
     }
-  )", lateTag), std::free);
+  )", late_tag), std::free);
   // clang-format on
 
   lib = TestCase::ReloadTestScript(kReloadScript.get());
diff --git a/runtime/vm/log.cc b/runtime/vm/log.cc
index c7c4c2f..9dc6ce0 100644
--- a/runtime/vm/log.cc
+++ b/runtime/vm/log.cc
@@ -23,7 +23,7 @@
 
 DEFINE_FLAG(charp,
             isolate_log_filter,
-            NULL,
+            nullptr,
             "Log isolates whose name include the filter. "
             "Default: service isolate log messages are suppressed "
             "(specify 'vm-service' to log them).");
@@ -38,15 +38,16 @@
 
 Log* Log::Current() {
   Thread* thread = Thread::Current();
-  if (thread == NULL) {
+  if (thread == nullptr) {
     OSThread* os_thread = OSThread::Current();
-    ASSERT(os_thread != NULL);
+    ASSERT(os_thread != nullptr);
     return os_thread->log();
   }
-  Isolate* isolate = thread->isolate();
-  if (isolate != NULL && Log::ShouldLogForIsolate(isolate)) {
+  IsolateGroup* isolate_group = thread->isolate_group();
+  if ((isolate_group != nullptr) &&
+      Log::ShouldLogForIsolateGroup(isolate_group)) {
     OSThread* os_thread = thread->os_thread();
-    ASSERT(os_thread != NULL);
+    ASSERT(os_thread != nullptr);
     return os_thread->log();
   } else {
     return Log::NoOpLog();
@@ -72,7 +73,7 @@
   // Measure.
   va_list measure_args;
   va_copy(measure_args, args);
-  intptr_t len = Utils::VSNPrint(NULL, 0, format, measure_args);
+  intptr_t len = Utils::VSNPrint(nullptr, 0, format, measure_args);
   va_end(measure_args);
 
   // Print.
@@ -106,7 +107,7 @@
   }
   TerminateString();
   const char* str = &buffer_[cursor];
-  ASSERT(str != NULL);
+  ASSERT(str != nullptr);
   printer_("%s", str);
   buffer_.TruncateTo(cursor);
 }
@@ -122,17 +123,17 @@
   return buffer_.length();
 }
 
-bool Log::ShouldLogForIsolate(const Isolate* isolate) {
-  if (FLAG_isolate_log_filter == NULL) {
-    if (isolate->is_service_isolate() || isolate->is_kernel_isolate()) {
-      // By default, do not log for the service isolate.
+bool Log::ShouldLogForIsolateGroup(const IsolateGroup* isolate_group) {
+  if (FLAG_isolate_log_filter == nullptr) {
+    if (IsolateGroup::IsVMInternalIsolateGroup(isolate_group)) {
+      // By default, do not log for the service or kernel isolates.
       return false;
     }
     return true;
   }
-  const char* name = isolate->name();
-  ASSERT(name != NULL);
-  if (strstr(name, FLAG_isolate_log_filter) == NULL) {
+  const char* name = isolate_group->source()->name;
+  ASSERT(name != nullptr);
+  if (strstr(name, FLAG_isolate_log_filter) == nullptr) {
     // Filter does not match, do not log for this isolate.
     return false;
   }
diff --git a/runtime/vm/log.h b/runtime/vm/log.h
index 467b95c..f96c5ea 100644
--- a/runtime/vm/log.h
+++ b/runtime/vm/log.h
@@ -11,7 +11,7 @@
 
 namespace dart {
 
-class Isolate;
+class IsolateGroup;
 class LogBlock;
 
 #if defined(_MSC_VER)
@@ -58,7 +58,7 @@
   bool ShouldFlush() const;
 
   // Returns false if we should drop log messages related to 'isolate'.
-  static bool ShouldLogForIsolate(const Isolate* isolate);
+  static bool ShouldLogForIsolateGroup(const IsolateGroup* isolate);
 
   static Log noop_log_;
   LogPrinter printer_;
diff --git a/runtime/vm/malloc_hooks_test.cc b/runtime/vm/malloc_hooks_test.cc
index 6d93f9c..76b789b 100644
--- a/runtime/vm/malloc_hooks_test.cc
+++ b/runtime/vm/malloc_hooks_test.cc
@@ -25,17 +25,10 @@
   }
 }
 
-// Only to be used in UNIT_TEST_CASE which runs without active VM.
-class OSThreadSupport : public ValueObject {
- public:
-  OSThreadSupport() { OSThread::Init(); }
-
-  ~OSThreadSupport() { OSThread::Cleanup(); }
-};
-
 class EnableMallocHooksScope : public ValueObject {
  public:
   EnableMallocHooksScope() {
+    OSThread::Current();  // Ensure not allocated during test.
     saved_enable_malloc_hooks_ = FLAG_profiler_native_memory;
     FLAG_profiler_native_memory = true;
     MallocHooks::Init();
@@ -73,7 +66,6 @@
 };
 
 UNIT_TEST_CASE(BasicMallocHookTest) {
-  OSThreadSupport os_thread_support;
   EnableMallocHooksScope scope;
 
   EXPECT_EQ(0L, MallocHooks::allocation_count());
@@ -92,7 +84,6 @@
 }
 
 UNIT_TEST_CASE(FreeUnseenMemoryMallocHookTest) {
-  OSThreadSupport os_thread_support;
   EnableMallocHooksScope scope;
 
   const intptr_t pre_hook_buffer_size = 3;
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index dc60b01..ae9746d 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -5691,6 +5691,7 @@
       type = type_arguments.TypeAt(from_index + i);
       if (!type.IsLegacy() && !type.IsVoidType() && !type.IsDynamicType() &&
           !type.IsNullType()) {
+        set.Release();
         return true;
       }
       // It is not possible for a legacy type to have non-legacy type
@@ -10281,6 +10282,8 @@
     const Instance& value,
     bool print_trace /* = false */) {
   ASSERT(!value.IsNull());  // Should be handled by the caller.
+  ASSERT(value.raw() != Object::sentinel().raw());
+  ASSERT(value.raw() != Object::transition_sentinel().raw());
 
   const TypeArguments& static_type_args =
       TypeArguments::Handle(static_type.arguments());
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index ccf9b01..42714c5 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -3750,8 +3750,6 @@
 }
 
 TEST_CASE(Metadata) {
-  bool nullSafety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = nullSafety ? "?" : "";
   // clang-format off
   auto kScriptChars =
       Utils::CStringUniquePtr(OS::SCreate(nullptr,
@@ -3785,7 +3783,7 @@
         "A main() {                     \n"
         "  return A();                  \n"
         "}                              \n",
-        nullableTag), std::free);
+        TestCase::NullableTag()), std::free);
   // clang-format on
 
   Dart_Handle h_lib = TestCase::LoadTestScript(kScriptChars.get(), NULL);
diff --git a/runtime/vm/os.h b/runtime/vm/os.h
index a5fb739..aab5c4d 100644
--- a/runtime/vm/os.h
+++ b/runtime/vm/os.h
@@ -63,6 +63,11 @@
   // NOTE: This function will return -1 on OSs that are not supported.
   static int64_t GetCurrentThreadCPUMicros();
 
+  // If the tracing/timeline configuration on the current OS supports thread
+  // timestamps, returns the same value as |GetCurrentThreadCPUMicros|.
+  // Otherwise, returns -1.
+  static int64_t GetCurrentThreadCPUMicrosForTimeline();
+
   // Returns the activation frame alignment constraint or one if
   // the platform doesn't care. Guaranteed to be a power of two.
   static intptr_t ActivationFrameAlignment();
diff --git a/runtime/vm/os_android.cc b/runtime/vm/os_android.cc
index 7ac97ec4..10ad9cf 100644
--- a/runtime/vm/os_android.cc
+++ b/runtime/vm/os_android.cc
@@ -177,6 +177,10 @@
   return result;
 }
 
+int64_t OS::GetCurrentThreadCPUMicrosForTimeline() {
+  return OS::GetCurrentThreadCPUMicros();
+}
+
 // TODO(5411554):  May need to hoist these architecture dependent code
 // into a architecture specific file e.g: os_ia32_linux.cc
 intptr_t OS::ActivationFrameAlignment() {
diff --git a/runtime/vm/os_fuchsia.cc b/runtime/vm/os_fuchsia.cc
index 1d3d4f6..ff576ff 100644
--- a/runtime/vm/os_fuchsia.cc
+++ b/runtime/vm/os_fuchsia.cc
@@ -210,6 +210,13 @@
   return now / kNanosecondsPerMicrosecond;
 }
 
+// On Fuchsia, thread timestamp values are not used in the tracing/timeline
+// integration. Because of this, we try to avoid querying them, since doing so
+// has both a runtime and trace buffer storage cost.
+int64_t OS::GetCurrentThreadCPUMicrosForTimeline() {
+  return -1;
+}
+
 // TODO(5411554):  May need to hoist these architecture dependent code
 // into a architecture specific file e.g: os_ia32_fuchsia.cc
 intptr_t OS::ActivationFrameAlignment() {
diff --git a/runtime/vm/os_linux.cc b/runtime/vm/os_linux.cc
index 7034106..fcca4f7 100644
--- a/runtime/vm/os_linux.cc
+++ b/runtime/vm/os_linux.cc
@@ -492,6 +492,10 @@
   return result;
 }
 
+int64_t OS::GetCurrentThreadCPUMicrosForTimeline() {
+  return OS::GetCurrentThreadCPUMicros();
+}
+
 // TODO(5411554):  May need to hoist these architecture dependent code
 // into a architecture specific file e.g: os_ia32_linux.cc
 intptr_t OS::ActivationFrameAlignment() {
diff --git a/runtime/vm/os_macos.cc b/runtime/vm/os_macos.cc
index c18ca45..4ff4a9b 100644
--- a/runtime/vm/os_macos.cc
+++ b/runtime/vm/os_macos.cc
@@ -127,6 +127,10 @@
 #endif
 }
 
+int64_t OS::GetCurrentThreadCPUMicrosForTimeline() {
+  return OS::GetCurrentThreadCPUMicros();
+}
+
 intptr_t OS::ActivationFrameAlignment() {
 #if HOST_OS_IOS
 #if TARGET_ARCH_ARM
diff --git a/runtime/vm/os_thread.cc b/runtime/vm/os_thread.cc
index fe0e8c7..61b929c 100644
--- a/runtime/vm/os_thread.cc
+++ b/runtime/vm/os_thread.cc
@@ -134,18 +134,21 @@
   return thread_interrupt_disabled_ == 0;
 }
 
-static void DeleteOSThreadTLS(void* thread) {
+static void DeleteThread(void* thread) {
   delete reinterpret_cast<OSThread*>(thread);
 }
 
 void OSThread::Init() {
   // Allocate the global OSThread lock.
-  ASSERT(thread_list_lock_ == nullptr);
-  thread_list_lock_ = new Mutex();
+  if (thread_list_lock_ == NULL) {
+    thread_list_lock_ = new Mutex();
+  }
+  ASSERT(thread_list_lock_ != NULL);
 
   // Create the thread local key.
-  ASSERT(thread_key_ == kUnsetThreadLocalKey);
-  thread_key_ = CreateThreadLocal(DeleteOSThreadTLS);
+  if (thread_key_ == kUnsetThreadLocalKey) {
+    thread_key_ = CreateThreadLocal(DeleteThread);
+  }
   ASSERT(thread_key_ != kUnsetThreadLocalKey);
 
   // Enable creation of OSThread structures in the VM.
@@ -159,25 +162,21 @@
 }
 
 void OSThread::Cleanup() {
-  // Delete the current thread's TLS (if any).
-  OSThread* os_thread = OSThread::Current();
-  OSThread::SetCurrent(nullptr);
-  delete os_thread;
+// We cannot delete the thread local key and thread list lock,  yet.
+// See the note on thread_list_lock_ in os_thread.h.
+#if 0
+  if (thread_list_lock_ != NULL) {
+    // Delete the thread local key.
+    ASSERT(thread_key_ != kUnsetThreadLocalKey);
+    DeleteThreadLocal(thread_key_);
+    thread_key_ = kUnsetThreadLocalKey;
 
-  // At this point all OSThread structures should have been deleted.
-  // If not we have a bug in the code where a thread is not correctly joined
-  // before `Dart::Cleanup()`.
-  RELEASE_ASSERT(OSThread::thread_list_head_ == nullptr);
-
-  // Delete the thread local key.
-  ASSERT(thread_key_ != kUnsetThreadLocalKey);
-  DeleteThreadLocal(thread_key_);
-  thread_key_ = kUnsetThreadLocalKey;
-
-  // Delete the global OSThread lock.
-  ASSERT(thread_list_lock_ != nullptr);
-  delete thread_list_lock_;
-  thread_list_lock_ = nullptr;
+    // Delete the global OSThread lock.
+    ASSERT(thread_list_lock_ != NULL);
+    delete thread_list_lock_;
+    thread_list_lock_ = NULL;
+  }
+#endif
 }
 
 OSThread* OSThread::CreateAndSetUnknownThread() {
@@ -246,6 +245,7 @@
 }
 
 void OSThread::RemoveThreadFromList(OSThread* thread) {
+  bool final_thread = false;
   {
     ASSERT(thread != NULL);
     ASSERT(thread_list_lock_ != NULL);
@@ -263,12 +263,18 @@
           previous->thread_list_next_ = current->thread_list_next_;
         }
         thread->thread_list_next_ = NULL;
+        final_thread = !creation_enabled_ && (thread_list_head_ == NULL);
         break;
       }
       previous = current;
       current = current->thread_list_next_;
     }
   }
+  // Check if this is the last thread. The last thread does a cleanup
+  // which removes the thread local key and the associated mutex.
+  if (final_thread) {
+    Cleanup();
+  }
 }
 
 void OSThread::SetCurrentTLS(BaseThread* value) {
diff --git a/runtime/vm/os_thread.h b/runtime/vm/os_thread.h
index fb40b70..c35d68f 100644
--- a/runtime/vm/os_thread.h
+++ b/runtime/vm/os_thread.h
@@ -229,7 +229,6 @@
 
   // Called at VM startup and shutdown.
   static void Init();
-  static void Cleanup();
 
   static bool IsThreadInList(ThreadId id);
 
@@ -256,6 +255,7 @@
   ThreadState* thread() const { return thread_; }
   void set_thread(ThreadState* value) { thread_ = value; }
 
+  static void Cleanup();
 #ifdef SUPPORT_TIMELINE
   static ThreadId GetCurrentThreadTraceId();
 #endif  // PRODUCT
@@ -299,8 +299,11 @@
   // protected and should only be read/written by the OSThread itself.
   void* owning_thread_pool_worker_ = nullptr;
 
-  // [thread_list_lock_] cannot have a static lifetime because the order in
-  // which destructors run is undefined.
+  // thread_list_lock_ cannot have a static lifetime because the order in which
+  // destructors run is undefined. At the moment this lock cannot be deleted
+  // either since otherwise, if a thread only begins to run after we have
+  // started to run TLS destructors for a call to exit(), there will be a race
+  // on its deletion in CreateOSThread().
   static Mutex* thread_list_lock_;
   static OSThread* thread_list_head_;
   static bool creation_enabled_;
diff --git a/runtime/vm/os_win.cc b/runtime/vm/os_win.cc
index 2ed4d87..da2d6f7 100644
--- a/runtime/vm/os_win.cc
+++ b/runtime/vm/os_win.cc
@@ -174,6 +174,10 @@
   return -1;
 }
 
+int64_t OS::GetCurrentThreadCPUMicrosForTimeline() {
+  return OS::GetCurrentThreadCPUMicros();
+}
+
 intptr_t OS::ActivationFrameAlignment() {
 #if defined(TARGET_ARCH_ARM64)
   return 16;
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index 2f9a9a6..9eed51a 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -1711,7 +1711,7 @@
       [](void* data, Dart_WeakPersistentHandle handle, void* peer) {
         TransferableTypedDataPeer* tpeer =
             reinterpret_cast<TransferableTypedDataPeer*>(peer);
-        tpeer->handle()->EnsureFreeExternal(IsolateGroup::Current());
+        tpeer->handle()->EnsureFreedExternal(IsolateGroup::Current());
         tpeer->ClearData();
       });
 }
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index 88f2ea5..31276e9 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -3145,14 +3145,22 @@
 DEFINE_RUNTIME_ENTRY(InitInstanceField, 2) {
   const Instance& instance = Instance::CheckedHandle(zone, arguments.ArgAt(0));
   const Field& field = Field::CheckedHandle(zone, arguments.ArgAt(1));
-  const Error& result = Error::Handle(zone, field.InitializeInstance(instance));
+  Object& result = Object::Handle(zone, field.InitializeInstance(instance));
   ThrowIfError(result);
+  result = instance.GetField(field);
+  ASSERT((result.raw() != Object::sentinel().raw()) &&
+         (result.raw() != Object::transition_sentinel().raw()));
+  arguments.SetReturn(result);
 }
 
 DEFINE_RUNTIME_ENTRY(InitStaticField, 1) {
   const Field& field = Field::CheckedHandle(zone, arguments.ArgAt(0));
-  const Error& result = Error::Handle(zone, field.InitializeStatic());
+  Object& result = Object::Handle(zone, field.InitializeStatic());
   ThrowIfError(result);
+  result = field.StaticValue();
+  ASSERT((result.raw() != Object::sentinel().raw()) &&
+         (result.raw() != Object::transition_sentinel().raw()));
+  arguments.SetReturn(result);
 }
 
 DEFINE_RUNTIME_ENTRY(LateInitializationError, 1) {
diff --git a/runtime/vm/simulator_arm64.cc b/runtime/vm/simulator_arm64.cc
index fc6f660..456ab1c 100644
--- a/runtime/vm/simulator_arm64.cc
+++ b/runtime/vm/simulator_arm64.cc
@@ -2171,7 +2171,6 @@
     UNIMPLEMENTED();
   }
   const Register rs = instr->RsField();
-  ASSERT(rs == R31);  // Should-Be-One
   const Register rn = instr->RnField();
   const Register rt = instr->RtField();
   ASSERT(instr->Rt2Field() == R31);  // Should-Be-One
@@ -2181,12 +2180,14 @@
   if (is_load) {
     const bool is_load_acquire = !is_exclusive && is_ordered;
     if (is_load_acquire) {
+      ASSERT(rs == R31);  // Should-Be-One
       // Format(instr, "ldar 'rt, 'rn");
       const int64_t addr = get_register(rn, R31IsSP);
       const intptr_t value =
           (size == 3) ? ReadAcquire(addr, instr) : ReadAcquireW(addr, instr);
       set_register(instr, rt, value, R31IsSP);
     } else {
+      ASSERT(rs == R31);  // Should-Be-One
       // Format(instr, "ldxr 'rt, 'rn");
       const int64_t addr = get_register(rn, R31IsSP);
       const intptr_t value = (size == 3) ? ReadExclusiveX(addr, instr)
@@ -2196,6 +2197,7 @@
   } else {
     const bool is_store_release = !is_exclusive && is_ordered;
     if (is_store_release) {
+      ASSERT(rs == R31);  // Should-Be-One
       // Format(instr, "stlr 'rt, 'rn");
       const uword value = get_register(rt, R31IsSP);
       const uword addr = get_register(rn, R31IsSP);
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index 44a52c1..5668365 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -699,8 +699,6 @@
 }
 
 VM_UNIT_TEST_CASE(FullSnapshot) {
-  bool nullSafety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = nullSafety ? "?" : "";
   // clang-format off
   auto kScriptChars = Utils::CStringUniquePtr(
       OS::SCreate(
@@ -727,7 +725,7 @@
           "    return obj;\n"
           "  }\n"
           "}\n",
-          nullableTag),
+          TestCase::NullableTag()),
       std::free);
   // clang-format on
   Dart_Handle result;
diff --git a/runtime/vm/stack_frame_test.cc b/runtime/vm/stack_frame_test.cc
index 4b474f5..b20e4b8 100644
--- a/runtime/vm/stack_frame_test.cc
+++ b/runtime/vm/stack_frame_test.cc
@@ -159,8 +159,7 @@
 
 // Unit test case to verify stack frame iteration.
 TEST_CASE(ValidateStackFrameIteration) {
-  bool nullSafety = (FLAG_null_safety == kNullSafetyOptionStrong);
-  const char* nullableTag = nullSafety ? "?" : "";
+  const char* nullable_tag = TestCase::NullableTag();
   // clang-format off
   auto kScriptChars = Utils::CStringUniquePtr(
       OS::SCreate(
@@ -243,8 +242,8 @@
           "    obj.method1(2);"
           "  }"
           "}",
-          nullableTag, nullableTag, nullableTag, nullableTag, nullableTag,
-          nullableTag, nullableTag, nullableTag),
+          nullable_tag, nullable_tag, nullable_tag, nullable_tag, nullable_tag,
+          nullable_tag, nullable_tag, nullable_tag),
       std::free);
   // clang-format on
   Dart_Handle lib = TestCase::LoadTestScript(
diff --git a/runtime/vm/stack_frame_x64.h b/runtime/vm/stack_frame_x64.h
index 1f9435a..b488d24 100644
--- a/runtime/vm/stack_frame_x64.h
+++ b/runtime/vm/stack_frame_x64.h
@@ -52,11 +52,11 @@
 static const int kLastParamSlotFromEntrySp = 1;  // Skip return address.
 
 // Entry and exit frame layout.
-#if defined(_WIN64)
+#if defined(TARGET_OS_WINDOWS)
 static const int kExitLinkSlotFromEntryFp = -32;
 #else
 static const int kExitLinkSlotFromEntryFp = -10;
-#endif  // defined(_WIN64)
+#endif  // defined(TARGET_OS_WINDOWS)
 
 // For FFI native -> Dart callbacks, the number of stack slots between arguments
 // passed on stack and arguments saved in callback prologue. 2 = return adddress
diff --git a/runtime/vm/thread_pool_test.cc b/runtime/vm/thread_pool_test.cc
index 35eaa36..1dcf3df 100644
--- a/runtime/vm/thread_pool_test.cc
+++ b/runtime/vm/thread_pool_test.cc
@@ -19,7 +19,12 @@
   UNIT_TEST_CASE(name) {                                                       \
     OSThread::Init();                                                          \
     name##helper();                                                            \
-    OSThread::Cleanup();                                                       \
+    /* Delete the current thread's TLS and set it's TLS to null. */            \
+    /* If it is the last thread then the destructor would call */              \
+    /* OSThread::Cleanup. */                                                   \
+    OSThread* os_thread = OSThread::Current();                                 \
+    OSThread::SetCurrent(nullptr);                                             \
+    delete os_thread;                                                          \
   }                                                                            \
   void name##helper()
 
diff --git a/runtime/vm/timeline.cc b/runtime/vm/timeline.cc
index 2fe569c..94b0cf3 100644
--- a/runtime/vm/timeline.cc
+++ b/runtime/vm/timeline.cc
@@ -1581,7 +1581,7 @@
          (phase[0] == 'B') || (phase[0] == 'E'));
   ASSERT(phase[1] == '\0');
   const int64_t start = OS::GetCurrentMonotonicMicros();
-  const int64_t start_cpu = OS::GetCurrentThreadCPUMicros();
+  const int64_t start_cpu = OS::GetCurrentThreadCPUMicrosForTimeline();
   switch (phase[0]) {
     case 'n':
       event->AsyncInstant(name, id, start);
diff --git a/runtime/vm/timeline.h b/runtime/vm/timeline.h
index 57f0dc7..2824fd0 100644
--- a/runtime/vm/timeline.h
+++ b/runtime/vm/timeline.h
@@ -248,11 +248,13 @@
                 int64_t async_id,
                 int64_t micros = OS::GetCurrentMonotonicMicros());
 
-  void DurationBegin(const char* label,
-                     int64_t micros = OS::GetCurrentMonotonicMicros(),
-                     int64_t thread_micros = OS::GetCurrentThreadCPUMicros());
-  void DurationEnd(int64_t micros = OS::GetCurrentMonotonicMicros(),
-                   int64_t thread_micros = OS::GetCurrentThreadCPUMicros());
+  void DurationBegin(
+      const char* label,
+      int64_t micros = OS::GetCurrentMonotonicMicros(),
+      int64_t thread_micros = OS::GetCurrentThreadCPUMicrosForTimeline());
+  void DurationEnd(
+      int64_t micros = OS::GetCurrentMonotonicMicros(),
+      int64_t thread_micros = OS::GetCurrentThreadCPUMicrosForTimeline());
 
   void Instant(const char* label,
                int64_t micros = OS::GetCurrentMonotonicMicros());
@@ -263,13 +265,14 @@
                 int64_t thread_start_micros = -1,
                 int64_t thread_end_micros = -1);
 
-  void Begin(const char* label,
-             int64_t micros = OS::GetCurrentMonotonicMicros(),
-             int64_t thread_micros = OS::GetCurrentThreadCPUMicros());
+  void Begin(
+      const char* label,
+      int64_t micros = OS::GetCurrentMonotonicMicros(),
+      int64_t thread_micros = OS::GetCurrentThreadCPUMicrosForTimeline());
 
   void End(const char* label,
            int64_t micros = OS::GetCurrentMonotonicMicros(),
-           int64_t thread_micros = OS::GetCurrentThreadCPUMicros());
+           int64_t thread_micros = OS::GetCurrentThreadCPUMicrosForTimeline());
 
   void Counter(const char* label,
                int64_t micros = OS::GetCurrentMonotonicMicros());
diff --git a/runtime/vm/type_testing_stubs_test.cc b/runtime/vm/type_testing_stubs_test.cc
index 57e9459..1094bb4 100644
--- a/runtime/vm/type_testing_stubs_test.cc
+++ b/runtime/vm/type_testing_stubs_test.cc
@@ -444,13 +444,21 @@
 
   const auto& type_dynamic = Type::Handle(Type::DynamicType());
   auto& type_int = Type::Handle(Type::IntType());
-  type_int = type_int.ToNullability(Nullability::kLegacy, Heap::kNew);
+  if (!TestCase::IsNNBD()) {
+    type_int = type_int.ToNullability(Nullability::kLegacy, Heap::kNew);
+  }
   auto& type_string = Type::Handle(Type::StringType());
-  type_string = type_string.ToNullability(Nullability::kLegacy, Heap::kNew);
+  if (!TestCase::IsNNBD()) {
+    type_string = type_string.ToNullability(Nullability::kLegacy, Heap::kNew);
+  }
   auto& type_object = Type::Handle(Type::ObjectType());
-  type_object = type_object.ToNullability(Nullability::kLegacy, Heap::kNew);
+  type_object = type_object.ToNullability(
+      TestCase::IsNNBD() ? Nullability::kNullable : Nullability::kLegacy,
+      Heap::kNew);
   auto& type_a1 = Type::Handle(class_a1.DeclarationType());
-  type_a1 = type_a1.ToNullability(Nullability::kLegacy, Heap::kNew);
+  if (!TestCase::IsNNBD()) {
+    type_a1 = type_a1.ToNullability(Nullability::kLegacy, Heap::kNew);
+  }
   FinalizeAndCanonicalize(class_null, &type_a1);
 
   const auto& tav_null = TypeArguments::Handle(TypeArguments::null());
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index 2db8a7b..bcc7d99 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -218,6 +218,10 @@
   return NULL;
 }
 
+bool TestCase::IsNNBD() {
+  return KernelIsolate::GetExperimentalFlag("non-nullable");
+}
+
 #ifndef PRODUCT
 static const char* kIsolateReloadTestLibSource =
     "void reloadTest() native 'Test_Reload';\n"
@@ -320,10 +324,18 @@
                                          const char* multiroot_filepaths,
                                          const char* multiroot_scheme) {
   Zone* zone = Thread::Current()->zone();
-  Dart_KernelCompilationResult compilation_result = Dart_CompileSourcesToKernel(
+  Dart_KernelCompilationResult result = KernelIsolate::CompileToKernel(
       url, platform_strong_dill, platform_strong_dill_size, sourcefiles_count,
       sourcefiles, incrementally, NULL, multiroot_filepaths, multiroot_scheme);
-  return ValidateCompilationResult(zone, compilation_result, kernel_buffer,
+  if (result.status == Dart_KernelCompilationStatus_Ok) {
+    if (KernelIsolate::AcceptCompilation().status !=
+        Dart_KernelCompilationStatus_Ok) {
+      FATAL(
+          "An error occurred in the CFE while accepting the most recent"
+          " compilation results.");
+    }
+  }
+  return ValidateCompilationResult(zone, result, kernel_buffer,
                                    kernel_buffer_size, allow_compile_errors);
 }
 
diff --git a/runtime/vm/unit_test.h b/runtime/vm/unit_test.h
index f576b71..0ef84f1 100644
--- a/runtime/vm/unit_test.h
+++ b/runtime/vm/unit_test.h
@@ -389,6 +389,13 @@
   static void AddTestLib(const char* url, const char* source);
   static const char* GetTestLib(const char* url);
 
+  // Return true if non-nullable experiment is enabled.
+  static bool IsNNBD();
+
+  static const char* NullableTag() { return IsNNBD() ? "?" : ""; }
+  static const char* NullAssertTag() { return IsNNBD() ? "!" : ""; }
+  static const char* LateTag() { return IsNNBD() ? "late" : ""; }
+
  private:
   // |data_buffer| can either be snapshot data, or kernel binary data.
   // If |data_buffer| is snapshot data, then |len| should be zero as snapshot
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 1c60679..812565a 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -628,15 +628,15 @@
   outputs = [ "$root_out_dir/dart-sdk/lib/_internal/{{source_file_part}}" ]
 }
 
-# This rule copies ddc summaries to lib/_internal
-copy("copy_dev_compiler_summary") {
+# Copies DDC's SDK outline .dill to lib/_internal
+copy("copy_dev_compiler_outline") {
   visibility = [ ":copy_dev_compiler_sdk" ]
   deps = [
     ":copy_libraries",
     "../utils/dartdevc:dartdevc_platform",
   ]
-  sources = [ "$root_out_dir/ddc_sdk.dill" ]
-  outputs = [ "$root_out_dir/dart-sdk/lib/_internal/{{source_file_part}}" ]
+  sources = [ "$root_out_dir/ddc_outline.dill" ]
+  outputs = [ "$root_out_dir/dart-sdk/lib/_internal/ddc_sdk.dill" ]
 }
 
 # This rule copies DDK's JS SDK and require.js to lib/dev_compiler/kernel/amd.
@@ -716,7 +716,7 @@
   visibility = [ ":create_full_sdk" ]
   public_deps = [
     ":copy_dev_compiler_js",
-    ":copy_dev_compiler_summary",
+    ":copy_dev_compiler_outline",
     ":copy_dev_compiler_tools",
   ]
 }
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart
index 6dd9546..ab50223 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart
@@ -305,10 +305,7 @@
     // already be scheduled. This will cause at least one more iteration to
     // run (adding another data item to the Stream) before actually pausing.
     // It could be fixed by moving the `isPaused` check inside `runBody`.
-    if (isScheduled ||
-        controller.isPaused ||
-        isSuspendedAtYieldStar ||
-        isSuspendedAtAwait) {
+    if (isScheduled || controller.isPaused || isSuspendedAtYieldStar) {
       return;
     }
     isScheduled = true;
diff --git a/sdk/lib/_internal/js_runtime/lib/js_helper.dart b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
index 0600bf7..cf0fcbb 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
@@ -3543,7 +3543,7 @@
 // This is currently a no-op in dart2js.
 void applyExtension(name, nativeObject) {}
 
-// See tests/compiler/dart2js_extra/platform_environment_variable1_test.dart
+// See tests/dart2js_2/platform_environment_variable1_test.dart
 const String testPlatformEnvironmentVariableValue = String.fromEnvironment(
     'dart2js.test.platform.environment.variable',
     defaultValue: 'not-specified');
diff --git a/sdk/lib/async/stream.dart b/sdk/lib/async/stream.dart
index 21bc370..4aae043 100644
--- a/sdk/lib/async/stream.dart
+++ b/sdk/lib/async/stream.dart
@@ -65,7 +65,7 @@
  * call occurs.
  * For example, the [first] getter listens to the stream, then returns the first
  * event that listener receives.
- * This is not necessarily the first even emitted by the stream, but the first
+ * This is not necessarily the first event emitted by the stream, but the first
  * of the *remaining* events of the broadcast stream.
  *
  * When the "done" event is fired, subscribers are unsubscribed before
diff --git a/sdk_nnbd/lib/_internal/js_dev_runtime/patch/async_patch.dart b/sdk_nnbd/lib/_internal/js_dev_runtime/patch/async_patch.dart
index 64f3983..b80c74e 100644
--- a/sdk_nnbd/lib/_internal/js_dev_runtime/patch/async_patch.dart
+++ b/sdk_nnbd/lib/_internal/js_dev_runtime/patch/async_patch.dart
@@ -303,10 +303,7 @@
     // already be scheduled. This will cause at least one more iteration to
     // run (adding another data item to the Stream) before actually pausing.
     // It could be fixed by moving the `isPaused` check inside `runBody`.
-    if (isScheduled ||
-        controller.isPaused ||
-        isSuspendedAtYieldStar ||
-        isSuspendedAtAwait) {
+    if (isScheduled || controller.isPaused || isSuspendedAtYieldStar) {
       return;
     }
     isScheduled = true;
diff --git a/sdk_nnbd/lib/_internal/js_dev_runtime/patch/io_patch.dart b/sdk_nnbd/lib/_internal/js_dev_runtime/patch/io_patch.dart
index 0504204..df163f8 100644
--- a/sdk_nnbd/lib/_internal/js_dev_runtime/patch/io_patch.dart
+++ b/sdk_nnbd/lib/_internal/js_dev_runtime/patch/io_patch.dart
@@ -303,7 +303,7 @@
 @patch
 class _ProcessUtils {
   @patch
-  static void _exit(int status) {
+  static Never _exit(int status) {
     throw UnsupportedError("ProcessUtils._exit");
   }
 
diff --git a/sdk_nnbd/lib/_internal/js_runtime/lib/io_patch.dart b/sdk_nnbd/lib/_internal/js_runtime/lib/io_patch.dart
index ff04937..2fa2e6f 100644
--- a/sdk_nnbd/lib/_internal/js_runtime/lib/io_patch.dart
+++ b/sdk_nnbd/lib/_internal/js_runtime/lib/io_patch.dart
@@ -303,7 +303,7 @@
 @patch
 class _ProcessUtils {
   @patch
-  static void _exit(int status) {
+  static Never _exit(int status) {
     throw new UnsupportedError("ProcessUtils._exit");
   }
 
diff --git a/sdk_nnbd/lib/_internal/js_runtime/lib/js_helper.dart b/sdk_nnbd/lib/_internal/js_runtime/lib/js_helper.dart
index d8c2bc0..ff906ac 100644
--- a/sdk_nnbd/lib/_internal/js_runtime/lib/js_helper.dart
+++ b/sdk_nnbd/lib/_internal/js_runtime/lib/js_helper.dart
@@ -3569,7 +3569,7 @@
 // This is currently a no-op in dart2js.
 void applyExtension(name, nativeObject) {}
 
-// See tests/compiler/dart2js_extra/platform_environment_variable1_test.dart
+// See tests/dart2js_2/platform_environment_variable1_test.dart
 const String testPlatformEnvironmentVariableValue = String.fromEnvironment(
     'dart2js.test.platform.environment.variable',
     defaultValue: 'not-specified');
diff --git a/sdk_nnbd/lib/_internal/vm/bin/process_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/process_patch.dart
index 16e866c..bb86a0d 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/process_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/process_patch.dart
@@ -135,7 +135,7 @@
 @patch
 class _ProcessUtils {
   @patch
-  static void _exit(int status) native "Process_Exit";
+  static Never _exit(int status) native "Process_Exit";
   @patch
   static void _setExitCode(int status) native "Process_SetExitCode";
   @patch
diff --git a/sdk_nnbd/lib/io/process.dart b/sdk_nnbd/lib/io/process.dart
index 9b2884f..e15ba58 100644
--- a/sdk_nnbd/lib/io/process.dart
+++ b/sdk_nnbd/lib/io/process.dart
@@ -7,7 +7,7 @@
 // TODO(ager): The only reason for this class is that we
 // cannot patch a top-level at this point.
 class _ProcessUtils {
-  external static void _exit(int status);
+  external static Never _exit(int status);
   external static void _setExitCode(int status);
   external static int _getExitCode();
   external static void _sleep(int millis);
@@ -49,7 +49,7 @@
  * program to the surrounding environment. This will avoid any
  * cross-platform issues.
  */
-void exit(int code) {
+Never exit(int code) {
   ArgumentError.checkNotNull(code, "code");
   if (!_EmbedderConfig._mayExit) {
     throw new UnsupportedError(
diff --git a/sdk_nnbd/lib/vmservice/vmservice.dart b/sdk_nnbd/lib/vmservice/vmservice.dart
index 4f3c12d..bbfb61b 100644
--- a/sdk_nnbd/lib/vmservice/vmservice.dart
+++ b/sdk_nnbd/lib/vmservice/vmservice.dart
@@ -655,7 +655,7 @@
     return encodeSuccess(message);
   }
 
-  void _sendServiceRegisteredEvent(Client client, String service,
+  Future<void> _sendServiceRegisteredEvent(Client client, String service,
       {Client? target}) async {
     final namespace = clients.keyOf(client);
     final alias = client.services[service];
diff --git a/tests/compiler/dart2js_extra/if_null2_test.dart b/tests/compiler/dart2js_extra/if_null2_test.dart
deleted file mode 100644
index 907799a..0000000
--- a/tests/compiler/dart2js_extra/if_null2_test.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.7
-
-/// Regression for #24134: inference was not tracking ??= correctly.
-library tests.compiler.dart2js_extra.if_null2_test;
-
-import "package:expect/expect.dart";
-
-main() {
-  var map;
-  map ??= {};
-  Expect.equals(0, map.length);
-  Expect.isTrue(map.length == 0);
-}
diff --git a/tests/compiler/dart2js_extra/if_null3_test.dart b/tests/compiler/dart2js_extra/if_null3_test.dart
deleted file mode 100644
index 49383c1..0000000
--- a/tests/compiler/dart2js_extra/if_null3_test.dart
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.7
-
-/// Regression for #24135: inference was not tracking `[]??=` correctly.
-library tests.compiler.dart2js_extra.if_null3_test;
-
-import "package:expect/expect.dart";
-
-void main() {
-  var map;
-  (((map ??= {})['key1'] ??= {})['key2'] ??= {})['key3'] = 'value';
-  Expect.equals('{key1: {key2: {key3: value}}}', '$map');
-}
diff --git a/tests/compiler/dart2js_extra/inferrer_is_int_test.dart b/tests/compiler/dart2js_extra/inferrer_is_int_test.dart
deleted file mode 100644
index 056fec6..0000000
--- a/tests/compiler/dart2js_extra/inferrer_is_int_test.dart
+++ /dev/null
@@ -1,32 +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 = 2.7
-
-// Test that dart2js's inferrer and code optimizers know a double
-// literal might become an int at runtime.
-
-import "package:expect/expect.dart";
-import '../../language_2/compiler_annotations.dart';
-
-@DontInline()
-callWithStringAndDouble(value) {
-  () => 42;
-  if (value is! int) throw new ArgumentError(value);
-  return 42;
-}
-
-@DontInline()
-callWithDouble(value) {
-  () => 42;
-  if (value is! int) throw new ArgumentError(value);
-  return 42;
-}
-
-main() {
-  Expect.throws(
-      () => callWithStringAndDouble('foo'), (e) => e is ArgumentError);
-  Expect.equals(42, callWithStringAndDouble(0.0));
-  Expect.equals(42, callWithDouble(0.0));
-}
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 4ed80aa..0e59aaa 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -58,3 +58,6 @@
 bigint_parse_radix_test: Skip # Issue 31659. Issue 34361.
 bigint_test: Skip # Issue 31659
 integer_parsed_mul_div_vm_test: Slow, Pass # Slow
+
+[ $system == android ]
+throw_half_surrogate_pair_test/* : Skip # Issue http://dartbug.com/42094
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index b47a5b6..5226c43 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -11,6 +11,9 @@
 [ $runtime != none ]
 string_runes_test: Skip # See breaking change #40674
 
+[ $system == android ]
+throw_half_surrogate_pair_test/*: Skip # Issue http://dartbug.com/42094
+
 [ $arch == x64 && $system == windows ]
 stopwatch_test: Skip # Flaky test due to expected performance behaviour.
 
diff --git a/tests/compiler/dart2js_extra/10216a_test.dart b/tests/dart2js_2/10216a_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/10216a_test.dart
rename to tests/dart2js_2/10216a_test.dart
diff --git a/tests/compiler/dart2js_extra/10216b_test.dart b/tests/dart2js_2/10216b_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/10216b_test.dart
rename to tests/dart2js_2/10216b_test.dart
diff --git a/tests/compiler/dart2js_extra/11673_test.dart b/tests/dart2js_2/11673_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/11673_test.dart
rename to tests/dart2js_2/11673_test.dart
diff --git a/tests/compiler/dart2js_extra/12320_test.dart b/tests/dart2js_2/12320_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/12320_test.dart
rename to tests/dart2js_2/12320_test.dart
diff --git a/tests/compiler/dart2js_extra/12_test.dart b/tests/dart2js_2/12_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/12_test.dart
rename to tests/dart2js_2/12_test.dart
diff --git a/tests/compiler/dart2js_extra/16400_test.dart b/tests/dart2js_2/16400_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/16400_test.dart
rename to tests/dart2js_2/16400_test.dart
diff --git a/tests/compiler/dart2js_extra/16407_test.dart b/tests/dart2js_2/16407_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/16407_test.dart
rename to tests/dart2js_2/16407_test.dart
diff --git a/tests/compiler/dart2js_extra/16967_test.dart b/tests/dart2js_2/16967_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/16967_test.dart
rename to tests/dart2js_2/16967_test.dart
diff --git a/tests/compiler/dart2js_extra/17094_test.dart b/tests/dart2js_2/17094_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/17094_test.dart
rename to tests/dart2js_2/17094_test.dart
diff --git a/tests/compiler/dart2js_extra/17645_test.dart b/tests/dart2js_2/17645_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/17645_test.dart
rename to tests/dart2js_2/17645_test.dart
diff --git a/tests/compiler/dart2js_extra/17856_test.dart b/tests/dart2js_2/17856_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/17856_test.dart
rename to tests/dart2js_2/17856_test.dart
diff --git a/tests/compiler/dart2js_extra/18383_test.dart b/tests/dart2js_2/18383_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/18383_test.dart
rename to tests/dart2js_2/18383_test.dart
diff --git a/tests/compiler/dart2js_extra/19191_test.dart b/tests/dart2js_2/19191_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/19191_test.dart
rename to tests/dart2js_2/19191_test.dart
diff --git a/tests/compiler/dart2js_extra/21351_test.dart b/tests/dart2js_2/21351_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/21351_test.dart
rename to tests/dart2js_2/21351_test.dart
diff --git a/tests/compiler/dart2js_extra/21579_test.dart b/tests/dart2js_2/21579_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/21579_test.dart
rename to tests/dart2js_2/21579_test.dart
diff --git a/tests/compiler/dart2js_extra/22487_test.dart b/tests/dart2js_2/22487_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/22487_test.dart
rename to tests/dart2js_2/22487_test.dart
diff --git a/tests/compiler/dart2js_extra/22776_test.dart b/tests/dart2js_2/22776_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/22776_test.dart
rename to tests/dart2js_2/22776_test.dart
diff --git a/tests/compiler/dart2js_extra/22868_test.dart b/tests/dart2js_2/22868_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/22868_test.dart
rename to tests/dart2js_2/22868_test.dart
diff --git a/tests/compiler/dart2js_extra/22917_test.dart b/tests/dart2js_2/22917_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/22917_test.dart
rename to tests/dart2js_2/22917_test.dart
diff --git a/tests/compiler/dart2js_extra/23404_test.dart b/tests/dart2js_2/23404_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/23404_test.dart
rename to tests/dart2js_2/23404_test.dart
diff --git a/tests/compiler/dart2js_extra/23432_test.dart b/tests/dart2js_2/23432_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/23432_test.dart
rename to tests/dart2js_2/23432_test.dart
diff --git a/tests/compiler/dart2js_extra/23486_helper.dart b/tests/dart2js_2/23486_helper.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/23486_helper.dart
rename to tests/dart2js_2/23486_helper.dart
diff --git a/tests/compiler/dart2js_extra/23486_test.dart b/tests/dart2js_2/23486_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/23486_test.dart
rename to tests/dart2js_2/23486_test.dart
diff --git a/tests/compiler/dart2js_extra/23804_test.dart b/tests/dart2js_2/23804_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/23804_test.dart
rename to tests/dart2js_2/23804_test.dart
diff --git a/tests/compiler/dart2js_extra/23828_test.dart b/tests/dart2js_2/23828_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/23828_test.dart
rename to tests/dart2js_2/23828_test.dart
diff --git a/tests/compiler/dart2js_extra/26243_test.dart b/tests/dart2js_2/26243_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/26243_test.dart
rename to tests/dart2js_2/26243_test.dart
diff --git a/tests/compiler/dart2js_extra/27198_test.dart b/tests/dart2js_2/27198_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/27198_test.dart
rename to tests/dart2js_2/27198_test.dart
diff --git a/tests/compiler/dart2js_extra/27199_test.dart b/tests/dart2js_2/27199_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/27199_test.dart
rename to tests/dart2js_2/27199_test.dart
diff --git a/tests/compiler/dart2js_extra/27323_test.dart b/tests/dart2js_2/27323_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/27323_test.dart
rename to tests/dart2js_2/27323_test.dart
diff --git a/tests/compiler/dart2js_extra/27354_test.dart b/tests/dart2js_2/27354_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/27354_test.dart
rename to tests/dart2js_2/27354_test.dart
diff --git a/tests/compiler/dart2js_extra/28749_test.dart b/tests/dart2js_2/28749_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/28749_test.dart
rename to tests/dart2js_2/28749_test.dart
diff --git a/tests/compiler/dart2js_extra/28919_test.dart b/tests/dart2js_2/28919_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/28919_test.dart
rename to tests/dart2js_2/28919_test.dart
diff --git a/tests/compiler/dart2js_extra/29130_test.dart b/tests/dart2js_2/29130_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/29130_test.dart
rename to tests/dart2js_2/29130_test.dart
diff --git a/tests/compiler/dart2js_extra/31803_test.dart b/tests/dart2js_2/31803_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/31803_test.dart
rename to tests/dart2js_2/31803_test.dart
diff --git a/tests/compiler/dart2js_extra/32770a_test.dart b/tests/dart2js_2/32770a_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/32770a_test.dart
rename to tests/dart2js_2/32770a_test.dart
diff --git a/tests/compiler/dart2js_extra/32770b_test.dart b/tests/dart2js_2/32770b_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/32770b_test.dart
rename to tests/dart2js_2/32770b_test.dart
diff --git a/tests/compiler/dart2js_extra/32770c_test.dart b/tests/dart2js_2/32770c_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/32770c_test.dart
rename to tests/dart2js_2/32770c_test.dart
diff --git a/tests/compiler/dart2js_extra/32774_test.dart b/tests/dart2js_2/32774_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/32774_test.dart
rename to tests/dart2js_2/32774_test.dart
diff --git a/tests/compiler/dart2js_extra/32828_test.dart b/tests/dart2js_2/32828_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/32828_test.dart
rename to tests/dart2js_2/32828_test.dart
diff --git a/tests/compiler/dart2js_extra/32853_test.dart b/tests/dart2js_2/32853_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/32853_test.dart
rename to tests/dart2js_2/32853_test.dart
diff --git a/tests/compiler/dart2js_extra/32928_test.dart b/tests/dart2js_2/32928_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/32928_test.dart
rename to tests/dart2js_2/32928_test.dart
diff --git a/tests/compiler/dart2js_extra/32969_test.dart b/tests/dart2js_2/32969_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/32969_test.dart
rename to tests/dart2js_2/32969_test.dart
diff --git a/tests/compiler/dart2js_extra/32997a_lib.dart b/tests/dart2js_2/32997a_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/32997a_lib.dart
rename to tests/dart2js_2/32997a_lib.dart
diff --git a/tests/compiler/dart2js_extra/32997a_test.dart b/tests/dart2js_2/32997a_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/32997a_test.dart
rename to tests/dart2js_2/32997a_test.dart
diff --git a/tests/compiler/dart2js_extra/32997b_lib.dart b/tests/dart2js_2/32997b_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/32997b_lib.dart
rename to tests/dart2js_2/32997b_lib.dart
diff --git a/tests/compiler/dart2js_extra/32997b_test.dart b/tests/dart2js_2/32997b_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/32997b_test.dart
rename to tests/dart2js_2/32997b_test.dart
diff --git a/tests/compiler/dart2js_extra/33296_test.dart b/tests/dart2js_2/33296_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/33296_test.dart
rename to tests/dart2js_2/33296_test.dart
diff --git a/tests/compiler/dart2js_extra/33572_test.dart b/tests/dart2js_2/33572_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/33572_test.dart
rename to tests/dart2js_2/33572_test.dart
diff --git a/tests/compiler/dart2js_extra/33_test.dart b/tests/dart2js_2/33_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/33_test.dart
rename to tests/dart2js_2/33_test.dart
diff --git a/tests/compiler/dart2js_extra/34156_test.dart b/tests/dart2js_2/34156_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/34156_test.dart
rename to tests/dart2js_2/34156_test.dart
diff --git a/tests/compiler/dart2js_extra/34701_test.dart b/tests/dart2js_2/34701_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/34701_test.dart
rename to tests/dart2js_2/34701_test.dart
diff --git a/tests/compiler/dart2js_extra/35341_test.dart b/tests/dart2js_2/35341_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/35341_test.dart
rename to tests/dart2js_2/35341_test.dart
diff --git a/tests/compiler/dart2js_extra/35356_test.dart b/tests/dart2js_2/35356_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/35356_test.dart
rename to tests/dart2js_2/35356_test.dart
diff --git a/tests/compiler/dart2js_extra/35853_test.dart b/tests/dart2js_2/35853_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/35853_test.dart
rename to tests/dart2js_2/35853_test.dart
diff --git a/tests/compiler/dart2js_extra/35965a_test.dart b/tests/dart2js_2/35965a_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/35965a_test.dart
rename to tests/dart2js_2/35965a_test.dart
diff --git a/tests/compiler/dart2js_extra/37494_test.dart b/tests/dart2js_2/37494_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/37494_test.dart
rename to tests/dart2js_2/37494_test.dart
diff --git a/tests/compiler/dart2js_extra/37576_test.dart b/tests/dart2js_2/37576_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/37576_test.dart
rename to tests/dart2js_2/37576_test.dart
diff --git a/tests/compiler/dart2js_extra/38005_test.dart b/tests/dart2js_2/38005_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/38005_test.dart
rename to tests/dart2js_2/38005_test.dart
diff --git a/tests/compiler/dart2js_extra/38949_test.dart b/tests/dart2js_2/38949_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/38949_test.dart
rename to tests/dart2js_2/38949_test.dart
diff --git a/tests/compiler/dart2js_extra/3_test.dart b/tests/dart2js_2/3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/3_test.dart
rename to tests/dart2js_2/3_test.dart
diff --git a/tests/compiler/dart2js_extra/40152a_test.dart b/tests/dart2js_2/40152a_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/40152a_test.dart
rename to tests/dart2js_2/40152a_test.dart
diff --git a/tests/compiler/dart2js_extra/40902_test.dart b/tests/dart2js_2/40902_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/40902_test.dart
rename to tests/dart2js_2/40902_test.dart
diff --git a/tests/compiler/dart2js_extra/43_test.dart b/tests/dart2js_2/43_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/43_test.dart
rename to tests/dart2js_2/43_test.dart
diff --git a/tests/compiler/dart2js_extra/7_test.dart b/tests/dart2js_2/7_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/7_test.dart
rename to tests/dart2js_2/7_test.dart
diff --git a/tests/compiler/dart2js_extra/881_test.dart b/tests/dart2js_2/881_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/881_test.dart
rename to tests/dart2js_2/881_test.dart
diff --git a/tests/compiler/dart2js_extra/LayoutTests_fast_mediastream_getusermedia_t01_test.dart b/tests/dart2js_2/LayoutTests_fast_mediastream_getusermedia_t01_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/LayoutTests_fast_mediastream_getusermedia_t01_test.dart
rename to tests/dart2js_2/LayoutTests_fast_mediastream_getusermedia_t01_test.dart
diff --git a/tests/compiler/dart2js_extra/assert_with_message_test.dart b/tests/dart2js_2/assert_with_message_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/assert_with_message_test.dart
rename to tests/dart2js_2/assert_with_message_test.dart
diff --git a/tests/compiler/dart2js_extra/async_helper.dart b/tests/dart2js_2/async_helper.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/async_helper.dart
rename to tests/dart2js_2/async_helper.dart
diff --git a/tests/compiler/dart2js_extra/async_stacktrace_test.dart b/tests/dart2js_2/async_stacktrace_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/async_stacktrace_test.dart
rename to tests/dart2js_2/async_stacktrace_test.dart
diff --git a/tests/compiler/dart2js_extra/big_allocation_expression_test.dart b/tests/dart2js_2/big_allocation_expression_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/big_allocation_expression_test.dart
rename to tests/dart2js_2/big_allocation_expression_test.dart
diff --git a/tests/compiler/dart2js_extra/block_expression_on_field_test.dart b/tests/dart2js_2/block_expression_on_field_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/block_expression_on_field_test.dart
rename to tests/dart2js_2/block_expression_on_field_test.dart
diff --git a/tests/compiler/dart2js_extra/boolean_conversion_test.dart b/tests/dart2js_2/boolean_conversion_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/boolean_conversion_test.dart
rename to tests/dart2js_2/boolean_conversion_test.dart
diff --git a/tests/compiler/dart2js_extra/bound_closure_interceptor_methods_test.dart b/tests/dart2js_2/bound_closure_interceptor_methods_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/bound_closure_interceptor_methods_test.dart
rename to tests/dart2js_2/bound_closure_interceptor_methods_test.dart
diff --git a/tests/compiler/dart2js_extra/bound_closure_interceptor_type_test.dart b/tests/dart2js_2/bound_closure_interceptor_type_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/bound_closure_interceptor_type_test.dart
rename to tests/dart2js_2/bound_closure_interceptor_type_test.dart
diff --git a/tests/compiler/dart2js_extra/bounded_type_literal_test.dart b/tests/dart2js_2/bounded_type_literal_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/bounded_type_literal_test.dart
rename to tests/dart2js_2/bounded_type_literal_test.dart
diff --git a/tests/compiler/dart2js_extra/bounds_check1a_test.dart b/tests/dart2js_2/bounds_check1a_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/bounds_check1a_test.dart
rename to tests/dart2js_2/bounds_check1a_test.dart
diff --git a/tests/compiler/dart2js_extra/bounds_check1b_test.dart b/tests/dart2js_2/bounds_check1b_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/bounds_check1b_test.dart
rename to tests/dart2js_2/bounds_check1b_test.dart
diff --git a/tests/compiler/dart2js_extra/bounds_check2a_test.dart b/tests/dart2js_2/bounds_check2a_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/bounds_check2a_test.dart
rename to tests/dart2js_2/bounds_check2a_test.dart
diff --git a/tests/compiler/dart2js_extra/bounds_check2b_test.dart b/tests/dart2js_2/bounds_check2b_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/bounds_check2b_test.dart
rename to tests/dart2js_2/bounds_check2b_test.dart
diff --git a/tests/compiler/dart2js_extra/bounds_check3a_test.dart b/tests/dart2js_2/bounds_check3a_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/bounds_check3a_test.dart
rename to tests/dart2js_2/bounds_check3a_test.dart
diff --git a/tests/compiler/dart2js_extra/bounds_check3b_test.dart b/tests/dart2js_2/bounds_check3b_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/bounds_check3b_test.dart
rename to tests/dart2js_2/bounds_check3b_test.dart
diff --git a/tests/compiler/dart2js_extra/bounds_check3c_test.dart b/tests/dart2js_2/bounds_check3c_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/bounds_check3c_test.dart
rename to tests/dart2js_2/bounds_check3c_test.dart
diff --git a/tests/compiler/dart2js_extra/bounds_check4a_test.dart b/tests/dart2js_2/bounds_check4a_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/bounds_check4a_test.dart
rename to tests/dart2js_2/bounds_check4a_test.dart
diff --git a/tests/compiler/dart2js_extra/bounds_check4b_test.dart b/tests/dart2js_2/bounds_check4b_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/bounds_check4b_test.dart
rename to tests/dart2js_2/bounds_check4b_test.dart
diff --git a/tests/compiler/dart2js_extra/bounds_check_test.dart b/tests/dart2js_2/bounds_check_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/bounds_check_test.dart
rename to tests/dart2js_2/bounds_check_test.dart
diff --git a/tests/compiler/dart2js_extra/break_test.dart b/tests/dart2js_2/break_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/break_test.dart
rename to tests/dart2js_2/break_test.dart
diff --git a/tests/compiler/dart2js_extra/call_is_function_test.dart b/tests/dart2js_2/call_is_function_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/call_is_function_test.dart
rename to tests/dart2js_2/call_is_function_test.dart
diff --git a/tests/compiler/dart2js_extra/call_signature_test.dart b/tests/dart2js_2/call_signature_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/call_signature_test.dart
rename to tests/dart2js_2/call_signature_test.dart
diff --git a/tests/compiler/dart2js_extra/call_uninlined_test.dart b/tests/dart2js_2/call_uninlined_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/call_uninlined_test.dart
rename to tests/dart2js_2/call_uninlined_test.dart
diff --git a/tests/compiler/dart2js_extra/cfe_instance_constant_test.dart b/tests/dart2js_2/cfe_instance_constant_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/cfe_instance_constant_test.dart
rename to tests/dart2js_2/cfe_instance_constant_test.dart
diff --git a/tests/compiler/dart2js_extra/checked_setter_test.dart b/tests/dart2js_2/checked_setter_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/checked_setter_test.dart
rename to tests/dart2js_2/checked_setter_test.dart
diff --git a/tests/compiler/dart2js_extra/class_hierarchy_extends_clause_test.dart b/tests/dart2js_2/class_hierarchy_extends_clause_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/class_hierarchy_extends_clause_test.dart
rename to tests/dart2js_2/class_hierarchy_extends_clause_test.dart
diff --git a/tests/compiler/dart2js_extra/closure2_test.dart b/tests/dart2js_2/closure2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/closure2_test.dart
rename to tests/dart2js_2/closure2_test.dart
diff --git a/tests/compiler/dart2js_extra/closure3_test.dart b/tests/dart2js_2/closure3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/closure3_test.dart
rename to tests/dart2js_2/closure3_test.dart
diff --git a/tests/compiler/dart2js_extra/closure4_test.dart b/tests/dart2js_2/closure4_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/closure4_test.dart
rename to tests/dart2js_2/closure4_test.dart
diff --git a/tests/compiler/dart2js_extra/closure5_test.dart b/tests/dart2js_2/closure5_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/closure5_test.dart
rename to tests/dart2js_2/closure5_test.dart
diff --git a/tests/compiler/dart2js_extra/closure6_test.dart b/tests/dart2js_2/closure6_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/closure6_test.dart
rename to tests/dart2js_2/closure6_test.dart
diff --git a/tests/compiler/dart2js_extra/closure7_test.dart b/tests/dart2js_2/closure7_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/closure7_test.dart
rename to tests/dart2js_2/closure7_test.dart
diff --git a/tests/compiler/dart2js_extra/closure_capture2_test.dart b/tests/dart2js_2/closure_capture2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/closure_capture2_test.dart
rename to tests/dart2js_2/closure_capture2_test.dart
diff --git a/tests/compiler/dart2js_extra/closure_capture3_test.dart b/tests/dart2js_2/closure_capture3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/closure_capture3_test.dart
rename to tests/dart2js_2/closure_capture3_test.dart
diff --git a/tests/compiler/dart2js_extra/closure_capture4_test.dart b/tests/dart2js_2/closure_capture4_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/closure_capture4_test.dart
rename to tests/dart2js_2/closure_capture4_test.dart
diff --git a/tests/compiler/dart2js_extra/closure_capture5_test.dart b/tests/dart2js_2/closure_capture5_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/closure_capture5_test.dart
rename to tests/dart2js_2/closure_capture5_test.dart
diff --git a/tests/compiler/dart2js_extra/closure_capture6_test.dart b/tests/dart2js_2/closure_capture6_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/closure_capture6_test.dart
rename to tests/dart2js_2/closure_capture6_test.dart
diff --git a/tests/compiler/dart2js_extra/closure_capture7_test.dart b/tests/dart2js_2/closure_capture7_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/closure_capture7_test.dart
rename to tests/dart2js_2/closure_capture7_test.dart
diff --git a/tests/compiler/dart2js_extra/closure_capture_test.dart b/tests/dart2js_2/closure_capture_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/closure_capture_test.dart
rename to tests/dart2js_2/closure_capture_test.dart
diff --git a/tests/compiler/dart2js_extra/closure_signature_unneeded_test.dart b/tests/dart2js_2/closure_signature_unneeded_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/closure_signature_unneeded_test.dart
rename to tests/dart2js_2/closure_signature_unneeded_test.dart
diff --git a/tests/compiler/dart2js_extra/closure_test.dart b/tests/dart2js_2/closure_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/closure_test.dart
rename to tests/dart2js_2/closure_test.dart
diff --git a/tests/compiler/dart2js_extra/code_motion_exception_test.dart b/tests/dart2js_2/code_motion_exception_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/code_motion_exception_test.dart
rename to tests/dart2js_2/code_motion_exception_test.dart
diff --git a/tests/compiler/dart2js_extra/compile_time_constant4_test.dart b/tests/dart2js_2/compile_time_constant4_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/compile_time_constant4_test.dart
rename to tests/dart2js_2/compile_time_constant4_test.dart
diff --git a/tests/compiler/dart2js_extra/compound_operator_index_test.dart b/tests/dart2js_2/compound_operator_index_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/compound_operator_index_test.dart
rename to tests/dart2js_2/compound_operator_index_test.dart
diff --git a/tests/compiler/dart2js_extra/conditional_rewrite_test.dart b/tests/dart2js_2/conditional_rewrite_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/conditional_rewrite_test.dart
rename to tests/dart2js_2/conditional_rewrite_test.dart
diff --git a/tests/compiler/dart2js_extra/conditional_send_test.dart b/tests/dart2js_2/conditional_send_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/conditional_send_test.dart
rename to tests/dart2js_2/conditional_send_test.dart
diff --git a/tests/compiler/dart2js_extra/conditional_test.dart b/tests/dart2js_2/conditional_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/conditional_test.dart
rename to tests/dart2js_2/conditional_test.dart
diff --git a/tests/compiler/dart2js_extra/conflict_index_test.dart b/tests/dart2js_2/conflict_index_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/conflict_index_test.dart
rename to tests/dart2js_2/conflict_index_test.dart
diff --git a/tests/compiler/dart2js_extra/consistent_add_error_test.dart b/tests/dart2js_2/consistent_add_error_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/consistent_add_error_test.dart
rename to tests/dart2js_2/consistent_add_error_test.dart
diff --git a/tests/compiler/dart2js_extra/consistent_codeUnitAt_error_test.dart b/tests/dart2js_2/consistent_codeUnitAt_error_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/consistent_codeUnitAt_error_test.dart
rename to tests/dart2js_2/consistent_codeUnitAt_error_test.dart
diff --git a/tests/compiler/dart2js_extra/consistent_index_error_array_test.dart b/tests/dart2js_2/consistent_index_error_array_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/consistent_index_error_array_test.dart
rename to tests/dart2js_2/consistent_index_error_array_test.dart
diff --git a/tests/compiler/dart2js_extra/consistent_index_error_string_test.dart b/tests/dart2js_2/consistent_index_error_string_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/consistent_index_error_string_test.dart
rename to tests/dart2js_2/consistent_index_error_string_test.dart
diff --git a/tests/compiler/dart2js_extra/consistent_index_error_typed_list_test.dart b/tests/dart2js_2/consistent_index_error_typed_list_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/consistent_index_error_typed_list_test.dart
rename to tests/dart2js_2/consistent_index_error_typed_list_test.dart
diff --git a/tests/compiler/dart2js_extra/consistent_null_add_error_test.dart b/tests/dart2js_2/consistent_null_add_error_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/consistent_null_add_error_test.dart
rename to tests/dart2js_2/consistent_null_add_error_test.dart
diff --git a/tests/compiler/dart2js_extra/consistent_subtract_error_test.dart b/tests/dart2js_2/consistent_subtract_error_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/consistent_subtract_error_test.dart
rename to tests/dart2js_2/consistent_subtract_error_test.dart
diff --git a/tests/compiler/dart2js_extra/consistent_type_error_test.dart b/tests/dart2js_2/consistent_type_error_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/consistent_type_error_test.dart
rename to tests/dart2js_2/consistent_type_error_test.dart
diff --git a/tests/compiler/dart2js_extra/constant_fold_number_dart2_j_s_test.dart b/tests/dart2js_2/constant_fold_number_dart2_j_s_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/constant_fold_number_dart2_j_s_test.dart
rename to tests/dart2js_2/constant_fold_number_dart2_j_s_test.dart
diff --git a/tests/compiler/dart2js_extra/constant_folding2_test.dart b/tests/dart2js_2/constant_folding2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/constant_folding2_test.dart
rename to tests/dart2js_2/constant_folding2_test.dart
diff --git a/tests/compiler/dart2js_extra/constant_folding_test.dart b/tests/dart2js_2/constant_folding_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/constant_folding_test.dart
rename to tests/dart2js_2/constant_folding_test.dart
diff --git a/tests/compiler/dart2js_extra/constant_javascript_semantics2_test.dart b/tests/dart2js_2/constant_javascript_semantics2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/constant_javascript_semantics2_test.dart
rename to tests/dart2js_2/constant_javascript_semantics2_test.dart
diff --git a/tests/compiler/dart2js_extra/constant_javascript_semantics3_test.dart b/tests/dart2js_2/constant_javascript_semantics3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/constant_javascript_semantics3_test.dart
rename to tests/dart2js_2/constant_javascript_semantics3_test.dart
diff --git a/tests/compiler/dart2js_extra/constant_javascript_semantics4_test.dart b/tests/dart2js_2/constant_javascript_semantics4_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/constant_javascript_semantics4_test.dart
rename to tests/dart2js_2/constant_javascript_semantics4_test.dart
diff --git a/tests/compiler/dart2js_extra/constant_javascript_semantics_test.dart b/tests/dart2js_2/constant_javascript_semantics_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/constant_javascript_semantics_test.dart
rename to tests/dart2js_2/constant_javascript_semantics_test.dart
diff --git a/tests/compiler/dart2js_extra/constant_javascript_semantics_test5.dart b/tests/dart2js_2/constant_javascript_semantics_test5.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/constant_javascript_semantics_test5.dart
rename to tests/dart2js_2/constant_javascript_semantics_test5.dart
diff --git a/tests/compiler/dart2js_extra/constant_truncate_test.dart b/tests/dart2js_2/constant_truncate_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/constant_truncate_test.dart
rename to tests/dart2js_2/constant_truncate_test.dart
diff --git a/tests/compiler/dart2js_extra/crash_library_metadata.dart b/tests/dart2js_2/crash_library_metadata.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/crash_library_metadata.dart
rename to tests/dart2js_2/crash_library_metadata.dart
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/dart2js_2/dart2js_2.status
similarity index 100%
rename from tests/compiler/dart2js_extra/dart2js_extra.status
rename to tests/dart2js_2/dart2js_2.status
diff --git a/tests/compiler/dart2js_extra/data_uri_test.dart b/tests/dart2js_2/data_uri_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/data_uri_test.dart
rename to tests/dart2js_2/data_uri_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/34219_bounds_lib1.dart b/tests/dart2js_2/deferred/34219_bounds_lib1.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/34219_bounds_lib1.dart
rename to tests/dart2js_2/deferred/34219_bounds_lib1.dart
diff --git a/tests/compiler/dart2js_extra/deferred/34219_bounds_lib2.dart b/tests/dart2js_2/deferred/34219_bounds_lib2.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/34219_bounds_lib2.dart
rename to tests/dart2js_2/deferred/34219_bounds_lib2.dart
diff --git a/tests/compiler/dart2js_extra/deferred/34219_bounds_lib3.dart b/tests/dart2js_2/deferred/34219_bounds_lib3.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/34219_bounds_lib3.dart
rename to tests/dart2js_2/deferred/34219_bounds_lib3.dart
diff --git a/tests/compiler/dart2js_extra/deferred/34219_bounds_test.dart b/tests/dart2js_2/deferred/34219_bounds_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/34219_bounds_test.dart
rename to tests/dart2js_2/deferred/34219_bounds_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/34219_signature_lib1.dart b/tests/dart2js_2/deferred/34219_signature_lib1.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/34219_signature_lib1.dart
rename to tests/dart2js_2/deferred/34219_signature_lib1.dart
diff --git a/tests/compiler/dart2js_extra/deferred/34219_signature_lib2.dart b/tests/dart2js_2/deferred/34219_signature_lib2.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/34219_signature_lib2.dart
rename to tests/dart2js_2/deferred/34219_signature_lib2.dart
diff --git a/tests/compiler/dart2js_extra/deferred/34219_signature_lib3.dart b/tests/dart2js_2/deferred/34219_signature_lib3.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/34219_signature_lib3.dart
rename to tests/dart2js_2/deferred/34219_signature_lib3.dart
diff --git a/tests/compiler/dart2js_extra/deferred/34219_signature_test.dart b/tests/dart2js_2/deferred/34219_signature_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/34219_signature_test.dart
rename to tests/dart2js_2/deferred/34219_signature_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/default_arg_is_tearoff_lib.dart b/tests/dart2js_2/deferred/default_arg_is_tearoff_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/default_arg_is_tearoff_lib.dart
rename to tests/dart2js_2/deferred/default_arg_is_tearoff_lib.dart
diff --git a/tests/compiler/dart2js_extra/deferred/default_arg_is_tearoff_test.dart b/tests/dart2js_2/deferred/default_arg_is_tearoff_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/default_arg_is_tearoff_test.dart
rename to tests/dart2js_2/deferred/default_arg_is_tearoff_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_class_library.dart b/tests/dart2js_2/deferred/deferred_class_library.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_class_library.dart
rename to tests/dart2js_2/deferred/deferred_class_library.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_class_library2.dart b/tests/dart2js_2/deferred/deferred_class_library2.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_class_library2.dart
rename to tests/dart2js_2/deferred/deferred_class_library2.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_class_test.dart b/tests/dart2js_2/deferred/deferred_class_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_class_test.dart
rename to tests/dart2js_2/deferred/deferred_class_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_constant2_test.dart b/tests/dart2js_2/deferred/deferred_constant2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_constant2_test.dart
rename to tests/dart2js_2/deferred/deferred_constant2_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_constant3_test.dart b/tests/dart2js_2/deferred/deferred_constant3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_constant3_test.dart
rename to tests/dart2js_2/deferred/deferred_constant3_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_constant4_test.dart b/tests/dart2js_2/deferred/deferred_constant4_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_constant4_test.dart
rename to tests/dart2js_2/deferred/deferred_constant4_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_constant_dependency_evaluation_test.dart b/tests/dart2js_2/deferred/deferred_constant_dependency_evaluation_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_constant_dependency_evaluation_test.dart
rename to tests/dart2js_2/deferred/deferred_constant_dependency_evaluation_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_function_library.dart b/tests/dart2js_2/deferred/deferred_function_library.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_function_library.dart
rename to tests/dart2js_2/deferred/deferred_function_library.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_function_test.dart b/tests/dart2js_2/deferred/deferred_function_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_function_test.dart
rename to tests/dart2js_2/deferred/deferred_function_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_metadata_lib.dart b/tests/dart2js_2/deferred/deferred_metadata_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_metadata_lib.dart
rename to tests/dart2js_2/deferred/deferred_metadata_lib.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_metadata_test.dart b/tests/dart2js_2/deferred/deferred_metadata_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_metadata_test.dart
rename to tests/dart2js_2/deferred/deferred_metadata_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib2.dart b/tests/dart2js_2/deferred/deferred_mirrors2_lib2.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib2.dart
rename to tests/dart2js_2/deferred/deferred_mirrors2_lib2.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib4.dart b/tests/dart2js_2/deferred/deferred_mirrors2_lib4.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib4.dart
rename to tests/dart2js_2/deferred/deferred_mirrors2_lib4.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib5.dart b/tests/dart2js_2/deferred/deferred_mirrors2_lib5.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib5.dart
rename to tests/dart2js_2/deferred/deferred_mirrors2_lib5.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib1.dart b/tests/dart2js_2/deferred/deferred_overlapping_lib1.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib1.dart
rename to tests/dart2js_2/deferred/deferred_overlapping_lib1.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib2.dart b/tests/dart2js_2/deferred/deferred_overlapping_lib2.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib2.dart
rename to tests/dart2js_2/deferred/deferred_overlapping_lib2.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib3.dart b/tests/dart2js_2/deferred/deferred_overlapping_lib3.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib3.dart
rename to tests/dart2js_2/deferred/deferred_overlapping_lib3.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_overlapping_test.dart b/tests/dart2js_2/deferred/deferred_overlapping_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_overlapping_test.dart
rename to tests/dart2js_2/deferred/deferred_overlapping_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_unused_classes_test.dart b/tests/dart2js_2/deferred/deferred_unused_classes_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/deferred_unused_classes_test.dart
rename to tests/dart2js_2/deferred/deferred_unused_classes_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/interface_type_variable_lib.dart b/tests/dart2js_2/deferred/interface_type_variable_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/interface_type_variable_lib.dart
rename to tests/dart2js_2/deferred/interface_type_variable_lib.dart
diff --git a/tests/compiler/dart2js_extra/deferred/interface_type_variable_test.dart b/tests/dart2js_2/deferred/interface_type_variable_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/interface_type_variable_test.dart
rename to tests/dart2js_2/deferred/interface_type_variable_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib1.dart b/tests/dart2js_2/deferred/multiple_default_arg_lib1.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib1.dart
rename to tests/dart2js_2/deferred/multiple_default_arg_lib1.dart
diff --git a/tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib2.dart b/tests/dart2js_2/deferred/multiple_default_arg_lib2.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib2.dart
rename to tests/dart2js_2/deferred/multiple_default_arg_lib2.dart
diff --git a/tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib3.dart b/tests/dart2js_2/deferred/multiple_default_arg_lib3.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib3.dart
rename to tests/dart2js_2/deferred/multiple_default_arg_lib3.dart
diff --git a/tests/compiler/dart2js_extra/deferred/multiple_default_arg_test.dart b/tests/dart2js_2/deferred/multiple_default_arg_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/multiple_default_arg_test.dart
rename to tests/dart2js_2/deferred/multiple_default_arg_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/reflect_multiple_annotations_lib1.dart b/tests/dart2js_2/deferred/reflect_multiple_annotations_lib1.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/reflect_multiple_annotations_lib1.dart
rename to tests/dart2js_2/deferred/reflect_multiple_annotations_lib1.dart
diff --git a/tests/compiler/dart2js_extra/deferred/reflect_multiple_annotations_lib2.dart b/tests/dart2js_2/deferred/reflect_multiple_annotations_lib2.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/reflect_multiple_annotations_lib2.dart
rename to tests/dart2js_2/deferred/reflect_multiple_annotations_lib2.dart
diff --git a/tests/compiler/dart2js_extra/deferred/reflect_multiple_default_arg_lib1.dart b/tests/dart2js_2/deferred/reflect_multiple_default_arg_lib1.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/reflect_multiple_default_arg_lib1.dart
rename to tests/dart2js_2/deferred/reflect_multiple_default_arg_lib1.dart
diff --git a/tests/compiler/dart2js_extra/deferred/reflect_multiple_default_arg_lib2.dart b/tests/dart2js_2/deferred/reflect_multiple_default_arg_lib2.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/reflect_multiple_default_arg_lib2.dart
rename to tests/dart2js_2/deferred/reflect_multiple_default_arg_lib2.dart
diff --git a/tests/compiler/dart2js_extra/deferred/shared_constant_a.dart b/tests/dart2js_2/deferred/shared_constant_a.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/shared_constant_a.dart
rename to tests/dart2js_2/deferred/shared_constant_a.dart
diff --git a/tests/compiler/dart2js_extra/deferred/shared_constant_b.dart b/tests/dart2js_2/deferred/shared_constant_b.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/shared_constant_b.dart
rename to tests/dart2js_2/deferred/shared_constant_b.dart
diff --git a/tests/compiler/dart2js_extra/deferred/shared_constant_c.dart b/tests/dart2js_2/deferred/shared_constant_c.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/shared_constant_c.dart
rename to tests/dart2js_2/deferred/shared_constant_c.dart
diff --git a/tests/compiler/dart2js_extra/deferred/shared_constant_shared.dart b/tests/dart2js_2/deferred/shared_constant_shared.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/shared_constant_shared.dart
rename to tests/dart2js_2/deferred/shared_constant_shared.dart
diff --git a/tests/compiler/dart2js_extra/deferred/shared_constant_test.dart b/tests/dart2js_2/deferred/shared_constant_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/shared_constant_test.dart
rename to tests/dart2js_2/deferred/shared_constant_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/type_literal_lib.dart b/tests/dart2js_2/deferred/type_literal_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/type_literal_lib.dart
rename to tests/dart2js_2/deferred/type_literal_lib.dart
diff --git a/tests/compiler/dart2js_extra/deferred/type_literal_test.dart b/tests/dart2js_2/deferred/type_literal_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/type_literal_test.dart
rename to tests/dart2js_2/deferred/type_literal_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/typedef_lib.dart b/tests/dart2js_2/deferred/typedef_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/typedef_lib.dart
rename to tests/dart2js_2/deferred/typedef_lib.dart
diff --git a/tests/compiler/dart2js_extra/deferred/typedef_test.dart b/tests/dart2js_2/deferred/typedef_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/typedef_test.dart
rename to tests/dart2js_2/deferred/typedef_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/uninstantiated_type_variable_lib.dart b/tests/dart2js_2/deferred/uninstantiated_type_variable_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/uninstantiated_type_variable_lib.dart
rename to tests/dart2js_2/deferred/uninstantiated_type_variable_lib.dart
diff --git a/tests/compiler/dart2js_extra/deferred/uninstantiated_type_variable_test.dart b/tests/dart2js_2/deferred/uninstantiated_type_variable_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/uninstantiated_type_variable_test.dart
rename to tests/dart2js_2/deferred/uninstantiated_type_variable_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_fail_and_retry_lib.dart b/tests/dart2js_2/deferred_fail_and_retry_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_fail_and_retry_lib.dart
rename to tests/dart2js_2/deferred_fail_and_retry_lib.dart
diff --git a/tests/compiler/dart2js_extra/deferred_fail_and_retry_test.dart b/tests/dart2js_2/deferred_fail_and_retry_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_fail_and_retry_test.dart
rename to tests/dart2js_2/deferred_fail_and_retry_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_function_types1_test.dart b/tests/dart2js_2/deferred_function_types1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_function_types1_test.dart
rename to tests/dart2js_2/deferred_function_types1_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_function_types2_test.dart b/tests/dart2js_2/deferred_function_types2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_function_types2_test.dart
rename to tests/dart2js_2/deferred_function_types2_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_function_types3_test.dart b/tests/dart2js_2/deferred_function_types3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_function_types3_test.dart
rename to tests/dart2js_2/deferred_function_types3_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_function_types4_test.dart b/tests/dart2js_2/deferred_function_types4_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_function_types4_test.dart
rename to tests/dart2js_2/deferred_function_types4_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_function_types5_test.dart b/tests/dart2js_2/deferred_function_types5_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_function_types5_test.dart
rename to tests/dart2js_2/deferred_function_types5_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_function_types6_test.dart b/tests/dart2js_2/deferred_function_types6_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_function_types6_test.dart
rename to tests/dart2js_2/deferred_function_types6_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_function_types7_test.dart b/tests/dart2js_2/deferred_function_types7_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_function_types7_test.dart
rename to tests/dart2js_2/deferred_function_types7_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_function_types8_test.dart b/tests/dart2js_2/deferred_function_types8_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_function_types8_test.dart
rename to tests/dart2js_2/deferred_function_types8_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_function_types_lib1.dart b/tests/dart2js_2/deferred_function_types_lib1.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_function_types_lib1.dart
rename to tests/dart2js_2/deferred_function_types_lib1.dart
diff --git a/tests/compiler/dart2js_extra/deferred_function_types_lib2.dart b/tests/dart2js_2/deferred_function_types_lib2.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_function_types_lib2.dart
rename to tests/dart2js_2/deferred_function_types_lib2.dart
diff --git a/tests/compiler/dart2js_extra/deferred_inheritance_lib1.dart b/tests/dart2js_2/deferred_inheritance_lib1.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_inheritance_lib1.dart
rename to tests/dart2js_2/deferred_inheritance_lib1.dart
diff --git a/tests/compiler/dart2js_extra/deferred_inheritance_lib2.dart b/tests/dart2js_2/deferred_inheritance_lib2.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_inheritance_lib2.dart
rename to tests/dart2js_2/deferred_inheritance_lib2.dart
diff --git a/tests/compiler/dart2js_extra/deferred_inheritance_test.dart b/tests/dart2js_2/deferred_inheritance_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_inheritance_test.dart
rename to tests/dart2js_2/deferred_inheritance_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_split_lib1.dart b/tests/dart2js_2/deferred_split_lib1.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_split_lib1.dart
rename to tests/dart2js_2/deferred_split_lib1.dart
diff --git a/tests/compiler/dart2js_extra/deferred_split_lib2.dart b/tests/dart2js_2/deferred_split_lib2.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_split_lib2.dart
rename to tests/dart2js_2/deferred_split_lib2.dart
diff --git a/tests/compiler/dart2js_extra/deferred_split_test.dart b/tests/dart2js_2/deferred_split_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_split_test.dart
rename to tests/dart2js_2/deferred_split_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_tearoff_load_library_lib.dart b/tests/dart2js_2/deferred_tearoff_load_library_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_tearoff_load_library_lib.dart
rename to tests/dart2js_2/deferred_tearoff_load_library_lib.dart
diff --git a/tests/compiler/dart2js_extra/deferred_tearoff_load_library_test.dart b/tests/dart2js_2/deferred_tearoff_load_library_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_tearoff_load_library_test.dart
rename to tests/dart2js_2/deferred_tearoff_load_library_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_with_cross_origin_lib.dart b/tests/dart2js_2/deferred_with_cross_origin_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_with_cross_origin_lib.dart
rename to tests/dart2js_2/deferred_with_cross_origin_lib.dart
diff --git a/tests/compiler/dart2js_extra/deferred_with_cross_origin_test.dart b/tests/dart2js_2/deferred_with_cross_origin_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_with_cross_origin_test.dart
rename to tests/dart2js_2/deferred_with_cross_origin_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_with_csp_nonce2_test.dart b/tests/dart2js_2/deferred_with_csp_nonce2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_with_csp_nonce2_test.dart
rename to tests/dart2js_2/deferred_with_csp_nonce2_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_with_csp_nonce_lib.dart b/tests/dart2js_2/deferred_with_csp_nonce_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_with_csp_nonce_lib.dart
rename to tests/dart2js_2/deferred_with_csp_nonce_lib.dart
diff --git a/tests/compiler/dart2js_extra/deferred_with_csp_nonce_test.dart b/tests/dart2js_2/deferred_with_csp_nonce_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_with_csp_nonce_test.dart
rename to tests/dart2js_2/deferred_with_csp_nonce_test.dart
diff --git a/tests/compiler/dart2js_extra/do_test.dart b/tests/dart2js_2/do_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/do_test.dart
rename to tests/dart2js_2/do_test.dart
diff --git a/tests/compiler/dart2js_extra/dummy_compiler_test.dart b/tests/dart2js_2/dummy_compiler_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/dummy_compiler_test.dart
rename to tests/dart2js_2/dummy_compiler_test.dart
diff --git a/tests/compiler/dart2js_extra/dynamic_bounds_check_test.dart b/tests/dart2js_2/dynamic_bounds_check_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/dynamic_bounds_check_test.dart
rename to tests/dart2js_2/dynamic_bounds_check_test.dart
diff --git a/tests/compiler/dart2js_extra/dynamic_invocation_test.dart b/tests/dart2js_2/dynamic_invocation_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/dynamic_invocation_test.dart
rename to tests/dart2js_2/dynamic_invocation_test.dart
diff --git a/tests/compiler/dart2js_extra/dynamic_type_literal_test.dart b/tests/dart2js_2/dynamic_type_literal_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/dynamic_type_literal_test.dart
rename to tests/dart2js_2/dynamic_type_literal_test.dart
diff --git a/tests/compiler/dart2js_extra/effectively_constant_fields_test.dart b/tests/dart2js_2/effectively_constant_fields_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/effectively_constant_fields_test.dart
rename to tests/dart2js_2/effectively_constant_fields_test.dart
diff --git a/tests/compiler/dart2js_extra/effectively_constant_instance_field_test.dart b/tests/dart2js_2/effectively_constant_instance_field_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/effectively_constant_instance_field_test.dart
rename to tests/dart2js_2/effectively_constant_instance_field_test.dart
diff --git a/tests/compiler/dart2js_extra/empty_method_test.dart b/tests/dart2js_2/empty_method_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/empty_method_test.dart
rename to tests/dart2js_2/empty_method_test.dart
diff --git a/tests/compiler/dart2js_extra/eof_line_ending_test.dart b/tests/dart2js_2/eof_line_ending_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/eof_line_ending_test.dart
rename to tests/dart2js_2/eof_line_ending_test.dart
diff --git a/tests/compiler/dart2js_extra/equals_test.dart b/tests/dart2js_2/equals_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/equals_test.dart
rename to tests/dart2js_2/equals_test.dart
diff --git a/tests/compiler/dart2js_extra/expose_this1_test.dart b/tests/dart2js_2/expose_this1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/expose_this1_test.dart
rename to tests/dart2js_2/expose_this1_test.dart
diff --git a/tests/compiler/dart2js_extra/expose_this2_test.dart b/tests/dart2js_2/expose_this2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/expose_this2_test.dart
rename to tests/dart2js_2/expose_this2_test.dart
diff --git a/tests/compiler/dart2js_extra/field_access_test.dart b/tests/dart2js_2/field_access_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/field_access_test.dart
rename to tests/dart2js_2/field_access_test.dart
diff --git a/tests/compiler/dart2js_extra/field_in_constructor_test.dart b/tests/dart2js_2/field_in_constructor_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/field_in_constructor_test.dart
rename to tests/dart2js_2/field_in_constructor_test.dart
diff --git a/tests/compiler/dart2js_extra/field_initializer_test.dart b/tests/dart2js_2/field_initializer_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/field_initializer_test.dart
rename to tests/dart2js_2/field_initializer_test.dart
diff --git a/tests/compiler/dart2js_extra/fields_test.dart b/tests/dart2js_2/fields_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/fields_test.dart
rename to tests/dart2js_2/fields_test.dart
diff --git a/tests/compiler/dart2js_extra/first_class_types_hashcode_test.dart b/tests/dart2js_2/first_class_types_hashcode_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/first_class_types_hashcode_test.dart
rename to tests/dart2js_2/first_class_types_hashcode_test.dart
diff --git a/tests/compiler/dart2js_extra/fixed_type_argument_implements_test.dart b/tests/dart2js_2/fixed_type_argument_implements_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/fixed_type_argument_implements_test.dart
rename to tests/dart2js_2/fixed_type_argument_implements_test.dart
diff --git a/tests/compiler/dart2js_extra/fixed_type_argument_test.dart b/tests/dart2js_2/fixed_type_argument_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/fixed_type_argument_test.dart
rename to tests/dart2js_2/fixed_type_argument_test.dart
diff --git a/tests/compiler/dart2js_extra/foo7_test.dart b/tests/dart2js_2/foo7_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/foo7_test.dart
rename to tests/dart2js_2/foo7_test.dart
diff --git a/tests/compiler/dart2js_extra/for_in_test.dart b/tests/dart2js_2/for_in_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/for_in_test.dart
rename to tests/dart2js_2/for_in_test.dart
diff --git a/tests/compiler/dart2js_extra/for_test.dart b/tests/dart2js_2/for_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/for_test.dart
rename to tests/dart2js_2/for_test.dart
diff --git a/tests/compiler/dart2js_extra/function_parameters_test.dart b/tests/dart2js_2/function_parameters_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/function_parameters_test.dart
rename to tests/dart2js_2/function_parameters_test.dart
diff --git a/tests/compiler/dart2js_extra/function_typed_arguments_test.dart b/tests/dart2js_2/function_typed_arguments_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/function_typed_arguments_test.dart
rename to tests/dart2js_2/function_typed_arguments_test.dart
diff --git a/tests/compiler/dart2js_extra/generator_elided_parameter_test.dart b/tests/dart2js_2/generator_elided_parameter_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generator_elided_parameter_test.dart
rename to tests/dart2js_2/generator_elided_parameter_test.dart
diff --git a/tests/compiler/dart2js_extra/generic_bounds_test.dart b/tests/dart2js_2/generic_bounds_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generic_bounds_test.dart
rename to tests/dart2js_2/generic_bounds_test.dart
diff --git a/tests/compiler/dart2js_extra/generic_class_is_test.dart b/tests/dart2js_2/generic_class_is_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generic_class_is_test.dart
rename to tests/dart2js_2/generic_class_is_test.dart
diff --git a/tests/compiler/dart2js_extra/generic_in_mixin_field_test.dart b/tests/dart2js_2/generic_in_mixin_field_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generic_in_mixin_field_test.dart
rename to tests/dart2js_2/generic_in_mixin_field_test.dart
diff --git a/tests/compiler/dart2js_extra/generic_in_redirect_test.dart b/tests/dart2js_2/generic_in_redirect_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generic_in_redirect_test.dart
rename to tests/dart2js_2/generic_in_redirect_test.dart
diff --git a/tests/compiler/dart2js_extra/generic_in_super_test.dart b/tests/dart2js_2/generic_in_super_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generic_in_super_test.dart
rename to tests/dart2js_2/generic_in_super_test.dart
diff --git a/tests/compiler/dart2js_extra/generic_instantiation1_test.dart b/tests/dart2js_2/generic_instantiation1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generic_instantiation1_test.dart
rename to tests/dart2js_2/generic_instantiation1_test.dart
diff --git a/tests/compiler/dart2js_extra/generic_instantiation2_test.dart b/tests/dart2js_2/generic_instantiation2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generic_instantiation2_test.dart
rename to tests/dart2js_2/generic_instantiation2_test.dart
diff --git a/tests/compiler/dart2js_extra/generic_instantiation3_test.dart b/tests/dart2js_2/generic_instantiation3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generic_instantiation3_test.dart
rename to tests/dart2js_2/generic_instantiation3_test.dart
diff --git a/tests/compiler/dart2js_extra/generic_instantiation4_test.dart b/tests/dart2js_2/generic_instantiation4_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generic_instantiation4_test.dart
rename to tests/dart2js_2/generic_instantiation4_test.dart
diff --git a/tests/compiler/dart2js_extra/generic_method_dynamic_is_test.dart b/tests/dart2js_2/generic_method_dynamic_is_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generic_method_dynamic_is_test.dart
rename to tests/dart2js_2/generic_method_dynamic_is_test.dart
diff --git a/tests/compiler/dart2js_extra/generic_method_dynamic_type_test.dart b/tests/dart2js_2/generic_method_dynamic_type_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generic_method_dynamic_type_test.dart
rename to tests/dart2js_2/generic_method_dynamic_type_test.dart
diff --git a/tests/compiler/dart2js_extra/generic_method_static_is_test.dart b/tests/dart2js_2/generic_method_static_is_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generic_method_static_is_test.dart
rename to tests/dart2js_2/generic_method_static_is_test.dart
diff --git a/tests/compiler/dart2js_extra/generic_type_error_message_test.dart b/tests/dart2js_2/generic_type_error_message_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generic_type_error_message_test.dart
rename to tests/dart2js_2/generic_type_error_message_test.dart
diff --git a/tests/compiler/dart2js_extra/generics_factories_test.dart b/tests/dart2js_2/generics_factories_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generics_factories_test.dart
rename to tests/dart2js_2/generics_factories_test.dart
diff --git a/tests/compiler/dart2js_extra/generics_is_check1_test.dart b/tests/dart2js_2/generics_is_check1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/generics_is_check1_test.dart
rename to tests/dart2js_2/generics_is_check1_test.dart
diff --git a/tests/compiler/dart2js_extra/getter_element_test.dart b/tests/dart2js_2/getter_element_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/getter_element_test.dart
rename to tests/dart2js_2/getter_element_test.dart
diff --git a/tests/compiler/dart2js_extra/getters_setters_test.dart b/tests/dart2js_2/getters_setters_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/getters_setters_test.dart
rename to tests/dart2js_2/getters_setters_test.dart
diff --git a/tests/compiler/dart2js_extra/hash_code_test.dart b/tests/dart2js_2/hash_code_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/hash_code_test.dart
rename to tests/dart2js_2/hash_code_test.dart
diff --git a/tests/compiler/dart2js_extra/identical_trace_test.dart b/tests/dart2js_2/identical_trace_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/identical_trace_test.dart
rename to tests/dart2js_2/identical_trace_test.dart
diff --git a/tests/compiler/dart2js_extra/if_in_loop_test.dart b/tests/dart2js_2/if_in_loop_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/if_in_loop_test.dart
rename to tests/dart2js_2/if_in_loop_test.dart
diff --git a/tests/dart2js_2/if_null2_test.dart b/tests/dart2js_2/if_null2_test.dart
new file mode 100644
index 0000000..04e1149
--- /dev/null
+++ b/tests/dart2js_2/if_null2_test.dart
@@ -0,0 +1,17 @@
+// 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.
+
+// @dart = 2.7
+
+/// Regression for #24134: inference was not tracking ??= correctly.
+library dart2js_2.if_null2_test;
+
+import "package:expect/expect.dart";
+
+main() {
+  var map;
+  map ??= {};
+  Expect.equals(0, map.length);
+  Expect.isTrue(map.length == 0);
+}
diff --git a/tests/dart2js_2/if_null3_test.dart b/tests/dart2js_2/if_null3_test.dart
new file mode 100644
index 0000000..29c4c77
--- /dev/null
+++ b/tests/dart2js_2/if_null3_test.dart
@@ -0,0 +1,16 @@
+// 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.
+
+// @dart = 2.7
+
+/// Regression for #24135: inference was not tracking `[]??=` correctly.
+library dart2js_2.if_null3_test;
+
+import "package:expect/expect.dart";
+
+void main() {
+  var map;
+  (((map ??= {})['key1'] ??= {})['key2'] ??= {})['key3'] = 'value';
+  Expect.equals('{key1: {key2: {key3: value}}}', '$map');
+}
diff --git a/tests/compiler/dart2js_extra/if_null_test.dart b/tests/dart2js_2/if_null_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/if_null_test.dart
rename to tests/dart2js_2/if_null_test.dart
diff --git a/tests/compiler/dart2js_extra/if_test.dart b/tests/dart2js_2/if_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/if_test.dart
rename to tests/dart2js_2/if_test.dart
diff --git a/tests/compiler/dart2js_extra/index_test.dart b/tests/dart2js_2/index_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/index_test.dart
rename to tests/dart2js_2/index_test.dart
diff --git a/tests/compiler/dart2js_extra/indirect_type_literal_test.dart b/tests/dart2js_2/indirect_type_literal_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/indirect_type_literal_test.dart
rename to tests/dart2js_2/indirect_type_literal_test.dart
diff --git a/tests/compiler/dart2js_extra/inference_super_set_call_test.dart b/tests/dart2js_2/inference_super_set_call_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/inference_super_set_call_test.dart
rename to tests/dart2js_2/inference_super_set_call_test.dart
diff --git a/tests/dart2js_2/inferrer_is_int_test.dart b/tests/dart2js_2/inferrer_is_int_test.dart
new file mode 100644
index 0000000..4aa7717
--- /dev/null
+++ b/tests/dart2js_2/inferrer_is_int_test.dart
@@ -0,0 +1,32 @@
+// 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.7
+
+// Test that dart2js's inferrer and code optimizers know a double
+// literal might become an int at runtime.
+
+import "package:expect/expect.dart";
+import '../language_2/compiler_annotations.dart';
+
+@DontInline()
+callWithStringAndDouble(value) {
+  () => 42;
+  if (value is! int) throw new ArgumentError(value);
+  return 42;
+}
+
+@DontInline()
+callWithDouble(value) {
+  () => 42;
+  if (value is! int) throw new ArgumentError(value);
+  return 42;
+}
+
+main() {
+  Expect.throws(
+      () => callWithStringAndDouble('foo'), (e) => e is ArgumentError);
+  Expect.equals(42, callWithStringAndDouble(0.0));
+  Expect.equals(42, callWithDouble(0.0));
+}
diff --git a/tests/compiler/dart2js_extra/injected_cast_test.dart b/tests/dart2js_2/injected_cast_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/injected_cast_test.dart
rename to tests/dart2js_2/injected_cast_test.dart
diff --git a/tests/compiler/dart2js_extra/inline_generic_test.dart b/tests/dart2js_2/inline_generic_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/inline_generic_test.dart
rename to tests/dart2js_2/inline_generic_test.dart
diff --git a/tests/compiler/dart2js_extra/inline_position_crash_source.dart b/tests/dart2js_2/inline_position_crash_source.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/inline_position_crash_source.dart
rename to tests/dart2js_2/inline_position_crash_source.dart
diff --git a/tests/compiler/dart2js_extra/inline_position_crash_test.dart b/tests/dart2js_2/inline_position_crash_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/inline_position_crash_test.dart
rename to tests/dart2js_2/inline_position_crash_test.dart
diff --git a/tests/compiler/dart2js_extra/instantiation_stub_2_test.dart b/tests/dart2js_2/instantiation_stub_2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/instantiation_stub_2_test.dart
rename to tests/dart2js_2/instantiation_stub_2_test.dart
diff --git a/tests/compiler/dart2js_extra/instantiation_stub_test.dart b/tests/dart2js_2/instantiation_stub_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/instantiation_stub_test.dart
rename to tests/dart2js_2/instantiation_stub_test.dart
diff --git a/tests/compiler/dart2js_extra/int_index_test.dart b/tests/dart2js_2/int_index_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/int_index_test.dart
rename to tests/dart2js_2/int_index_test.dart
diff --git a/tests/compiler/dart2js_extra/interceptor_named_arguments_test.dart b/tests/dart2js_2/interceptor_named_arguments_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/interceptor_named_arguments_test.dart
rename to tests/dart2js_2/interceptor_named_arguments_test.dart
diff --git a/tests/compiler/dart2js_extra/interface_type_optimization_test.dart b/tests/dart2js_2/interface_type_optimization_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/interface_type_optimization_test.dart
rename to tests/dart2js_2/interface_type_optimization_test.dart
diff --git a/tests/compiler/dart2js_extra/40296_test.dart b/tests/dart2js_2/internal/40296_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/40296_test.dart
rename to tests/dart2js_2/internal/40296_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred_custom_loader_lib.dart b/tests/dart2js_2/internal/deferred/deferred_custom_loader_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_custom_loader_lib.dart
rename to tests/dart2js_2/internal/deferred/deferred_custom_loader_lib.dart
diff --git a/tests/compiler/dart2js_extra/deferred_custom_loader_test.dart b/tests/dart2js_2/internal/deferred/deferred_custom_loader_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred_custom_loader_test.dart
rename to tests/dart2js_2/internal/deferred/deferred_custom_loader_test.dart
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib1.dart b/tests/dart2js_2/internal/deferred/load_in_correct_order_lib1.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib1.dart
rename to tests/dart2js_2/internal/deferred/load_in_correct_order_lib1.dart
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib2.dart b/tests/dart2js_2/internal/deferred/load_in_correct_order_lib2.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib2.dart
rename to tests/dart2js_2/internal/deferred/load_in_correct_order_lib2.dart
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib3.dart b/tests/dart2js_2/internal/deferred/load_in_correct_order_lib3.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib3.dart
rename to tests/dart2js_2/internal/deferred/load_in_correct_order_lib3.dart
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib4.dart b/tests/dart2js_2/internal/deferred/load_in_correct_order_lib4.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib4.dart
rename to tests/dart2js_2/internal/deferred/load_in_correct_order_lib4.dart
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib5.dart b/tests/dart2js_2/internal/deferred/load_in_correct_order_lib5.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib5.dart
rename to tests/dart2js_2/internal/deferred/load_in_correct_order_lib5.dart
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib6.dart b/tests/dart2js_2/internal/deferred/load_in_correct_order_lib6.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib6.dart
rename to tests/dart2js_2/internal/deferred/load_in_correct_order_lib6.dart
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib7.dart b/tests/dart2js_2/internal/deferred/load_in_correct_order_lib7.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib7.dart
rename to tests/dart2js_2/internal/deferred/load_in_correct_order_lib7.dart
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_test.dart b/tests/dart2js_2/internal/deferred/load_in_correct_order_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/deferred/load_in_correct_order_test.dart
rename to tests/dart2js_2/internal/deferred/load_in_correct_order_test.dart
diff --git a/tests/compiler/dart2js_extra/extract_type_arguments_1_test.dart b/tests/dart2js_2/internal/extract_type_arguments_1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/extract_type_arguments_1_test.dart
rename to tests/dart2js_2/internal/extract_type_arguments_1_test.dart
diff --git a/tests/compiler/dart2js_extra/extract_type_arguments_2_test.dart b/tests/dart2js_2/internal/extract_type_arguments_2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/extract_type_arguments_2_test.dart
rename to tests/dart2js_2/internal/extract_type_arguments_2_test.dart
diff --git a/tests/compiler/dart2js_extra/extract_type_arguments_3_test.dart b/tests/dart2js_2/internal/extract_type_arguments_3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/extract_type_arguments_3_test.dart
rename to tests/dart2js_2/internal/extract_type_arguments_3_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string1_test.dart b/tests/dart2js_2/internal/lax_runtime_type_closure_to_string1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string1_test.dart
rename to tests/dart2js_2/internal/lax_runtime_type_closure_to_string1_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string2_test.dart b/tests/dart2js_2/internal/lax_runtime_type_closure_to_string2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string2_test.dart
rename to tests/dart2js_2/internal/lax_runtime_type_closure_to_string2_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string7_test.dart b/tests/dart2js_2/internal/lax_runtime_type_closure_to_string7_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string7_test.dart
rename to tests/dart2js_2/internal/lax_runtime_type_closure_to_string7_test.dart
diff --git a/tests/compiler/dart2js_extra/mock_libraries.dart b/tests/dart2js_2/internal/mock_libraries.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/mock_libraries.dart
rename to tests/dart2js_2/internal/mock_libraries.dart
diff --git a/tests/compiler/dart2js_extra/platform_environment_variable1_test.dart b/tests/dart2js_2/internal/platform_environment_variable1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/platform_environment_variable1_test.dart
rename to tests/dart2js_2/internal/platform_environment_variable1_test.dart
diff --git a/tests/compiler/dart2js_extra/platform_environment_variable2_test.dart b/tests/dart2js_2/internal/platform_environment_variable2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/platform_environment_variable2_test.dart
rename to tests/dart2js_2/internal/platform_environment_variable2_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/bind_test.dart b/tests/dart2js_2/internal/rti/bind_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/bind_test.dart
rename to tests/dart2js_2/internal/rti/bind_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/bound_environment_test.dart b/tests/dart2js_2/internal/rti/bound_environment_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/bound_environment_test.dart
rename to tests/dart2js_2/internal/rti/bound_environment_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/canonical_recipe_test.dart b/tests/dart2js_2/internal/rti/canonical_recipe_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/canonical_recipe_test.dart
rename to tests/dart2js_2/internal/rti/canonical_recipe_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/class_environment_test.dart b/tests/dart2js_2/internal/rti/class_environment_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/class_environment_test.dart
rename to tests/dart2js_2/internal/rti/class_environment_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/constant_type_test.dart b/tests/dart2js_2/internal/rti/constant_type_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/constant_type_test.dart
rename to tests/dart2js_2/internal/rti/constant_type_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/recipe_syntax_test.dart b/tests/dart2js_2/internal/rti/recipe_syntax_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/recipe_syntax_test.dart
rename to tests/dart2js_2/internal/rti/recipe_syntax_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/required_named_parameters_test.dart b/tests/dart2js_2/internal/rti/required_named_parameters_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/required_named_parameters_test.dart
rename to tests/dart2js_2/internal/rti/required_named_parameters_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/runtime_type_1_test.dart b/tests/dart2js_2/internal/rti/runtime_type_1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/runtime_type_1_test.dart
rename to tests/dart2js_2/internal/rti/runtime_type_1_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/runtime_type_2_test.dart b/tests/dart2js_2/internal/rti/runtime_type_2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/runtime_type_2_test.dart
rename to tests/dart2js_2/internal/rti/runtime_type_2_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/runtime_type_3_test.dart b/tests/dart2js_2/internal/rti/runtime_type_3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/runtime_type_3_test.dart
rename to tests/dart2js_2/internal/rti/runtime_type_3_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/simple_2_test.dart b/tests/dart2js_2/internal/rti/simple_2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/simple_2_test.dart
rename to tests/dart2js_2/internal/rti/simple_2_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/simple_is_function_type2_test.dart b/tests/dart2js_2/internal/rti/simple_is_function_type2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/simple_is_function_type2_test.dart
rename to tests/dart2js_2/internal/rti/simple_is_function_type2_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/simple_is_function_type3_test.dart b/tests/dart2js_2/internal/rti/simple_is_function_type3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/simple_is_function_type3_test.dart
rename to tests/dart2js_2/internal/rti/simple_is_function_type3_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/simple_is_function_type_test.dart b/tests/dart2js_2/internal/rti/simple_is_function_type_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/simple_is_function_type_test.dart
rename to tests/dart2js_2/internal/rti/simple_is_function_type_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/simple_is_test.dart b/tests/dart2js_2/internal/rti/simple_is_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/simple_is_test.dart
rename to tests/dart2js_2/internal/rti/simple_is_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/simple_test.dart b/tests/dart2js_2/internal/rti/simple_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/simple_test.dart
rename to tests/dart2js_2/internal/rti/simple_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/simple_type_bound_test.dart b/tests/dart2js_2/internal/rti/simple_type_bound_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/simple_type_bound_test.dart
rename to tests/dart2js_2/internal/rti/simple_type_bound_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/subtype_test.dart b/tests/dart2js_2/internal/rti/subtype_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/subtype_test.dart
rename to tests/dart2js_2/internal/rti/subtype_test.dart
diff --git a/tests/compiler/dart2js_extra/rti/subtype_utils.dart b/tests/dart2js_2/internal/rti/subtype_utils.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/subtype_utils.dart
rename to tests/dart2js_2/internal/rti/subtype_utils.dart
diff --git a/tests/compiler/dart2js_extra/rti/variance_subtype_test.dart b/tests/dart2js_2/internal/rti/variance_subtype_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti/variance_subtype_test.dart
rename to tests/dart2js_2/internal/rti/variance_subtype_test.dart
diff --git a/tests/compiler/dart2js_extra/invalid_annotation_test.dart b/tests/dart2js_2/invalid_annotation_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/invalid_annotation_test.dart
rename to tests/dart2js_2/invalid_annotation_test.dart
diff --git a/tests/compiler/dart2js_extra/invoke_dynamic_test.dart b/tests/dart2js_2/invoke_dynamic_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/invoke_dynamic_test.dart
rename to tests/dart2js_2/invoke_dynamic_test.dart
diff --git a/tests/compiler/dart2js_extra/is_check_instanceof_test.dart b/tests/dart2js_2/is_check_instanceof_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/is_check_instanceof_test.dart
rename to tests/dart2js_2/is_check_instanceof_test.dart
diff --git a/tests/compiler/dart2js_extra/is_operator_test.dart b/tests/dart2js_2/is_operator_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/is_operator_test.dart
rename to tests/dart2js_2/is_operator_test.dart
diff --git a/tests/compiler/dart2js_extra/issue36562_test.dart b/tests/dart2js_2/issue36562_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/issue36562_test.dart
rename to tests/dart2js_2/issue36562_test.dart
diff --git a/tests/compiler/dart2js_extra/js_array_index_error_test.dart b/tests/dart2js_2/js_array_index_error_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/js_array_index_error_test.dart
rename to tests/dart2js_2/js_array_index_error_test.dart
diff --git a/tests/compiler/dart2js_extra/js_array_removeLast_error_test.dart b/tests/dart2js_2/js_array_removeLast_error_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/js_array_removeLast_error_test.dart
rename to tests/dart2js_2/js_array_removeLast_error_test.dart
diff --git a/tests/compiler/dart2js_extra/js_array_sort_default_test.dart b/tests/dart2js_2/js_array_sort_default_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/js_array_sort_default_test.dart
rename to tests/dart2js_2/js_array_sort_default_test.dart
diff --git a/tests/compiler/dart2js_extra/js_interop_cast_test.dart b/tests/dart2js_2/js_interop_cast_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/js_interop_cast_test.dart
rename to tests/dart2js_2/js_interop_cast_test.dart
diff --git a/tests/compiler/dart2js_extra/js_interop_implements_test.dart b/tests/dart2js_2/js_interop_implements_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/js_interop_implements_test.dart
rename to tests/dart2js_2/js_interop_implements_test.dart
diff --git a/tests/compiler/dart2js_extra/js_interop_no_elide_optional_arg_test.dart b/tests/dart2js_2/js_interop_no_elide_optional_arg_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/js_interop_no_elide_optional_arg_test.dart
rename to tests/dart2js_2/js_interop_no_elide_optional_arg_test.dart
diff --git a/tests/compiler/dart2js_extra/js_interop_optional_arg_test.dart b/tests/dart2js_2/js_interop_optional_arg_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/js_interop_optional_arg_test.dart
rename to tests/dart2js_2/js_interop_optional_arg_test.dart
diff --git a/tests/compiler/dart2js_extra/js_interop_test.dart b/tests/dart2js_2/js_interop_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/js_interop_test.dart
rename to tests/dart2js_2/js_interop_test.dart
diff --git a/tests/compiler/dart2js_extra/jsinterop_test.dart b/tests/dart2js_2/jsinterop_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/jsinterop_test.dart
rename to tests/dart2js_2/jsinterop_test.dart
diff --git a/tests/compiler/dart2js_extra/label_test.dart b/tests/dart2js_2/label_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/label_test.dart
rename to tests/dart2js_2/label_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals1_test.dart b/tests/dart2js_2/lax_runtime_type_closure_equals1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_closure_equals1_test.dart
rename to tests/dart2js_2/lax_runtime_type_closure_equals1_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals2_test.dart b/tests/dart2js_2/lax_runtime_type_closure_equals2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_closure_equals2_test.dart
rename to tests/dart2js_2/lax_runtime_type_closure_equals2_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals3_test.dart b/tests/dart2js_2/lax_runtime_type_closure_equals3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_closure_equals3_test.dart
rename to tests/dart2js_2/lax_runtime_type_closure_equals3_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals4_test.dart b/tests/dart2js_2/lax_runtime_type_closure_equals4_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_closure_equals4_test.dart
rename to tests/dart2js_2/lax_runtime_type_closure_equals4_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals5_test.dart b/tests/dart2js_2/lax_runtime_type_closure_equals5_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_closure_equals5_test.dart
rename to tests/dart2js_2/lax_runtime_type_closure_equals5_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals6_test.dart b/tests/dart2js_2/lax_runtime_type_closure_equals6_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_closure_equals6_test.dart
rename to tests/dart2js_2/lax_runtime_type_closure_equals6_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals7_test.dart b/tests/dart2js_2/lax_runtime_type_closure_equals7_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_closure_equals7_test.dart
rename to tests/dart2js_2/lax_runtime_type_closure_equals7_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals8_test.dart b/tests/dart2js_2/lax_runtime_type_closure_equals8_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_closure_equals8_test.dart
rename to tests/dart2js_2/lax_runtime_type_closure_equals8_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string3_test.dart b/tests/dart2js_2/lax_runtime_type_closure_to_string3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string3_test.dart
rename to tests/dart2js_2/lax_runtime_type_closure_to_string3_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string4_test.dart b/tests/dart2js_2/lax_runtime_type_closure_to_string4_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string4_test.dart
rename to tests/dart2js_2/lax_runtime_type_closure_to_string4_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string5_test.dart b/tests/dart2js_2/lax_runtime_type_closure_to_string5_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string5_test.dart
rename to tests/dart2js_2/lax_runtime_type_closure_to_string5_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string6_test.dart b/tests/dart2js_2/lax_runtime_type_closure_to_string6_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string6_test.dart
rename to tests/dart2js_2/lax_runtime_type_closure_to_string6_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_equals1_test.dart b/tests/dart2js_2/lax_runtime_type_equals1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_equals1_test.dart
rename to tests/dart2js_2/lax_runtime_type_equals1_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_equals2_test.dart b/tests/dart2js_2/lax_runtime_type_equals2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_equals2_test.dart
rename to tests/dart2js_2/lax_runtime_type_equals2_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_equals3_test.dart b/tests/dart2js_2/lax_runtime_type_equals3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_equals3_test.dart
rename to tests/dart2js_2/lax_runtime_type_equals3_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_equals4_test.dart b/tests/dart2js_2/lax_runtime_type_equals4_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_equals4_test.dart
rename to tests/dart2js_2/lax_runtime_type_equals4_test.dart
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_instantiate_to_string_test.dart b/tests/dart2js_2/lax_runtime_type_instantiate_to_string_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/lax_runtime_type_instantiate_to_string_test.dart
rename to tests/dart2js_2/lax_runtime_type_instantiate_to_string_test.dart
diff --git a/tests/compiler/dart2js_extra/list_factory_test.dart b/tests/dart2js_2/list_factory_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/list_factory_test.dart
rename to tests/dart2js_2/list_factory_test.dart
diff --git a/tests/compiler/dart2js_extra/literal_string_juxtaposition_test.dart b/tests/dart2js_2/literal_string_juxtaposition_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/literal_string_juxtaposition_test.dart
rename to tests/dart2js_2/literal_string_juxtaposition_test.dart
diff --git a/tests/compiler/dart2js_extra/literals_test.dart b/tests/dart2js_2/literals_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/literals_test.dart
rename to tests/dart2js_2/literals_test.dart
diff --git a/tests/compiler/dart2js_extra/local_function_call2_test.dart b/tests/dart2js_2/local_function_call2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/local_function_call2_test.dart
rename to tests/dart2js_2/local_function_call2_test.dart
diff --git a/tests/compiler/dart2js_extra/local_function_call_test.dart b/tests/dart2js_2/local_function_call_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/local_function_call_test.dart
rename to tests/dart2js_2/local_function_call_test.dart
diff --git a/tests/compiler/dart2js_extra/local_function_generic_strong_test.dart b/tests/dart2js_2/local_function_generic_strong_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/local_function_generic_strong_test.dart
rename to tests/dart2js_2/local_function_generic_strong_test.dart
diff --git a/tests/compiler/dart2js_extra/local_function_signatures_strong_test.dart b/tests/dart2js_2/local_function_signatures_strong_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/local_function_signatures_strong_test.dart
rename to tests/dart2js_2/local_function_signatures_strong_test.dart
diff --git a/tests/compiler/dart2js_extra/local_function_signatures_test.dart b/tests/dart2js_2/local_function_signatures_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/local_function_signatures_test.dart
rename to tests/dart2js_2/local_function_signatures_test.dart
diff --git a/tests/compiler/dart2js_extra/local_signature_test.dart b/tests/dart2js_2/local_signature_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/local_signature_test.dart
rename to tests/dart2js_2/local_signature_test.dart
diff --git a/tests/compiler/dart2js_extra/locals_test.dart b/tests/dart2js_2/locals_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/locals_test.dart
rename to tests/dart2js_2/locals_test.dart
diff --git a/tests/compiler/dart2js_extra/logical_and_test.dart b/tests/dart2js_2/logical_and_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/logical_and_test.dart
rename to tests/dart2js_2/logical_and_test.dart
diff --git a/tests/compiler/dart2js_extra/logical_or_test.dart b/tests/dart2js_2/logical_or_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/logical_or_test.dart
rename to tests/dart2js_2/logical_or_test.dart
diff --git a/tests/compiler/dart2js_extra/loop_if_phi_test.dart b/tests/dart2js_2/loop_if_phi_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/loop_if_phi_test.dart
rename to tests/dart2js_2/loop_if_phi_test.dart
diff --git a/tests/compiler/dart2js_extra/many_constants_test.dart b/tests/dart2js_2/many_constants_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/many_constants_test.dart
rename to tests/dart2js_2/many_constants_test.dart
diff --git a/tests/compiler/dart2js_extra/many_fields_test.dart b/tests/dart2js_2/many_fields_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/many_fields_test.dart
rename to tests/dart2js_2/many_fields_test.dart
diff --git a/tests/compiler/dart2js_extra/many_instantiations_test.dart b/tests/dart2js_2/many_instantiations_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/many_instantiations_test.dart
rename to tests/dart2js_2/many_instantiations_test.dart
diff --git a/tests/compiler/dart2js_extra/map_to_set_test.dart b/tests/dart2js_2/map_to_set_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/map_to_set_test.dart
rename to tests/dart2js_2/map_to_set_test.dart
diff --git a/tests/compiler/dart2js_extra/math_lib_prefix_test.dart b/tests/dart2js_2/math_lib_prefix_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/math_lib_prefix_test.dart
rename to tests/dart2js_2/math_lib_prefix_test.dart
diff --git a/tests/compiler/dart2js_extra/math_lib_test.dart b/tests/dart2js_2/math_lib_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/math_lib_test.dart
rename to tests/dart2js_2/math_lib_test.dart
diff --git a/tests/compiler/dart2js_extra/member_namespace_test.dart b/tests/dart2js_2/member_namespace_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/member_namespace_test.dart
rename to tests/dart2js_2/member_namespace_test.dart
diff --git a/tests/compiler/dart2js_extra/method_signatures_strong_test.dart b/tests/dart2js_2/method_signatures_strong_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/method_signatures_strong_test.dart
rename to tests/dart2js_2/method_signatures_strong_test.dart
diff --git a/tests/compiler/dart2js_extra/method_signatures_test.dart b/tests/dart2js_2/method_signatures_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/method_signatures_test.dart
rename to tests/dart2js_2/method_signatures_test.dart
diff --git a/tests/compiler/dart2js_extra/minus_zero2_test.dart b/tests/dart2js_2/minus_zero2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/minus_zero2_test.dart
rename to tests/dart2js_2/minus_zero2_test.dart
diff --git a/tests/compiler/dart2js_extra/minus_zero_test.dart b/tests/dart2js_2/minus_zero_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/minus_zero_test.dart
rename to tests/dart2js_2/minus_zero_test.dart
diff --git a/tests/compiler/dart2js_extra/mixin_subtype_test.dart b/tests/dart2js_2/mixin_subtype_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/mixin_subtype_test.dart
rename to tests/dart2js_2/mixin_subtype_test.dart
diff --git a/tests/compiler/dart2js_extra/mixin_type_variable_test.dart b/tests/dart2js_2/mixin_type_variable_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/mixin_type_variable_test.dart
rename to tests/dart2js_2/mixin_type_variable_test.dart
diff --git a/tests/compiler/dart2js_extra/multi_global_def_single_instantiation_test.dart b/tests/dart2js_2/multi_global_def_single_instantiation_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/multi_global_def_single_instantiation_test.dart
rename to tests/dart2js_2/multi_global_def_single_instantiation_test.dart
diff --git a/tests/compiler/dart2js_extra/named_mixin_runtime_type_test.dart b/tests/dart2js_2/named_mixin_runtime_type_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/named_mixin_runtime_type_test.dart
rename to tests/dart2js_2/named_mixin_runtime_type_test.dart
diff --git a/tests/compiler/dart2js_extra/named_parameter_for_static_test.dart b/tests/dart2js_2/named_parameter_for_static_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/named_parameter_for_static_test.dart
rename to tests/dart2js_2/named_parameter_for_static_test.dart
diff --git a/tests/compiler/dart2js_extra/named_parameter_test.dart b/tests/dart2js_2/named_parameter_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/named_parameter_test.dart
rename to tests/dart2js_2/named_parameter_test.dart
diff --git a/tests/compiler/dart2js_extra/nan_negate_test.dart b/tests/dart2js_2/nan_negate_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/nan_negate_test.dart
rename to tests/dart2js_2/nan_negate_test.dart
diff --git a/tests/compiler/dart2js_extra/new_from_env_test.dart b/tests/dart2js_2/new_from_env_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/new_from_env_test.dart
rename to tests/dart2js_2/new_from_env_test.dart
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong10_test.dart b/tests/dart2js_2/no_such_method_strong10_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/no_such_method_strong10_test.dart
rename to tests/dart2js_2/no_such_method_strong10_test.dart
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong11_lib.dart b/tests/dart2js_2/no_such_method_strong11_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/no_such_method_strong11_lib.dart
rename to tests/dart2js_2/no_such_method_strong11_lib.dart
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong11_test.dart b/tests/dart2js_2/no_such_method_strong11_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/no_such_method_strong11_test.dart
rename to tests/dart2js_2/no_such_method_strong11_test.dart
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong12_test.dart b/tests/dart2js_2/no_such_method_strong12_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/no_such_method_strong12_test.dart
rename to tests/dart2js_2/no_such_method_strong12_test.dart
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong1_test.dart b/tests/dart2js_2/no_such_method_strong1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/no_such_method_strong1_test.dart
rename to tests/dart2js_2/no_such_method_strong1_test.dart
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong2_test.dart b/tests/dart2js_2/no_such_method_strong2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/no_such_method_strong2_test.dart
rename to tests/dart2js_2/no_such_method_strong2_test.dart
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong3_test.dart b/tests/dart2js_2/no_such_method_strong3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/no_such_method_strong3_test.dart
rename to tests/dart2js_2/no_such_method_strong3_test.dart
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong4_test.dart b/tests/dart2js_2/no_such_method_strong4_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/no_such_method_strong4_test.dart
rename to tests/dart2js_2/no_such_method_strong4_test.dart
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong5_test.dart b/tests/dart2js_2/no_such_method_strong5_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/no_such_method_strong5_test.dart
rename to tests/dart2js_2/no_such_method_strong5_test.dart
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong6_test.dart b/tests/dart2js_2/no_such_method_strong6_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/no_such_method_strong6_test.dart
rename to tests/dart2js_2/no_such_method_strong6_test.dart
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong7_test.dart b/tests/dart2js_2/no_such_method_strong7_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/no_such_method_strong7_test.dart
rename to tests/dart2js_2/no_such_method_strong7_test.dart
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong8_test.dart b/tests/dart2js_2/no_such_method_strong8_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/no_such_method_strong8_test.dart
rename to tests/dart2js_2/no_such_method_strong8_test.dart
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong9_test.dart b/tests/dart2js_2/no_such_method_strong9_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/no_such_method_strong9_test.dart
rename to tests/dart2js_2/no_such_method_strong9_test.dart
diff --git a/tests/compiler/dart2js_extra/no_such_method_test.dart b/tests/dart2js_2/no_such_method_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/no_such_method_test.dart
rename to tests/dart2js_2/no_such_method_test.dart
diff --git a/tests/compiler/dart2js_extra/non_jsinterop_test.dart b/tests/dart2js_2/non_jsinterop_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/non_jsinterop_test.dart
rename to tests/dart2js_2/non_jsinterop_test.dart
diff --git a/tests/compiler/dart2js_extra/non_trivial_substitution_test.dart b/tests/dart2js_2/non_trivial_substitution_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/non_trivial_substitution_test.dart
rename to tests/dart2js_2/non_trivial_substitution_test.dart
diff --git a/tests/compiler/dart2js_extra/not_equals_test.dart b/tests/dart2js_2/not_equals_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/not_equals_test.dart
rename to tests/dart2js_2/not_equals_test.dart
diff --git a/tests/compiler/dart2js_extra/not_test.dart b/tests/dart2js_2/not_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/not_test.dart
rename to tests/dart2js_2/not_test.dart
diff --git a/tests/compiler/dart2js_extra/null_stacktrace_test.dart b/tests/dart2js_2/null_stacktrace_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/null_stacktrace_test.dart
rename to tests/dart2js_2/null_stacktrace_test.dart
diff --git a/tests/compiler/dart2js_extra/null_test.dart b/tests/dart2js_2/null_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/null_test.dart
rename to tests/dart2js_2/null_test.dart
diff --git a/tests/compiler/dart2js_extra/operator2_test.dart b/tests/dart2js_2/operator2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/operator2_test.dart
rename to tests/dart2js_2/operator2_test.dart
diff --git a/tests/compiler/dart2js_extra/operator3_test.dart b/tests/dart2js_2/operator3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/operator3_test.dart
rename to tests/dart2js_2/operator3_test.dart
diff --git a/tests/compiler/dart2js_extra/operator_equals_test.dart b/tests/dart2js_2/operator_equals_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/operator_equals_test.dart
rename to tests/dart2js_2/operator_equals_test.dart
diff --git a/tests/compiler/dart2js_extra/operator_test.dart b/tests/dart2js_2/operator_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/operator_test.dart
rename to tests/dart2js_2/operator_test.dart
diff --git a/tests/compiler/dart2js_extra/optional_parameter_test.dart b/tests/dart2js_2/optional_parameter_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/optional_parameter_test.dart
rename to tests/dart2js_2/optional_parameter_test.dart
diff --git a/tests/compiler/dart2js_extra/panda_lib.dart b/tests/dart2js_2/panda_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/panda_lib.dart
rename to tests/dart2js_2/panda_lib.dart
diff --git a/tests/compiler/dart2js_extra/panda_test.dart b/tests/dart2js_2/panda_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/panda_test.dart
rename to tests/dart2js_2/panda_test.dart
diff --git a/tests/compiler/dart2js_extra/phi_elimination_test.dart b/tests/dart2js_2/phi_elimination_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/phi_elimination_test.dart
rename to tests/dart2js_2/phi_elimination_test.dart
diff --git a/tests/compiler/dart2js_extra/phi_gvn_test.dart b/tests/dart2js_2/phi_gvn_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/phi_gvn_test.dart
rename to tests/dart2js_2/phi_gvn_test.dart
diff --git a/tests/compiler/dart2js_extra/phi_test.dart b/tests/dart2js_2/phi_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/phi_test.dart
rename to tests/dart2js_2/phi_test.dart
diff --git a/tests/compiler/dart2js_extra/private_symbol_literal_test.dart b/tests/dart2js_2/private_symbol_literal_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/private_symbol_literal_test.dart
rename to tests/dart2js_2/private_symbol_literal_test.dart
diff --git a/tests/compiler/dart2js_extra/recursive_metadata_test.dart b/tests/dart2js_2/recursive_metadata_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/recursive_metadata_test.dart
rename to tests/dart2js_2/recursive_metadata_test.dart
diff --git a/tests/compiler/dart2js_extra/regress/41781_test.dart b/tests/dart2js_2/regress/41781_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regress/41781_test.dart
rename to tests/dart2js_2/regress/41781_test.dart
diff --git a/tests/compiler/dart2js_extra/regress/4434_lib.dart b/tests/dart2js_2/regress/4434_lib.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regress/4434_lib.dart
rename to tests/dart2js_2/regress/4434_lib.dart
diff --git a/tests/compiler/dart2js_extra/regress/4434_test.dart b/tests/dart2js_2/regress/4434_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regress/4434_test.dart
rename to tests/dart2js_2/regress/4434_test.dart
diff --git a/tests/compiler/dart2js_extra/regress/4492_test.dart b/tests/dart2js_2/regress/4492_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regress/4492_test.dart
rename to tests/dart2js_2/regress/4492_test.dart
diff --git a/tests/compiler/dart2js_extra/regress/4515_1_test.dart b/tests/dart2js_2/regress/4515_1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regress/4515_1_test.dart
rename to tests/dart2js_2/regress/4515_1_test.dart
diff --git a/tests/compiler/dart2js_extra/regress/4515_2_test.dart b/tests/dart2js_2/regress/4515_2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regress/4515_2_test.dart
rename to tests/dart2js_2/regress/4515_2_test.dart
diff --git a/tests/compiler/dart2js_extra/regress/4515_3_test.dart b/tests/dart2js_2/regress/4515_3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regress/4515_3_test.dart
rename to tests/dart2js_2/regress/4515_3_test.dart
diff --git a/tests/compiler/dart2js_extra/regress/4562_test.dart b/tests/dart2js_2/regress/4562_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regress/4562_test.dart
rename to tests/dart2js_2/regress/4562_test.dart
diff --git a/tests/compiler/dart2js_extra/regress/4639_test.dart b/tests/dart2js_2/regress/4639_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regress/4639_test.dart
rename to tests/dart2js_2/regress/4639_test.dart
diff --git a/tests/compiler/dart2js_extra/regress/regression_type_variables_is_test.dart b/tests/dart2js_2/regress/regression_type_variables_is_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regress/regression_type_variables_is_test.dart
rename to tests/dart2js_2/regress/regression_type_variables_is_test.dart
diff --git a/tests/compiler/dart2js_extra/regress/unused_generator_type_parameter_test.dart b/tests/dart2js_2/regress/unused_generator_type_parameter_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regress/unused_generator_type_parameter_test.dart
rename to tests/dart2js_2/regress/unused_generator_type_parameter_test.dart
diff --git a/tests/compiler/dart2js_extra/regress_32069_test.dart b/tests/dart2js_2/regress_32069_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regress_32069_test.dart
rename to tests/dart2js_2/regress_32069_test.dart
diff --git a/tests/compiler/dart2js_extra/regress_36222_test.dart b/tests/dart2js_2/regress_36222_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regress_36222_test.dart
rename to tests/dart2js_2/regress_36222_test.dart
diff --git a/tests/compiler/dart2js_extra/regress_40349_test.dart b/tests/dart2js_2/regress_40349_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regress_40349_test.dart
rename to tests/dart2js_2/regress_40349_test.dart
diff --git a/tests/compiler/dart2js_extra/regress_null_aware_test.dart b/tests/dart2js_2/regress_null_aware_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regress_null_aware_test.dart
rename to tests/dart2js_2/regress_null_aware_test.dart
diff --git a/tests/compiler/dart2js_extra/regression_2913_test.dart b/tests/dart2js_2/regression_2913_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/regression_2913_test.dart
rename to tests/dart2js_2/regression_2913_test.dart
diff --git a/tests/compiler/dart2js_extra/replaced_type_variable_test.dart b/tests/dart2js_2/replaced_type_variable_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/replaced_type_variable_test.dart
rename to tests/dart2js_2/replaced_type_variable_test.dart
diff --git a/tests/compiler/dart2js_extra/return_setter_test.dart b/tests/dart2js_2/return_setter_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/return_setter_test.dart
rename to tests/dart2js_2/return_setter_test.dart
diff --git a/tests/compiler/dart2js_extra/round_constant_folding_test.dart b/tests/dart2js_2/round_constant_folding_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/round_constant_folding_test.dart
rename to tests/dart2js_2/round_constant_folding_test.dart
diff --git a/tests/compiler/dart2js_extra/rti_need_for_closure_signature_test.dart b/tests/dart2js_2/rti_need_for_closure_signature_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti_need_for_closure_signature_test.dart
rename to tests/dart2js_2/rti_need_for_closure_signature_test.dart
diff --git a/tests/compiler/dart2js_extra/rti_need_for_runtime_type_test.dart b/tests/dart2js_2/rti_need_for_runtime_type_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/rti_need_for_runtime_type_test.dart
rename to tests/dart2js_2/rti_need_for_runtime_type_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals1_test.dart b/tests/dart2js_2/runtime_type_closure_equals1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_closure_equals1_test.dart
rename to tests/dart2js_2/runtime_type_closure_equals1_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals2_test.dart b/tests/dart2js_2/runtime_type_closure_equals2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_closure_equals2_test.dart
rename to tests/dart2js_2/runtime_type_closure_equals2_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals3_test.dart b/tests/dart2js_2/runtime_type_closure_equals3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_closure_equals3_test.dart
rename to tests/dart2js_2/runtime_type_closure_equals3_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals4_test.dart b/tests/dart2js_2/runtime_type_closure_equals4_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_closure_equals4_test.dart
rename to tests/dart2js_2/runtime_type_closure_equals4_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals5_test.dart b/tests/dart2js_2/runtime_type_closure_equals5_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_closure_equals5_test.dart
rename to tests/dart2js_2/runtime_type_closure_equals5_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals6_test.dart b/tests/dart2js_2/runtime_type_closure_equals6_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_closure_equals6_test.dart
rename to tests/dart2js_2/runtime_type_closure_equals6_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals7_test.dart b/tests/dart2js_2/runtime_type_closure_equals7_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_closure_equals7_test.dart
rename to tests/dart2js_2/runtime_type_closure_equals7_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals8_test.dart b/tests/dart2js_2/runtime_type_closure_equals8_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_closure_equals8_test.dart
rename to tests/dart2js_2/runtime_type_closure_equals8_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals1_test.dart b/tests/dart2js_2/runtime_type_equals1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_equals1_test.dart
rename to tests/dart2js_2/runtime_type_equals1_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals2_test.dart b/tests/dart2js_2/runtime_type_equals2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_equals2_test.dart
rename to tests/dart2js_2/runtime_type_equals2_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals3_test.dart b/tests/dart2js_2/runtime_type_equals3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_equals3_test.dart
rename to tests/dart2js_2/runtime_type_equals3_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals4_test.dart b/tests/dart2js_2/runtime_type_equals4_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_equals4_test.dart
rename to tests/dart2js_2/runtime_type_equals4_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals5_test.dart b/tests/dart2js_2/runtime_type_equals5_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_equals5_test.dart
rename to tests/dart2js_2/runtime_type_equals5_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals6_test.dart b/tests/dart2js_2/runtime_type_equals6_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_equals6_test.dart
rename to tests/dart2js_2/runtime_type_equals6_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals7_test.dart b/tests/dart2js_2/runtime_type_equals7_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_equals7_test.dart
rename to tests/dart2js_2/runtime_type_equals7_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals8_test.dart b/tests/dart2js_2/runtime_type_equals8_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_equals8_test.dart
rename to tests/dart2js_2/runtime_type_equals8_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_int_test.dart b/tests/dart2js_2/runtime_type_int_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_int_test.dart
rename to tests/dart2js_2/runtime_type_int_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_test.dart b/tests/dart2js_2/runtime_type_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_test.dart
rename to tests/dart2js_2/runtime_type_test.dart
diff --git a/tests/compiler/dart2js_extra/runtime_type_to_string1_test.dart b/tests/dart2js_2/runtime_type_to_string1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/runtime_type_to_string1_test.dart
rename to tests/dart2js_2/runtime_type_to_string1_test.dart
diff --git a/tests/compiler/dart2js_extra/send_test.dart b/tests/dart2js_2/send_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/send_test.dart
rename to tests/dart2js_2/send_test.dart
diff --git a/tests/compiler/dart2js_extra/simple_string_constant_test.dart b/tests/dart2js_2/simple_string_constant_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/simple_string_constant_test.dart
rename to tests/dart2js_2/simple_string_constant_test.dart
diff --git a/tests/compiler/dart2js_extra/source_mapping_crash_source.dart b/tests/dart2js_2/source_mapping_crash_source.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/source_mapping_crash_source.dart
rename to tests/dart2js_2/source_mapping_crash_source.dart
diff --git a/tests/compiler/dart2js_extra/source_mapping_crash_test.dart b/tests/dart2js_2/source_mapping_crash_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/source_mapping_crash_test.dart
rename to tests/dart2js_2/source_mapping_crash_test.dart
diff --git a/tests/compiler/dart2js_extra/statements_test.dart b/tests/dart2js_2/statements_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/statements_test.dart
rename to tests/dart2js_2/statements_test.dart
diff --git a/tests/compiler/dart2js_extra/static_field2_test.dart b/tests/dart2js_2/static_field2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/static_field2_test.dart
rename to tests/dart2js_2/static_field2_test.dart
diff --git a/tests/compiler/dart2js_extra/static_field_test.dart b/tests/dart2js_2/static_field_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/static_field_test.dart
rename to tests/dart2js_2/static_field_test.dart
diff --git a/tests/compiler/dart2js_extra/static_method2_test.dart b/tests/dart2js_2/static_method2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/static_method2_test.dart
rename to tests/dart2js_2/static_method2_test.dart
diff --git a/tests/compiler/dart2js_extra/static_method_test.dart b/tests/dart2js_2/static_method_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/static_method_test.dart
rename to tests/dart2js_2/static_method_test.dart
diff --git a/tests/compiler/dart2js_extra/static_var_no_initializer_test.dart b/tests/dart2js_2/static_var_no_initializer_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/static_var_no_initializer_test.dart
rename to tests/dart2js_2/static_var_no_initializer_test.dart
diff --git a/tests/compiler/dart2js_extra/static_var_test.dart b/tests/dart2js_2/static_var_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/static_var_test.dart
rename to tests/dart2js_2/static_var_test.dart
diff --git a/tests/compiler/dart2js_extra/string_escape_test.dart b/tests/dart2js_2/string_escape_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/string_escape_test.dart
rename to tests/dart2js_2/string_escape_test.dart
diff --git a/tests/compiler/dart2js_extra/string_interpolation_dynamic_test.dart b/tests/dart2js_2/string_interpolation_dynamic_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/string_interpolation_dynamic_test.dart
rename to tests/dart2js_2/string_interpolation_dynamic_test.dart
Binary files differ
diff --git a/tests/compiler/dart2js_extra/string_interpolation_opt1_test.dart b/tests/dart2js_2/string_interpolation_opt1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/string_interpolation_opt1_test.dart
rename to tests/dart2js_2/string_interpolation_opt1_test.dart
diff --git a/tests/compiler/dart2js_extra/string_interpolation_test.dart b/tests/dart2js_2/string_interpolation_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/string_interpolation_test.dart
rename to tests/dart2js_2/string_interpolation_test.dart
Binary files differ
diff --git a/tests/compiler/dart2js_extra/super_call_test.dart b/tests/dart2js_2/super_call_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/super_call_test.dart
rename to tests/dart2js_2/super_call_test.dart
diff --git a/tests/compiler/dart2js_extra/super_constructor1_test.dart b/tests/dart2js_2/super_constructor1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/super_constructor1_test.dart
rename to tests/dart2js_2/super_constructor1_test.dart
diff --git a/tests/compiler/dart2js_extra/super_constructor2_test.dart b/tests/dart2js_2/super_constructor2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/super_constructor2_test.dart
rename to tests/dart2js_2/super_constructor2_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin10_test.dart b/tests/dart2js_2/supermixin/supermixin10_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin10_test.dart
rename to tests/dart2js_2/supermixin/supermixin10_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin11_test.dart b/tests/dart2js_2/supermixin/supermixin11_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin11_test.dart
rename to tests/dart2js_2/supermixin/supermixin11_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin12_test.dart b/tests/dart2js_2/supermixin/supermixin12_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin12_test.dart
rename to tests/dart2js_2/supermixin/supermixin12_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin13_test.dart b/tests/dart2js_2/supermixin/supermixin13_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin13_test.dart
rename to tests/dart2js_2/supermixin/supermixin13_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin14_test.dart b/tests/dart2js_2/supermixin/supermixin14_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin14_test.dart
rename to tests/dart2js_2/supermixin/supermixin14_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin15_test.dart b/tests/dart2js_2/supermixin/supermixin15_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin15_test.dart
rename to tests/dart2js_2/supermixin/supermixin15_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin16_test.dart b/tests/dart2js_2/supermixin/supermixin16_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin16_test.dart
rename to tests/dart2js_2/supermixin/supermixin16_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin17_test.dart b/tests/dart2js_2/supermixin/supermixin17_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin17_test.dart
rename to tests/dart2js_2/supermixin/supermixin17_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin18_test.dart b/tests/dart2js_2/supermixin/supermixin18_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin18_test.dart
rename to tests/dart2js_2/supermixin/supermixin18_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin1_test.dart b/tests/dart2js_2/supermixin/supermixin1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin1_test.dart
rename to tests/dart2js_2/supermixin/supermixin1_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin2_test.dart b/tests/dart2js_2/supermixin/supermixin2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin2_test.dart
rename to tests/dart2js_2/supermixin/supermixin2_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin3_test.dart b/tests/dart2js_2/supermixin/supermixin3_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin3_test.dart
rename to tests/dart2js_2/supermixin/supermixin3_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin4_test.dart b/tests/dart2js_2/supermixin/supermixin4_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin4_test.dart
rename to tests/dart2js_2/supermixin/supermixin4_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin5_test.dart b/tests/dart2js_2/supermixin/supermixin5_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin5_test.dart
rename to tests/dart2js_2/supermixin/supermixin5_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin6_test.dart b/tests/dart2js_2/supermixin/supermixin6_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin6_test.dart
rename to tests/dart2js_2/supermixin/supermixin6_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin7_test.dart b/tests/dart2js_2/supermixin/supermixin7_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin7_test.dart
rename to tests/dart2js_2/supermixin/supermixin7_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin8_test.dart b/tests/dart2js_2/supermixin/supermixin8_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin8_test.dart
rename to tests/dart2js_2/supermixin/supermixin8_test.dart
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin9_test.dart b/tests/dart2js_2/supermixin/supermixin9_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/supermixin/supermixin9_test.dart
rename to tests/dart2js_2/supermixin/supermixin9_test.dart
diff --git a/tests/compiler/dart2js_extra/switch_equals_test.dart b/tests/dart2js_2/switch_equals_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/switch_equals_test.dart
rename to tests/dart2js_2/switch_equals_test.dart
diff --git a/tests/compiler/dart2js_extra/switch_test.dart b/tests/dart2js_2/switch_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/switch_test.dart
rename to tests/dart2js_2/switch_test.dart
diff --git a/tests/compiler/dart2js_extra/tear_off_types_test.dart b/tests/dart2js_2/tear_off_types_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/tear_off_types_test.dart
rename to tests/dart2js_2/tear_off_types_test.dart
diff --git a/tests/compiler/dart2js_extra/this_phi_elimination_test.dart b/tests/dart2js_2/this_phi_elimination_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/this_phi_elimination_test.dart
rename to tests/dart2js_2/this_phi_elimination_test.dart
diff --git a/tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart b/tests/dart2js_2/this_redirecting_constructor_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart
rename to tests/dart2js_2/this_redirecting_constructor_test.dart
diff --git a/tests/compiler/dart2js_extra/this_test.dart b/tests/dart2js_2/this_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/this_test.dart
rename to tests/dart2js_2/this_test.dart
diff --git a/tests/compiler/dart2js_extra/throw1_test.dart b/tests/dart2js_2/throw1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/throw1_test.dart
rename to tests/dart2js_2/throw1_test.dart
diff --git a/tests/compiler/dart2js_extra/throw2_test.dart b/tests/dart2js_2/throw2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/throw2_test.dart
rename to tests/dart2js_2/throw2_test.dart
diff --git a/tests/compiler/dart2js_extra/timer_test.dart b/tests/dart2js_2/timer_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/timer_test.dart
rename to tests/dart2js_2/timer_test.dart
diff --git a/tests/compiler/dart2js_extra/to_string_test.dart b/tests/dart2js_2/to_string_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/to_string_test.dart
rename to tests/dart2js_2/to_string_test.dart
diff --git a/tests/compiler/dart2js_extra/truncation_errors_test.dart b/tests/dart2js_2/truncation_errors_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/truncation_errors_test.dart
rename to tests/dart2js_2/truncation_errors_test.dart
diff --git a/tests/compiler/dart2js_extra/type_argument_factory_crash_test.dart b/tests/dart2js_2/type_argument_factory_crash_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/type_argument_factory_crash_test.dart
rename to tests/dart2js_2/type_argument_factory_crash_test.dart
diff --git a/tests/compiler/dart2js_extra/type_argument_factory_nocrash_test.dart b/tests/dart2js_2/type_argument_factory_nocrash_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/type_argument_factory_nocrash_test.dart
rename to tests/dart2js_2/type_argument_factory_nocrash_test.dart
diff --git a/tests/compiler/dart2js_extra/type_argument_optimization_test.dart b/tests/dart2js_2/type_argument_optimization_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/type_argument_optimization_test.dart
rename to tests/dart2js_2/type_argument_optimization_test.dart
diff --git a/tests/compiler/dart2js_extra/type_constant_switch_test.dart b/tests/dart2js_2/type_constant_switch_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/type_constant_switch_test.dart
rename to tests/dart2js_2/type_constant_switch_test.dart
diff --git a/tests/compiler/dart2js_extra/type_error_message_test.dart b/tests/dart2js_2/type_error_message_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/type_error_message_test.dart
rename to tests/dart2js_2/type_error_message_test.dart
diff --git a/tests/compiler/dart2js_extra/type_literal2_test.dart b/tests/dart2js_2/type_literal2_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/type_literal2_test.dart
rename to tests/dart2js_2/type_literal2_test.dart
diff --git a/tests/compiler/dart2js_extra/type_literal_test.dart b/tests/dart2js_2/type_literal_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/type_literal_test.dart
rename to tests/dart2js_2/type_literal_test.dart
diff --git a/tests/compiler/dart2js_extra/typevariable_factory_test.dart b/tests/dart2js_2/typevariable_factory_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/typevariable_factory_test.dart
rename to tests/dart2js_2/typevariable_factory_test.dart
diff --git a/tests/compiler/dart2js_extra/typevariable_substitution_test.dart b/tests/dart2js_2/typevariable_substitution_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/typevariable_substitution_test.dart
rename to tests/dart2js_2/typevariable_substitution_test.dart
diff --git a/tests/compiler/dart2js_extra/typevariable_typedef_test.dart b/tests/dart2js_2/typevariable_typedef_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/typevariable_typedef_test.dart
rename to tests/dart2js_2/typevariable_typedef_test.dart
diff --git a/tests/compiler/dart2js_extra/unconditional_dartio_import_test.dart b/tests/dart2js_2/unconditional_dartio_import_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/unconditional_dartio_import_test.dart
rename to tests/dart2js_2/unconditional_dartio_import_test.dart
diff --git a/tests/compiler/dart2js_extra/unused_local_const_test.dart b/tests/dart2js_2/unused_local_const_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/unused_local_const_test.dart
rename to tests/dart2js_2/unused_local_const_test.dart
diff --git a/tests/compiler/dart2js_extra/useful_error_message_1_test.dart b/tests/dart2js_2/useful_error_message_1_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/useful_error_message_1_test.dart
rename to tests/dart2js_2/useful_error_message_1_test.dart
diff --git a/tests/compiler/dart2js_extra/while_test.dart b/tests/dart2js_2/while_test.dart
similarity index 100%
rename from tests/compiler/dart2js_extra/while_test.dart
rename to tests/dart2js_2/while_test.dart
diff --git a/tests/language/async_star/yield_from_catch_test.dart b/tests/language/async_star/yield_from_catch_test.dart
new file mode 100644
index 0000000..0f08c1f
--- /dev/null
+++ b/tests/language/async_star/yield_from_catch_test.dart
@@ -0,0 +1,33 @@
+// 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.
+
+// Test for issue: https://github.com/dart-lang/sdk/issues/39994
+
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+Stream<String> testStream() async* {
+  try {
+    await testThrow();
+    yield "A";
+  } catch (e) {
+    yield "B";
+    yield "C";
+    yield "D";
+  }
+}
+
+testThrow() async {
+  throw Exception();
+}
+
+test() async {
+  var result = await testStream().toList();
+  Expect.listEquals(["B", "C", "D"], result);
+}
+
+main() {
+  asyncTest(test);
+}
diff --git a/tests/language/extension_methods/basic_static_extension_test.dart b/tests/language/extension_methods/basic_static_extension_test.dart
index 7256a98..7ffb6c9 100644
--- a/tests/language/extension_methods/basic_static_extension_test.dart
+++ b/tests/language/extension_methods/basic_static_extension_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 import "package:expect/expect.dart";
 
 // Tests the syntax of extension methods, and that the extensions are
diff --git a/tests/language/extension_methods/static_extension_bounds_error_test.dart b/tests/language/extension_methods/static_extension_bounds_error_test.dart
index d78b2a8..5424a7e 100644
--- a/tests/language/extension_methods/static_extension_bounds_error_test.dart
+++ b/tests/language/extension_methods/static_extension_bounds_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests bounds checking for extension methods
 
 extension E1<T extends num> on T {
diff --git a/tests/language/extension_methods/static_extension_constant_error_test.dart b/tests/language/extension_methods/static_extension_constant_error_test.dart
index e7a0d0c..a1bca72 100644
--- a/tests/language/extension_methods/static_extension_constant_error_test.dart
+++ b/tests/language/extension_methods/static_extension_constant_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 import 'static_extension_constant_lib.dart';
 
 // Tests that it is an error to invoke an extension method during constant
diff --git a/tests/language/extension_methods/static_extension_constant_test.dart b/tests/language/extension_methods/static_extension_constant_test.dart
index 1295d4a..18fdad15 100644
--- a/tests/language/extension_methods/static_extension_constant_test.dart
+++ b/tests/language/extension_methods/static_extension_constant_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 import 'package:expect/expect.dart';
 import 'static_extension_constant_lib.dart' hide b, i, d, s;
 import 'static_extension_constant_lib.dart' as lib show b, i, d, s;
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 00207bc..a2af316 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
@@ -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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests interactions between getters and setters where there is a conflict.
 
 // Conflicting class declarations.
@@ -194,7 +192,7 @@
 // [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.
-  
+
   c1c.m1 = 0;
   //  ^^
   // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_LOCAL
diff --git a/tests/language/extension_methods/static_extension_getter_setter_test.dart b/tests/language/extension_methods/static_extension_getter_setter_test.dart
index 7224cb5..25a3f1a 100644
--- a/tests/language/extension_methods/static_extension_getter_setter_test.dart
+++ b/tests/language/extension_methods/static_extension_getter_setter_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests getters and setters where one or both is defined
 // by an extension.
 
diff --git a/tests/language/extension_methods/static_extension_inference_test.dart b/tests/language/extension_methods/static_extension_inference_test.dart
index 4e1774e..85bdb34 100644
--- a/tests/language/extension_methods/static_extension_inference_test.dart
+++ b/tests/language/extension_methods/static_extension_inference_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests extension method resolution type inference.
 
 import "package:expect/expect.dart";
diff --git a/tests/language/extension_methods/static_extension_internal_basename_shadowing_error_test.dart b/tests/language/extension_methods/static_extension_internal_basename_shadowing_error_test.dart
index 5c5c1c7..c7ce72e 100644
--- a/tests/language/extension_methods/static_extension_internal_basename_shadowing_error_test.dart
+++ b/tests/language/extension_methods/static_extension_internal_basename_shadowing_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 ///////////////////////////////////////////////////////////////////////
 // The following tests check that setters or getters in an extension
 // correctly shadow members with the same basename in the surrounding
diff --git a/tests/language/extension_methods/static_extension_internal_basename_shadowing_test.dart b/tests/language/extension_methods/static_extension_internal_basename_shadowing_test.dart
index 659bcc2..e3e640c 100644
--- a/tests/language/extension_methods/static_extension_internal_basename_shadowing_test.dart
+++ b/tests/language/extension_methods/static_extension_internal_basename_shadowing_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 import "package:expect/expect.dart";
 
 ///////////////////////////////////////////////////////////////////////
diff --git a/tests/language/extension_methods/static_extension_internal_name_conflict_error_test.dart b/tests/language/extension_methods/static_extension_internal_name_conflict_error_test.dart
index a284784..ae6d6fe 100644
--- a/tests/language/extension_methods/static_extension_internal_name_conflict_error_test.dart
+++ b/tests/language/extension_methods/static_extension_internal_name_conflict_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests that errors are given for internal name conflicts in extension methods.
 
 // It is an error to have duplicate type parameter names.
diff --git a/tests/language/extension_methods/static_extension_internal_resolution_0_test.dart b/tests/language/extension_methods/static_extension_internal_resolution_0_test.dart
index 418ba2b..49433ea 100644
--- a/tests/language/extension_methods/static_extension_internal_resolution_0_test.dart
+++ b/tests/language/extension_methods/static_extension_internal_resolution_0_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test an extension MyExt with no members against:
diff --git a/tests/language/extension_methods/static_extension_internal_resolution_1_test.dart b/tests/language/extension_methods/static_extension_internal_resolution_1_test.dart
index 052ab86..29f080f 100644
--- a/tests/language/extension_methods/static_extension_internal_resolution_1_test.dart
+++ b/tests/language/extension_methods/static_extension_internal_resolution_1_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test an extension MyExt with no members against:
diff --git a/tests/language/extension_methods/static_extension_internal_resolution_2_test.dart b/tests/language/extension_methods/static_extension_internal_resolution_2_test.dart
index 861bb4b..88e5ed7 100644
--- a/tests/language/extension_methods/static_extension_internal_resolution_2_test.dart
+++ b/tests/language/extension_methods/static_extension_internal_resolution_2_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test an extension MyExt with members whose names overlap with names from the
diff --git a/tests/language/extension_methods/static_extension_internal_resolution_3_error_test.dart b/tests/language/extension_methods/static_extension_internal_resolution_3_error_test.dart
index b0409f9..0e71bb2 100644
--- a/tests/language/extension_methods/static_extension_internal_resolution_3_error_test.dart
+++ b/tests/language/extension_methods/static_extension_internal_resolution_3_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test the error cases for an extension MyExt with member names
diff --git a/tests/language/extension_methods/static_extension_internal_resolution_3_test.dart b/tests/language/extension_methods/static_extension_internal_resolution_3_test.dart
index f6c57e9..4ef0021 100644
--- a/tests/language/extension_methods/static_extension_internal_resolution_3_test.dart
+++ b/tests/language/extension_methods/static_extension_internal_resolution_3_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test the non error cases for an extension MyExt with member names
diff --git a/tests/language/extension_methods/static_extension_internal_resolution_4_error_test.dart b/tests/language/extension_methods/static_extension_internal_resolution_4_error_test.dart
index 6cd8d4b..d1a4685 100644
--- a/tests/language/extension_methods/static_extension_internal_resolution_4_error_test.dart
+++ b/tests/language/extension_methods/static_extension_internal_resolution_4_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test the error cases for an extension MyExt with member names
diff --git a/tests/language/extension_methods/static_extension_internal_resolution_4_test.dart b/tests/language/extension_methods/static_extension_internal_resolution_4_test.dart
index 93955cb..590a359 100644
--- a/tests/language/extension_methods/static_extension_internal_resolution_4_test.dart
+++ b/tests/language/extension_methods/static_extension_internal_resolution_4_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test the non error cases for an extension MyExt with member names
diff --git a/tests/language/extension_methods/static_extension_internal_resolution_5_test.dart b/tests/language/extension_methods/static_extension_internal_resolution_5_test.dart
index 0334769..114959d 100644
--- a/tests/language/extension_methods/static_extension_internal_resolution_5_test.dart
+++ b/tests/language/extension_methods/static_extension_internal_resolution_5_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test the non error cases for an extension MyExt with member names
diff --git a/tests/language/extension_methods/static_extension_internal_resolution_6_error_test.dart b/tests/language/extension_methods/static_extension_internal_resolution_6_error_test.dart
index 258feaa..38191b8 100644
--- a/tests/language/extension_methods/static_extension_internal_resolution_6_error_test.dart
+++ b/tests/language/extension_methods/static_extension_internal_resolution_6_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test various static error corner cases around internal resolution.
diff --git a/tests/language/extension_methods/static_extension_internal_resolution_6_test.dart b/tests/language/extension_methods/static_extension_internal_resolution_6_test.dart
index f8dd416..2e41798 100644
--- a/tests/language/extension_methods/static_extension_internal_resolution_6_test.dart
+++ b/tests/language/extension_methods/static_extension_internal_resolution_6_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test various non-error corner cases around internal resolution.
diff --git a/tests/language/extension_methods/static_extension_operators_test.dart b/tests/language/extension_methods/static_extension_operators_test.dart
index 20e0f0d..0cf6359 100644
--- a/tests/language/extension_methods/static_extension_operators_test.dart
+++ b/tests/language/extension_methods/static_extension_operators_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 import "package:expect/expect.dart";
 
 // Tests that static extensions can be used for all operators.
diff --git a/tests/language/extension_methods/static_extension_resolution_failures_test.dart b/tests/language/extension_methods/static_extension_resolution_failures_test.dart
index f68d72b..2856a18 100644
--- a/tests/language/extension_methods/static_extension_resolution_failures_test.dart
+++ b/tests/language/extension_methods/static_extension_resolution_failures_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests extension method resolution failures.
 
 import "package:expect/expect.dart";
diff --git a/tests/language/extension_methods/static_extension_resolution_test.dart b/tests/language/extension_methods/static_extension_resolution_test.dart
index e3dfcd2..6afacf3 100644
--- a/tests/language/extension_methods/static_extension_resolution_test.dart
+++ b/tests/language/extension_methods/static_extension_resolution_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 import "package:expect/expect.dart";
 
 // Tests the resolution of multiple applicable extensions.
diff --git a/tests/language/extension_methods/static_extension_setter_getter_assignability_error_test.dart b/tests/language/extension_methods/static_extension_setter_getter_assignability_error_test.dart
index f7cc524..e31cc30 100644
--- a/tests/language/extension_methods/static_extension_setter_getter_assignability_error_test.dart
+++ b/tests/language/extension_methods/static_extension_setter_getter_assignability_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // It is an error to have a setter and a getter in an extension where
 // the return type of the getter is not assignable to the argument type
 // of the setter.
diff --git a/tests/language/extension_methods/static_extension_silly_types_test.dart b/tests/language/extension_methods/static_extension_silly_types_test.dart
index cbe21d6..73a079d 100644
--- a/tests/language/extension_methods/static_extension_silly_types_test.dart
+++ b/tests/language/extension_methods/static_extension_silly_types_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests extension methods on the non-function, non-class types.
 
 import "dart:async" show FutureOr;
diff --git a/tests/language/extension_methods/static_extension_syntax_test.dart b/tests/language/extension_methods/static_extension_syntax_test.dart
index 0d71b60..c400a88 100644
--- a/tests/language/extension_methods/static_extension_syntax_test.dart
+++ b/tests/language/extension_methods/static_extension_syntax_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests extension declaration syntax combinations.
 
 import "package:expect/expect.dart";
diff --git a/tests/language/extension_methods/syntax/extension_methods_test.dart b/tests/language/extension_methods/syntax/extension_methods_test.dart
index 51013db..079b344 100644
--- a/tests/language/extension_methods/syntax/extension_methods_test.dart
+++ b/tests/language/extension_methods/syntax/extension_methods_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 import 'package:expect/expect.dart';
 
 class C {
diff --git a/tests/language/inference/accessor_ref_runtime_1_test.dart b/tests/language/inference/accessor_ref_runtime_1_test.dart
new file mode 100644
index 0000000..6009b9a
--- /dev/null
+++ b/tests/language/inference/accessor_ref_runtime_1_test.dart
@@ -0,0 +1,46 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {
+  late B b;
+}
+
+class B {
+  C? get c => null;
+  void set c(C? value) {}
+}
+
+class C {}
+
+class D extends C {}
+
+class E extends C {}
+
+// Inferred type: A
+var a = new A();
+
+// Inferred type: C?
+var x = a.b.c;
+
+// Inferred type: C
+var y = a.b.c ??= new D();
+
+test() {
+  // Verify the types of x and y by trying to assign to them.
+  x = new C();
+  x = null;
+
+
+
+
+
+}
+
+main() {}
diff --git a/tests/language/inference/accessor_ref_runtime_2_test.dart b/tests/language/inference/accessor_ref_runtime_2_test.dart
new file mode 100644
index 0000000..caa198f
--- /dev/null
+++ b/tests/language/inference/accessor_ref_runtime_2_test.dart
@@ -0,0 +1,45 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {
+  late B b;
+}
+
+class B {
+  C? get c => null;
+  void set c(C? value) {}
+}
+
+class C {}
+
+class D extends C {}
+
+class E extends C {}
+
+// Inferred type: A
+var a = new A();
+
+// Inferred type: C?
+var x = a.b.c;
+
+// Inferred type: C
+var y = a.b.c ??= new D();
+
+test() {
+  // Verify the types of x and y by trying to assign to them.
+
+  x = new E();
+
+
+
+
+}
+
+main() {}
diff --git a/tests/language/inference/accessor_ref_runtime_3_test.dart b/tests/language/inference/accessor_ref_runtime_3_test.dart
new file mode 100644
index 0000000..721e41d
--- /dev/null
+++ b/tests/language/inference/accessor_ref_runtime_3_test.dart
@@ -0,0 +1,45 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {
+  late B b;
+}
+
+class B {
+  C? get c => null;
+  void set c(C? value) {}
+}
+
+class C {}
+
+class D extends C {}
+
+class E extends C {}
+
+// Inferred type: A
+var a = new A();
+
+// Inferred type: C?
+var x = a.b.c;
+
+// Inferred type: C
+var y = a.b.c ??= new D();
+
+test() {
+  // Verify the types of x and y by trying to assign to them.
+
+
+
+  y = new C();
+
+
+}
+
+main() {}
diff --git a/tests/language/inference/accessor_ref_runtime_4_test.dart b/tests/language/inference/accessor_ref_runtime_4_test.dart
new file mode 100644
index 0000000..960ee76
--- /dev/null
+++ b/tests/language/inference/accessor_ref_runtime_4_test.dart
@@ -0,0 +1,45 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {
+  late B b;
+}
+
+class B {
+  C? get c => null;
+  void set c(C? value) {}
+}
+
+class C {}
+
+class D extends C {}
+
+class E extends C {}
+
+// Inferred type: A
+var a = new A();
+
+// Inferred type: C?
+var x = a.b.c;
+
+// Inferred type: C
+var y = a.b.c ??= new D();
+
+test() {
+  // Verify the types of x and y by trying to assign to them.
+
+
+
+
+  y = new E();
+
+}
+
+main() {}
diff --git a/tests/language/inference/accessor_ref_runtime_test.dart b/tests/language/inference/accessor_ref_runtime_test.dart
new file mode 100644
index 0000000..4bf857d
--- /dev/null
+++ b/tests/language/inference/accessor_ref_runtime_test.dart
@@ -0,0 +1,45 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {
+  late B b;
+}
+
+class B {
+  C? get c => null;
+  void set c(C? value) {}
+}
+
+class C {}
+
+class D extends C {}
+
+class E extends C {}
+
+// Inferred type: A
+var a = new A();
+
+// Inferred type: C?
+var x = a.b.c;
+
+// Inferred type: C
+var y = a.b.c ??= new D();
+
+test() {
+  // Verify the types of x and y by trying to assign to them.
+
+
+
+
+
+
+}
+
+main() {}
diff --git a/tests/language/inference/accessor_ref_test.dart b/tests/language/inference/accessor_ref_test.dart
new file mode 100644
index 0000000..9d12c5c
--- /dev/null
+++ b/tests/language/inference/accessor_ref_test.dart
@@ -0,0 +1,50 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {
+  late B b;
+}
+
+class B {
+  C? get c => null;
+  void set c(C? value) {}
+}
+
+class C {}
+
+class D extends C {}
+
+class E extends C {}
+
+// Inferred type: A
+var a = new A();
+
+// Inferred type: C?
+var x = a.b.c;
+
+// Inferred type: C
+var y = a.b.c ??= new D();
+
+test() {
+  // Verify the types of x and y by trying to assign to them.
+  x = new C();
+  x = new E();
+  x = new B();
+  //  ^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
+  //      ^
+  // [cfe] A value of type 'B' can't be assigned to a variable of type 'C?'.
+  y = new C();
+  y = new E();
+  y = new B();
+  //  ^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
+  //      ^
+  // [cfe] A value of type 'B' can't be assigned to a variable of type 'C'.
+}
+
+main() {}
diff --git a/tests/language/inference/circularity_test.dart b/tests/language/inference/circularity_test.dart
new file mode 100644
index 0000000..f7d1db2
--- /dev/null
+++ b/tests/language/inference/circularity_test.dart
@@ -0,0 +1,11 @@
+// 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.
+
+var /*@compile-error=unspecified*/ x = () => y;
+var /*@compile-error=unspecified*/ y = () => x;
+
+void main() {
+  x;
+  y;
+}
diff --git a/tests/language/inference/inconsistent_inheritance_test.dart b/tests/language/inference/inconsistent_inheritance_test.dart
new file mode 100644
index 0000000..79ba0fc
--- /dev/null
+++ b/tests/language/inference/inconsistent_inheritance_test.dart
@@ -0,0 +1,24 @@
+// 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.
+
+class A {
+  void f(Object x) {}
+}
+
+class B {
+  void f(String x) {}
+}
+
+class C extends A implements B {
+  void f(x) {
+    // Infers Object for x.
+    Object y = x;
+    String z = x;
+    //         ^
+    // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
+    // [cfe] A value of type 'Object' can't be assigned to a variable of type 'String'.
+  }
+}
+
+void main() {}
diff --git a/tests/language/is/function_test.dart b/tests/language/is/function_test.dart
new file mode 100644
index 0000000..9b3abd7
--- /dev/null
+++ b/tests/language/is/function_test.dart
@@ -0,0 +1,60 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+var staticClosure;
+int staticMethod() => 42;
+
+class B {
+  var instanceClosure;
+  var nullField;
+  int instanceMethod() => 43;
+}
+
+checkUntyped(closure) {
+  Expect.isTrue(closure is Function);
+}
+
+checkTyped(int closure()) {
+  Expect.isTrue(closure is Function);
+}
+
+checkTypedNull(int closure()?) {
+  Expect.isFalse(closure is Function);
+}
+
+checkUntypedNull(closure) {
+  Expect.isFalse(closure is Function);
+}
+
+main() {
+  staticClosure = () => 44;
+  B b = new B();
+  b.instanceClosure = () => 45;
+
+  closureStatement() => 46;
+  var closureExpression = () => 47;
+
+  checkUntyped(staticClosure);
+  checkTyped(staticClosure);
+
+  checkUntyped(staticMethod);
+  checkTyped(staticMethod);
+
+  checkUntyped(b.instanceClosure);
+  checkTyped(b.instanceClosure);
+
+  checkUntyped(b.instanceMethod);
+  checkTyped(b.instanceMethod);
+
+  checkUntyped(closureStatement);
+  checkTyped(closureStatement);
+
+  checkUntyped(closureExpression);
+  checkTyped(closureExpression);
+
+  checkTypedNull(b.nullField);
+  checkUntypedNull(b.nullField);
+}
diff --git a/tests/language/is/instanceof_test.dart b/tests/language/is/instanceof_test.dart
new file mode 100644
index 0000000..2f9c7e7
--- /dev/null
+++ b/tests/language/is/instanceof_test.dart
@@ -0,0 +1,198 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class InstanceofTest {
+  InstanceofTest() {}
+
+  static void testBasicTypes() {
+    Expect.equals(true, 0 is int);
+    Expect.equals(false, (0 is bool));
+    Expect.equals(false, (0 is String));
+    Expect.equals(true, 1 is int);
+    Expect.equals(false, (1 is bool));
+    Expect.equals(false, (1 is String));
+
+    Expect.equals(false, (true is int));
+    Expect.equals(true, true is bool);
+    Expect.equals(false, (true is String));
+    Expect.equals(false, (false is int));
+    Expect.equals(true, false is bool);
+    Expect.equals(false, (false is String));
+
+    Expect.equals(false, ("a" is int));
+    Expect.equals(false, ("a" is bool));
+    Expect.equals(true, "a" is String);
+
+    Expect.equals(false, ("" is int));
+    Expect.equals(false, ("" is bool));
+    Expect.equals(true, "" is String);
+  }
+
+  static void testInterfaces() {
+    // Simple Cases with interfaces.
+    var a = new A();
+    Expect.equals(true, a is I);
+    Expect.equals(true, a is A);
+    Expect.equals(false, (a is String));
+    Expect.equals(false, (a is int));
+    Expect.equals(false, (a is bool));
+    Expect.equals(false, (a is B));
+    Expect.equals(false, (a is J));
+
+    // Interfaces with parent
+    var c = new C();
+    Expect.equals(true, c is I);
+    Expect.equals(true, c is J);
+    Expect.equals(true, c is K);
+
+    var d = new D();
+    Expect.equals(true, d is I);
+    Expect.equals(true, d is J);
+    Expect.equals(true, d is K);
+
+    Expect.equals(true, [] is List);
+    Expect.equals(true, [1, 2, 3] is List);
+    Expect.equals(false, (d is List));
+    Expect.equals(false, (null is List));
+    Expect.equals(false, (null is D));
+  }
+
+  static void testnum() {
+    Expect.equals(true, 0 is num);
+    Expect.equals(true, 123 is num);
+    Expect.equals(true, 123.34 is num);
+    Expect.equals(false, ("123" is num));
+    Expect.equals(false, (null is num));
+    Expect.equals(false, (true is num));
+    Expect.equals(false, (false is num));
+    var a = new A();
+    Expect.equals(false, (a is num));
+  }
+
+  static void testTypeOfInstanceOf() {
+    var a = new A();
+    // Interfaces with parent
+    var c = new C();
+    var d = new D();
+
+    Expect.equals(true, (null is int) is bool);
+    Expect.equals(true, (null is bool) is bool);
+    Expect.equals(true, (null is String) is bool);
+    Expect.equals(true, (null is A) is bool);
+    Expect.equals(true, (null is B) is bool);
+    Expect.equals(true, (null is I) is bool);
+    Expect.equals(true, (null is J) is bool);
+
+    Expect.equals(true, (0 is int) is bool);
+    Expect.equals(true, (0 is bool) is bool);
+    Expect.equals(true, (0 is String) is bool);
+    Expect.equals(true, (0 is A) is bool);
+    Expect.equals(true, (0 is B) is bool);
+    Expect.equals(true, (0 is I) is bool);
+    Expect.equals(true, (0 is J) is bool);
+
+    Expect.equals(true, (1 is int) is bool);
+    Expect.equals(true, (1 is bool) is bool);
+    Expect.equals(true, (1 is String) is bool);
+    Expect.equals(true, (1 is A) is bool);
+    Expect.equals(true, (1 is B) is bool);
+    Expect.equals(true, (1 is I) is bool);
+    Expect.equals(true, (1 is J) is bool);
+
+    Expect.equals(true, (true is int) is bool);
+    Expect.equals(true, (true is bool) is bool);
+    Expect.equals(true, (true is String) is bool);
+    Expect.equals(true, (true is A) is bool);
+    Expect.equals(true, (true is B) is bool);
+    Expect.equals(true, (true is I) is bool);
+    Expect.equals(true, (true is J) is bool);
+
+    Expect.equals(true, (false is int) is bool);
+    Expect.equals(true, (false is bool) is bool);
+    Expect.equals(true, (false is String) is bool);
+    Expect.equals(true, (false is A) is bool);
+    Expect.equals(true, (false is B) is bool);
+    Expect.equals(true, (false is I) is bool);
+    Expect.equals(true, (false is J) is bool);
+
+    Expect.equals(true, ("a" is int) is bool);
+    Expect.equals(true, ("a" is bool) is bool);
+    Expect.equals(true, ("a" is String) is bool);
+    Expect.equals(true, ("a" is A) is bool);
+    Expect.equals(true, ("a" is B) is bool);
+    Expect.equals(true, ("a" is I) is bool);
+    Expect.equals(true, ("a" is J) is bool);
+
+    Expect.equals(true, ("" is int) is bool);
+    Expect.equals(true, ("" is bool) is bool);
+    Expect.equals(true, ("" is String) is bool);
+    Expect.equals(true, ("" is A) is bool);
+    Expect.equals(true, ("" is B) is bool);
+    Expect.equals(true, ("" is I) is bool);
+    Expect.equals(true, ("" is J) is bool);
+
+    Expect.equals(true, (a is int) is bool);
+    Expect.equals(true, (a is bool) is bool);
+    Expect.equals(true, (a is String) is bool);
+    Expect.equals(true, (a is A) is bool);
+    Expect.equals(true, (a is B) is bool);
+    Expect.equals(true, (a is I) is bool);
+    Expect.equals(true, (a is J) is bool);
+
+    Expect.equals(true, (c is int) is bool);
+    Expect.equals(true, (c is bool) is bool);
+    Expect.equals(true, (c is String) is bool);
+    Expect.equals(true, (c is A) is bool);
+    Expect.equals(true, (c is B) is bool);
+    Expect.equals(true, (c is I) is bool);
+    Expect.equals(true, (c is J) is bool);
+
+    Expect.equals(true, (d is int) is bool);
+    Expect.equals(true, (d is bool) is bool);
+    Expect.equals(true, (d is String) is bool);
+    Expect.equals(true, (d is A) is bool);
+    Expect.equals(true, (d is B) is bool);
+    Expect.equals(true, (d is I) is bool);
+    Expect.equals(true, (d is J) is bool);
+  }
+
+  static void testMain() {
+    testBasicTypes();
+    // TODO(sra): enable after fixing b/4604295
+    // testnum();
+    testInterfaces();
+    testTypeOfInstanceOf();
+  }
+}
+
+abstract class I {}
+
+class A implements I {
+  A() {}
+}
+
+class B {
+  B() {}
+}
+
+abstract class J {}
+
+abstract class K implements J {}
+
+class C implements I, K {
+  C() {}
+}
+
+class D extends C {
+  D() : super() {}
+}
+
+main() {
+  // Repeat type checks so that inlined tests can be tested as well.
+  for (int i = 0; i < 5; i++) {
+    InstanceofTest.testMain();
+  }
+}
diff --git a/tests/language/is/interfaces2_test.dart b/tests/language/is/interfaces2_test.dart
new file mode 100644
index 0000000..bc68d95
--- /dev/null
+++ b/tests/language/is/interfaces2_test.dart
@@ -0,0 +1,43 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class A {}
+
+class B extends A {}
+
+class C extends B {}
+
+class D implements C {}
+
+int inscrutable(int x) => (x == 0) ? 0 : (x | inscrutable(x & (x - 1)));
+
+main() {
+  var things = [new A(), new B(), new C(), new D()];
+
+  var a = things[inscrutable(0)];
+  Expect.isTrue(a is A);
+  Expect.isFalse(a is B);
+  Expect.isFalse(a is C);
+  Expect.isFalse(a is D);
+
+  var b = things[inscrutable(1)];
+  Expect.isTrue(b is A);
+  Expect.isTrue(b is B);
+  Expect.isFalse(b is C);
+  Expect.isFalse(b is D);
+
+  var c = things[inscrutable(2)];
+  Expect.isTrue(c is A);
+  Expect.isTrue(c is B);
+  Expect.isTrue(c is C);
+  Expect.isFalse(c is D);
+
+  var d = things[inscrutable(3)];
+  Expect.isTrue(d is A);
+  Expect.isTrue(d is B);
+  Expect.isTrue(d is C);
+  Expect.isTrue(d is D);
+}
diff --git a/tests/language/is/interfaces_test.dart b/tests/language/is/interfaces_test.dart
new file mode 100644
index 0000000..a71319a
--- /dev/null
+++ b/tests/language/is/interfaces_test.dart
@@ -0,0 +1,32 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class A {}
+
+class B extends A {}
+
+class C implements B {}
+
+int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1));
+
+main() {
+  var things = [new A(), new B(), new C()];
+
+  var a = things[inscrutable(0)];
+  Expect.isTrue(a is A);
+  Expect.isFalse(a is B);
+  Expect.isFalse(a is C);
+
+  var b = things[inscrutable(1)];
+  Expect.isTrue(b is A);
+  Expect.isTrue(b is B);
+  Expect.isFalse(b is C);
+
+  var c = things[inscrutable(2)];
+  Expect.isTrue(c is A);
+  Expect.isTrue(c is B);
+  Expect.isTrue(c is C);
+}
diff --git a/tests/language/is/is2_test.dart b/tests/language/is/is2_test.dart
new file mode 100644
index 0000000..93f6fb2
--- /dev/null
+++ b/tests/language/is/is2_test.dart
@@ -0,0 +1,111 @@
+// 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 the instanceof operation.
+
+import "package:expect/expect.dart";
+
+abstract class I {}
+
+abstract class AI implements I {}
+
+class A implements AI {
+  const A();
+}
+
+class B implements I {
+  const B();
+}
+
+class C extends A {
+  const C() : super();
+}
+
+class InstanceofTest {
+  static testMain() {
+    var a = new A();
+    var b = new B();
+    var c = new C();
+    var n = null;
+
+    Expect.equals(true, a is A);
+    Expect.equals(true, b is B);
+    Expect.equals(true, c is C);
+    Expect.equals(true, c is A);
+
+    Expect.equals(true, a is AI);
+    Expect.equals(true, a is I);
+    Expect.equals(false, b is AI);
+    Expect.equals(true, b is I);
+    Expect.equals(true, c is AI);
+    Expect.equals(true, c is I);
+    Expect.equals(false, n is AI);
+    Expect.equals(false, n is I);
+
+    Expect.equals(false, a is B);
+    Expect.equals(false, a is C);
+    Expect.equals(false, b is A);
+    Expect.equals(false, b is C);
+    Expect.equals(false, c is B);
+    Expect.equals(false, n is A);
+
+    Expect.equals(false, null is A);
+    Expect.equals(false, null is B);
+    Expect.equals(false, null is C);
+    Expect.equals(false, null is AI);
+    Expect.equals(false, null is I);
+
+    {
+      var a = new List.empty();
+      Expect.equals(true, a is List);
+      Expect.equals(true, a is List<Object?>);
+      Expect.equals(isWeakMode, a is List<Object>);
+      Expect.equals(false, a is List<int>);
+      Expect.equals(false, a is List<num>);
+      Expect.equals(false, a is List<String>);
+    }
+    {
+      var a = new List<Object>.filled(5, -1);
+      Expect.equals(true, a is List);
+      Expect.equals(true, a is List<Object?>);
+      Expect.equals(true, a is List<Object>);
+      Expect.equals(false, a is List<int>);
+      Expect.equals(false, a is List<num>);
+      Expect.equals(false, a is List<String>);
+    }
+    {
+      var a = new List<int>.filled(5, -1);
+      Expect.equals(true, a is List);
+      Expect.equals(true, a is List<Object?>);
+      Expect.equals(true, a is List<Object>);
+      Expect.equals(true, a is List<int>);
+      Expect.equals(true, a is List<num>);
+      Expect.equals(false, a is List<String>);
+    }
+    {
+      var a = new List<num>.filled(5, -1);
+      Expect.equals(true, a is List);
+      Expect.equals(true, a is List<Object?>);
+      Expect.equals(true, a is List<Object>);
+      Expect.equals(false, a is List<int>);
+      Expect.equals(true, a is List<num>);
+      Expect.equals(false, a is List<String>);
+    }
+    {
+      var a = new List<String>.filled(5, "s");
+      Expect.equals(true, a is List);
+      Expect.equals(true, a is List<Object?>);
+      Expect.equals(true, a is List<Object>);
+      Expect.equals(false, a is List<int>);
+      Expect.equals(false, a is List<num>);
+      Expect.equals(true, a is List<String>);
+    }
+  }
+}
+
+main() {
+  // Repeat type checks so that inlined tests can be tested as well.
+  for (int i = 0; i < 5; i++) {
+    InstanceofTest.testMain();
+  }
+}
diff --git a/tests/language/is/is4_test.dart b/tests/language/is/is4_test.dart
new file mode 100644
index 0000000..b560557
--- /dev/null
+++ b/tests/language/is/is4_test.dart
@@ -0,0 +1,72 @@
+// 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 the instanceof operation.
+// Regression test for issue 5216.
+// VMOptions=--optimization-counter-threshold=10 --no-use-osr --no-background-compilation
+
+import "package:expect/expect.dart";
+
+class Foo<T> {
+  bool isT() => "a string" is T;
+  bool isNotT() => "a string" is! T;
+  bool isListT() => [0, 1, 2] is List<T>;
+  bool isNotListT() => [0, 1, 2] is! List<T>;
+  bool isAlsoListT() => <int>[0, 1, 2] is List<T>;
+  bool isNeitherListT() => <int>[0, 1, 2] is! List<T>;
+}
+
+testFooString() {
+  var o = new Foo<String>();
+  Expect.isTrue(o.isT());
+  Expect.isTrue(!o.isNotT());
+  Expect.isTrue(!o.isListT());
+  Expect.isTrue(o.isNotListT());
+  Expect.isTrue(!o.isAlsoListT()); // //# 01: ok
+  Expect.isTrue(o.isNeitherListT()); // //# 01: ok
+  for (var i = 0; i < 20; i++) {
+    // Make sure methods are optimized.
+    o.isT();
+    o.isNotT();
+    o.isListT();
+    o.isNotListT();
+    o.isAlsoListT(); // //# 01: ok
+    o.isNeitherListT(); // //# 01: ok
+  }
+  Expect.isTrue(o.isT(), "1");
+  Expect.isTrue(!o.isNotT(), "2");
+  Expect.isTrue(!o.isListT(), "3");
+  Expect.isTrue(o.isNotListT(), "4");
+  Expect.isTrue(!o.isAlsoListT(), "5"); // //# 01: ok
+  Expect.isTrue(o.isNeitherListT(), "6"); // //# 01: ok
+}
+
+testFooInt() {
+  var o = new Foo<int>();
+  Expect.isTrue(!o.isT());
+  Expect.isTrue(o.isNotT());
+  Expect.isTrue(o.isListT());
+  Expect.isTrue(!o.isNotListT());
+  Expect.isTrue(o.isAlsoListT());
+  Expect.isTrue(!o.isNeitherListT());
+  for (var i = 0; i < 20; i++) {
+    // Make sure methods are optimized.
+    o.isT();
+    o.isNotT();
+    o.isListT();
+    o.isNotListT();
+    o.isAlsoListT();
+    o.isNeitherListT();
+  }
+  Expect.isTrue(!o.isT());
+  Expect.isTrue(o.isNotT());
+  Expect.isTrue(o.isListT());
+  Expect.isTrue(!o.isNotListT());
+  Expect.isTrue(o.isAlsoListT());
+  Expect.isTrue(!o.isNeitherListT());
+}
+
+main() {
+  testFooString();
+  testFooInt();
+}
diff --git a/tests/language/is/isnot_malformed_type_runtime_test.dart b/tests/language/is/isnot_malformed_type_runtime_test.dart
new file mode 100644
index 0000000..c815992
--- /dev/null
+++ b/tests/language/is/isnot_malformed_type_runtime_test.dart
@@ -0,0 +1,17 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+import 'package:expect/expect.dart';
+
+f(obj) {
+  // 'Baz' is not loaded, throws a type error on test.
+
+}
+
+main() {
+
+}
diff --git a/tests/language/is/isnot_malformed_type_test.dart b/tests/language/is/isnot_malformed_type_test.dart
new file mode 100644
index 0000000..11715e2
--- /dev/null
+++ b/tests/language/is/isnot_malformed_type_test.dart
@@ -0,0 +1,17 @@
+// 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.
+
+import 'package:expect/expect.dart';
+
+f(obj) {
+  // 'Baz' is not loaded, throws a type error on test.
+  return (obj is! Baz);
+  //              ^^^
+  // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+  // [cfe] 'Baz' isn't a type.
+}
+
+main() {
+  f(null);
+}
diff --git a/tests/language/is/malformed_type_runtime_test.dart b/tests/language/is/malformed_type_runtime_test.dart
new file mode 100644
index 0000000..1389f62
--- /dev/null
+++ b/tests/language/is/malformed_type_runtime_test.dart
@@ -0,0 +1,60 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+// Dart test program for the "is" and "as" operator with malformed type.
+
+import "package:expect/expect.dart";
+
+testEval(x) {
+  return x;
+}
+
+test99(e) {
+  // Test that a runtime error is thrown when the 'is' operator checks for a
+  // malformed type.
+
+}
+
+test98(e) {
+  // Test that a runtime error is thrown when the 'as' operator checks for a
+  // malformed type.
+
+}
+
+test97(e) {
+    // Check that the remaining expression after the type test
+    // with malformed type is parsed, but not executed at runtime.
+    // Regression test for issue 16985.
+
+}
+
+test96(e) {
+    // Check that the remaining expression after the type test
+    // with malformed type is parsed, but not executed at runtime.
+    // Regression test for issue 16985.
+
+}
+
+test95(e) {
+  // Check that the type-tested expression is evaluated before the
+  // runtime error is thrown.
+
+}
+
+test94(e) {
+  // Check that the type-tested expression is evaluated before the
+  // runtime error is thrown.
+
+}
+
+main() {
+
+
+
+
+
+
+}
diff --git a/tests/language/is/malformed_type_test.dart b/tests/language/is/malformed_type_test.dart
new file mode 100644
index 0000000..d54d4de
--- /dev/null
+++ b/tests/language/is/malformed_type_test.dart
@@ -0,0 +1,75 @@
+// 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.
+// Dart test program for the "is" and "as" operator with malformed type.
+
+import "package:expect/expect.dart";
+
+testEval(x) {
+  return x;
+}
+
+test99(e) {
+  // Test that a runtime error is thrown when the 'is' operator checks for a
+  // malformed type.
+    if (e is Undefined) Expect.fail("unreachable");
+    //       ^^^^^^^^^
+    // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+    // [cfe] 'Undefined' isn't a type.
+}
+
+test98(e) {
+  // Test that a runtime error is thrown when the 'as' operator checks for a
+  // malformed type.
+    if (e as Undefined) Expect.fail("unreachable");
+    //       ^^^^^^^^^
+    // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+    // [cfe] 'Undefined' isn't a type.
+}
+
+test97(e) {
+    // Check that the remaining expression after the type test
+    // with malformed type is parsed, but not executed at runtime.
+    // Regression test for issue 16985.
+    if (e is Undefined && testEval(e)) Expect.fail("unreachable");
+    //       ^^^^^^^^^
+    // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+    // [cfe] 'Undefined' isn't a type.
+}
+
+test96(e) {
+    // Check that the remaining expression after the type test
+    // with malformed type is parsed, but not executed at runtime.
+    // Regression test for issue 16985.
+    if (e as Undefined && testEval(e)) Expect.fail("unreachable");
+    //       ^^^^^^^^^
+    // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+    // [cfe] 'Undefined' isn't a type.
+}
+
+test95(e) {
+  // Check that the type-tested expression is evaluated before the
+  // runtime error is thrown.
+    if (testEval(e) is Undefined) Expect.fail("unreachable");
+    //                 ^^^^^^^^^
+    // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+    // [cfe] 'Undefined' isn't a type.
+}
+
+test94(e) {
+  // Check that the type-tested expression is evaluated before the
+  // runtime error is thrown.
+    if (testEval(e) as Undefined) Expect.fail("unreachable");
+    //                 ^^^^^^^^^
+    // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+    // [cfe] 'Undefined' isn't a type.
+}
+
+main() {
+  test99("99 bottles");
+  test98("98 bottles");
+  test97("97 bottles");
+  test96("96 bottles");
+  test95("95 bottles");
+  test94("94 bottles");
+}
diff --git a/tests/language/is/nan_test.dart b/tests/language/is/nan_test.dart
new file mode 100644
index 0000000..125aabf
--- /dev/null
+++ b/tests/language/is/nan_test.dart
@@ -0,0 +1,17 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class A {
+  bool get isNaN => false;
+}
+
+main() {
+  Expect.isTrue(foo(double.nan));
+  Expect.isFalse(foo(new A()));
+  Expect.throwsNoSuchMethodError(() => foo('bar'));
+}
+
+foo(a) => a.isNaN;
diff --git a/tests/language/is/not_class1_test.dart b/tests/language/is/not_class1_test.dart
new file mode 100644
index 0000000..6de8f8b
--- /dev/null
+++ b/tests/language/is/not_class1_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+/// Test that we expect a class after an 'is'.
+class A {}
+
+main() {
+  var a = A();
+  if (a is "A") return 0;
+  // [error line 10, column 12, length 0]
+  // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+  // [cfe] Expected ')' before this.
+  //       ^^^
+  // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+  // [cfe] Expected a type, but got '"A"'.
+  //       ^^^
+  // [analyzer] SYNTACTIC_ERROR.EXPECTED_TYPE_NAME
+  // [cfe] This couldn't be parsed.
+}
diff --git a/tests/language/is/not_class2_runtime_test.dart b/tests/language/is/not_class2_runtime_test.dart
new file mode 100644
index 0000000..088e489
--- /dev/null
+++ b/tests/language/is/not_class2_runtime_test.dart
@@ -0,0 +1,31 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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 test program for catch that we expect a class after an 'is'. 'aa' is a
+// malformed type and a type error should be thrown upon test.
+
+import 'package:expect/expect.dart';
+
+class A {
+  const A();
+}
+
+class IsNotClass2NegativeTest {
+  static testMain() {
+    var a = new A();
+    var aa = new A();
+
+
+
+
+    return 0;
+  }
+}
+
+main() {
+  IsNotClass2NegativeTest.testMain();
+}
diff --git a/tests/language/is/not_class2_test.dart b/tests/language/is/not_class2_test.dart
new file mode 100644
index 0000000..9073117
--- /dev/null
+++ b/tests/language/is/not_class2_test.dart
@@ -0,0 +1,31 @@
+// 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 test program for catch that we expect a class after an 'is'. 'aa' is a
+// malformed type and a type error should be thrown upon test.
+
+import 'package:expect/expect.dart';
+
+class A {
+  const A();
+}
+
+class IsNotClass2NegativeTest {
+  static testMain() {
+    var a = new A();
+    var aa = new A();
+
+    if (a is aa) {
+    //       ^^
+    // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_NON_TYPE
+    // [cfe] 'aa' isn't a type.
+      return 0;
+    }
+    return 0;
+  }
+}
+
+main() {
+  IsNotClass2NegativeTest.testMain();
+}
diff --git a/tests/language/is/not_class4_test.dart b/tests/language/is/not_class4_test.dart
new file mode 100644
index 0000000..a3adae2
--- /dev/null
+++ b/tests/language/is/not_class4_test.dart
@@ -0,0 +1,15 @@
+// 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.
+
+/// Test that the parser emits an error when one 'is' expression follows
+/// another.
+class A {}
+
+main() {
+  var a = A();
+  if (a is A is A) return 0;
+  //         ^^
+  // [analyzer] SYNTACTIC_ERROR.UNEXPECTED_TOKEN
+  // [cfe] Unexpected token 'is'.
+}
diff --git a/tests/language/is/object_test.dart b/tests/language/is/object_test.dart
new file mode 100644
index 0000000..6983b18
--- /dev/null
+++ b/tests/language/is/object_test.dart
@@ -0,0 +1,54 @@
+// 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 test program for the "is" type test operator.
+
+import "package:expect/expect.dart";
+
+testTryCatch(x) {
+  try {
+    throw x;
+    Expect.fail("Exception '$x' should've been thrown");
+  } on Object catch (obj) {
+    Expect.equals(obj, x);
+  }
+}
+
+main() {
+  var evalCount = 0;
+  testEval(x) {
+    evalCount++;
+    return x;
+  }
+
+  // Test that types that match JS primitive types compare correctly to Object
+  var x = 1;
+  Expect.isTrue(x is Object);
+  var x2 = 'hi';
+  Expect.isTrue(x2 is Object);
+  var x3 = true;
+  Expect.isTrue(x3 is Object);
+  var x4 = null;
+  Expect.isFalse(x4 is Object);
+  Expect.isTrue(x4 is Object?);
+  var y;
+  Expect.isFalse(y is Object);
+  Expect.isTrue(y is Object?);
+
+  // Verify that operand is evaluated
+  Expect.isTrue(testEval(123) is Object);
+  Expect.equals(1, evalCount);
+  Expect.isTrue(testEval('world') is Object);
+  Expect.equals(2, evalCount);
+  Expect.isTrue(testEval(false) is Object);
+  Expect.equals(3, evalCount);
+  Expect.isFalse(testEval(null) is Object);
+  Expect.equals(4, evalCount);
+  Expect.isTrue(testEval(null) is Object?);
+  Expect.equals(5, evalCount);
+
+  // Verify that these objects are catchable
+  testTryCatch(444);
+  testTryCatch('abc');
+  testTryCatch(true);
+}
diff --git a/tests/language/is/operator_clash_test.dart b/tests/language/is/operator_clash_test.dart
new file mode 100644
index 0000000..3cbe095
--- /dev/null
+++ b/tests/language/is/operator_clash_test.dart
@@ -0,0 +1,45 @@
+// 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:expect/expect.dart";
+
+class A {}
+
+class $B extends A {}
+
+class C implements $B {
+  // Try to clash with dart2js's isCLASS field.
+  var isB = false;
+  var $isB = false;
+  var is$B = false;
+  var is$$B = false;
+  var $is$B = false;
+
+  var isA = false;
+  var $isA = false;
+  var is$A = false;
+  var is$$A = false;
+  var $is$A = false;
+}
+
+int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1));
+
+main() {
+  var things = [new A(), new $B(), new C()];
+
+  var a = things[inscrutable(0)];
+  Expect.isTrue(a is A);
+  Expect.isFalse(a is $B);
+  Expect.isFalse(a is C);
+
+  var b = things[inscrutable(1)];
+  Expect.isTrue(b is A);
+  Expect.isTrue(b is $B);
+  Expect.isFalse(b is C);
+
+  var c = things[inscrutable(2)];
+  Expect.isTrue(c is A);
+  Expect.isTrue(c is $B);
+  Expect.isTrue(c is C);
+}
diff --git a/tests/language/is/operator_test.dart b/tests/language/is/operator_test.dart
new file mode 100644
index 0000000..a934dc1
--- /dev/null
+++ b/tests/language/is/operator_test.dart
@@ -0,0 +1,85 @@
+// 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 the "is" type test operator.
+
+import "package:expect/expect.dart";
+
+abstract class I {}
+
+abstract class AI implements I {}
+
+class A implements AI {
+  const A();
+}
+
+class B implements I {
+  const B();
+}
+
+class C extends A {
+  const C() : super();
+}
+
+class IsOperatorTest {
+  static testMain() {
+    var a = new A();
+    var b = new B();
+    var c = new C();
+    var n = null;
+    Expect.equals(true, a is A);
+    Expect.equals(false, a is! A);
+    Expect.equals(true, b is B);
+    Expect.equals(false, b is! B);
+    Expect.equals(true, c is C);
+    Expect.equals(false, c is! C);
+    Expect.equals(true, c is A);
+    Expect.equals(false, c is! A);
+
+    Expect.equals(true, a is AI);
+    Expect.equals(false, a is! AI);
+    Expect.equals(true, a is I);
+    Expect.equals(false, a is! I);
+    Expect.equals(false, b is AI);
+    Expect.equals(true, b is! AI);
+    Expect.equals(true, b is I);
+    Expect.equals(false, b is! I);
+    Expect.equals(true, c is AI);
+    Expect.equals(false, c is! AI);
+    Expect.equals(true, c is I);
+    Expect.equals(false, c is! I);
+    Expect.equals(false, n is AI);
+    Expect.equals(true, n is! AI);
+    Expect.equals(false, n is I);
+    Expect.equals(true, n is! I);
+
+    Expect.equals(false, a is B);
+    Expect.equals(true, a is! B);
+    Expect.equals(false, a is C);
+    Expect.equals(true, a is! C);
+    Expect.equals(false, b is A);
+    Expect.equals(true, b is! A);
+    Expect.equals(false, b is C);
+    Expect.equals(true, b is! C);
+    Expect.equals(false, c is B);
+    Expect.equals(true, c is! B);
+    Expect.equals(false, n is A);
+    Expect.equals(true, n is! A);
+
+    Expect.equals(false, null is A);
+    Expect.equals(false, null is B);
+    Expect.equals(false, null is C);
+    Expect.equals(false, null is AI);
+    Expect.equals(false, null is I);
+
+    Expect.equals(true, null is! A);
+    Expect.equals(true, null is! B);
+    Expect.equals(true, null is! C);
+    Expect.equals(true, null is! AI);
+    Expect.equals(true, null is! I);
+  }
+}
+
+main() {
+  IsOperatorTest.testMain();
+}
diff --git a/tests/language/is/optimized_test.dart b/tests/language/is/optimized_test.dart
new file mode 100644
index 0000000..3c3f875
--- /dev/null
+++ b/tests/language/is/optimized_test.dart
@@ -0,0 +1,101 @@
+// 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.
+// Testing optimized 'is' tests.
+// VMOptions=--optimization-counter-threshold=5 --no-use-osr --no-background-compilation
+
+import "package:expect/expect.dart";
+
+bool isInt(x) => x is int;
+
+int isIntRes(x) {
+  if (x is int) {
+    return 1;
+  } else {
+    return 0;
+  }
+}
+
+int isNotIntRes(x) {
+  if (x is! int) {
+    return 1;
+  } else {
+    return 0;
+  }
+}
+
+int isIfThenElseIntRes(x) {
+  return x is int ? 1 : 0;
+}
+
+bool isString(x) => x is String;
+
+int isStringRes(x) {
+  if (x is String) {
+    return 1;
+  } else {
+    return 0;
+  }
+}
+
+int isNotStringRes(x) {
+  if (x is! String) {
+    return 1;
+  } else {
+    return 0;
+  }
+}
+
+main() {
+  for (int i = 0; i < 20; i++) {
+    Expect.isFalse(isInt(3.2));
+    Expect.isTrue(isInt(3));
+    Expect.isTrue(isInt(17179869184)); // Mint on ia32.
+    Expect.isFalse(isString(2.0));
+    Expect.isTrue(isString("Morgan"));
+  }
+  // No deoptimization of isInt possible since all types are known by the compiler
+
+  Expect.isFalse(isString(true));
+  for (int i = 0; i < 20; i++) {
+    Expect.isFalse(isInt(3.2));
+    Expect.isTrue(isInt(3));
+    Expect.isTrue(isInt(17179869184)); // Mint on ia32.
+    Expect.isFalse(isInt("hu"));
+    Expect.isFalse(isString(2.0));
+    Expect.isTrue(isString("Morgan"));
+    Expect.isFalse(isString(true));
+  }
+
+  for (int i = 0; i < 20; i++) {
+    Expect.equals(0, isIntRes(3.2));
+    Expect.equals(1, isIntRes(3));
+    Expect.equals(0, isIntRes("hi"));
+    Expect.equals(1, isNotIntRes(3.2));
+    Expect.equals(0, isNotIntRes(3));
+    Expect.equals(1, isNotIntRes("hi"));
+    Expect.equals(0, isIfThenElseIntRes(3.2));
+    Expect.equals(1, isIfThenElseIntRes(3));
+    Expect.equals(0, isIfThenElseIntRes("hi"));
+  }
+
+  for (int i = 0; i < 20; i++) {
+    Expect.equals(0, isStringRes(3.2));
+    Expect.equals(1, isStringRes("Lotus"));
+    Expect.equals(1, isNotStringRes(3.2));
+    Expect.equals(0, isNotStringRes("Lotus"));
+  }
+
+  // Deoptimize 'isStringRes', 'isNotIntRes'.
+  Expect.equals(0, isStringRes(null));
+  Expect.equals(1, isNotIntRes(null));
+  for (int i = 0; i < 20; i++) {
+    Expect.equals(0, isStringRes(3.2));
+    Expect.equals(1, isStringRes("Lotus"));
+    Expect.equals(0, isStringRes(null));
+
+    Expect.equals(1, isNotStringRes(3.2));
+    Expect.equals(0, isNotStringRes("Lotus"));
+    Expect.equals(1, isNotStringRes(null));
+  }
+}
diff --git a/tests/language/lazy/map_test.dart b/tests/language/lazy/map_test.dart
new file mode 100644
index 0000000..08554a4
--- /dev/null
+++ b/tests/language/lazy/map_test.dart
@@ -0,0 +1,10 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+var data = {'a': 'a'};
+main() {
+  Expect.equals('a', data['a']);
+}
diff --git a/tests/language/lazy/static2_test.dart b/tests/language/lazy/static2_test.dart
new file mode 100644
index 0000000..5a0ce9f
--- /dev/null
+++ b/tests/language/lazy/static2_test.dart
@@ -0,0 +1,12 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+final x = (int t) => t + 1;
+
+main() {
+  Expect.equals(499, x(498));
+  Expect.equals(42, x(41));
+}
diff --git a/tests/language/lazy/static3_test.dart b/tests/language/lazy/static3_test.dart
new file mode 100644
index 0000000..b3253e1
--- /dev/null
+++ b/tests/language/lazy/static3_test.dart
@@ -0,0 +1,78 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+final x = foo();
+var x2 = foo2();
+var x3 = foo3();
+var x4 = foo4();
+var x5 = foo5();
+final x6 = foo6();
+
+// Don't allow unlimited recursion to overflow the stack.
+var x7Depth = 0;
+int x7 = (++x7Depth > 10) ? x7Depth : x7 + 1;
+
+foo() {
+  throw "interrupt initialization";
+}
+
+foo2() {
+  x2 = 499;
+  throw "interrupt initialization";
+}
+
+// Don't allow unlimited recursion to overflow the stack.
+var foo3Depth = 0;
+foo3() => (++foo3Depth > 10) ? foo3Depth : x3 + 1;
+
+foo4() {
+  x4 = 498;
+  x4 = x4 + 1;
+  return x4;
+}
+
+foo5() {
+  x5 = 498;
+  x5 = x5 + 1;
+}
+
+foo6() {
+  try {
+    return x5 + 1;
+  } catch (e) {
+    return 499;
+  }
+}
+
+fib(x) {
+  if (x is! int) return 0;
+  if (x < 2) return x;
+  return fib(x - 1) + fib(x - 2);
+}
+
+main() {
+  // If an initializer throws, then accessing it again re-evaluates the
+  // initializer.
+  Expect.throws(() => fib(x), (e) => e == "interrupt initialization");
+  Expect.throws(() => fib(x), (e) => e == "interrupt initialization");
+  Expect.throws(() => fib(x), (e) => e == "interrupt initialization");
+
+  Expect.throws(() => fib(x2), (e) => e == "interrupt initialization");
+  // The store happened before the throw, so is there now.
+  Expect.equals(499, x2);
+
+  // This value means that the initializer did fully call itself recursively.
+  Expect.equals(21, x3);
+
+  Expect.equals(499, x4);
+
+  Expect.equals(null, x5);
+
+  Expect.equals(499, x6);
+
+  // This value means that the initializer did fully call itself recursively.
+  Expect.equals(21, x7);
+}
diff --git a/tests/language/lazy/static4_test.dart b/tests/language/lazy/static4_test.dart
new file mode 100644
index 0000000..4e532c9
--- /dev/null
+++ b/tests/language/lazy/static4_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.
+
+import "package:expect/expect.dart";
+
+final x = foo(499);
+final y = foo(41) + 1;
+
+final t = bar(499);
+final u = bar(41) + 1;
+final v = bar("some string");
+
+foo(x) => x; // The return type will always be int.
+bar(x) => x; // The return type varies and can be int or String.
+
+main() {
+  Expect.equals(499, x);
+  Expect.equals(42, y);
+  Expect.equals(499, t);
+  Expect.equals(42, u);
+  Expect.equals("some string", v);
+}
diff --git a/tests/language/lazy/static5_test.dart b/tests/language/lazy/static5_test.dart
new file mode 100644
index 0000000..afaf30e
--- /dev/null
+++ b/tests/language/lazy/static5_test.dart
@@ -0,0 +1,12 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+final x = (int t) => (int u) => t + u;
+
+main() {
+  Expect.equals(499, x(498)(1));
+  Expect.equals(42, x(39)(3));
+}
diff --git a/tests/language/lazy/static6_src.dart b/tests/language/lazy/static6_src.dart
new file mode 100644
index 0000000..78f7a83
--- /dev/null
+++ b/tests/language/lazy/static6_src.dart
@@ -0,0 +1,28 @@
+// 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.
+
+/*
+ * A lot of comments to make sure that the lazy initialization code has a
+ * position that does not fit into lazy_static6_test.dart file.
+ ******************************************************************************
+ ******************************************************************************
+ ******************************************************************************
+ ******************************************************************************
+ ******************************************************************************
+ ******************************************************************************
+ ******************************************************************************
+ ******************************************************************************
+ ******************************************************************************
+ ******************************************************************************
+ ******************************************************************************
+ ******************************************************************************
+ */
+part of lazy_static6_test;
+
+final x = (int t) => (int u) => t + u;
+
+main() {
+  Expect.equals(499, x(498)(1));
+  Expect.equals(42, x(39)(3));
+}
diff --git a/tests/language/lazy/static6_test.dart b/tests/language/lazy/static6_test.dart
new file mode 100644
index 0000000..61c309a
--- /dev/null
+++ b/tests/language/lazy/static6_test.dart
@@ -0,0 +1,7 @@
+// 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 lazy_static6_test;
+
+import "package:expect/expect.dart";
+part "static6_src.dart";
diff --git a/tests/language/lazy/static7_test.dart b/tests/language/lazy/static7_test.dart
new file mode 100644
index 0000000..fecd89a
--- /dev/null
+++ b/tests/language/lazy/static7_test.dart
@@ -0,0 +1,19 @@
+// 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:expect/expect.dart";
+
+var sideEffect = 0;
+int x = (() {
+  sideEffect++;
+  return 499;
+})();
+
+main() {
+  if (new DateTime.now().day >= -1) {
+    x = 42;
+  }
+  Expect.equals(42, x);
+  Expect.equals(0, sideEffect);
+}
diff --git a/tests/language/lazy/static8_test.dart b/tests/language/lazy/static8_test.dart
new file mode 100644
index 0000000..953129c
--- /dev/null
+++ b/tests/language/lazy/static8_test.dart
@@ -0,0 +1,76 @@
+// 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:expect/expect.dart";
+
+// Test re-entrant initializer - calls throw StackOverflowError.
+
+var trace;
+
+final foo = bar;
+
+var recursionDepth = 0;
+
+get bar {
+  if (recursionDepth > 3) throw "recursed";
+  recursionDepth++;
+
+  trace.add(recursionDepth);
+  try {
+    return foo ?? 1;
+  } catch (e) {
+    trace.add(e);
+  }
+
+  return 42;
+}
+
+void testTopLevel() {
+  trace = [];
+  recursionDepth = 0;
+  var result = foo;
+  Expect.equals(42, result);
+  Expect.equals('1,2,3,4,recursed', trace.join(','));
+  trace = [];
+  recursionDepth = 0;
+  result = foo;
+  Expect.equals(42, result);
+  Expect.equals('', trace.join(','));
+}
+
+class X {
+  static final foo = X.bar;
+
+  static get bar {
+    if (recursionDepth > 3) throw "recursed";
+    recursionDepth++;
+
+    trace.add(recursionDepth);
+    try {
+      return foo ?? 1;
+    } catch (e) {
+      trace.add(e);
+    }
+
+    return 49;
+  }
+}
+
+void testClassStatic() {
+  trace = [];
+  recursionDepth = 0;
+  var result = X.foo;
+  Expect.equals(49, result);
+  Expect.equals('1,2,3,4,recursed', trace.join(','));
+  trace = [];
+  recursionDepth = 0;
+  result = X.foo;
+  Expect.equals(49, result);
+  Expect.equals('', trace.join(','));
+}
+
+main() {
+  testTopLevel();
+  testClassStatic();
+}
diff --git a/tests/language/lazy/static_test.dart b/tests/language/lazy/static_test.dart
new file mode 100644
index 0000000..cdfabdd
--- /dev/null
+++ b/tests/language/lazy/static_test.dart
@@ -0,0 +1,50 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+final x = foo();
+final y = y2(y3);
+final y2 = incrementCreator();
+final y3 = fib(5);
+
+foo() => 499;
+
+incrementCreator() => (x) => x + 1;
+fib(x) {
+  if (x < 2) return x;
+  return fib(x - 1) + fib(x - 2);
+}
+
+var count = 0;
+sideEffect() => count++;
+
+final t = sideEffect();
+var t2 = sideEffect();
+
+class A {
+  static final a = toto();
+  static final b = b2(b3);
+  static final b2 = decrementCreator();
+  static final b3 = fact(5);
+
+  static toto() => 666;
+
+  static decrementCreator() => (x) => x - 1;
+  static fact(x) {
+    if (x <= 1) return x;
+    return x * fact(x - 1);
+  }
+}
+
+main() {
+  Expect.equals(499, x);
+  Expect.equals(6, y);
+  Expect.equals(666, A.a);
+  Expect.equals(119, A.b);
+  Expect.equals(0, t);
+  t2 = 499;
+  Expect.equals(499, t2);
+  Expect.equals(1, count);
+}
diff --git a/tests/language/lazy/throwing_variable_test.dart b/tests/language/lazy/throwing_variable_test.dart
new file mode 100644
index 0000000..1f5cd5a
--- /dev/null
+++ b/tests/language/lazy/throwing_variable_test.dart
@@ -0,0 +1,25 @@
+// 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.
+
+// Test that engines will not infer that [a] is always of type int.
+import 'package:expect/expect.dart';
+
+var a = foo();
+
+foo() {
+  () => 42;
+  if (true) throw 'Sorry';
+  return 42;
+}
+
+main() {
+  try {
+    a;
+  } catch (e) {
+    // Ignore.
+  }
+  Expect.throws(() {
+    if (a is num) throw 'Test failed';
+  }, (error) => error == 'Sorry');
+}
diff --git a/tests/language/least_upper_bound/expansive_runtime_test.dart b/tests/language/least_upper_bound/expansive_runtime_test.dart
new file mode 100644
index 0000000..cc2068a
--- /dev/null
+++ b/tests/language/least_upper_bound/expansive_runtime_test.dart
@@ -0,0 +1,104 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class N<T> {
+  T get n => throw "uncalled";
+}
+
+class C1<T> extends N<N<C1<T>>> {
+  T get c1 => throw "uncalled";
+}
+
+class C2<T> extends N<N<C2<N<C2<T>>>>> {
+  T get c2 => throw "uncalled";
+}
+
+/**
+ * Test that we don't try to find the least upper bound by applying the
+ * algorithm for finding the most specific common declaration recursively on
+ * type arguments.
+ *
+ * For C1<int> and N<C1<String>> this would result in this infinite chain of
+ * computations:
+ *
+ * lub(C1<int>, N<C1<String>>) = lub(N<N<C1<int>>>, N<C1<String>>)
+ * =>
+ * lub(N<C1<int>>, C1<String>) = lub(N<C1<int>>, N<N<C1<String>>>)
+ * =>
+ * lub(C1<int>, N<C1<String>>) = lub(N<N<C1<int>>>, N<C1<String>>>)
+ * => ...
+ */
+void testC1(bool z, C1<int> a, N<C1<String>> b) {
+  if (z) {
+    // The least upper bound of C1<int> and N<C1<String>> is Object since the
+    // supertypes are
+    //     {C1<int>, N<N<C1<int>>>, Object} for C1<int> and
+    //     {N<C1<String>>, Object} for N<C1<String>> and
+    // Object is the most specific type in the intersection of the supertypes.
+
+    // Is least upper bound dynamic?
+
+    // Is least upper bound N<...> ?
+
+    // Is least upper bound C1<...> ?
+
+    // Is least upper bound N<dynamic> ?
+
+    // Is least upper bound N<N<...>> ?
+
+    // Is least upper bound N<C1<...>> ?
+
+  }
+}
+
+/**
+ * Test that we don't try to find the least upper bound by applying the
+ * algorithm for finding the most specific common declaration recursively on
+ * type arguments.
+ *
+ * For C1<int> and N<C1<String>> this would result in this infinite and
+ * expanding chain of computations:
+ *
+ * lub(C2<int>, N<C2<String>>) = lub(N<N<C2<N<C2<int>>>>>, N<C2<String>>)
+ * =>
+ * lub(N<C2<N<C2<int>>>>, C2<String>) =
+ *                               lub(N<C2<N<C2<int>>>>, N<N<C2<N<C2<String>>>>>)
+ * =>
+ * lub(C2<N<C2<int>>>, N<C2<N<C2<String>>>>) =
+ *                              lub(N<N<C2<N<C2<int>>>>>, N<C2<N<C2<String>>>>>)
+ * => ...
+ */
+
+void testC2(bool z, C2<int> a, N<C2<String>> b) {
+  if (z) {
+    // The least upper bound of C2<int> and N<C2<String>> is Object since the
+    // supertypes are
+    //     {C2<int>, N<N<C2<N<C2<int>>>>>, Object} for C1<int> and
+    //     {N<C2<String>>, Object} for N<C1<String>> and
+    // Object is the most specific type in the intersection of the supertypes.
+
+    // Is least upper bound dynamic?
+
+    // Is least upper bound N<...> ?
+
+    // Is least upper bound C2<...> ?
+
+    // Is least upper bound N<dynamic> ?
+
+    // Is least upper bound N<N<...>> ?
+
+    // Is least upper bound N<C2<...>> ?
+
+  }
+}
+
+void main() {
+  testC1(false, C1<int>(), N<C1<String>>());
+  testC2(false, C2<int>(), N<C2<String>>());
+}
diff --git a/tests/language/least_upper_bound/expansive_test.dart b/tests/language/least_upper_bound/expansive_test.dart
new file mode 100644
index 0000000..21663df
--- /dev/null
+++ b/tests/language/least_upper_bound/expansive_test.dart
@@ -0,0 +1,147 @@
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class N<T> {
+  T get n => throw "uncalled";
+}
+
+class C1<T> extends N<N<C1<T>>> {
+  T get c1 => throw "uncalled";
+}
+
+class C2<T> extends N<N<C2<N<C2<T>>>>> {
+  T get c2 => throw "uncalled";
+}
+
+/**
+ * Test that we don't try to find the least upper bound by applying the
+ * algorithm for finding the most specific common declaration recursively on
+ * type arguments.
+ *
+ * For C1<int> and N<C1<String>> this would result in this infinite chain of
+ * computations:
+ *
+ * lub(C1<int>, N<C1<String>>) = lub(N<N<C1<int>>>, N<C1<String>>)
+ * =>
+ * lub(N<C1<int>>, C1<String>) = lub(N<C1<int>>, N<N<C1<String>>>)
+ * =>
+ * lub(C1<int>, N<C1<String>>) = lub(N<N<C1<int>>>, N<C1<String>>>)
+ * => ...
+ */
+void testC1(bool z, C1<int> a, N<C1<String>> b) {
+  if (z) {
+    // The least upper bound of C1<int> and N<C1<String>> is Object since the
+    // supertypes are
+    //     {C1<int>, N<N<C1<int>>>, Object} for C1<int> and
+    //     {N<C1<String>>, Object} for N<C1<String>> and
+    // Object is the most specific type in the intersection of the supertypes.
+
+    // Is least upper bound dynamic?
+    (z ? a : b).z;
+    //          ^
+    // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
+    // [cfe] The getter 'z' isn't defined for the class 'Object'.
+
+    // Is least upper bound N<...> ?
+    (z ? a : b).n;
+    //          ^
+    // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
+    // [cfe] The getter 'n' isn't defined for the class 'Object'.
+
+    // Is least upper bound C1<...> ?
+    (z ? a : b).c1;
+    //          ^^
+    // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
+    // [cfe] The getter 'c1' isn't defined for the class 'Object'.
+
+    // Is least upper bound N<dynamic> ?
+    (z ? a : b).n.z;
+    //          ^
+    // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
+    // [cfe] The getter 'n' isn't defined for the class 'Object'.
+
+    // Is least upper bound N<N<...>> ?
+    (z ? a : b).n.n;
+    //          ^
+    // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
+    // [cfe] The getter 'n' isn't defined for the class 'Object'.
+
+    // Is least upper bound N<C1<...>> ?
+    (z ? a : b).n.c1;
+    //          ^
+    // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
+    // [cfe] The getter 'n' isn't defined for the class 'Object'.
+  }
+}
+
+/**
+ * Test that we don't try to find the least upper bound by applying the
+ * algorithm for finding the most specific common declaration recursively on
+ * type arguments.
+ *
+ * For C1<int> and N<C1<String>> this would result in this infinite and
+ * expanding chain of computations:
+ *
+ * lub(C2<int>, N<C2<String>>) = lub(N<N<C2<N<C2<int>>>>>, N<C2<String>>)
+ * =>
+ * lub(N<C2<N<C2<int>>>>, C2<String>) =
+ *                               lub(N<C2<N<C2<int>>>>, N<N<C2<N<C2<String>>>>>)
+ * =>
+ * lub(C2<N<C2<int>>>, N<C2<N<C2<String>>>>) =
+ *                              lub(N<N<C2<N<C2<int>>>>>, N<C2<N<C2<String>>>>>)
+ * => ...
+ */
+
+void testC2(bool z, C2<int> a, N<C2<String>> b) {
+  if (z) {
+    // The least upper bound of C2<int> and N<C2<String>> is Object since the
+    // supertypes are
+    //     {C2<int>, N<N<C2<N<C2<int>>>>>, Object} for C1<int> and
+    //     {N<C2<String>>, Object} for N<C1<String>> and
+    // Object is the most specific type in the intersection of the supertypes.
+
+    // Is least upper bound dynamic?
+    (z ? a : b).z;
+    //          ^
+    // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
+    // [cfe] The getter 'z' isn't defined for the class 'Object'.
+
+    // Is least upper bound N<...> ?
+    (z ? a : b).n;
+    //          ^
+    // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
+    // [cfe] The getter 'n' isn't defined for the class 'Object'.
+
+    // Is least upper bound C2<...> ?
+    (z ? a : b).c2;
+    //          ^^
+    // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
+    // [cfe] The getter 'c2' isn't defined for the class 'Object'.
+
+    // Is least upper bound N<dynamic> ?
+    (z ? a : b).n.z;
+    //          ^
+    // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
+    // [cfe] The getter 'n' isn't defined for the class 'Object'.
+
+    // Is least upper bound N<N<...>> ?
+    (z ? a : b).n.n;
+    //          ^
+    // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
+    // [cfe] The getter 'n' isn't defined for the class 'Object'.
+
+    // Is least upper bound N<C2<...>> ?
+    (z ? a : b).n.c2;
+    //          ^
+    // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
+    // [cfe] The getter 'n' isn't defined for the class 'Object'.
+  }
+}
+
+void main() {
+  testC1(false, C1<int>(), N<C1<String>>());
+  testC2(false, C2<int>(), N<C2<String>>());
+}
diff --git a/tests/language/least_upper_bound/least_upper_bound_test.dart b/tests/language/least_upper_bound/least_upper_bound_test.dart
new file mode 100644
index 0000000..eaf0697
--- /dev/null
+++ b/tests/language/least_upper_bound/least_upper_bound_test.dart
@@ -0,0 +1,157 @@
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+  A r1 = true ? a : b;
+  //     ^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
+  //          ^
+  // [cfe] A value of type 'Object' can't be assigned to a variable of type 'A'.
+  B r2 = false ? a : b;
+  //     ^^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
+  //           ^
+  // [cfe] A value of type 'Object' can't be assigned to a variable of type 'B'.
+  (true ? a : b).a = 0;
+  //             ^
+  // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_SETTER
+  // [cfe] The setter 'a' isn't defined for the class 'Object'.
+  (false ? a : b).b = 0;
+  //              ^
+  // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_SETTER
+  // [cfe] The setter 'b' isn't defined for the class 'Object'.
+  var c = new C();
+  (true ? a as dynamic : c).a = 0;
+  (false ? c : b).b = 0;
+}
+
+void testBC(B b, C c) {
+  B r1 = true ? b : c;
+  C r2 = false ? b : c;
+  //     ^^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
+  //           ^
+  // [cfe] A value of type 'B' can't be assigned to a variable of type 'C'.
+  (true ? b : c).b = 0;
+  (false ? b : c).c = 0;
+  //              ^
+  // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_SETTER
+  // [cfe] The setter 'c' isn't defined for the class 'B'.
+  var a = null;
+  (true ? b : a).b = 0;
+  (false ? a : b).c = 0;
+  (true ? c : a).b = 0;
+  (false ? a : c).c = 0;
+}
+
+void testCD(C c, D d) {
+  C r1 = true ? c : d;
+  //     ^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
+  //          ^
+  // [cfe] A value of type 'B' can't be assigned to a variable of type 'C'.
+  D r2 = false ? c : d;
+  //     ^^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
+  //           ^
+  // [cfe] A value of type 'B' can't be assigned to a variable of type 'D'.
+  (true ? c : d).b = 0;
+  (false ? c : d).b = 0;
+  (true ? c : d).c = 0;
+  //             ^
+  // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_SETTER
+  // [cfe] The setter 'c' isn't defined for the class 'B'.
+  (false ? c : d).d = 0;
+  //              ^
+  // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_SETTER
+  // [cfe] The setter 'd' isn't defined for the class 'B'.
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+  E<B> r1 = true ? e : f;
+  F<C> r2 = false ? e : f;
+  //        ^^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
+  //              ^
+  // [cfe] A value of type 'E<B>' can't be assigned to a variable of type 'F<C>'.
+  A r3 = true ? e : f;
+  //     ^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
+  //          ^
+  // [cfe] A value of type 'E<B>' can't be assigned to a variable of type 'A'.
+  B r4 = false ? e : f;
+  //     ^^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
+  //           ^
+  // [cfe] A value of type 'E<B>' can't be assigned to a variable of type 'B'.
+  (true ? e : f).e = C();
+  (false ? e : f).e = C();
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+  E<B> r1 = true ? e : f;
+  F<C> r2 = false ? e : f;
+  //        ^^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
+  //              ^
+  // [cfe] A value of type 'E<B>' can't be assigned to a variable of type 'F<C>'.
+  A r3 = true ? e : f;
+  //     ^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
+  //          ^
+  // [cfe] A value of type 'E<B>' can't be assigned to a variable of type 'A'.
+  B r4 = false ? e : f;
+  //     ^^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
+  //           ^
+  // [cfe] A value of type 'E<B>' can't be assigned to a variable of type 'B'.
+  var r5;
+  r5 = (true ? e : f).e;
+  r5 = (false ? e : f).f;
+  //                   ^
+  // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
+  // [cfe] The getter 'f' isn't defined for the class 'E<B>'.
+}
diff --git a/tests/language/least_upper_bound/runtime_10_test.dart b/tests/language/least_upper_bound/runtime_10_test.dart
new file mode 100644
index 0000000..417d1ce
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_10_test.dart
@@ -0,0 +1,98 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+
+
+
+
+  var c = new C();
+
+
+}
+
+void testBC(B b, C c) {
+
+
+
+
+  var a = null;
+
+
+  (true ? c : a).b = 0;
+
+}
+
+void testCD(C c, D d) {
+
+
+
+
+
+
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+
+
+
+
+
+
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+
+
+
+
+  var r5;
+
+
+}
diff --git a/tests/language/least_upper_bound/runtime_11_test.dart b/tests/language/least_upper_bound/runtime_11_test.dart
new file mode 100644
index 0000000..e699c6b
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_11_test.dart
@@ -0,0 +1,98 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+
+
+
+
+  var c = new C();
+
+
+}
+
+void testBC(B b, C c) {
+
+
+
+
+  var a = null;
+
+
+
+  (false ? a : c).c = 0;
+}
+
+void testCD(C c, D d) {
+
+
+
+
+
+
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+
+
+
+
+
+
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+
+
+
+
+  var r5;
+
+
+}
diff --git a/tests/language/least_upper_bound/runtime_14_test.dart b/tests/language/least_upper_bound/runtime_14_test.dart
new file mode 100644
index 0000000..25210f9
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_14_test.dart
@@ -0,0 +1,98 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+
+
+
+
+  var c = new C();
+
+
+}
+
+void testBC(B b, C c) {
+
+
+
+
+  var a = null;
+
+
+
+
+}
+
+void testCD(C c, D d) {
+
+
+  (true ? c : d).b = 0;
+
+
+
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+
+
+
+
+
+
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+
+
+
+
+  var r5;
+
+
+}
diff --git a/tests/language/least_upper_bound/runtime_15_test.dart b/tests/language/least_upper_bound/runtime_15_test.dart
new file mode 100644
index 0000000..f637466
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_15_test.dart
@@ -0,0 +1,98 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+
+
+
+
+  var c = new C();
+
+
+}
+
+void testBC(B b, C c) {
+
+
+
+
+  var a = null;
+
+
+
+
+}
+
+void testCD(C c, D d) {
+
+
+
+  (false ? c : d).b = 0;
+
+
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+
+
+
+
+
+
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+
+
+
+
+  var r5;
+
+
+}
diff --git a/tests/language/least_upper_bound/runtime_16_test.dart b/tests/language/least_upper_bound/runtime_16_test.dart
new file mode 100644
index 0000000..22ad6d3
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_16_test.dart
@@ -0,0 +1,98 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+
+
+
+
+  var c = new C();
+
+
+}
+
+void testBC(B b, C c) {
+
+
+
+
+  var a = null;
+
+
+
+
+}
+
+void testCD(C c, D d) {
+
+
+
+
+
+
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+  E<B> r1 = true ? e : f;
+
+
+
+
+
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+
+
+
+
+  var r5;
+
+
+}
diff --git a/tests/language/least_upper_bound/runtime_18_test.dart b/tests/language/least_upper_bound/runtime_18_test.dart
new file mode 100644
index 0000000..2a81e40
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_18_test.dart
@@ -0,0 +1,98 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+
+
+
+
+  var c = new C();
+
+
+}
+
+void testBC(B b, C c) {
+
+
+
+
+  var a = null;
+
+
+
+
+}
+
+void testCD(C c, D d) {
+
+
+
+
+
+
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+
+
+
+
+  (true ? e : f).e = C();
+
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+
+
+
+
+  var r5;
+
+
+}
diff --git a/tests/language/least_upper_bound/runtime_19_test.dart b/tests/language/least_upper_bound/runtime_19_test.dart
new file mode 100644
index 0000000..7d60f2e
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_19_test.dart
@@ -0,0 +1,98 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+
+
+
+
+  var c = new C();
+
+
+}
+
+void testBC(B b, C c) {
+
+
+
+
+  var a = null;
+
+
+
+
+}
+
+void testCD(C c, D d) {
+
+
+
+
+
+
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+
+
+
+
+
+  (false ? e : f).e = C();
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+
+
+
+
+  var r5;
+
+
+}
diff --git a/tests/language/least_upper_bound/runtime_20_test.dart b/tests/language/least_upper_bound/runtime_20_test.dart
new file mode 100644
index 0000000..4d41fa2
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_20_test.dart
@@ -0,0 +1,98 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+
+
+
+
+  var c = new C();
+
+
+}
+
+void testBC(B b, C c) {
+
+
+
+
+  var a = null;
+
+
+
+
+}
+
+void testCD(C c, D d) {
+
+
+
+
+
+
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+
+
+
+
+
+
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+  E<B> r1 = true ? e : f;
+
+
+
+  var r5;
+
+
+}
diff --git a/tests/language/least_upper_bound/runtime_22_test.dart b/tests/language/least_upper_bound/runtime_22_test.dart
new file mode 100644
index 0000000..659af08
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_22_test.dart
@@ -0,0 +1,98 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+
+
+
+
+  var c = new C();
+
+
+}
+
+void testBC(B b, C c) {
+
+
+
+
+  var a = null;
+
+
+
+
+}
+
+void testCD(C c, D d) {
+
+
+
+
+
+
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+
+
+
+
+
+
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+
+
+
+
+  var r5;
+  r5 = (true ? e : f).e;
+
+}
diff --git a/tests/language/least_upper_bound/runtime_3_test.dart b/tests/language/least_upper_bound/runtime_3_test.dart
new file mode 100644
index 0000000..98b8016
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_3_test.dart
@@ -0,0 +1,98 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+
+
+
+
+  var c = new C();
+  (true ? a as dynamic : c).a = 0;
+
+}
+
+void testBC(B b, C c) {
+
+
+
+
+  var a = null;
+
+
+
+
+}
+
+void testCD(C c, D d) {
+
+
+
+
+
+
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+
+
+
+
+
+
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+
+
+
+
+  var r5;
+
+
+}
diff --git a/tests/language/least_upper_bound/runtime_4_test.dart b/tests/language/least_upper_bound/runtime_4_test.dart
new file mode 100644
index 0000000..260ca6e
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_4_test.dart
@@ -0,0 +1,98 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+
+
+
+
+  var c = new C();
+
+  (false ? c : b).b = 0;
+}
+
+void testBC(B b, C c) {
+
+
+
+
+  var a = null;
+
+
+
+
+}
+
+void testCD(C c, D d) {
+
+
+
+
+
+
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+
+
+
+
+
+
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+
+
+
+
+  var r5;
+
+
+}
diff --git a/tests/language/least_upper_bound/runtime_5_test.dart b/tests/language/least_upper_bound/runtime_5_test.dart
new file mode 100644
index 0000000..af9eb20
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_5_test.dart
@@ -0,0 +1,98 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+
+
+
+
+  var c = new C();
+
+
+}
+
+void testBC(B b, C c) {
+  B r1 = true ? b : c;
+
+
+
+  var a = null;
+
+
+
+
+}
+
+void testCD(C c, D d) {
+
+
+
+
+
+
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+
+
+
+
+
+
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+
+
+
+
+  var r5;
+
+
+}
diff --git a/tests/language/least_upper_bound/runtime_7_test.dart b/tests/language/least_upper_bound/runtime_7_test.dart
new file mode 100644
index 0000000..5e2405b
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_7_test.dart
@@ -0,0 +1,98 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+
+
+
+
+  var c = new C();
+
+
+}
+
+void testBC(B b, C c) {
+
+
+  (true ? b : c).b = 0;
+
+  var a = null;
+
+
+
+
+}
+
+void testCD(C c, D d) {
+
+
+
+
+
+
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+
+
+
+
+
+
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+
+
+
+
+  var r5;
+
+
+}
diff --git a/tests/language/least_upper_bound/runtime_8_test.dart b/tests/language/least_upper_bound/runtime_8_test.dart
new file mode 100644
index 0000000..5bc86d3
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_8_test.dart
@@ -0,0 +1,98 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+
+
+
+
+  var c = new C();
+
+
+}
+
+void testBC(B b, C c) {
+
+
+
+
+  var a = null;
+  (true ? b : a).b = 0;
+
+
+
+}
+
+void testCD(C c, D d) {
+
+
+
+
+
+
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+
+
+
+
+
+
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+
+
+
+
+  var r5;
+
+
+}
diff --git a/tests/language/least_upper_bound/runtime_9_test.dart b/tests/language/least_upper_bound/runtime_9_test.dart
new file mode 100644
index 0000000..fe6d5c0
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_9_test.dart
@@ -0,0 +1,98 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+
+class A {
+  var a;
+}
+
+class B {
+  var b;
+}
+
+class C extends B {
+  var c;
+}
+
+class D extends B {
+  var d;
+}
+
+class E<T> {
+  T e;
+
+  E(this.e);
+}
+
+class F<T> extends E<T> {
+  T f;
+
+  F(T f)
+      : this.f = f,
+        super(f);
+}
+
+void main() {
+  testAB(new A(), new B());
+  testBC(new C(), new C());
+  testCD(new C(), new D());
+  testEE(new F<C>(new C()), new F<C>(new C()));
+  testEF(new F<C>(new C()), new F<C>(new C()));
+}
+
+void testAB(A a, B b) {
+
+
+
+
+  var c = new C();
+
+
+}
+
+void testBC(B b, C c) {
+
+
+
+
+  var a = null;
+
+  (false ? a : b).c = 0;
+
+
+}
+
+void testCD(C c, D d) {
+
+
+
+
+
+
+}
+
+void testEE(E<B> e, E<C> f) {
+  // The least upper bound of E<B> and E<C> is E<B>.
+
+
+
+
+
+
+}
+
+void testEF(E<B> e, F<C> f) {
+  // The least upper bound of E<B> and F<C> is E<B>.
+
+
+
+
+  var r5;
+
+
+}
diff --git a/tests/language/least_upper_bound/runtime_test.dart b/tests/language/least_upper_bound/runtime_test.dart
new file mode 100644
index 0000000..25f8936
--- /dev/null
+++ b/tests/language/least_upper_bound/runtime_test.dart
@@ -0,0 +1,35 @@
+// 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.
+
+// Test least upper bound through type checking of conditionals.
+import 'package:expect/expect.dart';
+class Expect {
+  static isTrue(bool cond, String message) {
+    if (!cond) throw message;
+  }
+}
+
+class A {}
+class B {}
+class C extends B {}
+class D extends B {}
+class E<T> {}
+class F<T> extends E<T> {}
+
+void main() {
+  checkType(true ? A() : B())<Object>();
+  checkType(true ? B() : C())<B>();
+  checkType(true ? C() : D())<B>();
+  checkType(true ? E<B>() : E<C>())<E<B>>();
+  checkType(true ? E<B>() : F<C>())<E<B>>();
+}
+
+/// Tests that [A] (which should be inferred from the expression for [actual]
+/// is the same as [E].
+void Function<E>() checkType<A>(A actual) {
+  return <E>() {
+    Expect.isTrue(<E>[] is List<A> && <A>[] is List<E>,
+        "Argument expression should have inferred type '$E' but was '$A'.");
+  };
+}
diff --git a/tests/language/library/a.dart b/tests/language/library/a.dart
new file mode 100644
index 0000000..95f855e
--- /dev/null
+++ b/tests/language/library/a.dart
@@ -0,0 +1,10 @@
+// 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 libraryA.dart;
+
+import "c.dart";
+
+var fooA = fooC;
diff --git a/tests/language/library/ambiguous_test.dart b/tests/language/library/ambiguous_test.dart
new file mode 100644
index 0000000..1c2cd6b
--- /dev/null
+++ b/tests/language/library/ambiguous_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.
+
+// This test should fail to load because we are importing two libraries
+// which define the same top level name foo, and we are referring to the name.
+
+import "library1.dart"; // Defines top level variable 'foo'
+import "library2.dart"; // Defines top level variable 'foo'
+
+class X
+extends baw //  //# 05: compile-time error
+{}
+
+main() {
+  print(foo); //# 00: compile-time error
+  print(bar()); //# 01: compile-time error
+  print(baz()); //# 02: compile-time error
+  print(bay()); //# 03: compile-time error
+  print(main is bax); //# 04: compile-time error
+  var x = new X();
+  print("No error expected if ambiguous definitions are not used.");
+}
diff --git a/tests/language/library/b.dart b/tests/language/library/b.dart
new file mode 100644
index 0000000..2a36a64
--- /dev/null
+++ b/tests/language/library/b.dart
@@ -0,0 +1,10 @@
+// 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 libraryB.dart;
+
+import "c.dart";
+
+var fooB = fooC;
diff --git a/tests/language/library/c.dart b/tests/language/library/c.dart
new file mode 100644
index 0000000..fcf3555
--- /dev/null
+++ b/tests/language/library/c.dart
@@ -0,0 +1,8 @@
+// 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 libraryC.dart;
+
+var fooC = 10;
diff --git a/tests/language/library/d.dart b/tests/language/library/d.dart
new file mode 100644
index 0000000..054c033
--- /dev/null
+++ b/tests/language/library/d.dart
@@ -0,0 +1,10 @@
+// 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 libraryD.dart;
+
+import "f.dart";
+
+var fooD = fooC;
diff --git a/tests/language/library/e.dart b/tests/language/library/e.dart
new file mode 100644
index 0000000..0332e42
--- /dev/null
+++ b/tests/language/library/e.dart
@@ -0,0 +1,11 @@
+// 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 libraryE.dart;
+
+import "c.dart";
+import "f.dart";
+
+var fooE = 0;
diff --git a/tests/language/library/env_test.dart b/tests/language/library/env_test.dart
new file mode 100644
index 0000000..a80b8c1
--- /dev/null
+++ b/tests/language/library/env_test.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.
+
+import 'package:expect/expect.dart';
+
+main() {
+  const NOT_PRESENT = false;
+
+  Expect.isTrue(const bool.fromEnvironment("dart.library.async"));
+  Expect.isTrue(const bool.fromEnvironment("dart.library.collection"));
+  Expect.isTrue(const bool.fromEnvironment("dart.library.convert"));
+  Expect.isTrue(const bool.fromEnvironment("dart.library.core"));
+  Expect.isTrue(const bool.fromEnvironment("dart.library.typed_data"));
+  Expect.isTrue(const bool.fromEnvironment("dart.library.developer"));
+
+  // Internal libraries should not be exposed.
+  Expect.equals(
+      NOT_PRESENT,
+      const bool.fromEnvironment("dart.library._internal",
+          defaultValue: NOT_PRESENT));
+
+  bool? hasHtmlSupport;
+  hasHtmlSupport = true; //# has_html_support: ok
+  hasHtmlSupport = false; //# has_no_html_support: ok
+
+  if (hasHtmlSupport != null) {
+    bool expectedResult = hasHtmlSupport ? true : NOT_PRESENT;
+
+    Expect.equals(
+        expectedResult,
+        const bool.fromEnvironment("dart.library.html",
+            defaultValue: NOT_PRESENT));
+    Expect.equals(
+        expectedResult,
+        const bool.fromEnvironment("dart.library.indexed_db",
+            defaultValue: NOT_PRESENT));
+    Expect.equals(
+        expectedResult,
+        const bool.fromEnvironment("dart.library.svg",
+            defaultValue: NOT_PRESENT));
+    Expect.equals(
+        expectedResult,
+        const bool.fromEnvironment("dart.library.web_audio",
+            defaultValue: NOT_PRESENT));
+    Expect.equals(
+        expectedResult,
+        const bool.fromEnvironment("dart.library.web_gl",
+            defaultValue: NOT_PRESENT));
+    Expect.equals(
+        expectedResult,
+        const bool.fromEnvironment("dart.library.web_sql",
+            defaultValue: NOT_PRESENT));
+  }
+
+  bool? hasIoSupport;
+  hasIoSupport = true; //# has_io_support: ok
+  hasIoSupport = false; //# has_no_io_support: ok
+
+  if (hasIoSupport != null) {
+    // Web platforms override 'dart.library.io' to return "false".
+    // We don't test for the non-existence, but just make sure that
+    // dart.library.io is not set to true.
+    Expect.equals(hasIoSupport,
+        const bool.fromEnvironment("dart.library.io", defaultValue: false));
+  }
+
+  bool? hasMirrorSupport;
+  hasMirrorSupport = true; //# has_mirror_support: ok
+  hasMirrorSupport = false; //# has_no_mirror_support: ok
+
+  if (hasMirrorSupport != null) {
+    bool expectedResult = hasMirrorSupport ? true : NOT_PRESENT;
+
+    Expect.equals(
+        expectedResult,
+        const bool.fromEnvironment("dart.library.mirrors",
+            defaultValue: NOT_PRESENT));
+  }
+
+  Expect.equals(
+      NOT_PRESENT,
+      const bool.fromEnvironment("dart.library.XYZ",
+          defaultValue: NOT_PRESENT));
+  Expect.equals(
+      NOT_PRESENT,
+      const bool.fromEnvironment("dart.library.Collection",
+          defaultValue: NOT_PRESENT));
+  Expect.equals(
+      NOT_PRESENT,
+      const bool.fromEnvironment("dart.library.converT",
+          defaultValue: NOT_PRESENT));
+  Expect.equals(NOT_PRESENT,
+      const bool.fromEnvironment("dart.library.", defaultValue: NOT_PRESENT));
+  Expect.equals(
+      NOT_PRESENT,
+      const bool.fromEnvironment("dart.library.core ",
+          defaultValue: NOT_PRESENT));
+}
diff --git a/tests/language/library/f.dart b/tests/language/library/f.dart
new file mode 100644
index 0000000..f73e3cb
--- /dev/null
+++ b/tests/language/library/f.dart
@@ -0,0 +1,8 @@
+// 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 libraryF.dart;
+
+var fooC = 10;
diff --git a/tests/language/library/juxtaposition_lib.dart b/tests/language/library/juxtaposition_lib.dart
new file mode 100644
index 0000000..bf1230a
--- /dev/null
+++ b/tests/language/library/juxtaposition_lib.dart
@@ -0,0 +1,7 @@
+// 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 lib;
+
+part "" "juxtaposition_" "part.dart";
diff --git a/tests/language/library/juxtaposition_part.dart b/tests/language/library/juxtaposition_part.dart
new file mode 100644
index 0000000..708c854
--- /dev/null
+++ b/tests/language/library/juxtaposition_part.dart
@@ -0,0 +1,7 @@
+// 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.
+
+part of lib;
+
+const c = 47;
diff --git a/tests/language/library/juxtaposition_test.dart b/tests/language/library/juxtaposition_test.dart
new file mode 100644
index 0000000..be49df3
--- /dev/null
+++ b/tests/language/library/juxtaposition_test.dart
@@ -0,0 +1,11 @@
+// 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.
+
+import "package:expect/expect.dart";
+import "" "juxtaposition_" "lib.dart";
+export "" "juxtaposition_" "lib.dart";
+
+main() {
+  Expect.equals(c, 47);
+}
diff --git a/tests/language/library/library1.dart b/tests/language/library/library1.dart
new file mode 100644
index 0000000..96cdd1b
--- /dev/null
+++ b/tests/language/library/library1.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.
+//
+
+library library1.dart;
+
+var foo;
+
+bar() => "library1.dart bar()";
+
+baz() => "library1.dart baz()";
+
+var bay;
+
+typedef int bax(int a, int b);
+
+class baw {}
diff --git a/tests/language/library/library1_lib.dart b/tests/language/library/library1_lib.dart
new file mode 100644
index 0000000..81f27af
--- /dev/null
+++ b/tests/language/library/library1_lib.dart
@@ -0,0 +1,12 @@
+// 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 Library1Lib;
+
+class A {
+  A() {}
+  String foo() {
+    return "foo-rty two";
+  }
+}
diff --git a/tests/language/library/library1_test.dart b/tests/language/library/library1_test.dart
new file mode 100644
index 0000000..1219f85
--- /dev/null
+++ b/tests/language/library/library1_test.dart
@@ -0,0 +1,21 @@
+// 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 test program for testing libraries.
+
+library Library1Test.dart;
+
+import "package:expect/expect.dart";
+import "library1_lib.dart";
+
+main() {
+  Library1Test.testMain();
+}
+
+class Library1Test {
+  static testMain() {
+    var a = new A();
+    String s = a.foo();
+    Expect.equals(s, "foo-rty two");
+  }
+}
diff --git a/tests/language/library/library2.dart b/tests/language/library/library2.dart
new file mode 100644
index 0000000..219303f
--- /dev/null
+++ b/tests/language/library/library2.dart
@@ -0,0 +1,16 @@
+// 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.
+
+var foo;
+var foo1 = 0;
+
+bar() => "library2.dart bar()";
+
+var baz;
+
+bay() => "library2.dart bay()";
+
+typedef double bax(int a, int b);
+
+var baw;
diff --git a/tests/language/library/library3.dart b/tests/language/library/library3.dart
new file mode 100644
index 0000000..625f568
--- /dev/null
+++ b/tests/language/library/library3.dart
@@ -0,0 +1,8 @@
+// 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 library3.dart;
+
+import "../library2.dart"; // defines "foo" and "foo1".
diff --git a/tests/language/library/library4.dart b/tests/language/library/library4.dart
new file mode 100644
index 0000000..25af011
--- /dev/null
+++ b/tests/language/library/library4.dart
@@ -0,0 +1,11 @@
+// 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 library4.dart;
+
+import "../library2.dart"; // defines "foo" and "foo1".
+
+var foo;
+var foo1 = 0;
diff --git a/tests/language/library/library5_test.dart b/tests/language/library/library5_test.dart
new file mode 100644
index 0000000..ca6919d
--- /dev/null
+++ b/tests/language/library/library5_test.dart
@@ -0,0 +1,23 @@
+// 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 Library5Test.dart;
+
+import "package:expect/expect.dart";
+import "library5a.dart" as lib5a;
+import "library5b.dart" as lib5b;
+
+int foo(lib5a.Fun f) {
+  return f();
+}
+
+int bar(lib5b.Fun f) {
+  return f(42);
+}
+
+main() {
+  Expect.equals(41, foo(() => 41));
+  Expect.equals(42, bar((x) => x));
+}
diff --git a/tests/language/library/library5a.dart b/tests/language/library/library5a.dart
new file mode 100644
index 0000000..af5ba9c
--- /dev/null
+++ b/tests/language/library/library5a.dart
@@ -0,0 +1,8 @@
+// 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 Library5a.dart;
+
+typedef int Fun();
diff --git a/tests/language/library/library5b.dart b/tests/language/library/library5b.dart
new file mode 100644
index 0000000..ef3e303
--- /dev/null
+++ b/tests/language/library/library5b.dart
@@ -0,0 +1,8 @@
+// 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 Library5b.dart;
+
+typedef int Fun(x);
diff --git a/tests/language/library/library6.dart b/tests/language/library/library6.dart
new file mode 100644
index 0000000..7f4ab4b
--- /dev/null
+++ b/tests/language/library/library6.dart
@@ -0,0 +1,16 @@
+// 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.
+
+// This tests that it is a compile-time error to both import a library
+// that defines a function type alias and to have a local definition for
+// another function type alias with the same name.
+// This name conflict is considered an error even if Fun is never referred to.
+
+library Library6NegativeTest.dart;
+
+import "library5a.dart"; // Defines function type alias Fun
+
+typedef int Fun(); // Does not conflict with definition of Fun from library5a
+
+main() {}
diff --git a/tests/language/library/library_test.dart b/tests/language/library/library_test.dart
new file mode 100644
index 0000000..6dd7428
--- /dev/null
+++ b/tests/language/library/library_test.dart
@@ -0,0 +1,9 @@
+// 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.
+
+import "nonexistent_library.dart"; //# 01: compile-time error
+
+main() {
+  print("Er, hello world? This should not be printed!");
+}
diff --git a/tests/language/library/prefixes.dart b/tests/language/library/prefixes.dart
new file mode 100644
index 0000000..fee5b6e
--- /dev/null
+++ b/tests/language/library/prefixes.dart
@@ -0,0 +1,74 @@
+// 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 LibraryPrefixes.lib;
+
+import "prefixes_test1.dart";
+import "prefixes_test2.dart" as other;
+
+class LibraryPrefixes {
+  static void main(var expectEquals) {
+    var a = Constants.PI;
+    var b = other.Constants.PI;
+    expectEquals(3.14, a);
+    expectEquals(3.14, b);
+
+    expectEquals(1, Constants.foo);
+    expectEquals(2, other.Constants.foo);
+
+    expectEquals(-1, A.y);
+    expectEquals(0, other.A.y);
+
+    expectEquals(1, new A().x);
+    expectEquals(2, new other.A().x);
+
+    expectEquals(3, new A.named().x);
+    expectEquals(4, new other.A.named().x);
+
+    expectEquals(3, new A.fac().x);
+    expectEquals(4, new other.A.fac().x);
+
+    expectEquals(1, new B().x);
+    expectEquals(2, new other.B().x);
+
+    expectEquals(8, new B.named().x);
+    expectEquals(13, new other.B.named().x);
+
+    expectEquals(8, new B.fac().x);
+    expectEquals(13, new other.B.fac().x);
+
+    expectEquals(1, const C().x);
+    expectEquals(2, const other.C().x);
+
+    expectEquals(3, const C.named().x);
+    expectEquals(4, const other.C.named().x);
+
+    expectEquals(3, new C.fac().x);
+    expectEquals(4, new other.C.fac().x);
+
+    expectEquals(1, const D().x);
+    expectEquals(2, const other.D().x);
+
+    expectEquals(8, const D.named().x);
+    expectEquals(13, const other.D.named().x);
+
+    expectEquals(8, new D.fac().x);
+    expectEquals(13, new other.D.fac().x);
+
+    expectEquals(0, E.foo());
+    expectEquals(3, other.E.foo());
+
+    expectEquals(1, new E().bar());
+    expectEquals(4, new other.E().bar());
+
+    expectEquals(9, new E().toto(7)());
+    expectEquals(16, new other.E().toto(11)());
+
+    expectEquals(111, (new E.fun(100).f)());
+    expectEquals(1313, (new other.E.fun(1300).f)());
+
+    expectEquals(999, E.fooo(900)());
+    expectEquals(2048, other.E.fooo(1024)());
+  }
+}
diff --git a/tests/language/library/prefixes_test.dart b/tests/language/library/prefixes_test.dart
new file mode 100644
index 0000000..4ffef88
--- /dev/null
+++ b/tests/language/library/prefixes_test.dart
@@ -0,0 +1,20 @@
+// 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 LibraryPrefixesTest.dart;
+
+import "package:expect/expect.dart";
+import "prefixes.dart";
+
+class LibraryPrefixesTest {
+  static testMain() {
+    LibraryPrefixes.main((a, b) {
+      Expect.equals(a, b);
+    });
+  }
+}
+
+main() {
+  LibraryPrefixesTest.testMain();
+}
diff --git a/tests/language/library/prefixes_test1.dart b/tests/language/library/prefixes_test1.dart
new file mode 100644
index 0000000..17eeaa2
--- /dev/null
+++ b/tests/language/library/prefixes_test1.dart
@@ -0,0 +1,73 @@
+// 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.
+
+class Constants {
+  static const PI = 3.14;
+  static const foo = 1;
+}
+
+class A {
+  static const y = -1;
+  int x;
+  A() : x = 1 {}
+  A.named() : x = 3 {}
+  A.superC(x) : x = x + 7 {}
+  factory A.fac() {
+    return new A.named();
+  }
+}
+
+class B extends A {
+  B() : super() {}
+  B.named() : super.superC(1) {}
+  factory B.fac() {
+    return new B.named();
+  }
+}
+
+class C {
+  final int x;
+  const C() : x = 1;
+  const C.named() : x = 3;
+  const C.superC(x) : x = x + 7;
+  factory C.fac() {
+    return const C.named();
+  }
+}
+
+class D extends C {
+  const D() : super();
+  const D.named() : super.superC(1);
+  factory D.fac() {
+    return const D.named();
+  }
+}
+
+class E {
+  var f;
+  E() {}
+  E.fun(x)
+      : f = (() {
+          return x + 11;
+        }) {}
+  static foo() {
+    return 0;
+  }
+
+  static fooo(x) {
+    return () {
+      return x + 99;
+    };
+  }
+
+  bar() {
+    return 1;
+  }
+
+  toto(x) {
+    return () {
+      return x + 2;
+    };
+  }
+}
diff --git a/tests/language/library/prefixes_test2.dart b/tests/language/library/prefixes_test2.dart
new file mode 100644
index 0000000..fcdc7c5
--- /dev/null
+++ b/tests/language/library/prefixes_test2.dart
@@ -0,0 +1,73 @@
+// 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.
+
+class Constants {
+  static const PI = 3.14;
+  static const foo = 2;
+}
+
+class A {
+  static const y = 0;
+  int x;
+  A() : x = 2 {}
+  A.named() : x = 4 {}
+  A.superC(x) : x = x + 11 {}
+  factory A.fac() {
+    return new A.named();
+  }
+}
+
+class B extends A {
+  B() : super() {}
+  B.named() : super.superC(2) {}
+  factory B.fac() {
+    return new B.named();
+  }
+}
+
+class C {
+  final int x;
+  const C() : x = 2;
+  const C.named() : x = 4;
+  const C.superC(x) : x = x + 11;
+  factory C.fac() {
+    return const C.named();
+  }
+}
+
+class D extends C {
+  const D() : super();
+  const D.named() : super.superC(2);
+  factory D.fac() {
+    return const D.named();
+  }
+}
+
+class E {
+  var f;
+  E() {}
+  E.fun(x)
+      : f = (() {
+          return x + 13;
+        }) {}
+  static foo() {
+    return 3;
+  }
+
+  static fooo(x) {
+    return () {
+      return x + 1024;
+    };
+  }
+
+  bar() {
+    return 4;
+  }
+
+  toto(x) {
+    return () {
+      return x + 5;
+    };
+  }
+}
diff --git a/tests/language/library/private_in_constructor_a.dart b/tests/language/library/private_in_constructor_a.dart
new file mode 100644
index 0000000..ba67fcd
--- /dev/null
+++ b/tests/language/library/private_in_constructor_a.dart
@@ -0,0 +1,17 @@
+// 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 LibraryPrivateInConstructorA;
+
+class PrivateA {
+  const PrivateA();
+  final _val = 499;
+}
+
+var fooA = const PrivateA();
+
+class A {
+  var x;
+  A() : this.x = fooA._val;
+}
diff --git a/tests/language/library/private_in_constructor_b.dart b/tests/language/library/private_in_constructor_b.dart
new file mode 100644
index 0000000..4418372
--- /dev/null
+++ b/tests/language/library/private_in_constructor_b.dart
@@ -0,0 +1,19 @@
+// 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 LibraryPrivateInConstructorB;
+
+import "private_in_constructor_a.dart";
+
+class PrivateB {
+  const PrivateB();
+  final _val = 42;
+}
+
+var fooB = const PrivateB();
+
+class B extends A {
+  var y;
+  B() : this.y = fooB._val;
+}
diff --git a/tests/language/library/private_in_constructor_test.dart b/tests/language/library/private_in_constructor_test.dart
new file mode 100644
index 0000000..f62563a
--- /dev/null
+++ b/tests/language/library/private_in_constructor_test.dart
@@ -0,0 +1,15 @@
+// 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 LibraryPrivateInConstructor;
+
+import "package:expect/expect.dart";
+import "private_in_constructor_a.dart";
+import "private_in_constructor_b.dart";
+
+main() {
+  var b = new B();
+  Expect.equals(499, b.x);
+  Expect.equals(42, b.y);
+}
diff --git a/tests/language/library/same_name_used_lib1.dart b/tests/language/library/same_name_used_lib1.dart
new file mode 100644
index 0000000..3a93459
--- /dev/null
+++ b/tests/language/library/same_name_used_lib1.dart
@@ -0,0 +1,13 @@
+// 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 lib1;
+
+import 'same_name_used_lib2.dart' as lib2;
+
+abstract class X {}
+
+X makeX() {
+  return new lib2.X();
+}
diff --git a/tests/language/library/same_name_used_lib2.dart b/tests/language/library/same_name_used_lib2.dart
new file mode 100644
index 0000000..7d8c8a8
--- /dev/null
+++ b/tests/language/library/same_name_used_lib2.dart
@@ -0,0 +1,12 @@
+// 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 lib2;
+
+import 'same_name_used_lib1.dart' as lib1; // for abstract class X.
+
+class X implements lib1.X {
+  X();
+  toString() => 'lib2.X';
+}
diff --git a/tests/language/library/same_name_used_test.dart b/tests/language/library/same_name_used_test.dart
new file mode 100644
index 0000000..74779f9
--- /dev/null
+++ b/tests/language/library/same_name_used_test.dart
@@ -0,0 +1,16 @@
+// 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.
+
+// 'X' is defined as an abstract class in lib1 and a class implementing that
+// abstract class in lib2.  Use of import prefixes should allow this.
+
+library main;
+
+import "package:expect/expect.dart";
+import "same_name_used_lib1.dart";
+
+main() {
+  var x = makeX();
+  Expect.equals('lib2.X', '$x');
+}
diff --git a/tests/language/list/double_index_in_loop2_test.dart b/tests/language/list/double_index_in_loop2_test.dart
new file mode 100644
index 0000000..01ae74b
--- /dev/null
+++ b/tests/language/list/double_index_in_loop2_test.dart
@@ -0,0 +1,37 @@
+// 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 arrays.
+
+import "package:expect/expect.dart";
+
+bar() => true;
+
+tata() => 1.5;
+
+// The type propagation in Dart2Js wrongly took the intersection of all incoming
+// types in a loop-phi. In this case the back-edge brought type 'number' which,
+// combined with 'integer' (i = 0) was narrowed to 'integer'. As a result no
+// check was inserted for the list access.
+foo(a) {
+  var i;
+  if (bar()) {
+    // t's desired type is conflicting. Once it is used as array receiver. And
+    // once as integer. The backward propagation thus can't decide.
+    // The forward declaration, however, will assign type num.
+    dynamic t = 0 + tata();
+    i = t;
+    if (!bar()) t[0];
+  } else {
+    i = 0;
+  }
+  for (int j = 0; j < 1; j++) {
+    // The phi, combining the two 'i's must reach the conclusion that i is of
+    // type num and therefore needs a check before accessing the array.
+    a[i];
+  }
+}
+
+main() {
+  Expect.throws(() => foo([1, 2]));
+}
diff --git a/tests/language/list/double_index_in_loop_test.dart b/tests/language/list/double_index_in_loop_test.dart
new file mode 100644
index 0000000..ab40f99
--- /dev/null
+++ b/tests/language/list/double_index_in_loop_test.dart
@@ -0,0 +1,27 @@
+// 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 arrays.
+
+import "package:expect/expect.dart";
+
+bar() => true;
+
+// The type propagation in Dart2Js wrongly took the intersection of all incoming
+// types in a loop-phi. In this case the back-edge brought type 'number' which,
+// combined with 'integer' (i = 0) was narrowed to 'integer'. As a result no
+// check was inserted for the list access.
+foo(a) {
+  num i = 0;
+  while (true) {
+    if (i > 1) return a[i];
+    if (bar()) {
+      // Adding a double guarantees a double result. Therefore guard by an if.
+      i = i + 1.5;
+    }
+  }
+}
+
+main() {
+  Expect.throws(() => foo([1, 2]));
+}
diff --git a/tests/language/list/in_closure_test.dart b/tests/language/list/in_closure_test.dart
new file mode 100644
index 0000000..5ac5d99
--- /dev/null
+++ b/tests/language/list/in_closure_test.dart
@@ -0,0 +1,24 @@
+// 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.
+
+// Regression test for dart2js that used to see aborting closure
+// bodies as aborting their enclosing element.
+
+import "package:expect/expect.dart";
+
+main() {
+  var c = () {
+    throw 42;
+  };
+  () {
+    // dart2js would not seen this initialization and therefore think
+    // that the argument passed to a is a list of nulls.
+    var a = [42];
+    foo(a);
+  }();
+}
+
+foo(arg) {
+  Expect.isTrue(arg[0] == 42);
+}
diff --git a/tests/language/list/is_test.dart b/tests/language/list/is_test.dart
new file mode 100644
index 0000000..57c63a2
--- /dev/null
+++ b/tests/language/list/is_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.
+
+import "package:expect/expect.dart";
+
+class A<T> {
+  bar() => new List<T>.empty();
+}
+
+main() {
+  check(new List.empty(), true, false, false);
+  check(new List<int>.empty(), true, true, false);
+  check(new List<double>.empty(), true, false, true);
+  check(new A().bar(), true, false, false);
+  check(new A<int>().bar(), true, true, false);
+  check(new A<double>().bar(), true, false, true);
+  check(new Object(), false, false, false);
+}
+
+check(val, expectList, expectListInt, expectListDouble) {
+  Expect.equals(expectList, val is List);
+  Expect.equals(expectListInt, val is List<int>);
+  Expect.equals(expectListDouble, val is List<double>);
+}
diff --git a/tests/language/list/length_tracer_test.dart b/tests/language/list/length_tracer_test.dart
new file mode 100644
index 0000000..f8c1070
--- /dev/null
+++ b/tests/language/list/length_tracer_test.dart
@@ -0,0 +1,16 @@
+// 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.
+
+// Test that dart2js' optimization on list length does not fold a
+// length getter to a constant if the receiver can be null.
+
+import "package:expect/expect.dart";
+
+var a = 42;
+var b;
+
+main() {
+  Expect.throws(() => b.length);
+  b = const [42];
+}
diff --git a/tests/language/list/list_test.dart b/tests/language/list/list_test.dart
new file mode 100644
index 0000000..9659723
--- /dev/null
+++ b/tests/language/list/list_test.dart
@@ -0,0 +1,134 @@
+// 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 test program for testing arrays.
+
+import "package:expect/expect.dart";
+
+class A {}
+
+class B {}
+
+class ListTest {
+  static void TestIterator() {
+    List<int> a = new List<int>.filled(10, -1);
+    int count = 0;
+
+    // Basic iteration over ObjectList.
+    for (int elem in a) {
+      Expect.equals(-1, elem);
+      count++;
+    }
+    Expect.equals(10, count);
+
+    // List length is 0.
+    List<int> fa = new List<int>.empty(growable: true);
+    count = 0;
+    for (int elem in fa) {
+      count++;
+    }
+    Expect.equals(0, count);
+
+    // Iterate over ImmutableList.
+    List<int> ca = const [0, 1, 2, 3, 4, 5];
+    int sum = 0;
+    for (int elem in ca) {
+      sum += elem;
+      fa.add(elem);
+    }
+    Expect.equals(15, sum);
+
+    // Iterate over List.
+    int sum2 = 0;
+    for (int elem in fa) {
+      sum2 += elem;
+    }
+    Expect.equals(sum, sum2);
+  }
+
+  static void testSublistTypeArguments() {
+    final list1 = new List<A>.empty().sublist(0);
+    Expect.isTrue(list1 is List<A>);
+    Expect.isTrue(list1 is! List<B>);
+
+    final list2 = new List<A>.empty().toList(growable: false);
+    Expect.isTrue(list2 is List<A>);
+    Expect.isTrue(list2 is! List<B>);
+  }
+
+  static void testMain() {
+    int len = 10;
+    List a = new List.filled(len, null);
+    Expect.equals(true, a is List);
+    Expect.equals(len, a.length);
+    a.forEach((element) {
+      Expect.equals(null, element);
+    });
+    a[1] = 1;
+    Expect.equals(1, a[1]);
+    Expect.throwsRangeError(() => a[len]);
+
+   Expect.throws(() {
+      List a = new List<dynamic>.filled(4, null);
+      // Ensure that we catch null coming in even in weak mode.
+      a.setRange(1, 2, a, null as dynamic);
+    });
+
+    Expect.throws(() {
+      List a = new List<dynamic>.filled(4, null);
+      // Ensure that we catch null coming in even in weak mode.
+      a.setRange(1, 2, const [1, 2, 3, 4], null as dynamic);
+    });
+
+    Expect.throwsRangeError(() {
+      List a = new List.filled(4, null);
+      a.setRange(10, 11, a, 1);
+    });
+
+    a = new List.filled(4, null);
+    List b = new List.filled(4, null);
+    b.setRange(0, 4, a, 0);
+
+    List<int> unsorted = [4, 3, 9, 12, -4, 9];
+    int compare(a, b) {
+      if (a < b) return -1;
+      if (a > b) return 1;
+      return 0;
+    }
+
+    unsorted.sort(compare);
+    Expect.equals(6, unsorted.length);
+    Expect.equals(-4, unsorted[0]);
+    Expect.equals(12, unsorted[unsorted.length - 1]);
+    int compare2(a, b) {
+      if (a < b) return 1;
+      if (a > b) return -1;
+      return 0;
+    }
+
+    unsorted.sort(compare2);
+    Expect.equals(12, unsorted[0]);
+    Expect.equals(-4, unsorted[unsorted.length - 1]);
+    Set<int> t = new Set<int>.from(unsorted);
+    Expect.equals(true, t.contains(9));
+    Expect.equals(true, t.contains(-4));
+    Expect.equals(false, t.contains(-3));
+    Expect.equals(6, unsorted.length);
+    Expect.equals(5, t.length);
+    TestIterator();
+    int element = unsorted[2];
+    Expect.equals(9, element);
+
+    Expect.throws(() => new List.filled(-1, 0));
+    Expect.throws(() => new List.filled(0x7ffffffffffff000, 0));
+
+    List list = new List.empty(growable: true);
+    Expect.throwsRangeError(list.removeLast);
+    Expect.equals(0, list.length);
+  }
+}
+
+main() {
+  ListTest.testMain();
+  ListTest.testSublistTypeArguments();
+}
diff --git a/tests/language/list/literal1_runtime_test.dart b/tests/language/list/literal1_runtime_test.dart
new file mode 100644
index 0000000..542d7ed
--- /dev/null
+++ b/tests/language/list/literal1_runtime_test.dart
@@ -0,0 +1,14 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+//
+// A type mismatch in a list literal is a compile-time error
+
+main() {
+  var m = const
+
+      [0, 1];
+}
diff --git a/tests/language/list/literal1_test.dart b/tests/language/list/literal1_test.dart
new file mode 100644
index 0000000..f8db7b2
--- /dev/null
+++ b/tests/language/list/literal1_test.dart
@@ -0,0 +1,17 @@
+// 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.
+//
+// A type mismatch in a list literal is a compile-time error
+
+main() {
+  var m = const
+      <String>
+      [0, 1];
+//     ^
+// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [cfe] A value of type 'int' can't be assigned to a variable of type 'String'.
+//        ^
+// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [cfe] A value of type 'int' can't be assigned to a variable of type 'String'.
+}
diff --git a/tests/language/list/literal2_test.dart b/tests/language/list/literal2_test.dart
new file mode 100644
index 0000000..a21113e
--- /dev/null
+++ b/tests/language/list/literal2_test.dart
@@ -0,0 +1,29 @@
+// 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.
+// Test program for array literals.
+
+import "package:expect/expect.dart";
+
+class ArrayLiteral2Test {
+  static const int LAUREL = 1965;
+  static const int HARDY = 1957;
+
+  static const LUCKY_DOG = const <int>[1919, 1921];
+  static const MUSIC_BOX = const [LAUREL, HARDY];
+
+  static testMain() {
+    Expect.equals(2, LUCKY_DOG.length);
+    Expect.equals(2, MUSIC_BOX.length);
+
+    Expect.equals(1919, LUCKY_DOG[0]);
+    Expect.equals(1921, LUCKY_DOG[1]);
+
+    Expect.equals(LAUREL, MUSIC_BOX[0]);
+    Expect.equals(HARDY, MUSIC_BOX[1]);
+  }
+}
+
+main() {
+  ArrayLiteral2Test.testMain();
+}
diff --git a/tests/language/list/literal3_test.dart b/tests/language/list/literal3_test.dart
new file mode 100644
index 0000000..e78cb50
--- /dev/null
+++ b/tests/language/list/literal3_test.dart
@@ -0,0 +1,53 @@
+// 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.
+// Check that arrays from const array literals are immutable.
+
+import "package:expect/expect.dart";
+
+class ListLiteral3Test {
+  static const List<String> canonicalJoke = const ["knock", "knock"];
+
+  static testMain() {
+    List<String> joke = const ["knock", "knock"];
+    // Elements of canonical lists are canonicalized.
+    Expect.identical(joke, canonicalJoke);
+    Expect.identical(joke[0], joke[1]);
+    Expect.identical(joke[0], canonicalJoke[0]);
+
+    // Lists from literals are immutable.
+    Expect.throwsUnsupportedError(() => joke[0] = "sock");
+    Expect.identical(joke[0], joke[1]);
+
+    // Make sure lists allocated at runtime are mutable and are
+    // not canonicalized.
+    List<String> lame_joke = ["knock", "knock"]; // Invokes operator new.
+    Expect.identical(joke[1], lame_joke[1]);
+    // Operator new creates a mutable list.
+    Expect.equals(false, identical(joke, lame_joke));
+    lame_joke[1] = "who";
+    Expect.identical("who", lame_joke[1]);
+
+    // Elements of canonical lists are canonicalized.
+    List<List<int>> a = const <List<int>>[
+      const [1, 2],
+      const [1, 2]
+    ];
+    Expect.identical(a[0], a[1]);
+    Expect.identical(a[0][0], a[1][0]);
+    Expect.throwsUnsupportedError(() => a[0][0] = 42);
+
+    List<List<double>> b = const [
+      const [1.0, 2.0],
+      const [1.0, 2.0]
+    ];
+    Expect.identical(b[0], b[1]);
+    Expect.equals(true, b[0][0] == 1.0);
+    Expect.identical(b[0][0], b[1][0]);
+    Expect.throwsUnsupportedError(() => b[0][0] = 42.0);
+  }
+}
+
+main() {
+  ListLiteral3Test.testMain();
+}
diff --git a/tests/language/list/literal4_test.dart b/tests/language/list/literal4_test.dart
new file mode 100644
index 0000000..72a31d1
--- /dev/null
+++ b/tests/language/list/literal4_test.dart
@@ -0,0 +1,39 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class ListLiteral4Test<T> {
+  void test() {
+    int result = 0;
+    {
+      var m = <String>[0, 1]; //# 00: compile-time error
+    }
+    {
+      var m = <int>[0, 1];
+      m["0"] = 1; //# 01: compile-time error
+    }
+    {
+      var m = <T>["a" as T, "b" as T]; //# 02: runtime error
+    }
+    var m = <T>[0 as T, 1 as T]; // OK.
+    {
+      var m = <T>[0 as T, 1 as T];
+      m["0"] = 1; //# 03: compile-time error
+    }
+    {
+      var m = const <int>[0, 1];
+      m["0"] = 1; //# 04: compile-time error
+    }
+    {
+      var m = <T>[0 as T, 1 as T]; // OK. Tested above.
+      List<String> ls = m; //# 05: compile-time error
+    }
+  }
+}
+
+main() {
+  var t = new ListLiteral4Test<int>();
+  t.test();
+}
diff --git a/tests/language/list/literal5_test.dart b/tests/language/list/literal5_test.dart
new file mode 100644
index 0000000..a1cbe6a
--- /dev/null
+++ b/tests/language/list/literal5_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+/// Legacy compound literal syntax that should go away.
+
+main() {
+  new List<int>[1, 2];
+  //  ^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.DEFAULT_LIST_CONSTRUCTOR
+  // [cfe] Can't use the default List constructor.
+  //          ^
+  // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+  // [cfe] Expected '(' after this.
+  //             ^
+  // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+  // [cfe] Expected ']' before this.
+}
diff --git a/tests/language/list/literal6_test.dart b/tests/language/list/literal6_test.dart
new file mode 100644
index 0000000..7d6e3d9
--- /dev/null
+++ b/tests/language/list/literal6_test.dart
@@ -0,0 +1,19 @@
+// 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 test program const map literals.
+
+class ListLiteral2NegativeTest<T> {
+  test() {
+    // Type parameter is not allowed with const.
+    var m = const <T>[];
+    //             ^
+    // [analyzer] COMPILE_TIME_ERROR.INVALID_TYPE_ARGUMENT_IN_CONST_LIST
+    // [cfe] Type variables can't be used as constants.
+  }
+}
+
+main() {
+  ListLiteral2NegativeTest<int>().test();
+}
diff --git a/tests/language/list/literal_syntax_test.dart b/tests/language/list/literal_syntax_test.dart
new file mode 100644
index 0000000..652d1b1
--- /dev/null
+++ b/tests/language/list/literal_syntax_test.dart
@@ -0,0 +1,68 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+abstract class I {}
+
+void main() {
+  var list;
+  list = <
+      int
+    I //# 00: syntax error
+    , int //# 01: compile-time error
+      >[0];
+  Expect.equals(1, list.length);
+
+  list = <
+      int
+    , int //# 02: compile-time error
+    , int //# 02: continued
+      >[0];
+  Expect.equals(1, list.length);
+
+  list = <
+      int
+    , int //# 03: compile-time error
+    , int //# 03: continued
+    , int //# 03: continued
+      >[0];
+  Expect.equals(1, list.length);
+
+  list =
+    <> //# 04: syntax error
+      [0];
+  Expect.equals(1, list.length);
+
+  list =
+    <<>> //# 05: syntax error
+      [0];
+  Expect.equals(1, list.length);
+
+  list =
+    <<<>>> //# 06: syntax error
+      [0];
+  Expect.equals(1, list.length);
+
+  list =
+    <[]> //# 07: syntax error
+      [0];
+  Expect.equals(1, list.length);
+
+  list = <int>[
+    <int>[
+      <int>[1][0]
+    ][0]
+  ];
+  Expect.equals(1, list.length);
+  Expect.equals(1, list[0]);
+
+  list = <int>[
+    <List<int>>[
+      [1]
+    ][0][0]
+  ];
+  Expect.equals(1, list.length);
+  Expect.equals(1, list[0]);
+}
diff --git a/tests/language/list/literal_test.dart b/tests/language/list/literal_test.dart
new file mode 100644
index 0000000..da94733
--- /dev/null
+++ b/tests/language/list/literal_test.dart
@@ -0,0 +1,58 @@
+// 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.
+// Test program for array literals.
+
+import "package:expect/expect.dart";
+
+class ListLiteralTest {
+  static const LAUREL = 1;
+  static const HARDY = 2;
+
+  static testMain() {
+    var funny = <int>[
+      LAUREL,
+      HARDY,
+    ]; // Check that trailing comma works.
+    Expect.equals(2, funny.length);
+
+    List<int> m = <int>[101, 102, 100 + 3];
+    Expect.equals(3, m.length);
+    Expect.equals(101, m[0]);
+    Expect.equals(103, m[2]);
+
+    var d = m[2] - m[1];
+    Expect.equals(1, d);
+
+    dynamic e2 = [5.1, -55, 555, 5555][2];
+    Expect.equals(555, e2);
+
+    e2 = <num>[5.1, -55, 555, 5555][2];
+    Expect.equals(555, e2);
+
+    e2 = const <num>[5.1, -55, 555, 5555][2];
+    Expect.equals(555, e2);
+
+    e2 = (const [
+      5.1,
+      const <num>[-55, 555],
+      5555
+    ][1] as dynamic)[1];
+    Expect.equals(555, e2);
+
+    Expect.equals(0, [].length);
+    Expect.equals(0, <String>[].length);
+    Expect.equals(0, const <String>[].length);
+    Expect.equals(0, const [].length);
+
+    e2 = [1, 2.0, 0x03, 2.0e5];
+    Expect.equals(1, e2[0]);
+    Expect.equals(2.0, e2[1]);
+    Expect.equals(3, e2[2]);
+    Expect.equals(200000.0, e2[3]);
+  }
+}
+
+main() {
+  ListLiteralTest.testMain();
+}
diff --git a/tests/language/list/mixin_test.dart b/tests/language/list/mixin_test.dart
new file mode 100644
index 0000000..8f4f793
--- /dev/null
+++ b/tests/language/list/mixin_test.dart
@@ -0,0 +1,18 @@
+import 'dart:collection';
+import 'package:expect/expect.dart';
+
+class MyList extends ListBase {
+  int get length => 4;
+  set length(int x) {}
+  int operator [](int x) => 42;
+  void operator []=(int x, val) {}
+}
+
+main() {
+  var x = new MyList();
+  int z = 0;
+  x.forEach((y) {
+    z += y as int;
+  });
+  Expect.equals(z, 4 * 42);
+}
diff --git a/tests/language/list/tracer_call_last_test.dart b/tests/language/list/tracer_call_last_test.dart
new file mode 100644
index 0000000..dbaf136
--- /dev/null
+++ b/tests/language/list/tracer_call_last_test.dart
@@ -0,0 +1,13 @@
+// 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.
+
+// dart2js used to fail this test, by inferring that `a.last()`
+// returns the element type of the `a` list.
+
+main() {
+  var a = [() => 123];
+  if (a.last() is! num) {
+    throw 'Test failed';
+  }
+}
diff --git a/tests/language/list/tracer_closure_test.dart b/tests/language/list/tracer_closure_test.dart
new file mode 100644
index 0000000..0dbac4d
--- /dev/null
+++ b/tests/language/list/tracer_closure_test.dart
@@ -0,0 +1,19 @@
+// 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.
+
+// Regression test for dart2js' inferrer: if we closurize a method, we
+// still need to collect the users of the parameters for the trace
+// container pass to work.
+
+main() {
+  var a = new List.empty();
+  a.add;
+  var b = new List.empty(growable: true);
+  var c = new List<dynamic>.filled(1, null);
+  b.add(c);
+  b[0][0] = 42;
+  if (c[0] is! int) {
+    throw 'Test failed';
+  }
+}
diff --git a/tests/language/list/tracer_in_list_test.dart b/tests/language/list/tracer_in_list_test.dart
new file mode 100644
index 0000000..643f8ad
--- /dev/null
+++ b/tests/language/list/tracer_in_list_test.dart
@@ -0,0 +1,11 @@
+// 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.
+
+main() {
+  var a = [[]];
+  a[0].add(42);
+  if (a[0].length != 1) {
+    throw 'Test failed';
+  }
+}
diff --git a/tests/language/list/tracer_in_map_test.dart b/tests/language/list/tracer_in_map_test.dart
new file mode 100644
index 0000000..749bba6
--- /dev/null
+++ b/tests/language/list/tracer_in_map_test.dart
@@ -0,0 +1,14 @@
+// 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.
+
+// Regression test for dart2js, whose type inferrer used to not see
+// literal maps as places where a list could escape.
+
+var b = [42];
+var a = {'foo': b};
+
+main() {
+  a['foo']!.clear();
+  if (b.length != 0) throw 'Test failed';
+}
diff --git a/tests/language/list/tracer_return_from_tearoff_closure_test.dart b/tests/language/list/tracer_return_from_tearoff_closure_test.dart
new file mode 100644
index 0000000..47e1bb49
--- /dev/null
+++ b/tests/language/list/tracer_return_from_tearoff_closure_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+// Regression test for dart2js's list tracer, that used to not see a
+// returned value of a method can escape to places where that method
+// is closurized and invoked.
+
+var a = [42];
+
+foo() {
+  return a;
+}
+
+main() {
+  (foo)().clear();
+  if (a.length == 1) {
+    throw 'Test failed';
+  }
+}
diff --git a/tests/language/loop/break_outside_loop_runtime_test.dart b/tests/language/loop/break_outside_loop_runtime_test.dart
new file mode 100644
index 0000000..b4879cf
--- /dev/null
+++ b/tests/language/loop/break_outside_loop_runtime_test.dart
@@ -0,0 +1,13 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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 test program to test check that we catch label errors.
+
+main() {
+  if (true) {
+
+  }
+}
diff --git a/tests/language/loop/break_outside_loop_test.dart b/tests/language/loop/break_outside_loop_test.dart
new file mode 100644
index 0000000..6cfbbbd
--- /dev/null
+++ b/tests/language/loop/break_outside_loop_test.dart
@@ -0,0 +1,13 @@
+// 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 test program to test check that we catch label errors.
+
+main() {
+  if (true) {
+    break;
+//  ^^^^^
+// [analyzer] SYNTACTIC_ERROR.BREAK_OUTSIDE_OF_LOOP
+// [cfe] A break statement can't be used outside of a loop or switch statement.
+  }
+}
diff --git a/tests/language/loop/break_test.dart b/tests/language/loop/break_test.dart
new file mode 100644
index 0000000..ca79675
--- /dev/null
+++ b/tests/language/loop/break_test.dart
@@ -0,0 +1,54 @@
+// 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 test for breaks in for, do/while and while loops.
+
+import "package:expect/expect.dart";
+
+class BreakTest {
+  static testMain() {
+    int i;
+    int forCounter = 0;
+    for (i = 0; i < 10; i++) {
+      forCounter++;
+      if (i > 3) break;
+    }
+    Expect.equals(5, forCounter);
+    Expect.equals(4, i);
+
+    i = 0;
+    int doWhileCounter = 0;
+    do {
+      i++;
+      doWhileCounter++;
+      if (i > 3) break;
+    } while (i < 10);
+    Expect.equals(4, doWhileCounter);
+    Expect.equals(4, i);
+
+    i = 0;
+    int whileCounter = 0;
+    while (i < 10) {
+      i++;
+      whileCounter++;
+      if (i > 3) break;
+    }
+    Expect.equals(4, whileCounter);
+    Expect.equals(4, i);
+
+    // Use a label to break to the outer loop.
+    i = 0;
+    L:
+    while (i < 10) {
+      i++;
+      while (i > 5) {
+        break L;
+      }
+    }
+    Expect.equals(6, i);
+  }
+}
+
+main() {
+  BreakTest.testMain();
+}
diff --git a/tests/language/loop/continue_test.dart b/tests/language/loop/continue_test.dart
new file mode 100644
index 0000000..4587241
--- /dev/null
+++ b/tests/language/loop/continue_test.dart
@@ -0,0 +1,76 @@
+// 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 test for continue in for, do/while and while loops.
+
+import "package:expect/expect.dart";
+
+class ContinueTest {
+  static testMain() {
+    int i;
+    int forCounter = 0;
+    for (i = 0; i < 10; i++) {
+      if (i > 3) continue;
+      forCounter++;
+    }
+    Expect.equals(4, forCounter);
+    Expect.equals(10, i);
+
+    i = 0;
+    int doWhileCounter = 0;
+    do {
+      i++;
+      if (i > 3) continue;
+      doWhileCounter++;
+    } while (i < 10);
+    Expect.equals(3, doWhileCounter);
+    Expect.equals(10, i);
+
+    i = 0;
+    int whileCounter = 0;
+    while (i < 10) {
+      i++;
+      if (i > 3) continue;
+      whileCounter++;
+    }
+    Expect.equals(3, whileCounter);
+    Expect.equals(10, i);
+
+    // Use a label to continue to the outer loop.
+    i = 0;
+    L:
+    while (i < 50) {
+      i += 3;
+      while (i < 30) {
+        i += 2;
+        if (i < 10) {
+          continue L;
+        } else {
+          i++;
+          break;
+        }
+      }
+      break;
+    }
+    Expect.equals(11, i);
+
+    // continue without label inside switch continues to innermost loop.
+    do {
+      i = 20;
+      switch (0) {
+        case 0:
+          i = 22;
+          continue;
+        default:
+          i = 25;
+          break;
+      }
+      i = 30;
+    } while (false);
+    Expect.equals(22, i);
+  }
+}
+
+main() {
+  ContinueTest.testMain();
+}
diff --git a/tests/language/loop/do_while2_test.dart b/tests/language/loop/do_while2_test.dart
new file mode 100644
index 0000000..9243e94
--- /dev/null
+++ b/tests/language/loop/do_while2_test.dart
@@ -0,0 +1,47 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+var a = 42;
+
+foo1() {
+  var i = 0;
+  var saved;
+  do {
+    saved = i;
+    i = a;
+  } while (i == saved);
+  Expect.equals(0, saved);
+  Expect.equals(42, i);
+}
+
+foo2() {
+  var i = 0;
+  var saved;
+  do {
+    saved = i;
+    i = a;
+  } while (i != saved);
+  Expect.equals(42, saved);
+  Expect.equals(42, i);
+}
+
+foo3() {
+  var i = 0;
+  var saved;
+  do {
+    saved = i;
+    i = a;
+    if (i == saved) continue;
+  } while (i != saved);
+  Expect.equals(42, saved);
+  Expect.equals(42, i);
+}
+
+main() {
+  foo1();
+  foo2();
+  foo3();
+}
diff --git a/tests/language/loop/do_while3_test.dart b/tests/language/loop/do_while3_test.dart
new file mode 100644
index 0000000..4026ec9
--- /dev/null
+++ b/tests/language/loop/do_while3_test.dart
@@ -0,0 +1,15 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+// Test that a condition is only evaluated once in a loop.
+
+main() {
+  int c = 0;
+  do {
+    c++;
+  } while (c++ < 2);
+  Expect.equals(4, c);
+}
diff --git a/tests/language/loop/do_while4_test.dart b/tests/language/loop/do_while4_test.dart
new file mode 100644
index 0000000..9b7115a
--- /dev/null
+++ b/tests/language/loop/do_while4_test.dart
@@ -0,0 +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.
+
+// Regression test for dart2js that used to crash in the presence of
+// do/while, break and a local variable declared after the break.
+
+import "package:expect/expect.dart";
+
+var a = false;
+main() {
+  do {
+    if (!a) break;
+    var c = main();
+    a = true;
+  } while (true);
+  Expect.isFalse(a);
+}
diff --git a/tests/language/loop/do_while_test.dart b/tests/language/loop/do_while_test.dart
new file mode 100644
index 0000000..435fab5
--- /dev/null
+++ b/tests/language/loop/do_while_test.dart
@@ -0,0 +1,59 @@
+// 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 test program for testing do while statement.
+
+import "package:expect/expect.dart";
+
+class Helper {
+  static int f1(bool b) {
+    do return 1; while (b);
+    return 2;
+  }
+
+  static int f2(bool b) {
+    do {
+      return 1;
+    } while (b);
+    return 2;
+  }
+
+  static int f3(bool b) {
+    do ; while (b);
+    return 2;
+  }
+
+  static int f4(bool b) {
+    do {} while (b);
+    return 2;
+  }
+
+  static int f5(int n) {
+    int i = 0;
+    do {
+      i++;
+    } while (i < n);
+    return i;
+  }
+}
+
+class DoWhileTest {
+  static testMain() {
+    Expect.equals(1, Helper.f1(true));
+    Expect.equals(1, Helper.f1(false));
+    Expect.equals(1, Helper.f2(true));
+    Expect.equals(1, Helper.f2(false));
+    Expect.equals(2, Helper.f3(false));
+    Expect.equals(2, Helper.f4(false));
+    Expect.equals(1, Helper.f5(-2));
+    Expect.equals(1, Helper.f5(-1));
+    Expect.equals(1, Helper.f5(0));
+    Expect.equals(1, Helper.f5(1));
+    Expect.equals(2, Helper.f5(2));
+    Expect.equals(3, Helper.f5(3));
+  }
+}
+
+main() {
+  DoWhileTest.testMain();
+}
diff --git a/tests/language/loop/exchange2_test.dart b/tests/language/loop/exchange2_test.dart
new file mode 100644
index 0000000..79fa6ed
--- /dev/null
+++ b/tests/language/loop/exchange2_test.dart
@@ -0,0 +1,45 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+// This program tripped dart2js.
+main() {
+  var a = 1;
+  var b = 2;
+  var c = 3;
+  var d = 4;
+  var e = 5;
+  for (int i = 0; i < 2; i++) {
+    if (i == 1) {
+      Expect.equals(4, e);
+      Expect.equals(3, d);
+      Expect.equals(8, c);
+      Expect.equals(1, b);
+      Expect.equals(32, a);
+    }
+    int f;
+    int k;
+    if (i < 20) {
+      f = b & c | ~b & d;
+      k = 0x5A827999;
+    } else if (i < 40) {
+      f = b ^ c ^ d;
+      k = 0x6ED9EBA1;
+    } else if (i < 60) {
+      f = b & c | b & d | c & d;
+      k = 0x8F1BBCDC;
+    } else {
+      f = b ^ c ^ d;
+      k = 0xCA62C1D6;
+    }
+
+    int temp = a << 5;
+    e = d;
+    d = c;
+    c = b << 2;
+    b = a;
+    a = temp;
+  }
+}
diff --git a/tests/language/loop/exchange3_test.dart b/tests/language/loop/exchange3_test.dart
new file mode 100644
index 0000000..ba658fa
--- /dev/null
+++ b/tests/language/loop/exchange3_test.dart
@@ -0,0 +1,15 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+// This program tripped dart2js.
+main() {
+  int foo = -1;
+  for (var i = 0; i < 10; foo = i, i++) {
+    if (i > 0) {
+      Expect.equals(i - 1, foo);
+    }
+  }
+}
diff --git a/tests/language/loop/exchange4_test.dart b/tests/language/loop/exchange4_test.dart
new file mode 100644
index 0000000..499ca70
--- /dev/null
+++ b/tests/language/loop/exchange4_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+// This program tripped dart2js.
+main() {
+  var count = 0;
+  for (var i = 0; i < 1; i++, count += i) {}
+
+  int foo = -1;
+  for (var i = 0; i < 10; foo = i, i++) {
+    if (i > 0) {
+      Expect.equals(i - 1, foo);
+    }
+  }
+}
diff --git a/tests/language/loop/exchange_loop_exchange_test.dart b/tests/language/loop/exchange_loop_exchange_test.dart
new file mode 100644
index 0000000..0edd06d
--- /dev/null
+++ b/tests/language/loop/exchange_loop_exchange_test.dart
@@ -0,0 +1,17 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+// This program tripped dart2js.
+main() {
+  var x = 1;
+  var y = 2;
+  for (int i = 0; i < 2; i++) {
+    if (i == 1) Expect.equals(2, x);
+    var tmp = x;
+    x = y;
+    y = tmp;
+  }
+}
diff --git a/tests/language/loop/exhaustive_for_test.dart b/tests/language/loop/exhaustive_for_test.dart
new file mode 100644
index 0000000..a88d2d7
--- /dev/null
+++ b/tests/language/loop/exhaustive_for_test.dart
@@ -0,0 +1,808 @@
+// 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 for statement.
+
+import "package:expect/expect.dart";
+
+// Test several variations of for loops:
+//   * With or without an initializer.
+//   * With or without a test.
+//   * With or without an update.
+//   * With or without a continue.
+//   * With or without a fall through exit from the body.
+//   * With or without a break.
+
+// Note that some possibilities are infinite loops and so not tested.
+// Combinations that do not have a break or a test but do have a
+// fall through from the body or a continue will never exit the loop.
+
+// Each loop test function sets a status containing a bit for each part of
+// the loop that is present, and then clears the bit as that part of the
+// loop is executed.  The test expectation should be 0 (all present parts
+// were executed), except for a few cases where an update expression is
+// unreachable due to a break or return in the loop body.
+
+const int INIT = 1;
+const int TEST = 2;
+const int UPDATE = 4;
+const int CONTINUE = 8;
+const int FALL = 16;
+const int BREAK = 32;
+
+var status;
+
+void loop0() {
+  status = 0;
+  for (;;) {
+    return;
+  }
+}
+
+void loop1() {
+  status = INIT;
+  for (status &= ~INIT;;) {
+    return;
+  }
+}
+
+void loop2() {
+  status = TEST;
+  for (; (status &= ~TEST) != 0;) {
+    return;
+  }
+}
+
+void loop3() {
+  status = INIT | TEST;
+  for (status &= ~INIT; (status &= ~TEST) != 0;) {
+    return;
+  }
+}
+
+void loop4() {
+  status = UPDATE;
+  for (;; status &= ~UPDATE) {
+    return;
+  }
+}
+
+void loop5() {
+  status = INIT | UPDATE;
+  for (status &= ~INIT;; status &= ~UPDATE) {
+    return;
+  }
+}
+
+void loop6() {
+  status = TEST | UPDATE;
+  for (; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    return;
+  }
+}
+
+void loop7() {
+  status = INIT | TEST | UPDATE;
+  for (status &= ~INIT; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    return;
+  }
+}
+
+// Infinite loop not tested.
+void loop8() {
+  status = CONTINUE;
+  for (;;) {
+    status &= ~CONTINUE;
+    continue;
+  }
+}
+
+// Infinite loop not tested.
+void loop9() {
+  status = INIT | CONTINUE;
+  for (status &= ~INIT;;) {
+    status &= ~CONTINUE;
+    continue;
+  }
+}
+
+void loop10() {
+  status = TEST | CONTINUE;
+  for (; (status &= ~TEST) != 0;) {
+    status &= ~CONTINUE;
+    continue;
+  }
+}
+
+void loop11() {
+  status = INIT | TEST | CONTINUE;
+  for (status &= ~INIT; (status &= ~TEST) != 0;) {
+    status &= ~CONTINUE;
+    continue;
+  }
+}
+
+// Infinite loop.
+void loop12() {
+  status = UPDATE | CONTINUE;
+  for (;; status &= ~UPDATE) {
+    status &= ~CONTINUE;
+    continue;
+  }
+}
+
+// Infinite loop.
+void loop13() {
+  status = INIT | UPDATE | CONTINUE;
+  for (status &= ~INIT;; status &= ~UPDATE) {
+    status &= ~CONTINUE;
+    continue;
+  }
+}
+
+void loop14() {
+  status = TEST | UPDATE | CONTINUE;
+  for (; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    status &= ~CONTINUE;
+    continue;
+  }
+}
+
+void loop15() {
+  status = INIT | TEST | UPDATE | CONTINUE;
+  for (status &= ~INIT; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    status &= ~CONTINUE;
+    continue;
+  }
+}
+
+// Infinite loop.
+void loop16() {
+  status = FALL;
+  for (;;) {
+    status &= ~FALL;
+  }
+}
+
+// Infinite loop.
+void loop17() {
+  status = INIT | FALL;
+  for (status &= ~INIT;;) {
+    status &= ~FALL;
+  }
+}
+
+void loop18() {
+  status = TEST | FALL;
+  for (; (status &= ~TEST) != 0;) {
+    status &= ~FALL;
+  }
+}
+
+void loop19() {
+  status = INIT | TEST | FALL;
+  for (status &= ~INIT; (status &= ~TEST) != 0;) {
+    status &= ~FALL;
+  }
+}
+
+// Infinite loop.
+void loop20() {
+  status = UPDATE | FALL;
+  for (;; status &= ~UPDATE) {
+    status &= ~FALL;
+  }
+}
+
+// Infinite loop.
+void loop21() {
+  status = INIT | UPDATE | FALL;
+  for (status &= ~INIT;; status &= ~UPDATE) {
+    status &= ~FALL;
+  }
+}
+
+void loop22() {
+  status = TEST | UPDATE | FALL;
+  for (; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    status &= ~FALL;
+  }
+}
+
+void loop23() {
+  status = INIT | TEST | UPDATE | FALL;
+  for (status &= ~INIT; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    status &= ~FALL;
+  }
+}
+
+// Infinite loop.
+void loop24() {
+  status = CONTINUE | FALL;
+  for (;;) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~FALL;
+  }
+}
+
+// Infinite loop.
+void loop25() {
+  status = INIT | CONTINUE | FALL;
+  for (status &= ~INIT;;) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~FALL;
+  }
+}
+
+void loop26() {
+  status = TEST | CONTINUE | FALL;
+  for (; (status &= ~TEST) != 0;) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~FALL;
+  }
+}
+
+void loop27() {
+  status = INIT | TEST | CONTINUE | FALL;
+  for (status &= ~INIT; (status &= ~TEST) != 0;) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~FALL;
+  }
+}
+
+// Infinite loop.
+void loop28() {
+  status = UPDATE | CONTINUE | FALL;
+  for (;; status &= ~UPDATE) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~FALL;
+  }
+}
+
+// Infinite loop.
+void loop29() {
+  status = INIT | UPDATE | CONTINUE | FALL;
+  for (status &= ~INIT;; status &= ~UPDATE) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~FALL;
+  }
+}
+
+void loop30() {
+  status = TEST | UPDATE | CONTINUE | FALL;
+  for (; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~FALL;
+  }
+}
+
+void loop31() {
+  status = INIT | TEST | UPDATE | CONTINUE | FALL;
+  for (status &= ~INIT; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~FALL;
+  }
+}
+
+void loop32() {
+  status = BREAK;
+  for (;;) {
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop33() {
+  status = INIT | BREAK;
+  for (status &= ~INIT;;) {
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop34() {
+  status = TEST | BREAK;
+  for (; (status &= ~TEST) != 0;) {
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop35() {
+  status = INIT | TEST | BREAK;
+  for (status &= ~INIT; (status &= ~TEST) != 0;) {
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop36() {
+  status = UPDATE | BREAK;
+  for (;; status &= ~UPDATE) {
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop37() {
+  status = INIT | UPDATE | BREAK;
+  for (status &= ~INIT;; status &= ~UPDATE) {
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop38() {
+  status = TEST | UPDATE | BREAK;
+  for (; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop39() {
+  status = INIT | TEST | UPDATE | BREAK;
+  for (status &= ~INIT; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop40() {
+  status = CONTINUE | BREAK;
+  for (;;) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop41() {
+  status = INIT | CONTINUE | BREAK;
+  for (status &= ~INIT;;) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop42() {
+  status = TEST | CONTINUE | BREAK;
+  for (; (status &= ~TEST) != 0;) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop43() {
+  status = INIT | TEST | CONTINUE | BREAK;
+  for (status &= ~INIT; (status &= ~TEST) != 0;) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop44() {
+  status = UPDATE | CONTINUE | BREAK;
+  for (;; status &= ~UPDATE) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop45() {
+  status = INIT | UPDATE | CONTINUE | BREAK;
+  for (status &= ~INIT;; status &= ~UPDATE) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop46() {
+  status = TEST | UPDATE | CONTINUE | BREAK;
+  for (; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop47() {
+  status = INIT | TEST | UPDATE | CONTINUE | BREAK;
+  for (status &= ~INIT; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    status &= ~BREAK;
+    break;
+  }
+}
+
+void loop48() {
+  status = FALL | BREAK;
+  for (;;) {
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void loop49() {
+  status = INIT | FALL | BREAK;
+  for (status &= ~INIT;;) {
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void loop50() {
+  status = TEST | FALL | BREAK;
+  for (; (status &= ~TEST) != 0;) {
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void loop51() {
+  status = INIT | TEST | FALL | BREAK;
+  for (status &= ~INIT; (status &= ~TEST) != 0;) {
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void loop52() {
+  status = UPDATE | FALL | BREAK;
+  for (;; status &= ~UPDATE) {
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void loop53() {
+  status = INIT | UPDATE | FALL | BREAK;
+  for (status &= ~INIT;; status &= ~UPDATE) {
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void loop54() {
+  status = TEST | UPDATE | FALL | BREAK;
+  for (; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void loop55() {
+  status = INIT | TEST | UPDATE | FALL | BREAK;
+  for (status &= ~INIT; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void loop56() {
+  status = CONTINUE | FALL | BREAK;
+  for (;;) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void loop57() {
+  status = INIT | CONTINUE | FALL | BREAK;
+  for (status &= ~INIT;;) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void loop58() {
+  status = TEST | CONTINUE | FALL | BREAK;
+  for (; (status &= ~TEST) != 0;) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void loop59() {
+  status = INIT | TEST | CONTINUE | FALL | BREAK;
+  for (status &= ~INIT; (status &= ~TEST) != 0;) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void loop60() {
+  status = UPDATE | CONTINUE | FALL | BREAK;
+  for (;; status &= ~UPDATE) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void loop61() {
+  status = INIT | UPDATE | CONTINUE | FALL | BREAK;
+  for (status &= ~INIT;; status &= ~UPDATE) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void loop62() {
+  status = TEST | UPDATE | CONTINUE | FALL | BREAK;
+  for (; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void loop63() {
+  status = INIT | TEST | UPDATE | CONTINUE | FALL | BREAK;
+  for (status &= ~INIT; (status &= ~TEST) != 0; status &= ~UPDATE) {
+    if ((status & CONTINUE) == CONTINUE) {
+      status &= ~CONTINUE;
+      continue;
+    }
+    if ((status & FALL) == FALL) {
+      status &= ~FALL;
+    } else {
+      status &= ~BREAK;
+      break;
+    }
+  }
+}
+
+void main() {
+  loop0();
+  Expect.equals(0, status);
+  loop1();
+  Expect.equals(0, status);
+  loop2();
+  Expect.equals(0, status);
+  loop3();
+  Expect.equals(0, status);
+
+  // The next four tests return with status UPDATE because they return
+  // before the update expression is reached.
+  loop4();
+  Expect.equals(UPDATE, status);
+  loop5();
+  Expect.equals(UPDATE, status);
+  loop6();
+  Expect.equals(UPDATE, status);
+  loop7();
+  Expect.equals(UPDATE, status);
+
+  loop10();
+  Expect.equals(0, status);
+  loop11();
+  Expect.equals(0, status);
+  loop14();
+  Expect.equals(0, status);
+  loop15();
+  Expect.equals(0, status);
+  loop18();
+  Expect.equals(0, status);
+  loop19();
+  Expect.equals(0, status);
+  loop22();
+  Expect.equals(0, status);
+  loop23();
+  Expect.equals(0, status);
+  loop26();
+  Expect.equals(0, status);
+  loop27();
+  Expect.equals(0, status);
+  loop30();
+  Expect.equals(0, status);
+  loop31();
+  Expect.equals(0, status);
+  loop32();
+  Expect.equals(0, status);
+  loop33();
+  Expect.equals(0, status);
+  loop34();
+  Expect.equals(0, status);
+  loop35();
+  Expect.equals(0, status);
+
+  // The next four tests return with status UPDATE because they break from
+  // the loop before the update expression is reached.
+  loop36();
+  Expect.equals(4, status);
+  loop37();
+  Expect.equals(4, status);
+  loop38();
+  Expect.equals(4, status);
+  loop39();
+  Expect.equals(4, status);
+
+  loop40();
+  Expect.equals(0, status);
+  loop41();
+  Expect.equals(0, status);
+  loop42();
+  Expect.equals(0, status);
+  loop43();
+  Expect.equals(0, status);
+  loop44();
+  Expect.equals(0, status);
+  loop45();
+  Expect.equals(0, status);
+  loop46();
+  Expect.equals(0, status);
+  loop47();
+  Expect.equals(0, status);
+  loop48();
+  Expect.equals(0, status);
+  loop49();
+  Expect.equals(0, status);
+  loop50();
+  Expect.equals(0, status);
+  loop51();
+  Expect.equals(0, status);
+  loop52();
+  Expect.equals(0, status);
+  loop53();
+  Expect.equals(0, status);
+  loop54();
+  Expect.equals(0, status);
+  loop55();
+  Expect.equals(0, status);
+  loop56();
+  Expect.equals(0, status);
+  loop57();
+  Expect.equals(0, status);
+  loop58();
+  Expect.equals(0, status);
+  loop59();
+  Expect.equals(0, status);
+  loop60();
+  Expect.equals(0, status);
+  loop61();
+  Expect.equals(0, status);
+  loop62();
+  Expect.equals(0, status);
+  loop63();
+  Expect.equals(0, status);
+}
diff --git a/tests/language/loop/for2_test.dart b/tests/language/loop/for2_test.dart
new file mode 100644
index 0000000..52686e2
--- /dev/null
+++ b/tests/language/loop/for2_test.dart
@@ -0,0 +1,71 @@
+// 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 test program for testing for statement which captures loop variable.
+
+import "package:expect/expect.dart";
+
+var f;
+
+main() {
+  // Capture the loop variable, ensure we capture the right value.
+  for (int i = 0; i < 10; i++) {
+    if (i == 7) {
+      f = () => "i = $i";
+    }
+  }
+  Expect.equals("i = 7", f());
+
+  // There is only one instance of k. The captured variable continues
+  // to change.
+  int k;
+  for (k = 0; k < 10; k++) {
+    if (k == 7) {
+      f = () => "k = $k";
+    }
+  }
+  Expect.equals("k = 10", f());
+
+  // l gets modified after it's captured. n++ is executed on the
+  // newly introduced instance of n (i.e. the instance of the loop
+  // iteration after the value is captured).
+  for (int n = 0; n < 10; n++) {
+    var l = n;
+    if (l == 7) {
+      f = () => "l = $l, n = $n";
+    }
+    l++;
+  }
+  Expect.equals("l = 8, n = 7", f());
+
+  // Loop variable is incremented in loop body instead of the increment.
+  // expression. Thus, the captured value is incremented by one before
+  // a new loop variable instance is created.
+  for (int i = 0; i < 10; /*nothing*/) {
+    if (i == 7) {
+      f = () => "i = $i";
+    }
+    i++;
+  }
+  Expect.equals("i = 8", f());
+
+  // Make sure continue still ensures the loop variable is captured correctly.
+  for (int i = 0; i < 10; i++) {
+    if (i == 7) {
+      f = () => "i = $i";
+    }
+    continue;
+    i++;
+  }
+  Expect.equals("i = 7", f());
+
+  // Nested loops with captured variables.
+  for (int k = 0; k < 5; k++) {
+    for (int i = 0; i < 10; i++) {
+      if (k == 3 && i == 7) {
+        f = () => "k = $k, i = $i";
+      }
+    }
+  }
+  Expect.equals("k = 3, i = 7", f());
+}
diff --git a/tests/language/loop/for_in2_test.dart b/tests/language/loop/for_in2_test.dart
new file mode 100644
index 0000000..5fc083e
--- /dev/null
+++ b/tests/language/loop/for_in2_test.dart
@@ -0,0 +1,32 @@
+// 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.
+
+// Test that using a field or a global variable for a for/in variable
+// works.
+
+import "package:expect/expect.dart";
+
+Set<int> set = new Set.from([1, 2]);
+var x = -1;
+
+class A {
+  var field = -1;
+  test() {
+    int count = 0;
+    for (field in set) {
+      count += field;
+    }
+    Expect.equals(3, count);
+
+    count = 0;
+    for (x in set) {
+      count += x;
+    }
+    Expect.equals(3, count);
+  }
+}
+
+void main() {
+  new A().test();
+}
diff --git a/tests/language/loop/for_in3_test.dart b/tests/language/loop/for_in3_test.dart
new file mode 100644
index 0000000..7de8049
--- /dev/null
+++ b/tests/language/loop/for_in3_test.dart
@@ -0,0 +1,10 @@
+// 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 for testing that strings aren't iterable.
+
+main() {
+  var chars = [];
+  for (var c in "foo") chars.add(c); /*@compile-error=unspecified*/
+}
diff --git a/tests/language/loop/for_in_side_effects_test.dart b/tests/language/loop/for_in_side_effects_test.dart
new file mode 100644
index 0000000..f9b5f1a
--- /dev/null
+++ b/tests/language/loop/for_in_side_effects_test.dart
@@ -0,0 +1,29 @@
+// 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.
+
+// Regression test for dart2js that used to not see side effects of
+// iterator calls made in a "for in".
+
+import "package:expect/expect.dart";
+
+var global = 42;
+var array = [new A()];
+
+class A extends Iterable<A> {
+  Iterator<A> get iterator {
+    global = 54;
+    return [this].iterator;
+  }
+
+  moveNext() => false;
+
+  bar(a) {
+    for (var a in this) {}
+  }
+}
+
+main() {
+  array[0].bar(global);
+  Expect.equals(54, global);
+}
diff --git a/tests/language/loop/for_in_test.dart b/tests/language/loop/for_in_test.dart
new file mode 100644
index 0000000..b73b180
--- /dev/null
+++ b/tests/language/loop/for_in_test.dart
@@ -0,0 +1,64 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+// Dart test for testing for in on a list literal.
+
+main() {
+  testSimple();
+  testGenericSyntax1();
+  testGenericSyntax2();
+  testGenericSyntax3();
+  testGenericSyntax4();
+  testShadowLocal1();
+  testShadowLocal2();
+}
+
+void testSimple() {
+  var list = [1, 3, 5];
+  var sum = 0;
+  for (var i in list) {
+    sum += i;
+  }
+  Expect.equals(9, sum);
+}
+
+void testGenericSyntax1() {
+  List<List<String>> aCollection = [];
+  for (List<String> strArrArr in aCollection) {}
+}
+
+void testGenericSyntax2() {
+  List<List<String>> aCollection = [];
+  List<String> strArrArr;
+  for (strArrArr in aCollection) {}
+}
+
+void testGenericSyntax3() {
+  List<List<List<String>>> aCollection = [];
+  for (List<List<String>> strArrArr in aCollection) {}
+}
+
+void testGenericSyntax4() {
+  List<List<List<String>>> aCollection = [];
+  List<List<String>> strArrArr;
+  for (strArrArr in aCollection) {}
+}
+
+void testShadowLocal1() {
+  List<int> x = [1, 2, 3];
+  var i = 0;
+  for (var x in x) {
+    Expect.equals(x, ++i);
+  }
+}
+
+void testShadowLocal2() {
+  dynamic x = [1, 2, 3];
+  var i = 0;
+  for (x in x) {
+    Expect.equals(x, ++i);
+  }
+}
diff --git a/tests/language/loop/for_inlining_test.dart b/tests/language/loop/for_inlining_test.dart
new file mode 100644
index 0000000..6615c1e
--- /dev/null
+++ b/tests/language/loop/for_inlining_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+// Regression test for dart2js that used to emit an invalid JS
+// variable declaration initializer in a for initializer.
+
+import "package:expect/expect.dart";
+
+var global;
+
+inlineMe() {
+  global = 42;
+  return 54;
+}
+
+main() {
+  for (var t = inlineMe(); t < 42; t++) {}
+  Expect.equals(42, global);
+}
diff --git a/tests/language/loop/for_runtime_test.dart b/tests/language/loop/for_runtime_test.dart
new file mode 100644
index 0000000..9de889f
--- /dev/null
+++ b/tests/language/loop/for_runtime_test.dart
@@ -0,0 +1,93 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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 test program for testing for statement.
+
+import "package:expect/expect.dart";
+
+class Helper {
+  static int f1() {
+    for (;;) return 1;
+  }
+
+  static int f2(var n) {
+    int i = 0;
+    for (; i < n; i++);
+    return i;
+  }
+
+  static int f3(int n) {
+    int i = 0;
+    for (int j = 0; j < n; j++) i = i + j + 1;
+    return i;
+  }
+
+  static int f4(n) {
+    int i = 0;
+    for (bool stop = false; (i < n) && !stop; i++) {
+      if (i >= 5) {
+        stop = true;
+      }
+    }
+    return i;
+  }
+
+  static var status;
+  static void f5() {
+    status = 0;
+    for (var stop = false;;) {
+      if (stop) {
+        break;
+      } else {
+        stop = true;
+        continue;
+      }
+    }
+    status = 1;
+  }
+
+  static int f6() {
+    // Verify that side effects in the condition are visible after the loop.
+    int i = 0;
+    for (; ++i < 3;) {}
+    return i;
+  }
+}
+
+class ForTest {
+  static testMain() {
+    Expect.equals(1, Helper.f1());
+    Expect.equals(0, Helper.f2(-1));
+    Expect.equals(0, Helper.f2(0));
+    Expect.equals(10, Helper.f2(10));
+    Expect.equals(0, Helper.f3(-1));
+    Expect.equals(0, Helper.f3(0));
+    Expect.equals(1, Helper.f3(1));
+    Expect.equals(3, Helper.f3(2));
+    Expect.equals(6, Helper.f3(3));
+    Expect.equals(10, Helper.f3(4));
+    Expect.equals(0, Helper.f4(-1));
+    Expect.equals(0, Helper.f4(0));
+    Expect.equals(1, Helper.f4(1));
+    Expect.equals(6, Helper.f4(6));
+    Expect.equals(6, Helper.f4(10));
+
+    Helper.f5();
+    Expect.equals(1, Helper.status);
+
+    Expect.equals(3, Helper.f6());
+  }
+}
+
+main() {
+  ForTest.testMain();
+  testShadowLocal();
+}
+
+void testShadowLocal() {
+  List<int> x = [1, 2, 3];
+
+}
diff --git a/tests/language/loop/for_test.dart b/tests/language/loop/for_test.dart
new file mode 100644
index 0000000..375fa78
--- /dev/null
+++ b/tests/language/loop/for_test.dart
@@ -0,0 +1,92 @@
+// 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 test program for testing for statement.
+
+import "package:expect/expect.dart";
+
+class Helper {
+  static int f1() {
+    for (;;) return 1;
+  }
+
+  static int f2(var n) {
+    int i = 0;
+    for (; i < n; i++);
+    return i;
+  }
+
+  static int f3(int n) {
+    int i = 0;
+    for (int j = 0; j < n; j++) i = i + j + 1;
+    return i;
+  }
+
+  static int f4(n) {
+    int i = 0;
+    for (bool stop = false; (i < n) && !stop; i++) {
+      if (i >= 5) {
+        stop = true;
+      }
+    }
+    return i;
+  }
+
+  static var status;
+  static void f5() {
+    status = 0;
+    for (var stop = false;;) {
+      if (stop) {
+        break;
+      } else {
+        stop = true;
+        continue;
+      }
+    }
+    status = 1;
+  }
+
+  static int f6() {
+    // Verify that side effects in the condition are visible after the loop.
+    int i = 0;
+    for (; ++i < 3;) {}
+    return i;
+  }
+}
+
+class ForTest {
+  static testMain() {
+    Expect.equals(1, Helper.f1());
+    Expect.equals(0, Helper.f2(-1));
+    Expect.equals(0, Helper.f2(0));
+    Expect.equals(10, Helper.f2(10));
+    Expect.equals(0, Helper.f3(-1));
+    Expect.equals(0, Helper.f3(0));
+    Expect.equals(1, Helper.f3(1));
+    Expect.equals(3, Helper.f3(2));
+    Expect.equals(6, Helper.f3(3));
+    Expect.equals(10, Helper.f3(4));
+    Expect.equals(0, Helper.f4(-1));
+    Expect.equals(0, Helper.f4(0));
+    Expect.equals(1, Helper.f4(1));
+    Expect.equals(6, Helper.f4(6));
+    Expect.equals(6, Helper.f4(10));
+
+    Helper.f5();
+    Expect.equals(1, Helper.status);
+
+    Expect.equals(3, Helper.f6());
+  }
+}
+
+main() {
+  ForTest.testMain();
+  testShadowLocal();
+}
+
+void testShadowLocal() {
+  List<int> x = [1, 2, 3];
+  for (var x = x;;) break;
+  //       ^
+  // [cfe] Can't declare 'x' because it was already used in this scope.
+}
diff --git a/tests/language/loop/for_variable_capture_test.dart b/tests/language/loop/for_variable_capture_test.dart
new file mode 100644
index 0000000..97a0626
--- /dev/null
+++ b/tests/language/loop/for_variable_capture_test.dart
@@ -0,0 +1,302 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+run(callback) => callback();
+
+initializer() {
+  var closure;
+  for (var i = 0, fn = () => i; i < 3; i++) {
+    i += 1;
+    closure = fn;
+  }
+  Expect.equals(1, closure());
+}
+
+condition() {
+  var closures = [];
+  check(callback) {
+    closures.add(callback);
+    return callback();
+  }
+
+  var values = [];
+  for (var i = 0; check(() => ++i) < 8; ++i) {
+    values.add(i);
+  }
+  Expect.listEquals([1, 3, 5, 7], values);
+  Expect.listEquals([2, 4, 6, 8, 10], closures.map(run).toList());
+}
+
+body() {
+  var closures = [];
+  for (var i = 0, j = 0; i < 3; i++) {
+    j++;
+    closures.add(() => i);
+    closures.add(() => j);
+  }
+  Expect.listEquals([0, 1, 1, 2, 2, 3], closures.map(run).toList());
+}
+
+update() {
+  var closures = [];
+  check(callback) {
+    closures.add(callback);
+    return callback();
+  }
+
+  var values = [];
+  for (var i = 0; i < 4; check(() => ++i)) {
+    values.add(i);
+  }
+  Expect.listEquals([0, 1, 2, 3], values);
+  Expect.listEquals([2, 3, 4, 5], closures.map(run).toList());
+}
+
+initializer_condition() {
+  var values = [];
+  for (var i = 0, fn = () => i; run(() => ++i) < 3;) {
+    values.add(i);
+    values.add(fn());
+  }
+  Expect.listEquals([1, 1, 2, 1], values);
+}
+
+initializer_update() {
+  var update_closures = [];
+  update(callback) {
+    update_closures.add(callback);
+    return callback();
+  }
+
+  var init_closure;
+  for (var i = 0, fn = () => i; i < 4; update(() => ++i)) {
+    init_closure = fn;
+    if (i == 0) {
+      ++i; // Mutate copy of 'i' from first iteration.
+    }
+  }
+  Expect.equals(1, init_closure());
+  Expect.listEquals([3, 4, 5], update_closures.map(run).toList());
+  Expect.equals(1, init_closure());
+}
+
+initializer_body() {
+  var closures = [];
+  for (var i = 0, fn = () => i; i < 3; i++) {
+    closures.add(() => i);
+    closures.add(fn);
+    fn = () => i;
+  }
+  Expect.listEquals([0, 0, 1, 0, 2, 1], closures.map(run).toList());
+}
+
+condition_update() {
+  var cond_closures = [];
+  check(callback) {
+    cond_closures.add(callback);
+    return callback();
+  }
+
+  var update_closures = [];
+  update(callback) {
+    update_closures.add(callback);
+    return callback();
+  }
+
+  var values = [];
+  for (var i = 0; check(() => i) < 4; update(() => ++i)) {
+    values.add(i);
+  }
+  Expect.listEquals([0, 1, 2, 3], values);
+
+  Expect.listEquals([0, 1, 2, 3, 4], cond_closures.map(run).toList());
+  Expect.listEquals([2, 3, 4, 5], update_closures.map(run).toList());
+  Expect.listEquals([0, 2, 3, 4, 5], cond_closures.map(run).toList());
+}
+
+condition_body() {
+  var cond_closures = [];
+  check(callback) {
+    cond_closures.add(callback);
+    return callback();
+  }
+
+  var body_closures = [];
+  do_body(callback) {
+    body_closures.add(callback);
+    return callback();
+  }
+
+  for (var i = 0; check(() => i) < 4; ++i) {
+    do_body(() => i);
+  }
+  Expect.listEquals([0, 1, 2, 3, 4], cond_closures.map(run).toList());
+  Expect.listEquals([0, 1, 2, 3], body_closures.map(run).toList());
+}
+
+initializer_condition_update() {
+  var init;
+  var cond_closures = [];
+  check(callback) {
+    cond_closures.add(callback);
+    return callback();
+  }
+
+  var update_closures = [];
+  update(callback) {
+    update_closures.add(callback);
+    return callback();
+  }
+
+  var values = [];
+  for (var i = 0, fn = () => i; check(() => ++i) < 8; update(() => ++i)) {
+    init = fn;
+    values.add(i);
+  }
+  Expect.listEquals([1, 3, 5, 7], values);
+  Expect.equals(1, init());
+
+  Expect.listEquals([2, 4, 6, 8, 10], cond_closures.map(run).toList());
+  Expect.listEquals([5, 7, 9, 11], update_closures.map(run).toList());
+}
+
+initializer_condition_body() {
+  var init;
+  var cond_closures = [];
+  check(callback) {
+    cond_closures.add(callback);
+    return callback();
+  }
+
+  var body_closures = [];
+  do_body(callback) {
+    body_closures.add(callback);
+    return callback();
+  }
+
+  var values = [];
+  for (var i = 0, fn = () => i; check(() => ++i) < 8;) {
+    init = fn;
+    do_body(() => ++i);
+    values.add(i);
+  }
+  Expect.listEquals([2, 4, 6, 8], values);
+  Expect.equals(2, init());
+
+  Expect.listEquals([3, 5, 7, 9, 10], cond_closures.map(run).toList());
+  Expect.listEquals([4, 6, 8, 10], body_closures.map(run).toList());
+}
+
+initializer_update_body() {
+  var init;
+  var update_closures = [];
+  update(callback) {
+    update_closures.add(callback);
+    return callback();
+  }
+
+  var body_closures = [];
+  do_body(callback) {
+    body_closures.add(callback);
+    return callback();
+  }
+
+  var values = [];
+  for (var i = 0, fn = () => i; i < 8; update(() => ++i)) {
+    init = fn;
+    do_body(() => ++i);
+    values.add(i);
+  }
+  Expect.listEquals([1, 3, 5, 7], values);
+  Expect.equals(1, init());
+
+  Expect.listEquals([4, 6, 8, 9], update_closures.map(run).toList());
+  Expect.listEquals([2, 5, 7, 9], body_closures.map(run).toList());
+}
+
+condition_update_body() {
+  var cond_closures = [];
+  check(callback) {
+    cond_closures.add(callback);
+    return callback();
+  }
+
+  var update_closures = [];
+  update(callback) {
+    update_closures.add(callback);
+    return callback();
+  }
+
+  var body_closures = [];
+  do_body(callback) {
+    body_closures.add(callback);
+    return callback();
+  }
+
+  var values = [];
+  for (var i = 0; check(() => i) < 8; update(() => ++i)) {
+    do_body(() => ++i);
+    values.add(i);
+  }
+  Expect.listEquals([1, 3, 5, 7], values);
+
+  Expect.listEquals([1, 3, 5, 7, 8], cond_closures.map(run).toList());
+  Expect.listEquals([4, 6, 8, 9], update_closures.map(run).toList());
+  Expect.listEquals([2, 5, 7, 9], body_closures.map(run).toList());
+  Expect.listEquals([2, 5, 7, 9, 9], cond_closures.map(run).toList());
+}
+
+initializer_condition_update_body() {
+  var init;
+  var cond_closures = [];
+  check(callback) {
+    cond_closures.add(callback);
+    return callback();
+  }
+
+  var update_closures = [];
+  update(callback) {
+    update_closures.add(callback);
+    return callback();
+  }
+
+  var body_closures = [];
+  do_body(callback) {
+    body_closures.add(callback);
+    return callback();
+  }
+
+  var values = [];
+  for (var i = 0, fn = () => i; check(() => i) < 8; update(() => ++i)) {
+    init = fn;
+    do_body(() => ++i);
+    values.add(i);
+  }
+  Expect.listEquals([1, 3, 5, 7], values);
+  Expect.equals(1, init());
+
+  Expect.listEquals([1, 3, 5, 7, 8], cond_closures.map(run).toList());
+  Expect.listEquals([4, 6, 8, 9], update_closures.map(run).toList());
+  Expect.listEquals([2, 5, 7, 9], body_closures.map(run).toList());
+  Expect.listEquals([2, 5, 7, 9, 9], cond_closures.map(run).toList());
+}
+
+main() {
+  initializer();
+  condition();
+  update();
+  body();
+  initializer_condition();
+  initializer_update();
+  initializer_body();
+  condition_update();
+  condition_body();
+  initializer_condition_update();
+  initializer_condition_body();
+  initializer_update_body();
+  condition_update_body();
+  initializer_condition_update_body();
+}
diff --git a/tests/language/loop/for_without_condition_test.dart b/tests/language/loop/for_without_condition_test.dart
new file mode 100644
index 0000000..b63739d
--- /dev/null
+++ b/tests/language/loop/for_without_condition_test.dart
@@ -0,0 +1,14 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+main() {
+  int i = 0;
+  for (;; i++) {
+    if (i == 0) break;
+    Expect.fail("Should not enter here");
+  }
+  Expect.equals(0, i);
+}
diff --git a/tests/language/loop/hoist_test.dart b/tests/language/loop/hoist_test.dart
new file mode 100644
index 0000000..5b15ec8
--- /dev/null
+++ b/tests/language/loop/hoist_test.dart
@@ -0,0 +1,33 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class A {
+  num x;
+  A() : this.x = 0;
+
+  void bar() {
+    // dart2js hoisted the this.x out of the loop, and missed that setX would
+    // change the value.
+    for (int i = 1; i < 3; i++) {
+      setX(499);
+      foo(x);
+      break;
+    }
+  }
+
+  setX(x) => this.x = x;
+}
+
+var saved;
+foo(x) => saved = x;
+
+main() {
+  A a = new A();
+  for (int i = 0; i < 1; i++) {
+    a.bar();
+  }
+  Expect.equals(499, saved);
+}
diff --git a/tests/language/loop/non_dominating_loop_test.dart b/tests/language/loop/non_dominating_loop_test.dart
new file mode 100644
index 0000000..ac16396
--- /dev/null
+++ b/tests/language/loop/non_dominating_loop_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.
+
+import "package:expect/expect.dart";
+
+int calls = 0;
+
+void callMeOnce() {
+  Expect.equals(0, calls);
+  calls++;
+}
+
+main() {
+  int i = 0;
+  do {
+    i++;
+    if (i > 3) break;
+  } while (i < 10);
+
+  callMeOnce();
+  Expect.equals(4, i);
+}
diff --git a/tests/language/loop/unconditional_break_test.dart b/tests/language/loop/unconditional_break_test.dart
new file mode 100644
index 0000000..63ec511
--- /dev/null
+++ b/tests/language/loop/unconditional_break_test.dart
@@ -0,0 +1,16 @@
+// 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.
+
+// Test to ensure that we get don't exceptions in the SSA verifier when
+// generating phi for the return value of an inlined function that contains a
+// loop that always breaks.
+doWhileBreak() {
+  do {
+    break;
+  } while (true);
+}
+
+main() {
+  doWhileBreak();
+}
diff --git a/tests/language/loop/while_test.dart b/tests/language/loop/while_test.dart
new file mode 100644
index 0000000..6df3760
--- /dev/null
+++ b/tests/language/loop/while_test.dart
@@ -0,0 +1,55 @@
+// 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 test program for testing while statement.
+
+import "package:expect/expect.dart";
+
+class Helper {
+  static int f1(bool b) {
+    while (b) return 1;
+
+    return 2;
+  }
+
+  static int f2(bool b) {
+    while (b) {
+      return 1;
+    }
+    return 2;
+  }
+
+  static int f3(int n) {
+    int i = 0;
+    while (i < n) {
+      i++;
+    }
+    return i;
+  }
+
+  static int f4() {
+    // Verify that side effects in the condition are visible after the loop.
+    int i = 0;
+    while (++i < 3) {}
+    return i;
+  }
+}
+
+class WhileTest {
+  static testMain() {
+    Expect.equals(1, Helper.f1(true));
+    Expect.equals(2, Helper.f1(false));
+    Expect.equals(1, Helper.f2(true));
+    Expect.equals(2, Helper.f2(false));
+    Expect.equals(0, Helper.f3(-2));
+    Expect.equals(0, Helper.f3(-1));
+    Expect.equals(0, Helper.f3(0));
+    Expect.equals(1, Helper.f3(1));
+    Expect.equals(2, Helper.f3(2));
+    Expect.equals(3, Helper.f4());
+  }
+}
+
+main() {
+  WhileTest.testMain();
+}
diff --git a/tests/language/main/main_test.dart b/tests/language/main/main_test.dart
new file mode 100644
index 0000000..da3b57e
--- /dev/null
+++ b/tests/language/main/main_test.dart
@@ -0,0 +1,23 @@
+// 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.
+
+main(
+
+a //        //# 01: ok
+a, b //     //# 02: ok
+a, b, c //  //# 03: ok
+a, b, {c}   //# 04: ok
+a, b, [c]   //# 05: ok
+
+[a] //      //# 20: ok
+a, [b] //   //# 21: ok
+[a, b] //   //# 22: ok
+
+{a} //      //# 41: ok
+a, {b} //   //# 42: ok
+{a, b} //   //# 43: ok
+[a, b, c]   //# 44: ok
+{a, b, c}   //# 45: ok
+
+    ) {}
diff --git a/tests/language/main/no_main_test.dart b/tests/language/main/no_main_test.dart
new file mode 100644
index 0000000..0700b65
--- /dev/null
+++ b/tests/language/main/no_main_test.dart
@@ -0,0 +1,7 @@
+// 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.
+
+/* //# 01: static type warning, runtime error
+main() {}
+*/ //# 01: continued
diff --git a/tests/language/main/not_a_function_test.dart b/tests/language/main/not_a_function_test.dart
new file mode 100644
index 0000000..62ab4cc
--- /dev/null
+++ b/tests/language/main/not_a_function_test.dart
@@ -0,0 +1,7 @@
+// 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.
+
+main() {}
+
+var main; /*@compile-error=unspecified*/
diff --git a/tests/language/malbounded/instantiation_runtime_test.dart b/tests/language/malbounded/instantiation_runtime_test.dart
new file mode 100644
index 0000000..31f8703
--- /dev/null
+++ b/tests/language/malbounded/instantiation_runtime_test.dart
@@ -0,0 +1,16 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+class Super<T extends num> {}
+
+
+
+main() {
+
+
+
+}
diff --git a/tests/language/malbounded/instantiation_test.dart b/tests/language/malbounded/instantiation_test.dart
new file mode 100644
index 0000000..2f397b2
--- /dev/null
+++ b/tests/language/malbounded/instantiation_test.dart
@@ -0,0 +1,25 @@
+// 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.
+
+class Super<T extends num> {}
+class Malbounded1 implements Super<String> {}
+//    ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded1'.
+//                                 ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
+class Malbounded2 extends Super<String> {}
+//    ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded2'.
+//                              ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
+
+main() {
+  new Malbounded1();
+  new Malbounded2();
+  new Super<String>();
+  //  ^
+  // [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
+  //        ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
+}
diff --git a/tests/language/malbounded/redirecting_factory_test.dart b/tests/language/malbounded/redirecting_factory_test.dart
new file mode 100644
index 0000000..9d2d8a9
--- /dev/null
+++ b/tests/language/malbounded/redirecting_factory_test.dart
@@ -0,0 +1,38 @@
+// 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.
+
+class A<
+    Ta
+           extends num // //# 02: continued
+    > implements B<Ta>, C<Ta> {}
+
+class B<
+    Tb
+           extends num // //# 03: continued
+    > {
+  factory B() = A<Tb>;
+}
+
+class C<
+    Tc
+           extends num // //# 04: continued
+    > {
+  factory C() = A<Tc>;
+}
+
+class D<
+    Td
+           extends num // //# 05: continued
+    > {
+  test() => new C<Td>();
+}
+
+main() {
+  new D<int>().test();
+  new D<String>().test(); // //# 01: ok
+  new D<String>().test(); // //# 02: compile-time error
+  new D<String>().test(); // //# 03: compile-time error
+  new D<String>().test(); // //# 04: compile-time error
+  new D<String>().test(); // //# 05: compile-time error
+}
diff --git a/tests/language/malbounded/type_cast2_test.dart b/tests/language/malbounded/type_cast2_test.dart
new file mode 100644
index 0000000..06940a8
--- /dev/null
+++ b/tests/language/malbounded/type_cast2_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class A<T extends num> {}
+
+class B<T> {
+  test() {
+    new A() as A<T>; /*@compile-error=unspecified*/
+  }
+}
+
+main() {
+  var b = new B<String>();
+  Expect.throws(() => b.test());
+}
diff --git a/tests/language/malbounded/type_cast_runtime_test.dart b/tests/language/malbounded/type_cast_runtime_test.dart
new file mode 100644
index 0000000..fd75b12
--- /dev/null
+++ b/tests/language/malbounded/type_cast_runtime_test.dart
@@ -0,0 +1,27 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+import 'package:expect/expect.dart';
+
+class Super<T extends num> {}
+class Malbounded1 implements Super
+
+  {}
+class Malbounded2 extends Super
+
+  {}
+
+main() {
+  var m = new Malbounded1();
+  Expect.throwsTypeError(() => m as Super<int>);
+  var s = new Super<int>();
+  Expect.throwsTypeError(() => s as Malbounded1);
+  Expect.throwsTypeError(() => s as Malbounded2);
+  s as Super
+
+      ;
+}
diff --git a/tests/language/malbounded/type_cast_test.dart b/tests/language/malbounded/type_cast_test.dart
new file mode 100644
index 0000000..2c56e68
--- /dev/null
+++ b/tests/language/malbounded/type_cast_test.dart
@@ -0,0 +1,36 @@
+// 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.
+
+import 'package:expect/expect.dart';
+
+class Super<T extends num> {}
+class Malbounded1 implements Super
+//    ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded1'.
+  <String>
+// ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
+  {}
+class Malbounded2 extends Super
+//    ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded2'.
+  <String>
+// ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
+  {}
+
+main() {
+  var m = new Malbounded1();
+  Expect.throwsTypeError(() => m as Super<int>);
+  var s = new Super<int>();
+  Expect.throwsTypeError(() => s as Malbounded1);
+  Expect.throwsTypeError(() => s as Malbounded2);
+  s as Super
+  //^
+  // [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
+      <String>
+//     ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
+      ;
+}
diff --git a/tests/language/malbounded/type_literal_runtime_test.dart b/tests/language/malbounded/type_literal_runtime_test.dart
new file mode 100644
index 0000000..adeefbf
--- /dev/null
+++ b/tests/language/malbounded/type_literal_runtime_test.dart
@@ -0,0 +1,20 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+import 'package:expect/expect.dart';
+
+class Super<T extends num> {}
+
+class Malbounded extends Super
+
+    {}
+
+main() {
+  Type t = Malbounded;
+  Expect.isNotNull(t);
+  Expect.isTrue(t is Type);
+}
diff --git a/tests/language/malbounded/type_literal_test.dart b/tests/language/malbounded/type_literal_test.dart
new file mode 100644
index 0000000..2369b69
--- /dev/null
+++ b/tests/language/malbounded/type_literal_test.dart
@@ -0,0 +1,21 @@
+// 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.
+
+import 'package:expect/expect.dart';
+
+class Super<T extends num> {}
+
+class Malbounded extends Super
+//    ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded'.
+    <String>
+//   ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
+    {}
+
+main() {
+  Type t = Malbounded;
+  Expect.isNotNull(t);
+  Expect.isTrue(t is Type);
+}
diff --git a/tests/language/malbounded/type_test2_runtime_test.dart b/tests/language/malbounded/type_test2_runtime_test.dart
new file mode 100644
index 0000000..1edb15f
--- /dev/null
+++ b/tests/language/malbounded/type_test2_runtime_test.dart
@@ -0,0 +1,23 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+import "package:expect/expect.dart";
+
+class A<T extends num> {}
+
+class B<T> {
+  test() {
+    new A() is A
+
+        ;
+  }
+}
+
+main() {
+  var b = new B<String>();
+  b.test();
+}
diff --git a/tests/language/malbounded/type_test2_test.dart b/tests/language/malbounded/type_test2_test.dart
new file mode 100644
index 0000000..8eec3aa
--- /dev/null
+++ b/tests/language/malbounded/type_test2_test.dart
@@ -0,0 +1,24 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class A<T extends num> {}
+
+class B<T> {
+  test() {
+    new A() is A
+    //      ^
+    // [cfe] Type argument 'T' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+        <T>
+//       ^
+// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
+        ;
+  }
+}
+
+main() {
+  var b = new B<String>();
+  b.test();
+}
diff --git a/tests/language/malbounded/type_test_runtime_test.dart b/tests/language/malbounded/type_test_runtime_test.dart
new file mode 100644
index 0000000..e62f180
--- /dev/null
+++ b/tests/language/malbounded/type_test_runtime_test.dart
@@ -0,0 +1,29 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+import 'package:expect/expect.dart';
+
+class Super<T extends num> {}
+
+class Malbounded1 implements Super
+
+    {}
+
+class Malbounded2 extends Super
+
+    {}
+
+main() {
+  var m = new Malbounded1();
+  Expect.isFalse(m is Super<int>);
+  var s = new Super<int>();
+  Expect.isFalse(s is Malbounded1);
+  Expect.isFalse(s is Malbounded2);
+  Expect.isTrue(s is Super
+
+      );
+}
diff --git a/tests/language/malbounded/type_test_test.dart b/tests/language/malbounded/type_test_test.dart
new file mode 100644
index 0000000..70fc939
--- /dev/null
+++ b/tests/language/malbounded/type_test_test.dart
@@ -0,0 +1,38 @@
+// 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.
+
+import 'package:expect/expect.dart';
+
+class Super<T extends num> {}
+
+class Malbounded1 implements Super
+//    ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded1'.
+    <String>
+//   ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
+    {}
+
+class Malbounded2 extends Super
+//    ^
+// [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super' in the supertype 'Super' of class 'Malbounded2'.
+    <String>
+//   ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
+    {}
+
+main() {
+  var m = new Malbounded1();
+  Expect.isFalse(m is Super<int>);
+  var s = new Super<int>();
+  Expect.isFalse(s is Malbounded1);
+  Expect.isFalse(s is Malbounded2);
+  Expect.isTrue(s is Super
+  //              ^
+  // [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Super'.
+      <String>
+//     ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
+      );
+}
diff --git a/tests/language/malformed/bound_test.dart b/tests/language/malformed/bound_test.dart
new file mode 100644
index 0000000..035cedf
--- /dev/null
+++ b/tests/language/malformed/bound_test.dart
@@ -0,0 +1,15 @@
+// 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.
+
+class C<T
+    extends Malformed  //# 00: compile-time error
+    > {
+  f(T t) => t
+      .foo  //# 01: compile-time error
+      ;
+}
+
+main() {
+  new C<int>().f(1);
+}
diff --git a/tests/language/malformed/inheritance_runtime_test.dart b/tests/language/malformed/inheritance_runtime_test.dart
new file mode 100644
index 0000000..8c88a62
--- /dev/null
+++ b/tests/language/malformed/inheritance_runtime_test.dart
@@ -0,0 +1,86 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Tests that malformed types used in extends, implements, and with clauses
+// cause compile-time errors.
+
+class A<T> {}
+
+class C
+
+    {
+}
+
+class C1
+
+    {
+}
+
+class C2
+
+    {
+}
+
+class C3
+
+    {
+}
+
+class C4
+
+    {
+}
+
+class C5
+
+    {
+}
+
+class C6<A>
+
+    {
+}
+
+class C7<A>
+
+    {
+}
+
+class C8<A>
+
+    {
+}
+
+class C9<A>
+
+    {
+}
+
+class C10<A>
+
+    {
+}
+
+class C11<A>
+
+    {
+}
+
+void main() {
+  new C();
+  new C1();
+  new C2();
+  new C3();
+  new C4();
+  new C5();
+  new C6<Object>();
+  new C7<Object>();
+  new C8<Object>();
+  new C9<Object>();
+  new C10<Object>();
+  new C11<Object>();
+}
diff --git a/tests/language/malformed/inheritance_test.dart b/tests/language/malformed/inheritance_test.dart
new file mode 100644
index 0000000..55154d7
--- /dev/null
+++ b/tests/language/malformed/inheritance_test.dart
@@ -0,0 +1,146 @@
+// 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.
+
+// Tests that malformed types used in extends, implements, and with clauses
+// cause compile-time errors.
+
+class A<T> {}
+
+class C
+    extends Unresolved
+    //      ^^^^^^^^^^
+    // [analyzer] COMPILE_TIME_ERROR.EXTENDS_NON_CLASS
+    // [cfe] Type 'Unresolved' not found.
+    {
+}
+
+class C1
+    extends A<Unresolved>
+    //        ^^^^^^^^^^
+    // [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
+    // [cfe] Type 'Unresolved' not found.
+    {
+}
+
+class C2
+//    ^
+// [cfe] The type 'Unresolved' can't be mixed in.
+    extends Object with Unresolved
+    //                  ^^^^^^^^^^
+    // [analyzer] COMPILE_TIME_ERROR.MIXIN_OF_NON_CLASS
+    // [cfe] Type 'Unresolved' not found.
+    {
+}
+
+class C3
+    extends Object with A<Unresolved>
+    //                    ^^^^^^^^^^
+    // [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
+    // [cfe] Type 'Unresolved' not found.
+    {
+}
+
+class C4
+    implements Unresolved
+    //         ^^^^^^^^^^
+    // [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
+    // [cfe] Type 'Unresolved' not found.
+    {
+}
+
+class C5
+    implements A<Unresolved>
+    //           ^^^^^^^^^^
+    // [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
+    // [cfe] Type 'Unresolved' not found.
+    {
+}
+
+class C6<A>
+    extends A<int>
+    //      ^
+    // [analyzer] COMPILE_TIME_ERROR.EXTENDS_NON_CLASS
+    // [cfe] Can't use type arguments with type variable 'A'.
+    //      ^^^^^^
+    // [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    {
+}
+
+class C7<A>
+    extends A<Unresolved>
+    //      ^
+    // [analyzer] COMPILE_TIME_ERROR.EXTENDS_NON_CLASS
+    // [cfe] Can't use type arguments with type variable 'A'.
+    //      ^^^^^^^^^^^^^
+    // [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    //        ^^^^^^^^^^
+    // [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
+    // [cfe] Type 'Unresolved' not found.
+    {
+}
+
+class C8<A>
+//    ^
+// [cfe] The type 'A<int>' can't be mixed in.
+    extends Object with A<int>
+    //                  ^
+    // [analyzer] COMPILE_TIME_ERROR.MIXIN_OF_NON_CLASS
+    // [cfe] Can't use type arguments with type variable 'A'.
+    //                  ^^^^^^
+    // [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    {
+}
+
+class C9<A>
+//    ^
+// [cfe] The type 'A<Unresolved>' can't be mixed in.
+    extends Object with A<Unresolved>
+    //                  ^
+    // [analyzer] COMPILE_TIME_ERROR.MIXIN_OF_NON_CLASS
+    // [cfe] Can't use type arguments with type variable 'A'.
+    //                  ^^^^^^^^^^^^^
+    // [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    //                    ^^^^^^^^^^
+    // [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
+    // [cfe] Type 'Unresolved' not found.
+    {
+}
+
+class C10<A>
+    implements A<int>
+    //         ^
+    // [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
+    // [cfe] Can't use type arguments with type variable 'A'.
+    //         ^^^^^^
+    // [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    {
+}
+
+class C11<A>
+    implements A<Unresolved>
+    //         ^
+    // [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
+    // [cfe] Can't use type arguments with type variable 'A'.
+    //         ^^^^^^^^^^^^^
+    // [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    //           ^^^^^^^^^^
+    // [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
+    // [cfe] Type 'Unresolved' not found.
+    {
+}
+
+void main() {
+  new C();
+  new C1();
+  new C2();
+  new C3();
+  new C4();
+  new C5();
+  new C6<Object>();
+  new C7<Object>();
+  new C8<Object>();
+  new C9<Object>();
+  new C10<Object>();
+  new C11<Object>();
+}
diff --git a/tests/language/malformed/malformed2_lib.dart b/tests/language/malformed/malformed2_lib.dart
new file mode 100644
index 0000000..27bdaf5
--- /dev/null
+++ b/tests/language/malformed/malformed2_lib.dart
@@ -0,0 +1,53 @@
+// 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.
+
+part of malformed_test;
+
+void testValue(var o) {
+  o is Unresolved1;
+  o is List<Unresolved2>;
+  o is! Unresolved3;
+  o is! List<Unresolved4>;
+
+  try {
+    o as Unresolved5;
+  } catch (e) {
+  }
+
+  try {
+    o as List<Unresolved6>;
+  } catch (e) {
+  }
+
+  try {
+  } on Unresolved7 catch (e) {
+  } catch (e) {
+  }
+
+  try {
+    throw o;
+  } on Unresolved8 catch (e) {
+  } catch (e) {
+  }
+
+  try {
+    throw o;
+  } on List<String> catch (e) {
+  } on NullThrownError catch (e) {
+  } on Unresolved9 catch (e) {
+  } catch (e) {
+  }
+
+  try {
+    throw o;
+  } on List<Unresolved10> catch (e) {
+  } on NullThrownError catch (e) {
+  } on Unresolved11 catch (e) {
+  } catch (e) {
+  }
+
+  Unresolved12? u = o;
+
+  List<Unresolved13>? u2 = o;
+}
diff --git a/tests/language/malformed/malformed2_test.dart b/tests/language/malformed/malformed2_test.dart
new file mode 100644
index 0000000..79061c2
--- /dev/null
+++ b/tests/language/malformed/malformed2_test.dart
@@ -0,0 +1,57 @@
+// 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.
+
+library malformed_test;
+
+// This part includes the actual tests.
+part 'malformed2_lib.dart';
+
+// The part-file cannot contain error markers.
+// Therefore we create a fresh class for each test.
+/* //# 01: compile-time error
+class Unresolved1 {}
+*/ //# 01: continued
+/* //# 02: compile-time error
+class Unresolved2 {}
+*/ //# 02: continued
+/* //# 03: compile-time error
+class Unresolved3 {}
+*/ //# 03: continued
+/* //# 04: compile-time error
+class Unresolved4 {}
+*/ //# 04: continued
+/* //# 05: compile-time error
+class Unresolved5 {}
+*/ //# 05: continued
+/* //# 06: compile-time error
+class Unresolved6 {}
+*/ //# 06: continued
+/* //# 07: compile-time error
+class Unresolved7 {}
+*/ //# 07: continued
+/* //# 08: compile-time error
+class Unresolved8 {}
+*/ //# 08: continued
+/* //# 09: compile-time error
+class Unresolved9 {}
+*/ //# 09: continued
+/* //# 10: compile-time error
+class Unresolved10 {}
+*/ //# 10: continued
+/* //# 11: compile-time error
+class Unresolved11 {}
+*/ //# 11: continued
+/* //# 12: compile-time error
+class Unresolved12 {}
+*/ //# 12: continued
+/* //# 13: compile-time error
+class Unresolved13 {}
+*/ //# 13: continued
+
+const Unresolved c1 = 0;  //# 00: compile-time error
+
+void main() {
+  print(c1);  //# 00: continued
+  testValue(null);
+}
diff --git a/tests/language/malformed/malformed_test.dart b/tests/language/malformed/malformed_test.dart
new file mode 100644
index 0000000..4b35615
--- /dev/null
+++ b/tests/language/malformed/malformed_test.dart
@@ -0,0 +1,166 @@
+// 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.
+
+import 'package:expect/expect.dart';
+import 'package:expect/expect.dart' as prefix; // Define 'prefix'.
+
+checkIsUnresolved(var v) {
+  v is Unresolved;
+  //   ^^^^^^^^^^
+  // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+  // [cfe] 'Unresolved' isn't a type.
+  v is Unresolved<int>;
+  //   ^^^^^^^^^^
+  // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+  // [cfe] 'Unresolved' isn't a type.
+  v is prefix.Unresolved;
+  //   ^^^^^^^^^^^^^^^^^
+  // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+  //          ^
+  // [cfe] 'Unresolved' isn't a type.
+  v is prefix.Unresolved<int>;
+  //   ^^^^^^^^^^^^^^^^^
+  // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+  //          ^
+  // [cfe] 'Unresolved' isn't a type.
+}
+
+checkIsListUnresolved(var v) {
+  v is List<Unresolved>;
+  //        ^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
+  // [cfe] 'Unresolved' isn't a type.
+  v is List<Unresolved<int>>;
+  //        ^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
+  // [cfe] 'Unresolved' isn't a type.
+  v is List<prefix.Unresolved>;
+  //        ^^^^^^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
+  //               ^
+  // [cfe] 'Unresolved' isn't a type.
+  v is List<prefix.Unresolved<int>>;
+  //        ^^^^^^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
+  //               ^
+  // [cfe] 'Unresolved' isn't a type.
+  v is List<int, String>;
+  //   ^^^^^^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+  // [cfe] Expected 1 type arguments.
+}
+
+checkAsUnresolved(var v) {
+  v as Unresolved;
+  //   ^^^^^^^^^^
+  // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+  // [cfe] 'Unresolved' isn't a type.
+  v as Unresolved<int>;
+  //   ^^^^^^^^^^
+  // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+  // [cfe] 'Unresolved' isn't a type.
+  v as prefix.Unresolved;
+  //   ^^^^^^^^^^^^^^^^^
+  // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+  //          ^
+  // [cfe] 'Unresolved' isn't a type.
+  v as prefix.Unresolved<int>;
+  //   ^^^^^^^^^^^^^^^^^
+  // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+  //          ^
+  // [cfe] 'Unresolved' isn't a type.
+}
+
+checkAsListUnresolved(var v) {
+  v as List<Unresolved>;
+  //        ^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
+  // [cfe] 'Unresolved' isn't a type.
+  v as List<Unresolved<int>>;
+  //        ^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
+  // [cfe] 'Unresolved' isn't a type.
+  v as List<prefix.Unresolved>;
+  //        ^^^^^^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
+  //               ^
+  // [cfe] 'Unresolved' isn't a type.
+  v as List<prefix.Unresolved<int>>;
+  //        ^^^^^^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
+  //               ^
+  // [cfe] 'Unresolved' isn't a type.
+  v as List<int, String>;
+  //   ^^^^^^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+  // [cfe] Expected 1 type arguments.
+}
+
+void main() {
+  checkIsUnresolved('');
+  checkAsUnresolved('');
+  checkIsListUnresolved([]);
+  checkAsListUnresolved([]);
+
+  new undeclared_prefix.Unresolved();
+  //  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  // [analyzer] STATIC_WARNING.NEW_WITH_NON_TYPE
+  // [cfe] Method not found: 'undeclared_prefix.Unresolved'.
+  new undeclared_prefix.Unresolved<int>();
+  //  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  // [analyzer] STATIC_WARNING.NEW_WITH_NON_TYPE
+  // [cfe] Method not found: 'undeclared_prefix.Unresolved'.
+
+  try {
+    throw 'foo';
+  }
+    on Unresolved
+    // ^^^^^^^^^^
+    // [analyzer] STATIC_WARNING.NON_TYPE_IN_CATCH_CLAUSE
+    // [cfe] 'Unresolved' isn't a type.
+    catch (e) {
+  }
+
+  try {
+    throw 'foo';
+  }
+    on Unresolved<int>
+    // ^^^^^^^^^^
+    // [analyzer] STATIC_WARNING.NON_TYPE_IN_CATCH_CLAUSE
+    // [cfe] 'Unresolved' isn't a type.
+    catch (e) {
+  }
+
+  try {
+    throw 'foo';
+  }
+    on prefix.Unresolved
+    // ^^^^^^^^^^^^^^^^^
+    // [analyzer] STATIC_WARNING.NON_TYPE_IN_CATCH_CLAUSE
+    //        ^
+    // [cfe] 'Unresolved' isn't a type.
+    catch (e) {
+  }
+
+  try {
+    throw 'foo';
+  }
+    on prefix.Unresolved<int>
+    // ^^^^^^^^^^^^^^^^^
+    // [analyzer] STATIC_WARNING.NON_TYPE_IN_CATCH_CLAUSE
+    //        ^
+    // [cfe] 'Unresolved' isn't a type.
+    catch (e) {
+  }
+
+  try {
+    throw 'foo';
+  }
+    on undeclared_prefix.Unresolved<int>
+    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+    // [analyzer] STATIC_WARNING.NON_TYPE_IN_CATCH_CLAUSE
+    // [cfe] 'undeclared_prefix.Unresolved' can't be used as a type because 'undeclared_prefix' isn't defined.
+    catch (e) {
+  }
+}
diff --git a/tests/language/malformed/runtime_test.dart b/tests/language/malformed/runtime_test.dart
new file mode 100644
index 0000000..46916ba
--- /dev/null
+++ b/tests/language/malformed/runtime_test.dart
@@ -0,0 +1,84 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+import 'package:expect/expect.dart';
+import 'package:expect/expect.dart' as prefix; // Define 'prefix'.
+
+checkIsUnresolved(var v) {
+
+
+
+
+}
+
+checkIsListUnresolved(var v) {
+
+
+
+
+
+}
+
+checkAsUnresolved(var v) {
+
+
+
+
+}
+
+checkAsListUnresolved(var v) {
+
+
+
+
+
+}
+
+void main() {
+  checkIsUnresolved('');
+  checkAsUnresolved('');
+  checkIsListUnresolved([]);
+  checkAsListUnresolved([]);
+
+
+
+
+  try {
+    throw 'foo';
+  }
+
+    catch (e) {
+  }
+
+  try {
+    throw 'foo';
+  }
+
+    catch (e) {
+  }
+
+  try {
+    throw 'foo';
+  }
+
+    catch (e) {
+  }
+
+  try {
+    throw 'foo';
+  }
+
+    catch (e) {
+  }
+
+  try {
+    throw 'foo';
+  }
+
+    catch (e) {
+  }
+}
diff --git a/tests/language/malformed/type_test.dart b/tests/language/malformed/type_test.dart
new file mode 100644
index 0000000..b464d6e
--- /dev/null
+++ b/tests/language/malformed/type_test.dart
@@ -0,0 +1,10 @@
+// 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.
+
+null_() => null;
+final Undeclared/*@compile-error=unspecified*/ x = null_();
+
+main() {
+  print(x);
+}
diff --git a/tests/language/map/literal10_test.dart b/tests/language/map/literal10_test.dart
new file mode 100644
index 0000000..d1d3886
--- /dev/null
+++ b/tests/language/map/literal10_test.dart
@@ -0,0 +1,39 @@
+// 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.
+
+// Test the use of '__proto__' keys in maps.
+
+library map_literal10_test;
+
+import "package:expect/expect.dart";
+
+void main() {
+  var m1 = const {"__proto__": 0, 1: 1};
+  Expect.isTrue(m1.containsKey("__proto__"));
+  Expect.equals(0, m1["__proto__"]);
+  Expect.isTrue(m1.containsKey(1));
+  Expect.equals(1, m1[1]);
+  Expect.listEquals(["__proto__", 1], m1.keys.toList());
+
+  var m2 = const {1: 0, "__proto__": 1};
+  Expect.isTrue(m2.containsKey(1));
+  Expect.equals(0, m2[1]);
+  Expect.isTrue(m2.containsKey("__proto__"));
+  Expect.equals(1, m2["__proto__"]);
+  Expect.listEquals([1, "__proto__"], m2.keys.toList());
+
+  var m3 = const {"1": 0, "__proto__": 1};
+  Expect.isTrue(m3.containsKey("1"));
+  Expect.equals(0, m3["1"]);
+  Expect.isTrue(m3.containsKey("__proto__"));
+  Expect.equals(1, m3["__proto__"]);
+  Expect.listEquals(["1", "__proto__"], m3.keys.toList());
+
+  var m4 = const {"__proto__": 1, "1": 2};
+  Expect.isTrue(m4.containsKey("1"));
+  Expect.equals(2, m4["1"]);
+  Expect.isTrue(m4.containsKey("__proto__"));
+  Expect.equals(1, m4["__proto__"]);
+  Expect.listEquals(["__proto__", "1"], m4.keys.toList());
+}
diff --git a/tests/language/map/literal11_test.dart b/tests/language/map/literal11_test.dart
new file mode 100644
index 0000000..93643eb
--- /dev/null
+++ b/tests/language/map/literal11_test.dart
@@ -0,0 +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.
+
+// Test the use type arguments on constant maps.
+
+library map_literal11_test;
+
+import "package:expect/expect.dart";
+
+void foo(Map m) {
+  m[23] = 23; //# none: runtime error
+}
+
+void main() {
+  Map<String, dynamic> map = {};
+  foo(map);
+}
diff --git a/tests/language/map/literal12_test.dart b/tests/language/map/literal12_test.dart
new file mode 100644
index 0000000..1cd42d8
--- /dev/null
+++ b/tests/language/map/literal12_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+// Test relative order of key and value evaluation.
+
+library map_literal12_test;
+
+import "package:expect/expect.dart";
+
+int x = 0;
+void main() {
+  var map1 = {++x: ++x};
+  Expect.equals('{1: 2}', map1.toString());
+
+  var map2 = {++x: ++x, ++x: ++x};
+  Expect.equals('{3: 4, 5: 6}', map2.toString());
+}
diff --git a/tests/language/map/literal13_test.dart b/tests/language/map/literal13_test.dart
new file mode 100644
index 0000000..ec5e0be
--- /dev/null
+++ b/tests/language/map/literal13_test.dart
@@ -0,0 +1,81 @@
+// 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.
+
+/// Legacy compound literal syntax that should go away.
+
+main() {
+  var map = new Map<int>{ "a": 1, "b": 2, "c": 3 };
+  //            ^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+  // [cfe] Expected 2 type arguments.
+  //                   ^
+  // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+  // [cfe] Expected '(' after this.
+  //                    ^
+  // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+  // [cfe] Expected ';' after this.
+  //                      ^^^
+  // [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] Unexpected token ':'.
+  //                           ^
+  // [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] Unexpected token ','.
+  //                              ^^^
+  // [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] Unexpected token ':'.
+  //                                   ^
+  // [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] Unexpected token ','.
+  //                                      ^^^
+  // [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] Unexpected token ':'.
+  //                                           ^
+  // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+  // [cfe] Expected ';' after this.
+}
diff --git a/tests/language/map/literal14_test.dart b/tests/language/map/literal14_test.dart
new file mode 100644
index 0000000..4351eb9
--- /dev/null
+++ b/tests/language/map/literal14_test.dart
@@ -0,0 +1,18 @@
+// 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 test program const map literals.
+
+class MapLiteral2NegativeTest<T> {
+  test() {
+    var m = const <String, T>{};
+    //                     ^
+    // [analyzer] COMPILE_TIME_ERROR.INVALID_TYPE_ARGUMENT_IN_CONST_MAP
+    // [cfe] Type variables can't be used as constants.
+  }
+}
+
+main() {
+  MapLiteral2NegativeTest<int>().test();
+}
diff --git a/tests/language/map/literal1_runtime_test.dart b/tests/language/map/literal1_runtime_test.dart
new file mode 100644
index 0000000..093f893
--- /dev/null
+++ b/tests/language/map/literal1_runtime_test.dart
@@ -0,0 +1,14 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+//
+// A type mismatch in a constant map literal is a compile-time error.
+
+main() {
+  var m = const
+
+    {"a": 0};
+}
diff --git a/tests/language/map/literal1_test.dart b/tests/language/map/literal1_test.dart
new file mode 100644
index 0000000..71c4e8e
--- /dev/null
+++ b/tests/language/map/literal1_test.dart
@@ -0,0 +1,14 @@
+// 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.
+//
+// A type mismatch in a constant map literal is a compile-time error.
+
+main() {
+  var m = const
+      <String, String>
+    {"a": 0};
+    //    ^
+    // [analyzer] STATIC_WARNING.MAP_VALUE_TYPE_NOT_ASSIGNABLE
+    // [cfe] A value of type 'int' can't be assigned to a variable of type 'String'.
+}
diff --git a/tests/language/map/literal2_test.dart b/tests/language/map/literal2_test.dart
new file mode 100644
index 0000000..083fe75
--- /dev/null
+++ b/tests/language/map/literal2_test.dart
@@ -0,0 +1,21 @@
+// 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.
+// Test program for map literals.
+
+import "package:expect/expect.dart";
+
+int nextValCtr = 0;
+
+get nextVal {
+  return nextValCtr++;
+}
+
+main() {
+  // Map literals with string interpolation in keys.
+  var map = {"a$nextVal": "Grey", "a$nextVal": "Poupon"};
+  Expect.equals(true, map.containsKey("a0"));
+  Expect.equals(true, map.containsKey("a1"));
+  Expect.equals("Grey", map["a0"]);
+  Expect.equals("Poupon", map["a1"]);
+}
diff --git a/tests/language/map/literal3_test.dart b/tests/language/map/literal3_test.dart
new file mode 100644
index 0000000..517ef90
--- /dev/null
+++ b/tests/language/map/literal3_test.dart
@@ -0,0 +1,75 @@
+// 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.
+// Test program for map literals.
+
+import "package:expect/expect.dart";
+
+class MapLiteralTest {
+  static testMain() {
+    var map = <dynamic, dynamic>{"a": 1, "b": 2, "c": 3};
+
+    Expect.equals(map.length, 3);
+    Expect.equals(map["a"], 1);
+    Expect.equals(map["z"], null);
+    Expect.equals(map["c"], 3);
+
+    map["foo"] = 42;
+    Expect.equals(map.length, 4);
+    Expect.equals(map["foo"], 42);
+    map["foo"] = 55;
+    Expect.equals(map.length, 4);
+    Expect.equals(map["foo"], 55);
+
+    map.remove("foo");
+    Expect.equals(map.length, 3);
+    Expect.equals(map["foo"], null);
+
+    map["foo"] = "bar";
+    Expect.equals(map.length, 4);
+    Expect.equals(map["foo"], "bar");
+
+    map.clear();
+    Expect.equals(map.length, 0);
+
+    var b = 22;
+    Expect.equals(
+        22,
+        {
+          "a": 11,
+          "b": b,
+        }["b"]);
+
+    var m = new Map();
+    Expect.equals(m.length, 0);
+    for (var i = 1; i <= 16; i++) {
+      m[i.toString()] = i;
+    }
+    Expect.equals(16, m.length);
+    Expect.equals(1, m.remove("1"));
+    Expect.isNull(m.remove("1")); // Remove element twice.
+    Expect.equals(16, m.remove("16"));
+    Expect.equals(14, m.length);
+
+    final cmap = const <String, num>{"a": 10, "b": 100, "a": 1000}; //# 01: compile-time error
+    final cmap2 = const <String, num>{"a": 10, "a": 100, "a": 1000}; //# 02: compile-time error
+    var mmap = <String, num>{"a": 10, "b": 100, "a": 1000}; //# 03: ok
+    var mmap = <String, num>{"a": ctr(), "b": ctr(), "a": ctr()}; //# 04: compile-time error
+
+    Expect.equals(10, {"beta": 100, "alpha": 9 + 1}["alpha"]);
+    Expect.equals(
+        10,
+        <String, Map>{
+          "beta": {"delta": 10},
+          "alpha": {"gamma": 10}
+        }["alpha"]!["gamma"]);
+
+    // Map literals at beginning of statement.
+    <String, num>{"pink": 100};
+    const <String, num>{"floyd": 100};
+  }
+}
+
+main() {
+  MapLiteralTest.testMain();
+}
diff --git a/tests/language/map/literal4_test.dart b/tests/language/map/literal4_test.dart
new file mode 100644
index 0000000..9358e59
--- /dev/null
+++ b/tests/language/map/literal4_test.dart
@@ -0,0 +1,27 @@
+// 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.
+// VMOptions=--enable_type_checks
+//
+// Dart test program testing type checks in map literals.
+
+import "package:expect/expect.dart";
+
+class MapLiteral4Test<T> {
+  test() {
+    int result = 0;
+    var m = <String, String>{"a": 0}; //# 01: compile-time error
+    var m = <String, int>{"a": 0}; //# 02: ok
+    m[2] = 1; //# 02: compile-time error
+    var m = <String, T>{"a": "b"}; //# 03: compile-time error
+    var m = <String, T>{"a": 0}; //# 04: compile-time error
+    var m = <String, T>{"a": 0}; //# 05: continued
+    m[2] = 1; //# 05: compile-time error
+    var m = const <String, int>{"a": 0}; //# 06: continued
+    m[2] = 1; //# 06: compile-time error
+  }
+}
+
+main() {
+  var t = new MapLiteral4Test<int>();
+}
diff --git a/tests/language/map/literal5_test.dart b/tests/language/map/literal5_test.dart
new file mode 100644
index 0000000..94f298d
--- /dev/null
+++ b/tests/language/map/literal5_test.dart
@@ -0,0 +1,44 @@
+// 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.
+
+// Test the use of general expression as keys in map literals.
+
+library map_literal5_test;
+
+import "package:expect/expect.dart";
+
+void main() {
+  test(true);
+  test(false);
+}
+
+void test(bool b) {
+  var m = create(b);
+  Expect.equals(b, m.containsKey(true));
+  Expect.equals(b, m.containsKey(2));
+  Expect.equals(b, m.containsKey(1));
+  Expect.equals(!b, m.containsKey(false));
+  Expect.equals(!b, m.containsKey("bar"));
+  Expect.equals(!b, m.containsKey("foo"));
+  if (b) {
+    Expect.equals(0, m[true]);
+    Expect.equals(3, m[2]);
+    Expect.equals(2, m[1]);
+  } else {
+    Expect.equals(0, m[false]);
+    Expect.equals("baz", m["bar"]);
+    Expect.equals(2, m["foo"]);
+  }
+}
+
+Map create(bool b) {
+  return {
+    b: 0,
+    m(b): n(b),
+    b ? 1 : "foo": 2,
+  };
+}
+
+Object m(bool b) => b ? 2 : "bar";
+Object n(bool b) => b ? 3 : "baz";
diff --git a/tests/language/map/literal6_test.dart b/tests/language/map/literal6_test.dart
new file mode 100644
index 0000000..5454f48
--- /dev/null
+++ b/tests/language/map/literal6_test.dart
@@ -0,0 +1,35 @@
+// 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.
+
+// Test the use of general expression as keys in const map literals.
+
+library map_literal6_test;
+
+import "package:expect/expect.dart";
+
+class A {
+  const A();
+}
+
+class B {
+  final a;
+  const B(this.a);
+}
+
+void main() {
+  var m1 = const {
+    const A(): 0,
+    const B(1): 2,
+    const B(const A()): 3,
+    const B(0): 4,
+  };
+  Expect.isTrue(m1.containsKey(const A()));
+  Expect.isTrue(m1.containsKey(const B(0)));
+  Expect.isTrue(m1.containsKey(const B(1)));
+  Expect.isTrue(m1.containsKey(const B(const A())));
+  Expect.equals(0, m1[const A()]);
+  Expect.equals(4, m1[const B(0)]);
+  Expect.equals(2, m1[const B(1)]);
+  Expect.equals(3, m1[const B(const A())]);
+}
diff --git a/tests/language/map/literal7_test.dart b/tests/language/map/literal7_test.dart
new file mode 100644
index 0000000..06c2e39
--- /dev/null
+++ b/tests/language/map/literal7_test.dart
@@ -0,0 +1,23 @@
+// 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.
+
+// Test the use type arguments on constant maps.
+
+library map_literal7_test;
+
+import "package:expect/expect.dart";
+
+void main() {
+  Map m1 = const {"0": 0, "1": 1};
+  Expect.isTrue(m1 is Map);
+  Expect.isFalse(m1 is Map<String, int>);
+  Expect.isFalse(m1 is Map<int, dynamic>);
+  Expect.isFalse(m1 is Map<dynamic, String>);
+
+  Map<String, int> m2 = const {"0": 0, "1": 1};
+  Expect.isTrue(m2 is Map);
+  Expect.isTrue(m2 is Map<String, int>);
+  Expect.isFalse(m2 is Map<int, dynamic>);
+  Expect.isFalse(m2 is Map<dynamic, String>);
+}
diff --git a/tests/language/map/literal8_test.dart b/tests/language/map/literal8_test.dart
new file mode 100644
index 0000000..bf79320
--- /dev/null
+++ b/tests/language/map/literal8_test.dart
@@ -0,0 +1,43 @@
+// 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.
+
+// Test the use of type arguments on const map literals using general expression
+// as keys.
+
+library map_literal8_test;
+
+import "package:expect/expect.dart";
+
+class A {
+  const A();
+}
+
+class B extends A {
+  final a;
+  const B(this.a);
+}
+
+void main() {
+  var m1 = const {
+    const A(): 0,
+    const B(0): 1,
+    const B(1): 2,
+    const B(const A()): 3,
+  };
+  Expect.isTrue(m1 is Map);
+  Expect.isTrue(m1 is Map<A, int>);
+  Expect.isFalse(m1 is Map<int, dynamic>);
+  Expect.isFalse(m1 is Map<dynamic, A>);
+
+  var m2 = const <A, int>{
+    const A(): 0,
+    const B(0): 1,
+    const B(1): 2,
+    const B(const A()): 3,
+  };
+  Expect.isTrue(m2 is Map);
+  Expect.isTrue(m2 is Map<A, int>);
+  Expect.isFalse(m2 is Map<int, dynamic>);
+  Expect.isFalse(m2 is Map<dynamic, A>);
+}
diff --git a/tests/language/map/literal9_test.dart b/tests/language/map/literal9_test.dart
new file mode 100644
index 0000000..cc12411
--- /dev/null
+++ b/tests/language/map/literal9_test.dart
@@ -0,0 +1,23 @@
+// 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.
+
+// Test the use type arguments on constant maps.
+
+library map_literal9_test;
+
+import "package:expect/expect.dart";
+
+void main() {
+  var m1 = const {"[object Object]": 0, "1": 1};
+  Expect.isFalse(m1.containsKey(new Object()));
+  Expect.isNull(m1[new Object()]);
+  Expect.isFalse(m1.containsKey(1));
+  Expect.isNull(m1[1]);
+
+  var m2 = const {"[object Object]": 0, "1": 1, "__proto__": 2};
+  Expect.isFalse(m2.containsKey(new Object()));
+  Expect.isNull(m2[new Object()]);
+  Expect.isFalse(m2.containsKey(1));
+  Expect.isNull(m2[1]);
+}
diff --git a/tests/language/map/literal_syntax_test.dart b/tests/language/map/literal_syntax_test.dart
new file mode 100644
index 0000000..953730a
--- /dev/null
+++ b/tests/language/map/literal_syntax_test.dart
@@ -0,0 +1,24 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class Foo {
+  var x;
+  var y;
+  var z;
+  var v;
+  Foo()
+      : x = {},
+        y = <String, int>{},
+        z = const {},
+        v = const <String, int>{};
+}
+
+main() {
+  Expect.equals("{}", new Foo().x.toString());
+  Expect.equals("{}", new Foo().y.toString());
+  Expect.equals("{}", new Foo().z.toString());
+  Expect.equals("{}", new Foo().v.toString());
+}
diff --git a/tests/language/map/literal_test.dart b/tests/language/map/literal_test.dart
new file mode 100644
index 0000000..93f1c3d
--- /dev/null
+++ b/tests/language/map/literal_test.dart
@@ -0,0 +1,78 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+// Tests map literals.
+
+class MapLiteralTest {
+  MapLiteralTest() {}
+
+  static testMain() {
+    var test = new MapLiteralTest();
+    test.testStaticInit();
+    test.testConstInit();
+  }
+
+  testStaticInit() {
+    var testClass = new StaticInit();
+    testClass.test();
+  }
+
+  testConstInit() {
+    var testClass = new ConstInit();
+    testClass.test();
+  }
+
+  testLocalInit() {
+    // Test construction of static const map literals
+    var map1 = {"a": 1, "b": 2};
+    // Test construction of static const map literals, with numbers
+    var map2 = {"1": 1, "2": 2};
+
+    Expect.equals(1, map1["a"]);
+    Expect.equals(2, map1["b"]);
+
+    Expect.equals(1, map2["1"]);
+    Expect.equals(2, map2["2"]);
+  }
+}
+
+class StaticInit {
+  StaticInit() {}
+
+  // Test construction of static const map literals
+  static const map1 = const {"a": 1, "b": 2};
+  // Test construction of static const map literals, with numbers
+  static const map2 = const {"1": 1, "2": 2};
+
+  test() {
+    Expect.equals(1, map1["a"]);
+    Expect.equals(2, map1["b"]);
+
+    Expect.equals(1, map2["1"]);
+    Expect.equals(2, map2["2"]);
+  }
+}
+
+class ConstInit {
+  final map1;
+  final map2;
+
+  ConstInit()
+      : this.map1 = {"a": 1, "b": 2},
+        this.map2 = {"1": 1, "2": 2} {}
+
+  test() {
+    Expect.equals(1, map1["a"]);
+    Expect.equals(2, map1["b"]);
+
+    Expect.equals(1, map2["1"]);
+    Expect.equals(2, map2["2"]);
+  }
+}
+
+main() {
+  MapLiteralTest.testMain();
+}
diff --git a/tests/language/map/map_test.dart b/tests/language/map/map_test.dart
new file mode 100644
index 0000000..1ccee3c
--- /dev/null
+++ b/tests/language/map/map_test.dart
@@ -0,0 +1,222 @@
+// 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.
+// A subtest of the larger MapTest. Will eliminate once the full
+// test is running.
+
+import "package:expect/expect.dart";
+
+class MapTest {
+  static void testDeletedElement(Map map) {
+    map.clear();
+    for (int i = 0; i < 100; i++) {
+      map[1] = 2;
+      Expect.equals(1, map.length);
+      int x = map.remove(1);
+      Expect.equals(2, x);
+      Expect.equals(0, map.length);
+    }
+    Expect.equals(0, map.length);
+    for (int i = 0; i < 100; i++) {
+      map[i] = 2;
+      Expect.equals(1, map.length);
+      int? x = map.remove(105);
+      Expect.equals(null, x);
+      Expect.equals(1, map.length);
+      x = map.remove(i);
+      Expect.equals(2, x);
+      Expect.equals(0, map.length);
+    }
+    Expect.equals(0, map.length);
+    map.remove(105);
+  }
+
+  static void test(Map map) {
+    testDeletedElement(map);
+    testMap(map, 1, 2, 3, 4, 5, 6, 7, 8);
+    map.clear();
+    testMap(map, "value1", "value2", "value3", "value4", "value5", "value6",
+        "value7", "value8");
+  }
+
+  static void testMap(Map map, key1, key2, key3, key4, key5, key6, key7, key8) {
+    int value1 = 10;
+    int value2 = 20;
+    int value3 = 30;
+    int value4 = 40;
+    int value5 = 50;
+    int value6 = 60;
+    int value7 = 70;
+    int value8 = 80;
+
+    Expect.equals(0, map.length);
+
+    map[key1] = value1;
+    Expect.equals(value1, map[key1]);
+    map[key1] = value2;
+    Expect.equals(false, map.containsKey(key2));
+    Expect.equals(1, map.length);
+
+    map[key1] = value1;
+    Expect.equals(value1, map[key1]);
+    // Add enough entries to make sure the table grows.
+    map[key2] = value2;
+    Expect.equals(value2, map[key2]);
+    Expect.equals(2, map.length);
+    map[key3] = value3;
+    Expect.equals(value2, map[key2]);
+    Expect.equals(value3, map[key3]);
+    map[key4] = value4;
+    Expect.equals(value3, map[key3]);
+    Expect.equals(value4, map[key4]);
+    map[key5] = value5;
+    Expect.equals(value4, map[key4]);
+    Expect.equals(value5, map[key5]);
+    map[key6] = value6;
+    Expect.equals(value5, map[key5]);
+    Expect.equals(value6, map[key6]);
+    map[key7] = value7;
+    Expect.equals(value6, map[key6]);
+    Expect.equals(value7, map[key7]);
+    map[key8] = value8;
+    Expect.equals(value1, map[key1]);
+    Expect.equals(value2, map[key2]);
+    Expect.equals(value3, map[key3]);
+    Expect.equals(value4, map[key4]);
+    Expect.equals(value5, map[key5]);
+    Expect.equals(value6, map[key6]);
+    Expect.equals(value7, map[key7]);
+    Expect.equals(value8, map[key8]);
+    Expect.equals(8, map.length);
+
+    map.remove(key4);
+    Expect.equals(false, map.containsKey(key4));
+    Expect.equals(7, map.length);
+
+    // Test clearing the table.
+    map.clear();
+    Expect.equals(0, map.length);
+    Expect.equals(false, map.containsKey(key1));
+    Expect.equals(false, map.containsKey(key2));
+    Expect.equals(false, map.containsKey(key3));
+    Expect.equals(false, map.containsKey(key4));
+    Expect.equals(false, map.containsKey(key5));
+    Expect.equals(false, map.containsKey(key6));
+    Expect.equals(false, map.containsKey(key7));
+    Expect.equals(false, map.containsKey(key8));
+
+    // Test adding and removing again.
+    map[key1] = value1;
+    Expect.equals(value1, map[key1]);
+    Expect.equals(1, map.length);
+    map[key2] = value2;
+    Expect.equals(value2, map[key2]);
+    Expect.equals(2, map.length);
+    map[key3] = value3;
+    Expect.equals(value3, map[key3]);
+    map.remove(key3);
+    Expect.equals(2, map.length);
+    map[key4] = value4;
+    Expect.equals(value4, map[key4]);
+    map.remove(key4);
+    Expect.equals(2, map.length);
+    map[key5] = value5;
+    Expect.equals(value5, map[key5]);
+    map.remove(key5);
+    Expect.equals(2, map.length);
+    map[key6] = value6;
+    Expect.equals(value6, map[key6]);
+    map.remove(key6);
+    Expect.equals(2, map.length);
+    map[key7] = value7;
+    Expect.equals(value7, map[key7]);
+    map.remove(key7);
+    Expect.equals(2, map.length);
+    map[key8] = value8;
+    Expect.equals(value8, map[key8]);
+    map.remove(key8);
+    Expect.equals(2, map.length);
+
+    Expect.equals(true, map.containsKey(key1));
+    Expect.equals(true, map.containsValue(value1));
+
+    // Test Map.forEach.
+    Map other_map = new Map();
+    void testForEachMap(key, value) {
+      other_map[key] = value;
+    }
+
+    map.forEach(testForEachMap);
+    Expect.equals(true, other_map.containsKey(key1));
+    Expect.equals(true, other_map.containsKey(key2));
+    Expect.equals(true, other_map.containsValue(value1));
+    Expect.equals(true, other_map.containsValue(value2));
+    Expect.equals(2, other_map.length);
+
+    other_map.clear();
+    Expect.equals(0, other_map.length);
+
+    // Test Collection.keys.
+    void testForEachCollection(value) {
+      other_map[value] = value;
+    }
+
+    Iterable keys = map.keys;
+    keys.forEach(testForEachCollection);
+    Expect.equals(true, other_map.containsKey(key1));
+    Expect.equals(true, other_map.containsKey(key2));
+    Expect.equals(true, other_map.containsValue(key1));
+    Expect.equals(true, other_map.containsValue(key2));
+    Expect.equals(true, !other_map.containsKey(value1));
+    Expect.equals(true, !other_map.containsKey(value2));
+    Expect.equals(true, !other_map.containsValue(value1));
+    Expect.equals(true, !other_map.containsValue(value2));
+    Expect.equals(2, other_map.length);
+    other_map.clear();
+    Expect.equals(0, other_map.length);
+
+    // Test Collection.values.
+    Iterable values = map.values;
+    values.forEach(testForEachCollection);
+    Expect.equals(true, !other_map.containsKey(key1));
+    Expect.equals(true, !other_map.containsKey(key2));
+    Expect.equals(true, !other_map.containsValue(key1));
+    Expect.equals(true, !other_map.containsValue(key2));
+    Expect.equals(true, other_map.containsKey(value1));
+    Expect.equals(true, other_map.containsKey(value2));
+    Expect.equals(true, other_map.containsValue(value1));
+    Expect.equals(true, other_map.containsValue(value2));
+    Expect.equals(2, other_map.length);
+    other_map.clear();
+    Expect.equals(0, other_map.length);
+
+    // Test Map.putIfAbsent.
+    map.clear();
+    Expect.equals(false, map.containsKey(key1));
+    map.putIfAbsent(key1, () => 10);
+    Expect.equals(true, map.containsKey(key1));
+    Expect.equals(10, map[key1]);
+    Expect.equals(10, map.putIfAbsent(key1, () => 11));
+  }
+
+  static testKeys(Map map) {
+    map[1] = 101;
+    map[2] = 102;
+    Iterable k = map.keys;
+    Expect.equals(2, k.length);
+    Iterable v = map.values;
+    Expect.equals(2, v.length);
+    Expect.equals(true, map.containsValue(101));
+    Expect.equals(true, map.containsValue(102));
+    Expect.equals(false, map.containsValue(103));
+  }
+
+  static testMain() {
+    test(new Map());
+    testKeys(new Map());
+  }
+}
+
+main() {
+  MapTest.testMain();
+}
diff --git a/tests/language/map/null_key_foreach_test.dart b/tests/language/map/null_key_foreach_test.dart
new file mode 100644
index 0000000..67e99a3
--- /dev/null
+++ b/tests/language/map/null_key_foreach_test.dart
@@ -0,0 +1,19 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+// Regression test for using `null` as a key with `forEach`.
+
+main() {
+  var x = new Map<int?, int>();
+  x[1] = 2;
+  x[null] = 1;
+  int c = 0;
+  x.forEach((int? i, int j) {
+    c++;
+    Expect.isTrue(i == null || i is int, 'int or null expected');
+  });
+  Expect.equals(2, c);
+}
diff --git a/tests/language/map/ordered_test.dart b/tests/language/map/ordered_test.dart
new file mode 100644
index 0000000..b074ecb
--- /dev/null
+++ b/tests/language/map/ordered_test.dart
@@ -0,0 +1,80 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+// Tests that map literals are ordered.
+
+class OrderedMapsTest {
+  static testMain() {
+    testMaps(const {"a": 1, "c": 2}, const {"c": 2, "a": 1}, true);
+    testMaps({"a": 1, "c": 2}, {"c": 2, "a": 1}, false);
+  }
+
+  static void testMaps(map1, map2, bool isConst) {
+    Expect.isFalse(identical(map1, map2));
+
+    var keys = map1.keys.toList();
+    Expect.equals(2, keys.length);
+    Expect.equals("a", keys[0]);
+    Expect.equals("c", keys[1]);
+
+    keys = map2.keys.toList();
+    Expect.equals(2, keys.length);
+    Expect.equals("c", keys[0]);
+    Expect.equals("a", keys[1]);
+
+    var values = map1.values.toList();
+    Expect.equals(2, values.length);
+    Expect.equals(1, values[0]);
+    Expect.equals(2, values[1]);
+
+    values = map2.values.toList();
+    Expect.equals(2, values.length);
+    Expect.equals(2, values[0]);
+    Expect.equals(1, values[1]);
+
+    if (isConst) return;
+
+    map1["b"] = 3;
+    map2["b"] = 3;
+
+    keys = map1.keys.toList();
+    Expect.equals(3, keys.length);
+    Expect.equals("a", keys[0]);
+    Expect.equals("c", keys[1]);
+    Expect.equals("b", keys[2]);
+
+    keys = map2.keys.toList();
+    Expect.equals(3, keys.length);
+    Expect.equals("c", keys[0]);
+    Expect.equals("a", keys[1]);
+    Expect.equals("b", keys[2]);
+
+    values = map1.values.toList();
+    Expect.equals(3, values.length);
+    Expect.equals(1, values[0]);
+    Expect.equals(2, values[1]);
+    Expect.equals(3, values[2]);
+
+    values = map2.values.toList();
+    Expect.equals(3, values.length);
+    Expect.equals(2, values[0]);
+    Expect.equals(1, values[1]);
+    Expect.equals(3, values[2]);
+
+    map1["a"] = 4;
+    keys = map1.keys.toList();
+    Expect.equals(3, keys.length);
+    Expect.equals("a", keys[0]);
+
+    values = map1.values.toList();
+    Expect.equals(3, values.length);
+    Expect.equals(4, values[0]);
+  }
+}
+
+main() {
+  OrderedMapsTest.testMain();
+}
diff --git a/tests/language/metadata/cyclic_test.dart b/tests/language/metadata/cyclic_test.dart
new file mode 100644
index 0000000..6ff4798
--- /dev/null
+++ b/tests/language/metadata/cyclic_test.dart
@@ -0,0 +1,25 @@
+// 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.
+
+// Check that metadata on a class 'Super' using subtypes of 'Super' are not
+// considered as cyclic inheritance or lead to crashes.
+
+@Sub1(0) //# 01: ok
+class Super {
+  final field;
+  @Sub2(1) //# 02: ok
+  const Super(this.field);
+}
+
+class Sub1 extends Super {
+  const Sub1(var field) : super(field);
+}
+
+class Sub2 extends Super {
+  const Sub2(var field) : super(field);
+}
+
+void main() {
+  print(new Super(1));
+}
diff --git a/tests/language/metadata/lib.dart b/tests/language/metadata/lib.dart
new file mode 100644
index 0000000..94923eb
--- /dev/null
+++ b/tests/language/metadata/lib.dart
@@ -0,0 +1,13 @@
+// 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 metadata.dart;
+
+class Alien {
+  final String qwrrkz;
+  const Alien(this.qwrrkz);
+  const Alien.unknown() : qwrrkz = "???";
+}
+
+const Klingon = const Alien("Klingon");
diff --git a/tests/language/metadata/metadata_test.dart b/tests/language/metadata/metadata_test.dart
new file mode 100644
index 0000000..e6c088f
--- /dev/null
+++ b/tests/language/metadata/metadata_test.dart
@@ -0,0 +1,62 @@
+// 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.
+
+// Test ensuring that compiler can parse metadata. Need to add negative
+// test cases with illegal metadata annotations.
+
+library metadata_test.dart;
+
+import "package:expect/expect.dart";
+import "lib.dart" as Meta;
+
+class Tag {
+  final String annotation;
+  const Tag(this.annotation);
+}
+
+const meta1 = 1;
+const meta2 = const Tag("meta2");
+
+const extern = const Tag("external");
+
+@meta1
+var topLevelVar;
+@Meta.Alien.unknown()
+List unknownUnknowns = [];
+
+@meta1
+typedef int DingDong<@meta2 T>(@meta1 event);
+
+@meta1
+class A<@Tag("typeParam") T> {
+  @meta1
+  @meta2
+  static String staticField = "s";
+
+  @Meta.Alien("ET")
+  int foo(@meta1 bool fool, {@meta1 @Tag("opt") x: 100}) {
+    g() => 10;
+    return x * g();
+  }
+
+  @Tag(r"timewarp")
+  List<int> getNextWeeksLottoNumbers() => [1, 2, 3, 4, 5, 6];
+}
+
+@meta1
+main() {
+  @meta1
+  var a = new A();
+  Expect.equals(0, a.foo(false, x: 0));
+
+  for (@Tag("loopvar")
+  int i = 0;
+      i < 10;
+      i++) {
+    // Do something.
+  }
+
+  @meta1
+  var s = r'This is a raw \\ string.';
+}
diff --git a/tests/language/metadata/scope1_test.dart b/tests/language/metadata/scope1_test.dart
new file mode 100644
index 0000000..6af9844
--- /dev/null
+++ b/tests/language/metadata/scope1_test.dart
@@ -0,0 +1,15 @@
+// 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.
+
+// Test that a type variable is not in scope for metadata declared on the type
+// declaration.
+
+@deprecated
+typedef Foo
+<deprecated> // //# 01: ok
+    ();
+
+main() {
+  Foo? f = null;
+}
diff --git a/tests/language/metadata/scope2_test.dart b/tests/language/metadata/scope2_test.dart
new file mode 100644
index 0000000..7a66a38
--- /dev/null
+++ b/tests/language/metadata/scope2_test.dart
@@ -0,0 +1,15 @@
+// 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.
+
+// Test that a type variable is not in scope for metadata declared on the type
+// declaration.
+
+@deprecated
+class Foo
+<deprecated> // //# 01: ok
+{}
+
+main() {
+  Foo? f = null;
+}
diff --git a/tests/language/metadata/self_test.dart b/tests/language/metadata/self_test.dart
new file mode 100644
index 0000000..434cc38
--- /dev/null
+++ b/tests/language/metadata/self_test.dart
@@ -0,0 +1,14 @@
+// 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.
+
+// Test that metadata refer to the annotated declaration.
+
+@Foo()
+class Foo {
+  const Foo();
+}
+
+main() {
+  Foo f = const Foo();
+}
diff --git a/tests/language/method/as_constants2_test.dart b/tests/language/method/as_constants2_test.dart
new file mode 100644
index 0000000..4c64077
--- /dev/null
+++ b/tests/language/method/as_constants2_test.dart
@@ -0,0 +1,18 @@
+// 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.
+// Test that a function only used by compile-time constants is being
+// generated.
+
+import "package:expect/expect.dart";
+
+topLevelMethod() => 42;
+
+class A {
+  final Function f;
+  const A(this.f);
+}
+
+main() {
+  Expect.equals(42, const A(topLevelMethod).f());
+}
diff --git a/tests/language/method/as_constants_test.dart b/tests/language/method/as_constants_test.dart
new file mode 100644
index 0000000..25be81d
--- /dev/null
+++ b/tests/language/method/as_constants_test.dart
@@ -0,0 +1,42 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+topLevelMethod() => 't';
+
+const topLevelFieldForTopLevelMethod = topLevelMethod;
+const topLevelFieldForStaticMethod = A.staticMethod;
+
+class A {
+  final Function closure;
+  const A(this.closure);
+  const A.defaultTopLevel([this.closure = topLevelMethod]);
+  const A.defaultStatic([this.closure = staticMethod]);
+  const A.defaultStatic2([this.closure = A.staticMethod]);
+  run() => closure();
+
+  static staticMethod() => 's';
+  static const staticFieldForStaticMethod = staticMethod;
+  static const staticFieldForTopLevelMethod = topLevelMethod;
+}
+
+main() {
+  Expect.equals('t', (const A(topLevelMethod)).run());
+  Expect.equals('s', (const A(A.staticMethod)).run());
+  Expect.equals('t', (const A.defaultTopLevel()).run());
+  Expect.equals('s', (const A.defaultStatic()).run());
+  Expect.equals('s', (const A.defaultStatic2()).run());
+  Expect.equals('t', (new A.defaultTopLevel()).run());
+  Expect.equals('s', (new A.defaultStatic()).run());
+  Expect.equals('s', (new A.defaultStatic2()).run());
+  Expect.equals('t', topLevelFieldForTopLevelMethod());
+  Expect.equals('s', topLevelFieldForStaticMethod());
+  Expect.equals('t', A.staticFieldForTopLevelMethod());
+  Expect.equals('s', A.staticFieldForStaticMethod());
+
+  var map = const {'t': topLevelMethod, 's': A.staticMethod};
+  Expect.equals('t', map['t']!());
+  Expect.equals('s', map['s']!());
+}
diff --git a/tests/language/method/binding_test.dart b/tests/language/method/binding_test.dart
new file mode 100644
index 0000000..325e1c9
--- /dev/null
+++ b/tests/language/method/binding_test.dart
@@ -0,0 +1,174 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+// Bind a method to a variable that can be invoked as a function
+
+class A {
+  int a;
+
+  static var func;
+
+  A(this.a) {}
+
+  static foo() {
+    return 4;
+  }
+
+  bar() {
+    return a;
+  }
+
+  int baz() {
+    return a;
+  }
+
+  getThis() {
+    return this.bar;
+  }
+
+  getNoThis() {
+    return bar;
+  }
+
+  methodArgs(arg) {
+    return arg + a;
+  }
+
+  selfReference() {
+    return selfReference;
+  }
+
+  invokeBaz() {
+    return (baz)();
+  }
+
+  invokeBar(var obj) {
+    return (obj.bar)();
+  }
+
+  invokeThisBar() {
+    return (this.bar)();
+  }
+
+  implicitStaticRef() {
+    return foo;
+  }
+}
+
+class B {
+  static foo() {
+    return -1;
+  }
+}
+
+class C {
+  C() {}
+  var f;
+}
+
+topLevel99() {
+  return 99;
+}
+
+var topFunc;
+
+class D extends A {
+  D(a) : super(a) {}
+  getSuper() {
+    return super.bar;
+  }
+}
+
+class MethodBindingTest {
+  static test() {
+    // Create closure from global
+    Expect.equals(99, topLevel99());
+    Function f99 = topLevel99;
+    Expect.equals(99, f99());
+
+    // Invoke closure through a global
+    topFunc = f99;
+    Expect.equals(99, topFunc());
+
+    // Create closure from static method
+    Function f4 = A.foo;
+    Expect.equals(4, f4());
+
+    // Create closure from instance method
+    var o5 = new A(5);
+    Function f5 = o5.bar;
+    Expect.equals(5, f5());
+
+    // Assign closure to field and invoke it
+    var c = new C();
+    c.f = () => "success";
+    Expect.equals("success", c.f());
+
+    // referencing instance method with explicit 'this' qualiier
+    var o6 = new A(6);
+    var f6 = o6.getThis();
+    Expect.equals(6, f6());
+
+    // referencing an instance method with no qualifier
+    var o7 = new A(7);
+    var f7 = o7.getNoThis();
+    Expect.equals(7, f7());
+
+    // bind a method that takes arguments
+    var o8 = new A(8);
+    Function f8 = o8.methodArgs;
+    Expect.equals(9, f8(1));
+
+    // Self referential method
+    var o9 = new A(9);
+    Function f9 = o9.selfReference;
+
+    // invoking a known method as if it were a bound closure...
+    var o10 = new A(10);
+    Expect.equals(10, o10.invokeBaz());
+
+    // invoking a known method as if it were a bound closure...
+    var o11 = new A(11);
+    Expect.equals(10, o11.invokeBar(o10));
+
+    // invoking a known method as if it were a bound closure...
+    var o12 = new A(12);
+    Expect.equals(12, o12.invokeThisBar());
+
+    // bind to a static variable with no explicit class qualifier
+    var o13 = new A(13);
+    Function f13 = o13.implicitStaticRef();
+    Expect.equals(4, f13());
+
+    var o14 = new D(14);
+    Function f14 = o14.getSuper();
+    Expect.equals(14, f14());
+
+    // Assign static field to a function and invoke it.
+    A.func = A.foo;
+    Expect.equals(4, A.func());
+
+    // bind a function that is possibly native in Javascript.
+    String o15 = 'hithere';
+    var f15 = o15.substring;
+    Expect.equals('i', f15(1, 2));
+
+    var o16 = 'hithere';
+    var f16 = o16.substring;
+    Expect.equals('i', f16(1, 2));
+
+    var f17 = 'hithere'.substring;
+    Expect.equals('i', f17(1, 2));
+  }
+
+  static testMain() {
+    test();
+  }
+}
+
+main() {
+  MethodBindingTest.testMain();
+}
diff --git a/tests/language/method/invocation_test.dart b/tests/language/method/invocation_test.dart
new file mode 100644
index 0000000..7565f29
--- /dev/null
+++ b/tests/language/method/invocation_test.dart
@@ -0,0 +1,54 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+// Testing method invocation.
+// Currently testing only NoSuchMethodError.
+
+class A {
+  A() {}
+  int foo() {
+    return 1;
+  }
+}
+
+class B {
+  get f {
+    throw 123;
+  }
+}
+
+class MethodInvocationTest {
+  static void testNullReceiver() {
+    dynamic a = new A();
+    Expect.equals(1, a.foo());
+    a = null;
+    bool exceptionCaught = false;
+    try {
+      a.foo();
+    } on NoSuchMethodError catch (e) {
+      exceptionCaught = true;
+    }
+    Expect.equals(true, exceptionCaught);
+  }
+
+  static testGetterMethodInvocation() {
+    var b = new B();
+    try {
+      b.f();
+    } catch (e) {
+      Expect.equals(123, e);
+    }
+  }
+
+  static void testMain() {
+    testNullReceiver();
+    testGetterMethodInvocation();
+  }
+}
+
+main() {
+  MethodInvocationTest.testMain();
+}
diff --git a/tests/language/method/name_test.dart b/tests/language/method/name_test.dart
new file mode 100644
index 0000000..ca9c48b
--- /dev/null
+++ b/tests/language/method/name_test.dart
@@ -0,0 +1,53 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+// Tests that methods with names "get", "set" and "operator" don't
+// cause fatal problems.
+
+// With return type.
+class A {
+  int get() {
+    return 1;
+  }
+
+  int set() {
+    return 2;
+  }
+
+  int operator() {
+    return 3;
+  }
+}
+
+// Without return types.
+class B {
+  get() {
+    return 1;
+  }
+
+  set() {
+    return 2;
+  }
+
+  operator() {
+    return 3;
+  }
+}
+
+main() {
+  {
+    A a = new A();
+    Expect.equals(1, a.get());
+    Expect.equals(2, a.set());
+    Expect.equals(3, a.operator());
+  }
+  {
+    B b = new B();
+    Expect.equals(1, b.get());
+    Expect.equals(2, b.set());
+    Expect.equals(3, b.operator());
+  }
+}
diff --git a/tests/language/method/not_found_runtime_test.dart b/tests/language/method/not_found_runtime_test.dart
new file mode 100644
index 0000000..49dc434
--- /dev/null
+++ b/tests/language/method/not_found_runtime_test.dart
@@ -0,0 +1,19 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+class A {
+
+  static const field = const B();
+}
+
+class B {
+  const B();
+}
+
+main() {
+  print(A.field);
+}
diff --git a/tests/language/method/not_found_test.dart b/tests/language/method/not_found_test.dart
new file mode 100644
index 0000000..1eaea26
--- /dev/null
+++ b/tests/language/method/not_found_test.dart
@@ -0,0 +1,26 @@
+// 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.
+
+class A {
+//    ^
+// [cfe] The non-abstract class 'A' is missing implementations for these members:
+  B();
+//^^^^
+// [analyzer] STATIC_WARNING.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.CONST_WITH_NON_TYPE
+  // [cfe] Can't access 'this' in a field initializer to read 'B'.
+}
+
+class B {
+  const B();
+}
+
+main() {
+  print(A.field);
+}
diff --git a/tests/language/method/override2_test.dart b/tests/language/method/override2_test.dart
new file mode 100644
index 0000000..9db40ee
--- /dev/null
+++ b/tests/language/method/override2_test.dart
@@ -0,0 +1,38 @@
+// 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.
+
+// Checks that an overriding method has compatible parameters.
+
+abstract class I {
+  m({a, b});
+}
+
+abstract class J extends I {}
+
+abstract class K extends J {
+  m({c, d}); // //# 00: compile-time error
+}
+
+class C implements I {
+  m({a, b}) {
+    print("$a $b");
+  }
+}
+
+class D
+    extends C // //# 01: compile-time error
+    implements I // //# 02: compile-time error
+    implements J // //# 03: compile-time error
+{
+  m({c, d}) {
+    print("$c $d");
+  }
+}
+
+void main() {
+  var c = new C();
+  c.m(a: "hello", b: "world");
+  var d = new D();
+  d.m(c: "hello", d: "world");
+}
diff --git a/tests/language/method/override3_runtime_test.dart b/tests/language/method/override3_runtime_test.dart
new file mode 100644
index 0000000..e391830
--- /dev/null
+++ b/tests/language/method/override3_runtime_test.dart
@@ -0,0 +1,55 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+import 'package:expect/expect.dart';
+
+class A {
+  foo(required1, {named1: 499}) => -(required1 + named1 * 3);
+  bar(required1, required2, {named1: 13, named2: 17}) =>
+      -(required1 + required2 * 3 + named1 * 5 + named2 * 7);
+  gee({named1: 31}) => -named1;
+}
+
+class B extends A {
+  foo(
+      required1
+
+      ,
+      {named1: 499}
+
+      ) {
+    return required1;
+  }
+
+  bar(required1, required2,
+      {named1: 13
+
+      ,
+      named2: 17
+
+      }) {
+    return required1 + required2 * 3 + named1 * 5;
+  }
+
+  gee(
+      {named2: 11
+
+      ,
+      named1: 31
+
+      }) {
+    return named2 * 99;
+  }
+}
+
+main() {
+  // Ensure that compile-time errors are reached.
+  var b = new B();
+  b.foo(499);
+  b.bar(1, 3, named1: 5);
+  b.gee(named2: 3);
+}
diff --git a/tests/language/method/override3_test.dart b/tests/language/method/override3_test.dart
new file mode 100644
index 0000000..b131ff0
--- /dev/null
+++ b/tests/language/method/override3_test.dart
@@ -0,0 +1,61 @@
+// 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.
+
+import 'package:expect/expect.dart';
+
+class A {
+  foo(required1, {named1: 499}) => -(required1 + named1 * 3);
+  bar(required1, required2, {named1: 13, named2: 17}) =>
+      -(required1 + required2 * 3 + named1 * 5 + named2 * 7);
+  gee({named1: 31}) => -named1;
+}
+
+class B extends A {
+  foo(
+//^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+// [cfe] The method 'B.foo' has fewer named arguments than those of overridden method 'A.foo'.
+      required1
+     /*
+      ,
+      {named1: 499}
+     */
+      ) {
+    return required1;
+  }
+
+  bar(required1, required2,
+//^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+// [cfe] The method 'B.bar' has fewer named arguments than those of overridden method 'A.bar'.
+      {named1: 13
+      /*
+      ,
+      named2: 17
+      */
+      }) {
+    return required1 + required2 * 3 + named1 * 5;
+  }
+
+  gee(
+//^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+// [cfe] The method 'B.gee' doesn't have the named parameter 'named1' of overridden method 'A.gee'.
+      {named2: 11
+      /*
+      ,
+      named1: 31
+      */
+      }) {
+    return named2 * 99;
+  }
+}
+
+main() {
+  // Ensure that compile-time errors are reached.
+  var b = new B();
+  b.foo(499);
+  b.bar(1, 3, named1: 5);
+  b.gee(named2: 3);
+}
diff --git a/tests/language/method/override7_test.dart b/tests/language/method/override7_test.dart
new file mode 100644
index 0000000..51588d5
--- /dev/null
+++ b/tests/language/method/override7_test.dart
@@ -0,0 +1,23 @@
+// 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.
+
+// Test that we report a compile-time error when a static function conflicts
+// with an inherited instance member of the same name.
+
+import "package:expect/expect.dart";
+
+class A {
+  var foo = 42; // //# 00: compile-time error
+  get foo => 42; // //# 01: compile-time error
+  foo() => 42; // //# 02: compile-time error
+  set foo(value) { } // //# 03: compile-time error
+}
+
+class B extends A {
+  static foo() => 42;
+}
+
+main() {
+  Expect.equals(42, B.foo());
+}
diff --git a/tests/language/method/override8_test.dart b/tests/language/method/override8_test.dart
new file mode 100644
index 0000000..677952d
--- /dev/null
+++ b/tests/language/method/override8_test.dart
@@ -0,0 +1,23 @@
+// 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.
+
+// Test that we report a compile-time error when an instance method conflicts
+// with an inherited instance field or getter of the same name.
+
+import "package:expect/expect.dart";
+
+class A {
+  var foo = 42; // //# 00: compile-time error
+  get foo => 42; // //# 01: compile-time error
+  foo() => 42; // //# 02: ok
+  set foo(value) { } // //# 03: compile-time error
+}
+
+class B extends A {
+  foo() => 42;
+}
+
+main() {
+  Expect.equals(42, new B().foo());
+}
diff --git a/tests/language/method/override_test.dart b/tests/language/method/override_test.dart
new file mode 100644
index 0000000..1a09455
--- /dev/null
+++ b/tests/language/method/override_test.dart
@@ -0,0 +1,55 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+// Checks that a method with an instantiated return type can override a method
+// with a generic return type.
+
+typedef V RemoveFunctionType<K, V>(K key);
+
+class MapBase<K, V> {
+  K remove(K key) {
+    throw 'Must be implemented';
+  }
+
+  void tests() {
+    Expect.isTrue(this is MapBase<int, int>);
+
+    // `remove` takes an argument which is covariant-by-class, so
+    // the tear-off has dynamic type `int Function(Object)`.
+
+    Expect.isTrue(remove is RemoveFunctionType);
+    Expect.isTrue(remove is RemoveFunctionType<int, int>);
+    Expect.isTrue(remove is RemoveFunctionType<String, int>);
+    Expect.isTrue(remove is RemoveFunctionType<MapBase<int, int>, int>);
+  }
+}
+
+class MethodOverrideTest extends MapBase<String, String> {
+  String remove(String key) {
+    throw 'Must be implemented';
+  }
+
+  void tests() {
+    Expect.isTrue(this is MethodOverrideTest);
+    Expect.isTrue(this is MapBase<String, String>);
+
+    // `remove` takes an argument which is covariant-by-class because
+    // an overridden method does so, and hence the tear-off has dynamic
+    // type `String Function(Object)`; so does `super.remove`.
+
+    Expect.isTrue(remove is RemoveFunctionType);
+    Expect.isTrue(remove is RemoveFunctionType<String, String>);
+    Expect.isTrue(remove is! RemoveFunctionType<int, int>);
+    Expect.isTrue(super.remove is RemoveFunctionType);
+    Expect.isTrue(super.remove is RemoveFunctionType<String, String>);
+    Expect.isTrue(super.remove is! RemoveFunctionType<int, int>);
+  }
+}
+
+main() {
+  new MapBase<int, int>().tests();
+  new MethodOverrideTest().tests();
+}
diff --git a/tests/language/mixin/abstract_getter_test.dart b/tests/language/mixin/abstract_getter_test.dart
new file mode 100644
index 0000000..7fe7bd9
--- /dev/null
+++ b/tests/language/mixin/abstract_getter_test.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+abstract class B {
+  int get x;
+}
+
+class C {
+  int get x => 42;
+}
+
+class D extends C with B {
+  final int x;
+
+  D(this.x);
+}
+
+class C2 {
+  int get x => 42;
+}
+
+abstract class B2 extends C2 {
+  int get x;
+}
+
+class D2 extends B2 {
+  final int x;
+
+  D2(this.x);
+}
+
+void main() {
+  var d = new D(17);
+  Expect.equals(d.x, 17);
+
+  var d2 = new D2(17);
+  Expect.equals(d.x, 17);
+}
diff --git a/tests/language/mixin/accessor_test.dart b/tests/language/mixin/accessor_test.dart
new file mode 100644
index 0000000..bb346e8
--- /dev/null
+++ b/tests/language/mixin/accessor_test.dart
@@ -0,0 +1,63 @@
+// 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.
+
+// Regression test case for DDC bug where if a getter/setter is mixed in
+// without a corresponding getter/setter, DDC fails to install a the
+// corresponding getter/setter that calls super.
+
+import "package:expect/expect.dart";
+
+abstract class C<E> {
+  E get first;
+  set first(E value);
+  E operator [](int index);
+  operator []=(int index, E value);
+}
+
+abstract class CMixin<E> implements C<E> {
+  E get first => this[0];
+  set first(E x) {
+    this[0] = x;
+  }
+}
+
+abstract class CBase<E> extends Object with CMixin<E> {}
+
+abstract class DMixin<E> implements C<E> {
+  set first(E _) => throw new UnsupportedError('');
+  operator []=(int index, E value) => throw new UnsupportedError('');
+}
+
+abstract class DBase<E> = CBase<E> with DMixin<E>;
+
+class DView<E> extends DBase<E> {
+  final Iterable<E> _source;
+  DView(this._source);
+  E operator [](int index) => _source.elementAt(index);
+}
+
+abstract class FMixin<E> implements C<E> {
+  E get first => throw new UnsupportedError('');
+  E operator [](int index) => throw new UnsupportedError('');
+}
+
+class FView<E> extends CBase<E> with FMixin<E> {
+  List<E> _values;
+  FView(this._values);
+  operator []=(int index, E value) {
+    _values[index] = value;
+  }
+}
+
+void main() {
+  var d = new DView([3]);
+  Expect.equals(3, d.first);
+  Expect.throws(() => d.first = 42, (e) => e is UnsupportedError);
+
+  var list = [3];
+  var f = new FView(list);
+  f.first = 42;
+  Expect.equals(42, list[0]);
+  Expect.throws(() => f.first, (e) => e is UnsupportedError);
+}
diff --git a/tests/language/mixin/and_extension_member_test.dart b/tests/language/mixin/and_extension_member_test.dart
new file mode 100644
index 0000000..3f96a4a
--- /dev/null
+++ b/tests/language/mixin/and_extension_member_test.dart
@@ -0,0 +1,32 @@
+// 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 'dart:collection';
+import 'package:expect/expect.dart';
+
+class OverrideFirstGetter {
+  get first => 9999;
+}
+
+class ListMock extends ListBase with OverrideFirstGetter {
+  final _list = [];
+  int get length => _list.length;
+  void set length(int x) {
+    _list.length = x;
+  }
+
+  operator [](x) => _list[x];
+  void operator []=(x, y) {
+    _list[x] = y;
+  }
+}
+
+// Regression test for
+// https://github.com/dart-lang/sdk/issues/29273#issuecomment-292384130
+main() {
+  List x = new ListMock();
+  x.add(42);
+  Expect.equals(42, x[0]);
+  Expect.equals(9999, x.first);
+}
diff --git a/tests/language/mixin/black_listed_test.dart b/tests/language/mixin/black_listed_test.dart
new file mode 100644
index 0000000..08ff386
--- /dev/null
+++ b/tests/language/mixin/black_listed_test.dart
@@ -0,0 +1,59 @@
+// 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.
+
+// Check mixin of black-listed types.
+
+import 'package:expect/expect.dart';
+
+class C {}
+
+class D {}
+
+class C1 extends Object
+with String //# 01: compile-time error
+{}
+
+class D1 extends Object with C
+, Null //# 02: compile-time error
+{}
+
+class E1 extends Object
+    with
+int, //# 03: compile-time error
+        C {}
+
+class F1 extends Object
+    with
+        C
+, double //# 04: compile-time error
+        ,
+        D {}
+
+class C2 = Object with num; //# 05: compile-time error
+
+class D2 = Object with C
+, bool //# 06: compile-time error
+    ;
+
+class E2 = Object
+    with
+String, //# 07: compile-time error
+        C;
+
+class F2 = Object
+    with
+        C,
+dynamic, //# 08: compile-time error
+        D;
+
+main() {
+  Expect.isNotNull(new C1());
+  Expect.isNotNull(new D1());
+  Expect.isNotNull(new E1());
+  Expect.isNotNull(new F1());
+  Expect.isNotNull(new C2()); //# 05: continued
+  Expect.isNotNull(new D2());
+  Expect.isNotNull(new E2());
+  Expect.isNotNull(new F2());
+}
diff --git a/tests/language/mixin/bound_test.dart b/tests/language/mixin/bound_test.dart
new file mode 100644
index 0000000..23b4e29
--- /dev/null
+++ b/tests/language/mixin/bound_test.dart
@@ -0,0 +1,133 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+// library abstract_expressions;
+
+abstract class AbstractExpression {}
+
+abstract class AbstractAddition<E> {
+  E operand1, operand2;
+  AbstractAddition(this.operand1, this.operand2);
+}
+
+abstract class AbstractSubtraction<E> {
+  E operand1, operand2;
+  AbstractSubtraction(this.operand1, this.operand2);
+}
+
+abstract class AbstractNumber {
+  int val;
+  AbstractNumber(this.val);
+}
+
+// library evaluator;
+
+abstract class ExpressionWithEval {
+  int get eval;
+}
+
+abstract class AdditionWithEval<E extends ExpressionWithEval> {
+  E get operand1;
+  E get operand2;
+  int get eval => operand1.eval + operand2.eval;
+}
+
+abstract class SubtractionWithEval<E extends ExpressionWithEval> {
+  E get operand1;
+  E get operand2;
+  int get eval => operand1.eval - operand2.eval;
+}
+
+abstract class NumberWithEval {
+  int get val;
+  int get eval => val;
+}
+
+// library multiplication;
+
+abstract class AbstractMultiplication<E> {
+  E operand1, operand2;
+  AbstractMultiplication(this.operand1, this.operand2);
+}
+
+// library multiplicationEvaluator;
+
+// import 'evaluator.dart' show ExpressionWithEval;
+
+abstract class MultiplicationWithEval<E extends ExpressionWithEval> {
+  E get operand1;
+  E get operand2;
+  int get eval => operand1.eval * operand2.eval;
+}
+
+// library string_converter;
+
+abstract class ExpressionWithStringConversion {
+  String toString();
+}
+
+abstract class AdditionWithStringConversion<
+    E extends ExpressionWithStringConversion> {
+  E get operand1;
+  E get operand2;
+  String toString() => '($operand1 + $operand2))';
+}
+
+abstract class SubtractionWithStringConversion<
+    E extends ExpressionWithStringConversion> {
+  E get operand1;
+  E get operand2;
+  String toString() => '($operand1 - $operand2)';
+}
+
+abstract class NumberWithStringConversion {
+  int get val;
+  String toString() => val.toString();
+}
+
+abstract class MultiplicationWithStringConversion<
+    E extends ExpressionWithStringConversion> {
+  E get operand1;
+  E get operand2;
+  String toString() => '($operand1 * $operand2)';
+}
+
+// library expressions;
+
+// import 'abstractExpressions.dart';
+// import 'evaluator.dart';
+// import 'multiplication.dart';
+// import 'multiplicationEvaluator.dart';
+// import 'stringConverter.dart';
+
+abstract class Expression = AbstractExpression
+    with ExpressionWithEval, ExpressionWithStringConversion;
+
+class Addition = AbstractAddition<Expression>
+    with AdditionWithEval<Expression>, AdditionWithStringConversion<Expression>
+    implements Expression;
+
+class Subtraction = AbstractSubtraction<Expression>
+    with
+        SubtractionWithEval<Expression>,
+        SubtractionWithStringConversion<Expression>
+    implements Expression;
+
+class Number = AbstractNumber
+    with NumberWithEval, NumberWithStringConversion
+    implements Expression;
+
+class Multiplication = AbstractMultiplication<Expression>
+    with
+        MultiplicationWithEval<Expression>,
+        MultiplicationWithStringConversion<Expression>
+    implements Expression;
+
+void main() {
+  Expression e = new Multiplication(new Addition(new Number(4), new Number(2)),
+      new Subtraction(new Number(10), new Number(7)));
+  Expect.equals('((4 + 2)) * (10 - 7)) = 18', '$e = ${e.eval}');
+}
diff --git a/tests/language/mixin/class_from_core_library_test.dart b/tests/language/mixin/class_from_core_library_test.dart
new file mode 100644
index 0000000..300e030
--- /dev/null
+++ b/tests/language/mixin/class_from_core_library_test.dart
@@ -0,0 +1,14 @@
+// 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 'dart:collection';
+
+class MyList extends Object with ListMixin {
+  int length = 0;
+  operator [](index) => null;
+  void operator []=(index, value) {}
+}
+
+main() {
+  new MyList().length;
+}
diff --git a/tests/language/mixin/cyclic_runtime_test.dart b/tests/language/mixin/cyclic_runtime_test.dart
new file mode 100644
index 0000000..2217ac1
--- /dev/null
+++ b/tests/language/mixin/cyclic_runtime_test.dart
@@ -0,0 +1,26 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Test for cyclicity check on named mixin applications.
+
+class A<T> {}
+
+class S {}
+
+class M<T> {}
+
+class C1 = S with M;
+
+class C3 = S with M implements A;
+
+
+void main() {
+  new C1();
+
+  new C3();
+
+}
diff --git a/tests/language/mixin/cyclic_test.dart b/tests/language/mixin/cyclic_test.dart
new file mode 100644
index 0000000..4e129a6
--- /dev/null
+++ b/tests/language/mixin/cyclic_test.dart
@@ -0,0 +1,31 @@
+// 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.
+
+// Test for cyclicity check on named mixin applications.
+
+class A<T> {}
+
+class S {}
+
+class M<T> {}
+
+class C1 = S with M;
+class C2 = S with C2;
+//    ^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_INTERFACE_INHERITANCE_WITH
+// [cfe] 'C2' is a supertype of itself.
+//                ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class C3 = S with M implements A;
+class C4 = S with M implements C4;
+//    ^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS
+// [cfe] 'C4' is a supertype of itself.
+
+void main() {
+  new C1();
+  new C2();
+  new C3();
+  new C4();
+}
diff --git a/tests/language/mixin/deduplication_test.dart b/tests/language/mixin/deduplication_test.dart
new file mode 100644
index 0000000..f401bf1
--- /dev/null
+++ b/tests/language/mixin/deduplication_test.dart
@@ -0,0 +1,46 @@
+// 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.
+
+// Test mixin de-duplication with new mixin syntax.
+
+import 'package:expect/expect.dart';
+
+class A {
+  int foo() => 1;
+}
+
+class B {
+  int bar() => 2;
+}
+
+abstract class C implements A, B {
+}
+
+mixin M1 on A, B {
+  int sum() => foo() + bar();
+}
+
+mixin M2 on A, B, M1 {
+  int sumX2() => sum()*2;
+}
+
+class X extends C with M1, M2 {
+  int foo() => 4;
+  int bar() => 5;
+}
+
+class Y extends C with M1, M2 {
+  int foo() => 7;
+  int bar() => 10;
+}
+
+X x = new X();
+Y y = new Y();
+
+void main() {
+  Expect.equals(9, x.sum());
+  Expect.equals(18, x.sumX2());
+  Expect.equals(17, y.sum());
+  Expect.equals(34, y.sumX2());
+}
diff --git a/tests/language/mixin/extends_field_test.dart b/tests/language/mixin/extends_field_test.dart
new file mode 100644
index 0000000..778a242
--- /dev/null
+++ b/tests/language/mixin/extends_field_test.dart
@@ -0,0 +1,122 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class S {
+  var foo = "S-foo";
+}
+
+class M1 {
+  final bar = "M1-bar";
+}
+
+class M2 {
+  var baz = "M2-baz";
+}
+
+class C extends S with M1 {}
+
+class D extends S with M1, M2 {}
+
+class E extends S with M2, M1 {}
+
+class F extends E {
+  var fez = "F-fez";
+}
+
+main() {
+  dynamic c = new C();
+  dynamic d = new D();
+  dynamic e = new E();
+  dynamic f = new F();
+
+  Expect.equals("S-foo", c.foo);
+  Expect.equals("S-foo", d.foo);
+  Expect.equals("S-foo", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  Expect.equals("M1-bar", c.bar);
+  Expect.equals("M1-bar", d.bar);
+  Expect.equals("M1-bar", e.bar);
+  Expect.equals("M1-bar", f.bar);
+
+  Expect.throwsNoSuchMethodError(() => c.baz);
+  Expect.equals("M2-baz", d.baz);
+  Expect.equals("M2-baz", e.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  Expect.throwsNoSuchMethodError(() => c.fez);
+  Expect.throwsNoSuchMethodError(() => d.fez);
+  Expect.throwsNoSuchMethodError(() => e.fez);
+  Expect.equals("F-fez", f.fez);
+
+  c.foo = "S-foo-c";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo", d.foo);
+  Expect.equals("S-foo", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  d.foo = "S-foo-d";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo-d", d.foo);
+  Expect.equals("S-foo", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  e.foo = "S-foo-e";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo-d", d.foo);
+  Expect.equals("S-foo-e", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  f.foo = "S-foo-f";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo-d", d.foo);
+  Expect.equals("S-foo-e", e.foo);
+  Expect.equals("S-foo-f", f.foo);
+
+  Expect.throwsNoSuchMethodError(() => c.bar = 0);
+  Expect.throwsNoSuchMethodError(() => d.bar = 0);
+  Expect.throwsNoSuchMethodError(() => e.bar = 0);
+  Expect.throwsNoSuchMethodError(() => f.bar = 0);
+  Expect.equals("M1-bar", c.bar);
+  Expect.equals("M1-bar", d.bar);
+  Expect.equals("M1-bar", e.bar);
+  Expect.equals("M1-bar", f.bar);
+
+  Expect.throwsNoSuchMethodError(() => c.baz = 0);
+  Expect.throwsNoSuchMethodError(() => c.baz);
+  Expect.equals("M2-baz", d.baz);
+  Expect.equals("M2-baz", e.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  d.baz = "M2-baz-d";
+  Expect.throwsNoSuchMethodError(() => c.baz);
+  Expect.equals("M2-baz-d", d.baz);
+  Expect.equals("M2-baz", e.baz);
+  Expect.equals("M2-baz", f.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  e.baz = "M2-baz-e";
+  Expect.throwsNoSuchMethodError(() => c.baz);
+  Expect.equals("M2-baz-d", d.baz);
+  Expect.equals("M2-baz-e", e.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  f.baz = "M2-baz-f";
+  Expect.throwsNoSuchMethodError(() => c.baz);
+  Expect.equals("M2-baz-d", d.baz);
+  Expect.equals("M2-baz-e", e.baz);
+  Expect.equals("M2-baz-f", f.baz);
+
+  Expect.throwsNoSuchMethodError(() => c.fez = 0);
+  Expect.throwsNoSuchMethodError(() => d.fez = 0);
+  Expect.throwsNoSuchMethodError(() => e.fez = 0);
+
+  f.fez = "F-fez-f";
+  Expect.throwsNoSuchMethodError(() => c.fez);
+  Expect.throwsNoSuchMethodError(() => d.fez);
+  Expect.throwsNoSuchMethodError(() => e.fez);
+  Expect.equals("F-fez-f", f.fez);
+}
diff --git a/tests/language/mixin/extends_is_test.dart b/tests/language/mixin/extends_is_test.dart
new file mode 100644
index 0000000..5c3a1c3
--- /dev/null
+++ b/tests/language/mixin/extends_is_test.dart
@@ -0,0 +1,87 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class S {}
+
+class M1 {}
+
+class M2 {}
+
+class C extends S with M1 {}
+
+class D extends S with M1, M2 {}
+
+class E extends S with M2, M1 {}
+
+class F extends E {}
+
+class C_ extends S with M1 {}
+
+class D_ extends S with M1, M2 {}
+
+class E_ extends S with M2, M1 {}
+
+class F_ extends E_ {}
+
+main() {
+  var c = new C();
+  Expect.isTrue(c is C);
+  Expect.isFalse(c is D);
+  Expect.isFalse(c is E);
+  Expect.isFalse(c is F);
+  Expect.isTrue(c is S);
+  Expect.isTrue(c is M1);
+  Expect.isFalse(c is M2);
+
+  var d = new D();
+  Expect.isFalse(d is C);
+  Expect.isTrue(d is D);
+  Expect.isFalse(d is E);
+  Expect.isFalse(d is F);
+  Expect.isTrue(d is S);
+  Expect.isTrue(d is M1);
+  Expect.isTrue(d is M2);
+
+  var e = new E();
+  Expect.isFalse(e is C);
+  Expect.isFalse(e is D);
+  Expect.isTrue(e is E);
+  Expect.isFalse(e is F);
+  Expect.isTrue(e is S);
+  Expect.isTrue(e is M1);
+  Expect.isTrue(e is M2);
+
+  var f = new F();
+  Expect.isFalse(f is C);
+  Expect.isFalse(f is D);
+  Expect.isTrue(f is E);
+  Expect.isTrue(f is F);
+  Expect.isTrue(f is S);
+  Expect.isTrue(f is M1);
+  Expect.isTrue(f is M2);
+
+  // Make sure we get a new class for each mixin
+  // application (at least the named ones).
+  Expect.isFalse(c is C_);
+  Expect.isFalse(c is D_);
+  Expect.isFalse(c is E_);
+  Expect.isFalse(c is F_);
+
+  Expect.isFalse(d is C_);
+  Expect.isFalse(d is D_);
+  Expect.isFalse(d is E_);
+  Expect.isFalse(d is F_);
+
+  Expect.isFalse(e is C_);
+  Expect.isFalse(e is D_);
+  Expect.isFalse(e is E_);
+  Expect.isFalse(e is F_);
+
+  Expect.isFalse(f is C_);
+  Expect.isFalse(f is D_);
+  Expect.isFalse(f is E_);
+  Expect.isFalse(f is F_);
+}
diff --git a/tests/language/mixin/extends_method_test.dart b/tests/language/mixin/extends_method_test.dart
new file mode 100644
index 0000000..cee3d65
--- /dev/null
+++ b/tests/language/mixin/extends_method_test.dart
@@ -0,0 +1,57 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class S {
+  foo() => "S-foo";
+  baz() => "S-baz";
+}
+
+class M1 {
+  static m1bar() => "M1-bar";
+  bar() => m1bar();
+}
+
+class M2 {
+  bar() => "M2-bar";
+  baz() => "M2-baz";
+  fez() => "M2-fez";
+}
+
+class C extends S with M1 {}
+
+class D extends S with M1, M2 {}
+
+class E extends S with M2, M1 {}
+
+class F extends E {
+  fez() => "F-fez";
+}
+
+main() {
+  dynamic c = new C();
+  Expect.equals("S-foo", c.foo());
+  Expect.equals("M1-bar", c.bar());
+  Expect.equals("S-baz", c.baz());
+  Expect.throwsNoSuchMethodError(() => c.fez());
+
+  var d = new D();
+  Expect.equals("S-foo", d.foo());
+  Expect.equals("M2-bar", d.bar());
+  Expect.equals("M2-baz", d.baz());
+  Expect.equals("M2-fez", d.fez());
+
+  var e = new E();
+  Expect.equals("S-foo", e.foo());
+  Expect.equals("M1-bar", e.bar());
+  Expect.equals("M2-baz", e.baz());
+  Expect.equals("M2-fez", e.fez());
+
+  var f = new F();
+  Expect.equals("S-foo", f.foo());
+  Expect.equals("M1-bar", f.bar());
+  Expect.equals("M2-baz", f.baz());
+  Expect.equals("F-fez", f.fez());
+}
diff --git a/tests/language/mixin/factory_constructor_test.dart b/tests/language/mixin/factory_constructor_test.dart
new file mode 100644
index 0000000..ac0e227
--- /dev/null
+++ b/tests/language/mixin/factory_constructor_test.dart
@@ -0,0 +1,28 @@
+// 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:expect/expect.dart";
+
+class Base {
+  var y;
+  Base._() {
+    y = "world";
+  }
+}
+
+abstract class Mixin implements Base {
+  final x = "hello";
+  factory Mixin() => new _MixinAndBase._();
+}
+
+// TODO(jmesserly): according to the spec, this does not appear to be a valid
+// mixin (because it declares a constructor), however it is supported by Dart
+// implementations.
+class _MixinAndBase = Base with Mixin;
+
+void main() {
+  var val = new Mixin();
+  Expect.equals(val.x, "hello");
+  Expect.equals(val.y, "world");
+}
diff --git a/tests/language/mixin/field_initializer_test.dart b/tests/language/mixin/field_initializer_test.dart
new file mode 100644
index 0000000..e2855fe
--- /dev/null
+++ b/tests/language/mixin/field_initializer_test.dart
@@ -0,0 +1,31 @@
+// 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 throw statement
+
+import 'package:expect/expect.dart';
+
+class S {
+  var s1 = good_stuff();
+  static good_stuff() => "Speyburn";
+}
+
+good_stuff() => "Glenfiddich";
+
+class M {
+  var m1 = good_stuff();
+  static good_stuff() => "Macallen";
+}
+
+class A extends S with M {
+  static good_stuff() => "Ardberg";
+}
+
+main() {
+  var a = new A();
+  Expect.equals("Macallen", a.m1);
+  Expect.equals("Speyburn", a.s1);
+
+  var m = new M();
+  Expect.equals("Macallen", m.m1);
+}
diff --git a/tests/language/mixin/field_test.dart b/tests/language/mixin/field_test.dart
new file mode 100644
index 0000000..bd821ce
--- /dev/null
+++ b/tests/language/mixin/field_test.dart
@@ -0,0 +1,120 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class S {
+  var foo = "S-foo";
+}
+
+class M1 {
+  final bar = "M1-bar";
+}
+
+class M2 {
+  var baz = "M2-baz";
+}
+
+class C = S with M1;
+class D = S with M1, M2;
+class E = S with M2, M1;
+
+class F extends E {
+  var fez = "F-fez";
+}
+
+main() {
+  dynamic c = new C();
+  dynamic d = new D();
+  dynamic e = new E();
+  dynamic f = new F();
+
+  Expect.equals("S-foo", c.foo);
+  Expect.equals("S-foo", d.foo);
+  Expect.equals("S-foo", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  Expect.equals("M1-bar", c.bar);
+  Expect.equals("M1-bar", d.bar);
+  Expect.equals("M1-bar", e.bar);
+  Expect.equals("M1-bar", f.bar);
+
+  Expect.throwsNoSuchMethodError(() => c.baz);
+  Expect.equals("M2-baz", d.baz);
+  Expect.equals("M2-baz", e.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  Expect.throwsNoSuchMethodError(() => c.fez);
+  Expect.throwsNoSuchMethodError(() => d.fez);
+  Expect.throwsNoSuchMethodError(() => e.fez);
+  Expect.equals("F-fez", f.fez);
+
+  c.foo = "S-foo-c";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo", d.foo);
+  Expect.equals("S-foo", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  d.foo = "S-foo-d";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo-d", d.foo);
+  Expect.equals("S-foo", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  e.foo = "S-foo-e";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo-d", d.foo);
+  Expect.equals("S-foo-e", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  f.foo = "S-foo-f";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo-d", d.foo);
+  Expect.equals("S-foo-e", e.foo);
+  Expect.equals("S-foo-f", f.foo);
+
+  Expect.throwsNoSuchMethodError(() => c.bar = 0);
+  Expect.throwsNoSuchMethodError(() => d.bar = 0);
+  Expect.throwsNoSuchMethodError(() => e.bar = 0);
+  Expect.throwsNoSuchMethodError(() => f.bar = 0);
+  Expect.equals("M1-bar", c.bar);
+  Expect.equals("M1-bar", d.bar);
+  Expect.equals("M1-bar", e.bar);
+  Expect.equals("M1-bar", f.bar);
+
+  Expect.throwsNoSuchMethodError(() => c.baz = 0);
+  Expect.throwsNoSuchMethodError(() => c.baz);
+  Expect.equals("M2-baz", d.baz);
+  Expect.equals("M2-baz", e.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  d.baz = "M2-baz-d";
+  Expect.throwsNoSuchMethodError(() => c.baz);
+  Expect.equals("M2-baz-d", d.baz);
+  Expect.equals("M2-baz", e.baz);
+  Expect.equals("M2-baz", f.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  e.baz = "M2-baz-e";
+  Expect.throwsNoSuchMethodError(() => c.baz);
+  Expect.equals("M2-baz-d", d.baz);
+  Expect.equals("M2-baz-e", e.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  f.baz = "M2-baz-f";
+  Expect.throwsNoSuchMethodError(() => c.baz);
+  Expect.equals("M2-baz-d", d.baz);
+  Expect.equals("M2-baz-e", e.baz);
+  Expect.equals("M2-baz-f", f.baz);
+
+  Expect.throwsNoSuchMethodError(() => c.fez = 0);
+  Expect.throwsNoSuchMethodError(() => d.fez = 0);
+  Expect.throwsNoSuchMethodError(() => e.fez = 0);
+
+  f.fez = "F-fez-f";
+  Expect.throwsNoSuchMethodError(() => c.fez);
+  Expect.throwsNoSuchMethodError(() => d.fez);
+  Expect.throwsNoSuchMethodError(() => e.fez);
+  Expect.equals("F-fez-f", f.fez);
+}
diff --git a/tests/language/mixin/forwarding_constructor1_test.dart b/tests/language/mixin/forwarding_constructor1_test.dart
new file mode 100644
index 0000000..b0e97ab
--- /dev/null
+++ b/tests/language/mixin/forwarding_constructor1_test.dart
@@ -0,0 +1,31 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+abstract class Mixin1 {
+  var mixin1Field = 1;
+}
+
+abstract class Mixin2 {
+  var mixin2Field = 2;
+}
+
+class A {
+  var superField;
+  A(foo) : superField = foo;
+}
+
+class B extends A with Mixin1, Mixin2 {
+  var field = 4;
+  B(unused) : super(3);
+}
+
+main() {
+  var b = new B(null);
+  Expect.equals(1, b.mixin1Field);
+  Expect.equals(2, b.mixin2Field);
+  Expect.equals(3, b.superField);
+  Expect.equals(4, b.field);
+}
diff --git a/tests/language/mixin/forwarding_constructor2_test.dart b/tests/language/mixin/forwarding_constructor2_test.dart
new file mode 100644
index 0000000..0c51276
--- /dev/null
+++ b/tests/language/mixin/forwarding_constructor2_test.dart
@@ -0,0 +1,30 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+abstract class Mixin1 {
+  var mixin1Field = 1;
+}
+
+abstract class Mixin2 {
+  var mixin2Field = 2;
+}
+
+class A {
+  var superField;
+  A() : superField = 3;
+}
+
+class B extends A with Mixin1, Mixin2 {
+  var field = 4;
+}
+
+main() {
+  var b = new B();
+  Expect.equals(1, b.mixin1Field);
+  Expect.equals(2, b.mixin2Field);
+  Expect.equals(3, b.superField);
+  Expect.equals(4, b.field);
+}
diff --git a/tests/language/mixin/forwarding_constructor3_test.dart b/tests/language/mixin/forwarding_constructor3_test.dart
new file mode 100644
index 0000000..1d2f5dc
--- /dev/null
+++ b/tests/language/mixin/forwarding_constructor3_test.dart
@@ -0,0 +1,36 @@
+// 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.
+
+// Verify that a named mixin constructor forwards to the corresponding named
+// base class constructor.
+
+import "package:expect/expect.dart";
+
+abstract class Mixin1 {
+  var mixin1Field = 1;
+}
+
+abstract class Mixin2 {
+  var mixin2Field = 2;
+}
+
+class A {
+  var superField;
+  A(foo) : superField = 0;
+  A.c1(foo) : superField = foo;
+  A.c2(foo) : superField = 0;
+}
+
+class B extends A with Mixin1, Mixin2 {
+  var field = 4;
+  B(unused) : super.c1(3);
+}
+
+main() {
+  var b = new B(null);
+  Expect.equals(1, b.mixin1Field);
+  Expect.equals(2, b.mixin2Field);
+  Expect.equals(3, b.superField);
+  Expect.equals(4, b.field);
+}
diff --git a/tests/language/mixin/forwarding_constructor4_test.dart b/tests/language/mixin/forwarding_constructor4_test.dart
new file mode 100644
index 0000000..ece8c13
--- /dev/null
+++ b/tests/language/mixin/forwarding_constructor4_test.dart
@@ -0,0 +1,25 @@
+// 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.
+
+// Verify that a forwarding constructor is generated even when there is an
+// optional parameter.
+
+abstract class Mixin {}
+
+class Base {
+  Base(
+      {x} //       //# 01: ok
+      {x} //       //# 02: ok
+      {x} //       //# 03: ok
+      );
+}
+
+class C extends Base with Mixin {
+  C(); //          //# 02: continued
+  C() : super(); //# 03: continued
+}
+
+main() {
+  new C();
+}
diff --git a/tests/language/mixin/generic_test.dart b/tests/language/mixin/generic_test.dart
new file mode 100644
index 0000000..eb785f8
--- /dev/null
+++ b/tests/language/mixin/generic_test.dart
@@ -0,0 +1,35 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class S<T> {
+  s() {
+    return T;
+  }
+}
+
+class M<T> {
+  m() {
+    return T;
+  }
+}
+
+class N<T> {
+  n() {
+    return T;
+  }
+}
+
+class C<U, V> extends S<Map<U, V>> with M<List<U>>, N<Set<V>> {}
+
+main() {
+  var c = new C<int, bool>();
+  Expect.isTrue(c is S<Map<int, bool>>);
+  Expect.equals("Map<int, bool>", c.s().toString());
+  Expect.isTrue(c is M<List<int>>);
+  Expect.equals("List<int>", c.m().toString());
+  Expect.isTrue(c is N<Set<bool>>);
+  Expect.equals("Set<bool>", c.n().toString());
+}
diff --git a/tests/language/mixin/getter_regression_test.dart b/tests/language/mixin/getter_regression_test.dart
new file mode 100644
index 0000000..5f9bd22
--- /dev/null
+++ b/tests/language/mixin/getter_regression_test.dart
@@ -0,0 +1,30 @@
+// 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.
+
+// Regression test case for dart2js bug where the getter for y wasn't
+// properly mixed in.
+
+import "package:expect/expect.dart";
+
+class C {
+  int x = -1;
+  int get y => x;
+}
+
+class E {
+  int z = 10;
+}
+
+class D extends E with C {
+  int w = 42;
+}
+
+main() {
+  var d = new D();
+  d.x = 37;
+  Expect.equals(37, d.x);
+  Expect.equals(10, d.z);
+  Expect.equals(42, d.w);
+  Expect.equals(37, d.y);
+}
diff --git a/tests/language/mixin/illegal_constructor_runtime_test.dart b/tests/language/mixin/illegal_constructor_runtime_test.dart
new file mode 100644
index 0000000..91886bb
--- /dev/null
+++ b/tests/language/mixin/illegal_constructor_runtime_test.dart
@@ -0,0 +1,58 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+class M0 {
+  factory M0(a, b, c) => throw "uncalled";
+  factory M0.named() => throw "uncalled";
+}
+
+class M1 {
+  M1();
+}
+
+class M2 {
+  M2.named();
+}
+
+class C0 = Object with M0;
+
+
+
+
+
+
+
+class D0 extends Object with M0 {}
+
+
+
+
+
+
+
+main() {
+  new C0();
+
+
+
+
+
+
+
+  new D0();
+
+
+
+
+
+
+
+
+
+
+
+}
diff --git a/tests/language/mixin/illegal_constructor_test.dart b/tests/language/mixin/illegal_constructor_test.dart
new file mode 100644
index 0000000..bf84e07
--- /dev/null
+++ b/tests/language/mixin/illegal_constructor_test.dart
@@ -0,0 +1,115 @@
+// 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.
+
+class M0 {
+  factory M0(a, b, c) => throw "uncalled";
+  factory M0.named() => throw "uncalled";
+}
+
+class M1 {
+  M1();
+}
+
+class M2 {
+  M2.named();
+}
+
+class C0 = Object with M0;
+class C1 = Object with M1;
+//    ^
+// [cfe] Can't use 'M1' as a mixin because it has constructors.
+//                     ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_CLASS_DECLARES_CONSTRUCTOR
+class C2 = Object with M2;
+//    ^
+// [cfe] Can't use 'M2' as a mixin because it has constructors.
+//                     ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_CLASS_DECLARES_CONSTRUCTOR
+class C3 = Object with M0, M1;
+//    ^
+// [cfe] Can't use 'M1' as a mixin because it has constructors.
+//                         ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_CLASS_DECLARES_CONSTRUCTOR
+class C4 = Object with M1, M0;
+//    ^
+// [cfe] Can't use 'M1' as a mixin because it has constructors.
+//                     ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_CLASS_DECLARES_CONSTRUCTOR
+class C5 = Object with M0, M2;
+//    ^
+// [cfe] Can't use 'M2' as a mixin because it has constructors.
+//                         ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_CLASS_DECLARES_CONSTRUCTOR
+class C6 = Object with M2, M0;
+//    ^
+// [cfe] Can't use 'M2' as a mixin because it has constructors.
+//                     ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_CLASS_DECLARES_CONSTRUCTOR
+
+class D0 extends Object with M0 {}
+class D1 extends Object with M1 { }
+//    ^
+// [cfe] Can't use 'M1' as a mixin because it has constructors.
+//                           ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_CLASS_DECLARES_CONSTRUCTOR
+class D2 extends Object with M2 { }
+//    ^
+// [cfe] Can't use 'M2' as a mixin because it has constructors.
+//                           ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_CLASS_DECLARES_CONSTRUCTOR
+class D3 extends Object with M0, M1 { }
+//    ^
+// [cfe] Can't use 'M1' as a mixin because it has constructors.
+//                               ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_CLASS_DECLARES_CONSTRUCTOR
+class D4 extends Object with M1, M0 { }
+//    ^
+// [cfe] Can't use 'M1' as a mixin because it has constructors.
+//                           ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_CLASS_DECLARES_CONSTRUCTOR
+class D5 extends Object with M0, M2 { }
+//    ^
+// [cfe] Can't use 'M2' as a mixin because it has constructors.
+//                               ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_CLASS_DECLARES_CONSTRUCTOR
+class D6 extends Object with M2, M0 { }
+//    ^
+// [cfe] Can't use 'M2' as a mixin because it has constructors.
+//                           ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_CLASS_DECLARES_CONSTRUCTOR
+
+main() {
+  new C0();
+  new C1();
+  new C2();
+  new C3();
+  new C4();
+  new C5();
+  new C6();
+
+  new D0();
+  new D1();
+  new D2();
+  new D3();
+  new D4();
+  new D5();
+  new D6();
+
+  new C0(1,2,3);
+  //    ^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.EXTRA_POSITIONAL_ARGUMENTS
+  // [cfe] Too many positional arguments: 0 allowed, but 3 found.
+  new C0.named();
+  //     ^^^^^
+  // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR
+  // [cfe] Method not found: 'C0.named'.
+  new D0(1,2,3);
+  //    ^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.EXTRA_POSITIONAL_ARGUMENTS
+  // [cfe] Too many positional arguments: 0 allowed, but 3 found.
+  new D0.named();
+  //     ^^^^^
+  // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR
+  // [cfe] Method not found: 'D0.named'.
+}
diff --git a/tests/language/mixin/illegal_cycles_runtime_test.dart b/tests/language/mixin/illegal_cycles_runtime_test.dart
new file mode 100644
index 0000000..cd5bbfe
--- /dev/null
+++ b/tests/language/mixin/illegal_cycles_runtime_test.dart
@@ -0,0 +1,42 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+class M {}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+main() {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
diff --git a/tests/language/mixin/illegal_cycles_test.dart b/tests/language/mixin/illegal_cycles_test.dart
new file mode 100644
index 0000000..3db5716
--- /dev/null
+++ b/tests/language/mixin/illegal_cycles_test.dart
@@ -0,0 +1,86 @@
+// 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.
+
+class M {}
+class M0 extends Object with M0 { }
+//    ^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_INTERFACE_INHERITANCE_WITH
+// [cfe] 'M0' is a supertype of itself.
+//    ^
+// [cfe] 'Object with M0' is a supertype of itself.
+//                           ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class M1 = Object with M1;
+//    ^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_INTERFACE_INHERITANCE_WITH
+// [cfe] 'M1' is a supertype of itself.
+
+class M2 = Object with M3;
+//    ^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_INTERFACE_INHERITANCE
+// [cfe] 'M2' is a supertype of itself.
+class M3 = Object with M2;
+//    ^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_INTERFACE_INHERITANCE
+// [cfe] 'M3' is a supertype of itself.
+
+class M4 = Object with M5;
+//    ^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_INTERFACE_INHERITANCE
+// [cfe] 'M4' is a supertype of itself.
+class M5 = Object with M6;
+//    ^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_INTERFACE_INHERITANCE
+// [cfe] 'M5' is a supertype of itself.
+class M6 = Object with M4;
+//    ^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_INTERFACE_INHERITANCE
+// [cfe] 'M6' is a supertype of itself.
+
+class M7 extends Object with M8 { }
+//    ^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_INTERFACE_INHERITANCE
+// [cfe] 'M7' is a supertype of itself.
+//    ^
+// [cfe] 'Object with M8' is a supertype of itself.
+//                           ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class M8 extends Object with M7 { }
+//    ^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_INTERFACE_INHERITANCE
+// [cfe] 'M8' is a supertype of itself.
+//    ^
+// [cfe] 'Object with M7' is a supertype of itself.
+//                           ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+
+class M9  = Object with M91;
+//    ^
+// [cfe] 'M9' is a supertype of itself.
+class M91 = Object with M92;
+//    ^^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_INTERFACE_INHERITANCE
+// [cfe] 'M91' is a supertype of itself.
+class M92 = Object with M91;
+//    ^^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_INTERFACE_INHERITANCE
+// [cfe] 'M92' is a supertype of itself.
+
+main() {
+  new M0();
+
+  new M1();
+
+  new M2();
+  new M3();
+
+  new M4();
+  new M5();
+  new M6();
+
+  new M7();
+  new M8();
+
+  new M9();
+}
diff --git a/tests/language/mixin/illegal_object_runtime_test.dart b/tests/language/mixin/illegal_object_runtime_test.dart
new file mode 100644
index 0000000..9f8bf27
--- /dev/null
+++ b/tests/language/mixin/illegal_object_runtime_test.dart
@@ -0,0 +1,21 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Object has a non-trivial constructor and hence cannot be used as mixin.
+
+class S {}
+
+class C0 extends S
+
+{}
+
+
+
+main() {
+  new C0();
+
+}
diff --git a/tests/language/mixin/illegal_object_test.dart b/tests/language/mixin/illegal_object_test.dart
new file mode 100644
index 0000000..ddd27f2
--- /dev/null
+++ b/tests/language/mixin/illegal_object_test.dart
@@ -0,0 +1,26 @@
+// 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.
+
+// Object has a non-trivial constructor and hence cannot be used as mixin.
+
+class S {}
+
+class C0 extends S
+//    ^
+// [cfe] Can't use 'Object' as a mixin because it has constructors.
+with Object
+//   ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_CLASS_DECLARES_CONSTRUCTOR
+{}
+
+class C1 = S with Object;
+//    ^
+// [cfe] Can't use 'Object' as a mixin because it has constructors.
+//                ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_CLASS_DECLARES_CONSTRUCTOR
+
+main() {
+  new C0();
+  new C1();
+}
diff --git a/tests/language/mixin/illegal_static_access_runtime_test.dart b/tests/language/mixin/illegal_static_access_runtime_test.dart
new file mode 100644
index 0000000..edf6b9a
--- /dev/null
+++ b/tests/language/mixin/illegal_static_access_runtime_test.dart
@@ -0,0 +1,26 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+import "package:expect/expect.dart";
+
+class S {
+  static foo() => 42;
+}
+
+class M {
+  static bar() => 87;
+}
+
+class C = S with M;
+
+main() {
+  Expect.equals(42, S.foo());
+  Expect.equals(87, M.bar());
+
+
+
+}
diff --git a/tests/language/mixin/illegal_static_access_test.dart b/tests/language/mixin/illegal_static_access_test.dart
new file mode 100644
index 0000000..21e2348
--- /dev/null
+++ b/tests/language/mixin/illegal_static_access_test.dart
@@ -0,0 +1,29 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class S {
+  static foo() => 42;
+}
+
+class M {
+  static bar() => 87;
+}
+
+class C = S with M;
+
+main() {
+  Expect.equals(42, S.foo());
+  Expect.equals(87, M.bar());
+
+  Expect.throwsNoSuchMethodError(() => C.foo());
+  //                                     ^^^
+  // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_METHOD
+  // [cfe] Method not found: 'C.foo'.
+  Expect.throwsNoSuchMethodError(() => C.bar());
+  //                                     ^^^
+  // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_METHOD
+  // [cfe] Method not found: 'C.bar'.
+}
diff --git a/tests/language/mixin/illegal_super_use_runtime_test.dart b/tests/language/mixin/illegal_super_use_runtime_test.dart
new file mode 100644
index 0000000..86ecb63
--- /dev/null
+++ b/tests/language/mixin/illegal_super_use_runtime_test.dart
@@ -0,0 +1,73 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+import "package:expect/expect.dart";
+
+class M {}
+
+class P0 {
+  foo() {
+
+
+
+
+    void inner() {
+
+
+
+    }
+    inner();
+
+    (() {
+
+
+
+    })();
+
+    return 42;
+  }
+}
+
+class P1 {
+  bar() {
+
+    return 87;
+  }
+
+  // The test method is strategically placed here to try to force the
+  // P1 class and its bar method to be resolved before resolving the
+  // mixin applications.
+  test() {
+    new C();
+    var d = new D();
+    var e = new E();
+    var f = new F();
+    Expect.equals(42, d.foo());
+    Expect.equals(87, e.bar());
+    Expect.equals(99, f.baz());
+  }
+}
+
+class P2 {
+  baz() {
+
+    return 99;
+  }
+}
+
+class C = Object with M;
+class D = Object with P0;
+class E = Object with M, P1;
+class F = Object with P2, M;
+
+main() {
+  var p1 = new P1();
+  var p2 = new P2();
+  Expect.equals(87, p1.bar());
+  p1.test();
+  Expect.equals(99, p2.baz());
+}
diff --git a/tests/language/mixin/illegal_super_use_test.dart b/tests/language/mixin/illegal_super_use_test.dart
new file mode 100644
index 0000000..4796185
--- /dev/null
+++ b/tests/language/mixin/illegal_super_use_test.dart
@@ -0,0 +1,94 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class M {}
+
+class P0 {
+  foo() {
+    super.toString();
+    super.foo();
+    //    ^^^
+    // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_SUPER_METHOD
+    // [cfe] Superclass has no method named 'foo'.
+    super.bar = 100;
+    //    ^^^
+    // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_SUPER_SETTER
+    // [cfe] Superclass has no setter named 'bar'.
+
+    void inner() {
+      super.toString();
+      super.foo();
+      //    ^^^
+      // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_SUPER_METHOD
+      // [cfe] Superclass has no method named 'foo'.
+      super.bar = 100;
+      //    ^^^
+      // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_SUPER_SETTER
+      // [cfe] Superclass has no setter named 'bar'.
+    }
+    inner();
+
+    (() {
+      super.toString();
+      super.foo();
+      //    ^^^
+      // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_SUPER_METHOD
+      // [cfe] Superclass has no method named 'foo'.
+      super.bar = 100;
+      //    ^^^
+      // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_SUPER_SETTER
+      // [cfe] Superclass has no setter named 'bar'.
+    })();
+
+    return 42;
+  }
+}
+
+class P1 {
+  bar() {
+    super.toString();
+    return 87;
+  }
+
+  // The test method is strategically placed here to try to force the
+  // P1 class and its bar method to be resolved before resolving the
+  // mixin applications.
+  test() {
+    new C();
+    var d = new D();
+    var e = new E();
+    var f = new F();
+    Expect.equals(42, d.foo());
+    Expect.equals(87, e.bar());
+    Expect.equals(99, f.baz());
+  }
+}
+
+class P2 {
+  baz() {
+    super.toString();
+    return 99;
+  }
+}
+
+class C = Object with M;
+class D = Object with P0;
+//                    ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_REFERENCES_SUPER
+class E = Object with M, P1;
+//                       ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_REFERENCES_SUPER
+class F = Object with P2, M;
+//                    ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_REFERENCES_SUPER
+
+main() {
+  var p1 = new P1();
+  var p2 = new P2();
+  Expect.equals(87, p1.bar());
+  p1.test();
+  Expect.equals(99, p2.baz());
+}
diff --git a/tests/language/mixin/illegal_superclass_runtime_test.dart b/tests/language/mixin/illegal_superclass_runtime_test.dart
new file mode 100644
index 0000000..303ca9b
--- /dev/null
+++ b/tests/language/mixin/illegal_superclass_runtime_test.dart
@@ -0,0 +1,134 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+class S0 {}
+
+class S1 extends Object {}
+
+class S2 extends S0 {}
+
+class M0 {}
+
+class M1 extends Object {}
+
+class M2 extends M0 {}
+
+class C00 = S0 with M0;
+class C01 = S0 with M1;
+
+class C03 = S0 with M0, M1;
+
+
+
+
+
+class C10 = S1 with M0;
+class C11 = S1 with M1;
+
+class C13 = S1 with M0, M1;
+
+
+
+
+
+class C20 = S2 with M0;
+class C21 = S2 with M1;
+
+class C23 = S2 with M0, M1;
+
+
+
+
+
+class D00 extends S0 with M0 {}
+
+class D01 extends S0 with M1 {}
+
+
+class D03 extends S0 with M0, M1 {}
+
+
+
+
+
+class D10 extends S1 with M0 {}
+
+class D11 extends S1 with M1 {}
+
+
+class D13 extends S1 with M0, M1 {}
+
+
+
+
+
+class D20 extends S2 with M0 {}
+
+class D21 extends S2 with M1 {}
+
+
+class D23 extends S2 with M0, M1 {}
+
+
+
+
+
+main() {
+  new C00();
+  new C01();
+
+  new C03();
+
+
+
+
+
+  new C10();
+  new C11();
+
+  new C13();
+
+
+
+
+
+  new C20();
+  new C21();
+
+  new C23();
+
+
+
+
+
+  new D00();
+  new D01();
+
+  new D03();
+
+
+
+
+
+  new D10();
+  new D11();
+
+  new D13();
+
+
+
+
+
+  new D20();
+  new D21();
+
+  new D23();
+
+
+
+
+}
diff --git a/tests/language/mixin/illegal_superclass_test.dart b/tests/language/mixin/illegal_superclass_test.dart
new file mode 100644
index 0000000..c1e1e0c
--- /dev/null
+++ b/tests/language/mixin/illegal_superclass_test.dart
@@ -0,0 +1,191 @@
+// 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.
+
+class S0 {}
+
+class S1 extends Object {}
+
+class S2 extends S0 {}
+
+class M0 {}
+
+class M1 extends Object {}
+
+class M2 extends M0 {}
+
+class C00 = S0 with M0;
+class C01 = S0 with M1;
+class C02 = S0 with M2;
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class C03 = S0 with M0, M1;
+class C04 = S0 with M0, M2;
+//                      ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class C05 = S0 with M2, M0;
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class C06 = S0 with M1, M2;
+//                      ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class C07 = S0 with M2, M1;
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+
+class C10 = S1 with M0;
+class C11 = S1 with M1;
+class C12 = S1 with M2;
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class C13 = S1 with M0, M1;
+class C14 = S1 with M0, M2;
+//                      ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class C15 = S1 with M2, M0;
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class C16 = S1 with M1, M2;
+//                      ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class C17 = S1 with M2, M1;
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+
+class C20 = S2 with M0;
+class C21 = S2 with M1;
+class C22 = S2 with M2;
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class C23 = S2 with M0, M1;
+class C24 = S2 with M0, M2;
+//                      ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class C25 = S2 with M2, M0;
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class C26 = S2 with M1, M2;
+//                      ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class C27 = S2 with M2, M1;
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+
+class D00 extends S0 with M0 {}
+
+class D01 extends S0 with M1 {}
+
+class D02 extends S0 with M2 { }
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class D03 extends S0 with M0, M1 {}
+class D04 extends S0 with M0, M2 { }
+//                            ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class D05 extends S0 with M2, M0 { }
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class D06 extends S0 with M1, M2 { }
+//                            ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class D07 extends S0 with M2, M1 { }
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+
+class D10 extends S1 with M0 {}
+
+class D11 extends S1 with M1 {}
+
+class D12 extends S1 with M2 { }
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class D13 extends S1 with M0, M1 {}
+class D14 extends S1 with M0, M2 { }
+//                            ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class D15 extends S1 with M2, M0 { }
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class D16 extends S1 with M1, M2 { }
+//                            ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class D17 extends S1 with M2, M1 { }
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+
+class D20 extends S2 with M0 {}
+
+class D21 extends S2 with M1 {}
+
+class D22 extends S2 with M2 { }
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class D23 extends S2 with M0, M1 {}
+class D24 extends S2 with M0, M2 { }
+//                            ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class D25 extends S2 with M2, M0 { }
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class D26 extends S2 with M1, M2 { }
+//                            ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+class D27 extends S2 with M2, M1 { }
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_INHERITS_FROM_NOT_OBJECT
+
+main() {
+  new C00();
+  new C01();
+  new C02();
+  new C03();
+  new C04();
+  new C05();
+  new C06();
+  new C07();
+
+  new C10();
+  new C11();
+  new C12();
+  new C13();
+  new C14();
+  new C15();
+  new C16();
+  new C17();
+
+  new C20();
+  new C21();
+  new C22();
+  new C23();
+  new C24();
+  new C25();
+  new C26();
+  new C27();
+
+  new D00();
+  new D01();
+  new D02();
+  new D03();
+  new D04();
+  new D05();
+  new D06();
+  new D07();
+
+  new D10();
+  new D11();
+  new D12();
+  new D13();
+  new D14();
+  new D15();
+  new D16();
+  new D17();
+
+  new D20();
+  new D21();
+  new D22();
+  new D23();
+  new D24();
+  new D25();
+  new D26();
+  new D27();
+}
diff --git a/tests/language/mixin/illegal_syntax_test.dart b/tests/language/mixin/illegal_syntax_test.dart
new file mode 100644
index 0000000..27a695c
--- /dev/null
+++ b/tests/language/mixin/illegal_syntax_test.dart
@@ -0,0 +1,59 @@
+// 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.
+
+class S { }
+class G<T> { }
+class M { }
+
+class T0 = S with M;
+abstract class T0A = S with M;
+class T1 = final S with M; //    //# 01: syntax error
+class T2 = var S with M; //      //# 02: syntax error
+class T3 = const S with M; //    //# 03: syntax error
+class T4 = static S with M; //   //# 04: syntax error
+class T5 = external S with M; // //# 05: syntax error
+class T6 = G<int> with M;
+class T7 = G<Map<String,int>> with M;
+
+class C0 extends abstract S with M { } // //# 06: syntax error
+class C1 extends final S with M { } //    //# 07: syntax error
+class C2 extends var S with M { } //      //# 08: syntax error
+class C3 extends const S with M { } //    //# 09: syntax error
+class C4 extends static S with M { } //   //# 10: syntax error
+class C5 extends external S with M { } // //# 11: syntax error
+class C6 extends G<int> with M { }
+class C7 extends G<Map<String,int>> with M { }
+
+class D0 extends S with M
+    implements M // //# 12: syntax error
+    implements M { }
+
+class D1 extends T0 { }
+
+class X = S; //  //# 14: syntax error
+
+main() {
+  new T0();
+  new T0A(); // //# 13: compile-time error
+  new T1(); // //# 01: continued
+  new T2(); // //# 02: continued
+  new T3(); // //# 03: continued
+  new T4(); // //# 04: continued
+  new T5(); // //# 05: continued
+  new T6();
+  new T7();
+
+  new C0(); // //# 06: continued
+  new C1(); // //# 07: continued
+  new C2(); // //# 08: continued
+  new C3(); // //# 09: continued
+  new C4(); // //# 10: continued
+  new C5(); // //# 11: continued
+  new C6();
+  new C7();
+
+  new D0(); // //# 12: continued
+  new D1();
+  new X(); //  //# 14: continued
+}
diff --git a/tests/language/mixin/implements2_test.dart b/tests/language/mixin/implements2_test.dart
new file mode 100644
index 0000000..37c0446
--- /dev/null
+++ b/tests/language/mixin/implements2_test.dart
@@ -0,0 +1,17 @@
+// 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.
+
+// Regression test for named mixin applications with implements clause.
+
+class A {}
+
+class S {}
+
+class M {}
+
+class C = S with M implements A;
+
+void main() {
+  new C();
+}
diff --git a/tests/language/mixin/implements_test.dart b/tests/language/mixin/implements_test.dart
new file mode 100644
index 0000000..1845773
--- /dev/null
+++ b/tests/language/mixin/implements_test.dart
@@ -0,0 +1,77 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+abstract class I0 {
+  foo();
+}
+
+abstract class I1 {
+  bar();
+}
+
+abstract class I2 implements I0, I1 {}
+
+class M {
+  foo() => 42;
+  bar() => 87;
+}
+
+class C0 = Object with M;
+class C1 = Object with M implements I0;
+class C2 = Object with M implements I1;
+class C3 = Object with M implements I0, I1;
+class C4 = Object with M implements I1, I0;
+class C5 = Object with M implements I2;
+
+main() {
+  var c0 = new C0();
+  Expect.equals(42, c0.foo());
+  Expect.equals(87, c0.bar());
+  Expect.isTrue(c0 is M);
+  Expect.isFalse(c0 is I0);
+  Expect.isFalse(c0 is I1);
+  Expect.isFalse(c0 is I2);
+
+  var c1 = new C1();
+  Expect.equals(42, c1.foo());
+  Expect.equals(87, c1.bar());
+  Expect.isTrue(c1 is M);
+  Expect.isTrue(c1 is I0);
+  Expect.isFalse(c1 is I1);
+  Expect.isFalse(c1 is I2);
+
+  var c2 = new C2();
+  Expect.equals(42, c2.foo());
+  Expect.equals(87, c2.bar());
+  Expect.isTrue(c2 is M);
+  Expect.isFalse(c2 is I0);
+  Expect.isTrue(c2 is I1);
+  Expect.isFalse(c1 is I2);
+
+  var c3 = new C3();
+  Expect.equals(42, c3.foo());
+  Expect.equals(87, c3.bar());
+  Expect.isTrue(c3 is M);
+  Expect.isTrue(c3 is I0);
+  Expect.isTrue(c3 is I1);
+  Expect.isFalse(c1 is I2);
+
+  var c4 = new C4();
+  Expect.equals(42, c4.foo());
+  Expect.equals(87, c4.bar());
+  Expect.isTrue(c4 is M);
+  Expect.isTrue(c4 is I0);
+  Expect.isTrue(c4 is I1);
+  Expect.isFalse(c1 is I2);
+
+  var c5 = new C5();
+  Expect.equals(42, c5.foo());
+  Expect.equals(87, c5.bar());
+  Expect.isTrue(c5 is M);
+  Expect.isTrue(c5 is I0);
+  Expect.isTrue(c5 is I1);
+  Expect.isTrue(c5 is I2);
+}
diff --git a/tests/language/mixin/implicit_covariance_test.dart b/tests/language/mixin/implicit_covariance_test.dart
new file mode 100644
index 0000000..5606bd7
--- /dev/null
+++ b/tests/language/mixin/implicit_covariance_test.dart
@@ -0,0 +1,32 @@
+// 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:expect/expect.dart';
+
+abstract class A<T> {
+  foo(T x);
+}
+
+abstract class B<T> implements A<T> {}
+
+class C {
+  foo(num x) {
+    if (x is! num) {
+      throw "Soudness issue: expected x to be num, got ${x.runtimeType}.";
+    }
+  }
+}
+
+class D<T extends num> extends C with B<T> {}
+
+class E<T extends num> = C with B<T>;
+
+test(B<dynamic> b) {
+  b.foo("bar");
+}
+
+main() {
+  Expect.throws<TypeError>(() => test(new D<int>()));
+  Expect.throws<TypeError>(() => test(new E<int>()));
+}
diff --git a/tests/language/mixin/inference_mixin_field_test.dart b/tests/language/mixin/inference_mixin_field_test.dart
new file mode 100644
index 0000000..9669846
--- /dev/null
+++ b/tests/language/mixin/inference_mixin_field_test.dart
@@ -0,0 +1,28 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class Mixin {
+  var field;
+  createIt() {
+    if (field == null) field = 42;
+  }
+}
+
+class A {
+  A(foo);
+}
+
+class B extends A with Mixin {
+  // Because [super] references a synthesized constructor, dart2js
+  // used to not see the null assignment to it.
+  B(foo) : super(foo);
+}
+
+main() {
+  var a = new B(42);
+  a.createIt();
+  Expect.equals(42, a.field);
+}
diff --git a/tests/language/mixin/interface_check_runtime_test.dart b/tests/language/mixin/interface_check_runtime_test.dart
new file mode 100644
index 0000000..6a652ab
--- /dev/null
+++ b/tests/language/mixin/interface_check_runtime_test.dart
@@ -0,0 +1,33 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+class Thing {}
+
+class SubThing extends Thing {
+  void sub() {}
+}
+
+class A {
+  Thing get thing => new Thing();
+}
+
+abstract class B implements A {
+  @override
+  SubThing get thing;
+}
+
+class C extends A //
+
+
+{}
+
+main() {
+  new C()
+          .thing //
+
+      ;
+}
diff --git a/tests/language/mixin/interface_check_test.dart b/tests/language/mixin/interface_check_test.dart
new file mode 100644
index 0000000..db0aaf3
--- /dev/null
+++ b/tests/language/mixin/interface_check_test.dart
@@ -0,0 +1,33 @@
+// 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.
+
+class Thing {}
+
+class SubThing extends Thing {
+  void sub() {}
+}
+
+class A {
+  Thing get thing => new Thing();
+}
+
+abstract class B implements A {
+  @override
+  SubThing get thing;
+}
+
+class C extends A //
+//    ^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+// [cfe] The implementation of 'thing' in the non-abstract class 'C' does not conform to its interface.
+    with
+        B
+{}
+
+main() {
+  new C()
+          .thing //
+          .sub()
+      ;
+}
diff --git a/tests/language/mixin/invalid_bound2_test.dart b/tests/language/mixin/invalid_bound2_test.dart
new file mode 100644
index 0000000..b53f4dc
--- /dev/null
+++ b/tests/language/mixin/invalid_bound2_test.dart
@@ -0,0 +1,48 @@
+// 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.
+
+class S0<T> {}
+
+class S<U extends num, V extends U> extends S0<String> {}
+
+class M<U extends num, V extends U> {}
+
+class A<U extends num, V extends U> extends S with M {}
+
+// A StaticWarning is reported here and in C, D, and E below, because U and V
+// are not bounded. The purpose of this test is to verify bound checking in S,
+// M, and A, the reason no bounds are declared for U and V here.
+class B<U, V> extends S<U, V> with M<int, int> {} //# 04: continued
+class B<U, V> extends S<U, V> with M<int, int> {} //# 05: continued
+class B<U, V> extends S<U, V> with M<int, int> {} //# 06: continued
+
+class C<U, V> extends S<int, int> with M<U, V> {} //# 07: continued
+class C<U, V> extends S<int, int> with M<U, V> {} //# 08: continued
+class C<U, V> extends S<int, int> with M<U, V> {} //# 09: continued
+
+class D<U, V> extends S<U, V> with M<double, int> {} //# 10: continued
+class D<U, V> extends S<U, V> with M<double, int> {} //# 11: continued
+class D<U, V> extends S<U, V> with M<double, int> {} //# 12: continued
+
+class E<U, V> extends S<double, int> with M<U, V> {} //# 13: continued
+class E<U, V> extends S<double, int> with M<U, V> {} //# 14: continued
+class E<U, V> extends S<double, int> with M<U, V> {} //# 15: continued
+
+main() {
+  new A<int, int>(); //    //# 01: ok
+  new A<double, int>(); // //# 02: compile-time error
+  new A<bool, bool>(); //  //# 03: compile-time error
+  new B<int, int>(); //    //# 04: compile-time error
+  new B<double, int>(); // //# 05: compile-time error
+  new B<bool, bool>(); //  //# 06: compile-time error
+  new C<int, int>(); //    //# 07: compile-time error
+  new C<double, int>(); // //# 08: compile-time error
+  new C<bool, bool>(); //  //# 09: compile-time error
+  new D<int, int>(); //    //# 10: compile-time error
+  new D<double, int>(); // //# 11: compile-time error
+  new D<bool, bool>(); //  //# 12: compile-time error
+  new E<int, int>(); //    //# 13: compile-time error
+  new E<double, int>(); // //# 14: compile-time error
+  new E<bool, bool>(); //  //# 15: compile-time error
+}
diff --git a/tests/language/mixin/invalid_bound_test.dart b/tests/language/mixin/invalid_bound_test.dart
new file mode 100644
index 0000000..7f85533
--- /dev/null
+++ b/tests/language/mixin/invalid_bound_test.dart
@@ -0,0 +1,39 @@
+// 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.
+
+class S0<T> {}
+
+class S<T extends num> extends S0<String> {}
+
+class M<T extends num> {}
+
+class A<T extends num> extends S with M {}
+
+// A CompileTimeError is reported here and in C, D, and E below, because T is
+// not bounded. The purpose of this test is to verify bound checking in S, M,
+// and A, the reason no bound is declared for T here.
+class B<T> extends S<T> with M<int> {} //# 03: continued
+class B<T> extends S<T> with M<int> {} //# 04: continued
+
+class C<T> extends S<int> with M<T> {} //# 05: continued
+class C<T> extends S<int> with M<T> {} //# 06: continued
+
+class D<T> extends S<T> with M<bool> {} //# 07: continued
+class D<T> extends S<T> with M<bool> {} //# 08: continued
+
+class E<T> extends S<bool> with M<T> {} //# 09: continued
+class E<T> extends S<bool> with M<T> {} //# 10: continued
+
+main() {
+  new A<int>(); //  //# 01: ok
+  new A<bool>(); // //# 02: compile-time error
+  new B<int>(); //  //# 03: compile-time error
+  new B<bool>(); // //# 04: compile-time error
+  new C<int>(); //  //# 05: compile-time error
+  new C<bool>(); // //# 06: compile-time error
+  new D<int>(); //  //# 07: compile-time error
+  new D<bool>(); // //# 08: compile-time error
+  new E<int>(); //  //# 09: compile-time error
+  new E<bool>(); // //# 10: compile-time error
+}
diff --git a/tests/language/mixin/invalid_inheritance1_test.dart b/tests/language/mixin/invalid_inheritance1_test.dart
new file mode 100644
index 0000000..23c689a
--- /dev/null
+++ b/tests/language/mixin/invalid_inheritance1_test.dart
@@ -0,0 +1,11 @@
+// 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.
+
+class C<T> extends Object
+  with Malformed // //# 01: compile-time error
+  with T //         //# 02: compile-time error
+  with T<int> //    //# 03: compile-time error
+{}
+
+main() => new C<C>();
diff --git a/tests/language/mixin/invalid_inheritance2_test.dart b/tests/language/mixin/invalid_inheritance2_test.dart
new file mode 100644
index 0000000..fd2ce5b
--- /dev/null
+++ b/tests/language/mixin/invalid_inheritance2_test.dart
@@ -0,0 +1,13 @@
+// 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.
+
+class C<T> = Object with Malformed; // //# 01: compile-time error
+class C<T> = Object with T; //         //# 02: compile-time error
+class C<T> = OBject with T<int>; //    //# 03: compile-time error
+
+main() {
+  new C<C>(); // //# 01: continued
+  new C<C>(); // //# 02: continued
+  new C<C>(); // //# 03: continued
+}
diff --git a/tests/language/mixin/invalid_override_in_mixin_runtime_test.dart b/tests/language/mixin/invalid_override_in_mixin_runtime_test.dart
new file mode 100644
index 0000000..7584e4a
--- /dev/null
+++ b/tests/language/mixin/invalid_override_in_mixin_runtime_test.dart
@@ -0,0 +1,25 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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:expect/expect.dart';
+
+class A {
+
+}
+
+class C extends Object with A {
+  test() {
+    print("Hello from test");
+  }
+}
+
+main() {
+  C c = new C();
+  c.test();
+  dynamic cc = c;
+  Expect.throwsNoSuchMethodError(() => cc.doesntExist());
+}
diff --git a/tests/language/mixin/invalid_override_in_mixin_test.dart b/tests/language/mixin/invalid_override_in_mixin_test.dart
new file mode 100644
index 0000000..bd79f66
--- /dev/null
+++ b/tests/language/mixin/invalid_override_in_mixin_test.dart
@@ -0,0 +1,31 @@
+// 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:expect/expect.dart';
+
+class A {
+  noSuchMethod() {}
+//^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+// [cfe] The method 'A.noSuchMethod' has fewer positional arguments than those of overridden method 'Object.noSuchMethod'.
+}
+
+class C extends Object with A {
+//    ^
+// [cfe] Applying the mixin 'A' to 'Object' introduces an erroneous override of 'noSuchMethod'.
+//    ^
+// [cfe] Class 'Object with A' inherits multiple members named 'noSuchMethod' with incompatible signatures.
+//                          ^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+  test() {
+    print("Hello from test");
+  }
+}
+
+main() {
+  C c = new C();
+  c.test();
+  dynamic cc = c;
+  Expect.throwsNoSuchMethodError(() => cc.doesntExist());
+}
diff --git a/tests/language/mixin/is_test.dart b/tests/language/mixin/is_test.dart
new file mode 100644
index 0000000..89b5464
--- /dev/null
+++ b/tests/language/mixin/is_test.dart
@@ -0,0 +1,83 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class S {}
+
+class M1 {}
+
+class M2 {}
+
+class C = S with M1;
+class D = S with M1, M2;
+class E = S with M2, M1;
+
+class F extends E {}
+
+class C_ = S with M1;
+class D_ = S with M1, M2;
+class E_ = S with M2, M1;
+
+class F_ extends E_ {}
+
+main() {
+  var c = new C();
+  Expect.isTrue(c is C);
+  Expect.isFalse(c is D);
+  Expect.isFalse(c is E);
+  Expect.isFalse(c is F);
+  Expect.isTrue(c is S);
+  Expect.isTrue(c is M1);
+  Expect.isFalse(c is M2);
+
+  var d = new D();
+  Expect.isFalse(d is C);
+  Expect.isTrue(d is D);
+  Expect.isFalse(d is E);
+  Expect.isFalse(d is F);
+  Expect.isTrue(d is S);
+  Expect.isTrue(d is M1);
+  Expect.isTrue(d is M2);
+
+  var e = new E();
+  Expect.isFalse(e is C);
+  Expect.isFalse(e is D);
+  Expect.isTrue(e is E);
+  Expect.isFalse(e is F);
+  Expect.isTrue(e is S);
+  Expect.isTrue(e is M1);
+  Expect.isTrue(e is M2);
+
+  var f = new F();
+  Expect.isFalse(f is C);
+  Expect.isFalse(f is D);
+  Expect.isTrue(f is E);
+  Expect.isTrue(f is F);
+  Expect.isTrue(f is S);
+  Expect.isTrue(f is M1);
+  Expect.isTrue(f is M2);
+
+  // Make sure we get a new class for each mixin
+  // application (at least the named ones).
+  Expect.isFalse(c is C_);
+  Expect.isFalse(c is D_);
+  Expect.isFalse(c is E_);
+  Expect.isFalse(c is F_);
+
+  Expect.isFalse(d is C_);
+  Expect.isFalse(d is D_);
+  Expect.isFalse(d is E_);
+  Expect.isFalse(d is F_);
+
+  Expect.isFalse(e is C_);
+  Expect.isFalse(e is D_);
+  Expect.isFalse(e is E_);
+  Expect.isFalse(e is F_);
+
+  Expect.isFalse(f is C_);
+  Expect.isFalse(f is D_);
+  Expect.isFalse(f is E_);
+  Expect.isFalse(f is F_);
+}
diff --git a/tests/language/mixin/issue10216_2_test.dart b/tests/language/mixin/issue10216_2_test.dart
new file mode 100644
index 0000000..d48fd69
--- /dev/null
+++ b/tests/language/mixin/issue10216_2_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class M1 = Object with M0;
+class M2 = Object with M1;
+
+class M0 {
+  foo() => 42;
+}
+
+makeM2() {
+  return [new Object(), new M2()].last as M2;
+}
+
+main() {
+  Expect.equals(42, makeM2().foo());
+}
diff --git a/tests/language/mixin/issue10216_test.dart b/tests/language/mixin/issue10216_test.dart
new file mode 100644
index 0000000..b62c63c
--- /dev/null
+++ b/tests/language/mixin/issue10216_test.dart
@@ -0,0 +1,33 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class A {
+  foo(x, [y]) => '$x;$y';
+}
+
+class B extends A with M1, M2, M3 {}
+
+class M1 {}
+
+class M2 {
+  plain(x) => 'P $x';
+  bar(x, [y]) => '$y,$x';
+}
+
+class M3 {}
+
+makeB() {
+  return [new A(), new B()].last as B;
+}
+
+main() {
+  var b = makeB();
+  Expect.equals('1;2', b.foo(1, 2));
+  Expect.equals('2;null', b.foo(2));
+  Expect.equals('P 3', b.plain(3));
+  Expect.equals('100,4', b.bar(4, 100));
+  Expect.equals('null,5', b.bar(5));
+}
diff --git a/tests/language/mixin/lib_extends_field_lib.dart b/tests/language/mixin/lib_extends_field_lib.dart
new file mode 100644
index 0000000..97a31be
--- /dev/null
+++ b/tests/language/mixin/lib_extends_field_lib.dart
@@ -0,0 +1,15 @@
+// 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.
+
+library mixin_lib_extends_field_lib;
+
+class M1 {
+  final bar = "M1-bar";
+}
+
+class M2 {
+  var baz = "M2-$_baz";
+}
+
+var _baz = "baz";
diff --git a/tests/language/mixin/lib_extends_field_test.dart b/tests/language/mixin/lib_extends_field_test.dart
new file mode 100644
index 0000000..e509a94
--- /dev/null
+++ b/tests/language/mixin/lib_extends_field_test.dart
@@ -0,0 +1,117 @@
+// 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.
+
+library mixin_lib_extends_field_test;
+
+import 'package:expect/expect.dart';
+import "lib_extends_field_lib.dart" as L;
+
+class S {
+  var foo = "S-foo";
+}
+
+class C extends S with L.M1 {}
+
+class D extends S with L.M1, L.M2 {}
+
+class E extends S with L.M2, L.M1 {}
+
+class F extends E {
+  var fez = "F-fez";
+}
+
+main() {
+  dynamic c = new C();
+  dynamic d = new D();
+  dynamic e = new E();
+  dynamic f = new F();
+
+  Expect.equals("S-foo", c.foo);
+  Expect.equals("S-foo", d.foo);
+  Expect.equals("S-foo", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  Expect.equals("M1-bar", c.bar);
+  Expect.equals("M1-bar", d.bar);
+  Expect.equals("M1-bar", e.bar);
+  Expect.equals("M1-bar", f.bar);
+
+  Expect.throwsNoSuchMethodError(() => c.baz);
+  Expect.equals("M2-baz", d.baz);
+  Expect.equals("M2-baz", e.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  Expect.throwsNoSuchMethodError(() => c.fez);
+  Expect.throwsNoSuchMethodError(() => d.fez);
+  Expect.throwsNoSuchMethodError(() => e.fez);
+  Expect.equals("F-fez", f.fez);
+
+  c.foo = "S-foo-c";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo", d.foo);
+  Expect.equals("S-foo", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  d.foo = "S-foo-d";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo-d", d.foo);
+  Expect.equals("S-foo", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  e.foo = "S-foo-e";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo-d", d.foo);
+  Expect.equals("S-foo-e", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  f.foo = "S-foo-f";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo-d", d.foo);
+  Expect.equals("S-foo-e", e.foo);
+  Expect.equals("S-foo-f", f.foo);
+
+  Expect.throwsNoSuchMethodError(() => c.bar = 0);
+  Expect.throwsNoSuchMethodError(() => d.bar = 0);
+  Expect.throwsNoSuchMethodError(() => e.bar = 0);
+  Expect.throwsNoSuchMethodError(() => f.bar = 0);
+  Expect.equals("M1-bar", c.bar);
+  Expect.equals("M1-bar", d.bar);
+  Expect.equals("M1-bar", e.bar);
+  Expect.equals("M1-bar", f.bar);
+
+  Expect.throwsNoSuchMethodError(() => c.baz = 0);
+  Expect.throwsNoSuchMethodError(() => c.baz);
+  Expect.equals("M2-baz", d.baz);
+  Expect.equals("M2-baz", e.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  d.baz = "M2-baz-d";
+  Expect.throwsNoSuchMethodError(() => c.baz);
+  Expect.equals("M2-baz-d", d.baz);
+  Expect.equals("M2-baz", e.baz);
+  Expect.equals("M2-baz", f.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  e.baz = "M2-baz-e";
+  Expect.throwsNoSuchMethodError(() => c.baz);
+  Expect.equals("M2-baz-d", d.baz);
+  Expect.equals("M2-baz-e", e.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  f.baz = "M2-baz-f";
+  Expect.throwsNoSuchMethodError(() => c.baz);
+  Expect.equals("M2-baz-d", d.baz);
+  Expect.equals("M2-baz-e", e.baz);
+  Expect.equals("M2-baz-f", f.baz);
+
+  Expect.throwsNoSuchMethodError(() => c.fez = 0);
+  Expect.throwsNoSuchMethodError(() => d.fez = 0);
+  Expect.throwsNoSuchMethodError(() => e.fez = 0);
+
+  f.fez = "F-fez-f";
+  Expect.throwsNoSuchMethodError(() => c.fez);
+  Expect.throwsNoSuchMethodError(() => d.fez);
+  Expect.throwsNoSuchMethodError(() => e.fez);
+  Expect.equals("F-fez-f", f.fez);
+}
diff --git a/tests/language/mixin/lib_extends_method_lib.dart b/tests/language/mixin/lib_extends_method_lib.dart
new file mode 100644
index 0000000..b548c58
--- /dev/null
+++ b/tests/language/mixin/lib_extends_method_lib.dart
@@ -0,0 +1,28 @@
+// 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.
+
+library mixin_lib_extends_method_lib;
+
+class M1 {
+  bar() => "M1-bar";
+
+  clo(s) {
+    var l = s;
+    return (s) => "$l$s";
+  }
+}
+
+class M2 {
+  // Make sure mixed-in method has access to library-private names.
+  bar() => _M2_bar();
+  baz() => _M2_baz;
+  fez() => "M2-${_fez()}";
+  _fez() => "fez";
+}
+
+_M2_bar() {
+  return "M2-bar";
+}
+
+var _M2_baz = "M2-baz";
diff --git a/tests/language/mixin/lib_extends_method_test.dart b/tests/language/mixin/lib_extends_method_test.dart
new file mode 100644
index 0000000..59ae2ca
--- /dev/null
+++ b/tests/language/mixin/lib_extends_method_test.dart
@@ -0,0 +1,53 @@
+// 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.
+
+library mixin_lib_extends_method_test;
+
+import "package:expect/expect.dart";
+import "lib_extends_method_lib.dart" as L;
+
+class S {
+  foo() => "S-foo";
+  baz() => "S-baz";
+}
+
+class C extends S with L.M1 {}
+
+class D extends S with L.M1, L.M2 {}
+
+class E extends S with L.M2, L.M1 {}
+
+class F extends E {
+  fez() => "F-fez";
+}
+
+main() {
+  dynamic c = new C();
+  Expect.equals("S-foo", c.foo());
+  Expect.equals("M1-bar", c.bar());
+  Expect.equals("S-baz", c.baz());
+  Expect.throwsNoSuchMethodError(() => c.fez());
+  Expect.equals("sugus", c.clo("su")("gus"));
+
+  var d = new D();
+  Expect.equals("S-foo", d.foo());
+  Expect.equals("M2-bar", d.bar());
+  Expect.equals("M2-baz", d.baz());
+  Expect.equals("M2-fez", d.fez());
+  Expect.equals("sugus", d.clo("su")("gus"));
+
+  var e = new E();
+  Expect.equals("S-foo", e.foo());
+  Expect.equals("M1-bar", e.bar());
+  Expect.equals("M2-baz", e.baz());
+  Expect.equals("M2-fez", e.fez());
+  Expect.equals("sugus", e.clo("su")("gus"));
+
+  var f = new F();
+  Expect.equals("S-foo", f.foo());
+  Expect.equals("M1-bar", f.bar());
+  Expect.equals("M2-baz", f.baz());
+  Expect.equals("F-fez", f.fez());
+  Expect.equals("sugus", f.clo("su")("gus"));
+}
diff --git a/tests/language/mixin/method_override_runtime_test.dart b/tests/language/mixin/method_override_runtime_test.dart
new file mode 100644
index 0000000..6be64db
--- /dev/null
+++ b/tests/language/mixin/method_override_runtime_test.dart
@@ -0,0 +1,162 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Signature conformance test.
+abstract class CII {
+  int id(int x);
+}
+
+class CSI {
+  String id(int x) => "$x";
+}
+
+class CIS {
+  int id(String x) => 0;
+}
+
+class CTT<T> {
+  T id(T x) => x;
+}
+
+// Wrong return type.
+
+
+// Wrong argument type.
+
+
+
+// Similar as the above but using an instantiated class instead.
+abstract class C5 = CII with CTT<int>;
+abstract class C6 extends CII with CTT<int> {}
+
+
+
+// Named parameters
+abstract class NIIx {
+  int? id({int? x}) => x;
+}
+
+class NIIxy {
+  int? id({int? x, int? y}) => y;
+}
+
+class NIIy {
+  int? id({int? y}) => y;
+}
+
+class NII {
+  int? id(int? x) => x;
+}
+
+// It's OK to introduce more named parameters.
+abstract class N1 = NIIx with NIIxy;
+abstract class N2 extends NIIx with NIIxy {}
+// It's NOT OK to rename named parameters.
+
+
+// It's NOT OK to drop named parameters.
+
+
+
+class NBABxy<A, B> {
+  B? id ({A? x, B? y}) => y;
+}
+
+class NTTy<T> {
+  T? id({T? y}) => y;
+}
+
+class NTTx<T> {
+  T? id(T? x) => x;
+}
+
+// Same as above but with generic classes.
+abstract class N7 = NIIx with NBABxy<int, int>;
+abstract class N8 extends NIIx with NBABxy<int, int> {}
+
+
+
+
+
+
+
+// Optional positional parameters
+abstract class OII {
+  int? id([int? x]) => x;
+}
+
+class OIII {
+  int? id([int? x, int? y]) => y;
+}
+
+class OIIy {
+  int? id([int? y]) => y;
+}
+
+class PII {
+  int? id(int? x) => x;
+}
+
+// It's OK to introduce more optional parameters.
+abstract class O1 = OII with OIII;
+abstract class O2 extends OII with OIII {}
+// It's OK to rename optional parameters.
+abstract class O3 = OII with OIIy;
+abstract class O4 extends OII with OIIy {}
+// It's NOT OK to drop optional parameters.
+
+
+
+class OBAB<A, B> {
+  B? id ([A? x, B? y]) => y;
+}
+
+class OTTy<T> {
+  T? id([T? y]) => y;
+}
+
+class PTT<T> {
+  T? id(T? x) => x;
+}
+
+// Same as above but with generic classes.
+abstract class O7 = OII with OBAB<int, int>;
+abstract class O8 extends OII with OBAB<int, int> {}
+
+
+abstract class O11 = OII with OTTy<int>;
+abstract class O12 extends OII with OTTy<int> {}
+
+
+
+// More tests with generic classes.
+abstract class GTTnum {
+  T id<T extends num>(x);
+}
+
+class MTTnum {
+  T id<T extends num>(x) => x;
+}
+
+class MTTint {
+  T id<T extends int>(x) => x;
+}
+
+class MTT {
+  T id<T>(x) => x;
+}
+
+class MTTnumR {
+  T id<T extends num, R>(x) => x;
+}
+class G1 = GTTnum with MTTnum;
+
+
+
+
+
+void main() {}
diff --git a/tests/language/mixin/method_override_test.dart b/tests/language/mixin/method_override_test.dart
new file mode 100644
index 0000000..01428b6
--- /dev/null
+++ b/tests/language/mixin/method_override_test.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.
+
+// Signature conformance test.
+abstract class CII {
+  int id(int x);
+}
+
+class CSI {
+  String id(int x) => "$x";
+}
+
+class CIS {
+  int id(String x) => 0;
+}
+
+class CTT<T> {
+  T id(T x) => x;
+}
+
+// Wrong return type.
+abstract class C1 = CII with CIS;
+//             ^^
+// [cfe] Class 'C1' inherits multiple members named 'id' with incompatible signatures.
+//             ^
+// [cfe] The mixin application class 'C1' introduces an erroneous override of 'id'.
+//                           ^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+abstract class C2 extends CII with CIS {}
+//             ^^
+// [cfe] Applying the mixin 'CIS' to 'CII' introduces an erroneous override of 'id'.
+//             ^
+// [cfe] Class 'CII with CIS' inherits multiple members named 'id' with incompatible signatures.
+//                                 ^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+
+
+// Wrong argument type.
+abstract class C3 = CII with CSI;
+//             ^^
+// [cfe] Class 'C3' inherits multiple members named 'id' with incompatible signatures.
+//             ^
+// [cfe] The mixin application class 'C3' introduces an erroneous override of 'id'.
+//                           ^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+abstract class C4 extends CII with CSI {}
+//             ^^
+// [cfe] Applying the mixin 'CSI' to 'CII' introduces an erroneous override of 'id'.
+//             ^
+// [cfe] Class 'CII with CSI' inherits multiple members named 'id' with incompatible signatures.
+//                                 ^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+
+// Similar as the above but using an instantiated class instead.
+abstract class C5 = CII with CTT<int>;
+abstract class C6 extends CII with CTT<int> {}
+abstract class C7  = CII with CTT<String>;
+//             ^^
+// [cfe] Class 'C7' inherits multiple members named 'id' with incompatible signatures.
+//             ^
+// [cfe] The mixin application class 'C7' introduces an erroneous override of 'id'.
+//                            ^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+abstract class C8 extends CII with CTT<String> {}
+//             ^^
+// [cfe] Applying the mixin 'CTT' to 'CII' introduces an erroneous override of 'id'.
+//             ^
+// [cfe] Class 'CII with CTT<String>' inherits multiple members named 'id' with incompatible signatures.
+//                                 ^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+
+// Named parameters
+abstract class NIIx {
+  int? id({int? x}) => x;
+}
+
+class NIIxy {
+  int? id({int? x, int? y}) => y;
+}
+
+class NIIy {
+  int? id({int? y}) => y;
+}
+
+class NII {
+  int? id(int? x) => x;
+}
+
+// It's OK to introduce more named parameters.
+abstract class N1 = NIIx with NIIxy;
+abstract class N2 extends NIIx with NIIxy {}
+// It's NOT OK to rename named parameters.
+abstract class N3 = NIIx with NIIy;
+//             ^^
+// [cfe] Class 'N3' inherits multiple members named 'id' with incompatible signatures.
+//             ^
+// [cfe] The mixin application class 'N3' introduces an erroneous override of 'id'.
+//                            ^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+abstract class N4 extends NIIx with NIIy {}
+//             ^^
+// [cfe] Applying the mixin 'NIIy' to 'NIIx' introduces an erroneous override of 'id'.
+//             ^
+// [cfe] Class 'NIIx with NIIy' inherits multiple members named 'id' with incompatible signatures.
+//                                  ^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+
+
+// It's NOT OK to drop named parameters.
+abstract class N5 = NIIx with NII;
+//             ^^
+// [cfe] Class 'N5' inherits multiple members named 'id' with incompatible signatures.
+//             ^
+// [cfe] The mixin application class 'N5' introduces an erroneous override of 'id'.
+//                            ^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+abstract class N6 extends NIIx with NII {}
+//             ^^
+// [cfe] Applying the mixin 'NII' to 'NIIx' introduces an erroneous override of 'id'.
+//             ^
+// [cfe] Class 'NIIx with NII' inherits multiple members named 'id' with incompatible signatures.
+//                                  ^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+
+class NBABxy<A, B> {
+  B? id ({A? x, B? y}) => y;
+}
+
+class NTTy<T> {
+  T? id({T? y}) => y;
+}
+
+class NTTx<T> {
+  T? id(T? x) => x;
+}
+
+// Same as above but with generic classes.
+abstract class N7 = NIIx with NBABxy<int, int>;
+abstract class N8 extends NIIx with NBABxy<int, int> {}
+abstract class N9 = NIIx with NBABxy<String, int>;
+//             ^^
+// [cfe] Class 'N9' inherits multiple members named 'id' with incompatible signatures.
+//             ^
+// [cfe] The mixin application class 'N9' introduces an erroneous override of 'id'.
+//                            ^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+abstract class N10 extends NIIx with NBABxy<String, int> {}
+//             ^^^
+// [cfe] Applying the mixin 'NBABxy' to 'NIIx' introduces an erroneous override of 'id'.
+//             ^
+// [cfe] Class 'NIIx with NBABxy<String, int>' inherits multiple members named 'id' with incompatible signatures.
+//                                   ^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+abstract class N11 = NIIx with NTTy<int>;
+//             ^^^
+// [cfe] Class 'N11' inherits multiple members named 'id' with incompatible signatures.
+//             ^
+// [cfe] The mixin application class 'N11' introduces an erroneous override of 'id'.
+//                             ^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+abstract class N12 extends NIIx with NTTy<int> {}
+//             ^^^
+// [cfe] Applying the mixin 'NTTy' to 'NIIx' introduces an erroneous override of 'id'.
+//             ^
+// [cfe] Class 'NIIx with NTTy<int>' inherits multiple members named 'id' with incompatible signatures.
+//                                   ^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+abstract class N13 = NIIx with NTTx<int>;
+//             ^^^
+// [cfe] Class 'N13' inherits multiple members named 'id' with incompatible signatures.
+//             ^
+// [cfe] The mixin application class 'N13' introduces an erroneous override of 'id'.
+//                             ^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+abstract class N14 extends NIIx with NTTx<int> {}
+//             ^^^
+// [cfe] Applying the mixin 'NTTx' to 'NIIx' introduces an erroneous override of 'id'.
+//             ^
+// [cfe] Class 'NIIx with NTTx<int>' inherits multiple members named 'id' with incompatible signatures.
+//                                   ^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+
+// Optional positional parameters
+abstract class OII {
+  int? id([int? x]) => x;
+}
+
+class OIII {
+  int? id([int? x, int? y]) => y;
+}
+
+class OIIy {
+  int? id([int? y]) => y;
+}
+
+class PII {
+  int? id(int? x) => x;
+}
+
+// It's OK to introduce more optional parameters.
+abstract class O1 = OII with OIII;
+abstract class O2 extends OII with OIII {}
+// It's OK to rename optional parameters.
+abstract class O3 = OII with OIIy;
+abstract class O4 extends OII with OIIy {}
+// It's NOT OK to drop optional parameters.
+abstract class O5 = OII with PII;
+//             ^
+// [cfe] The mixin application class 'O5' introduces an erroneous override of 'id'.
+//                           ^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+abstract class O6 extends OII with PII {}
+//             ^
+// [cfe] Applying the mixin 'PII' to 'OII' introduces an erroneous override of 'id'.
+//                                 ^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+
+class OBAB<A, B> {
+  B? id ([A? x, B? y]) => y;
+}
+
+class OTTy<T> {
+  T? id([T? y]) => y;
+}
+
+class PTT<T> {
+  T? id(T? x) => x;
+}
+
+// Same as above but with generic classes.
+abstract class O7 = OII with OBAB<int, int>;
+abstract class O8 extends OII with OBAB<int, int> {}
+abstract class O9 = OII with OBAB<String, int>;
+//             ^^
+// [cfe] Class 'O9' inherits multiple members named 'id' with incompatible signatures.
+//             ^
+// [cfe] The mixin application class 'O9' introduces an erroneous override of 'id'.
+//                           ^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+abstract class O10 extends OII with OBAB<String, int> {}
+//             ^^^
+// [cfe] Applying the mixin 'OBAB' to 'OII' introduces an erroneous override of 'id'.
+//             ^
+// [cfe] Class 'OII with OBAB<String, int>' inherits multiple members named 'id' with incompatible signatures.
+//                                  ^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+abstract class O11 = OII with OTTy<int>;
+abstract class O12 extends OII with OTTy<int> {}
+abstract class O13 = OII with PTT<int>;
+//             ^
+// [cfe] The mixin application class 'O13' introduces an erroneous override of 'id'.
+//                            ^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+abstract class O14 extends OII with PTT<int> {}
+//             ^
+// [cfe] Applying the mixin 'PTT' to 'OII' introduces an erroneous override of 'id'.
+//                                  ^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+
+// More tests with generic classes.
+abstract class GTTnum {
+  T id<T extends num>(x);
+}
+
+class MTTnum {
+  T id<T extends num>(x) => x;
+}
+
+class MTTint {
+  T id<T extends int>(x) => x;
+}
+
+class MTT {
+  T id<T>(x) => x;
+}
+
+class MTTnumR {
+  T id<T extends num, R>(x) => x;
+}
+class G1 = GTTnum with MTTnum;
+class G2 = GTTnum with MTTint;
+//    ^^
+// [cfe] Class 'G2' inherits multiple members named 'id' with incompatible signatures.
+//    ^
+// [cfe] The mixin application class 'G2' introduces an erroneous override of 'id'.
+//                     ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+class G3 = GTTnum with MTT;
+//    ^^
+// [cfe] Class 'G3' inherits multiple members named 'id' with incompatible signatures.
+//    ^
+// [cfe] The mixin application class 'G3' introduces an erroneous override of 'id'.
+//                     ^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+class G4 = GTTnum with MTTnumR;
+//    ^^
+// [cfe] Class 'G4' inherits multiple members named 'id' with incompatible signatures.
+//    ^
+// [cfe] The mixin application class 'G4' introduces an erroneous override of 'id'.
+//                     ^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+class G5 = GTTnum with CII;
+//    ^^
+// [analyzer] STATIC_WARNING.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+// [cfe] The mixin application class 'G5' introduces an erroneous override of 'id'.
+//    ^
+// [cfe] The non-abstract class 'G5' is missing implementations for these members:
+//                     ^^^
+// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+
+void main() {}
diff --git a/tests/language/mixin/method_test.dart b/tests/language/mixin/method_test.dart
new file mode 100644
index 0000000..20ef4648
--- /dev/null
+++ b/tests/language/mixin/method_test.dart
@@ -0,0 +1,54 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class S {
+  foo() => "S-foo";
+  baz() => "S-baz";
+}
+
+class M1 {
+  bar() => "M1-bar";
+}
+
+class M2 {
+  bar() => "M2-bar";
+  baz() => "M2-baz";
+  fez() => "M2-fez";
+}
+
+class C = S with M1;
+class D = S with M1, M2;
+class E = S with M2, M1;
+
+class F extends E {
+  fez() => "F-fez";
+}
+
+main() {
+  dynamic c = new C();
+  Expect.equals("S-foo", c.foo());
+  Expect.equals("M1-bar", c.bar());
+  Expect.equals("S-baz", c.baz());
+  Expect.throwsNoSuchMethodError(() => c.fez());
+
+  var d = new D();
+  Expect.equals("S-foo", d.foo());
+  Expect.equals("M2-bar", d.bar());
+  Expect.equals("M2-baz", d.baz());
+  Expect.equals("M2-fez", d.fez());
+
+  var e = new E();
+  Expect.equals("S-foo", e.foo());
+  Expect.equals("M1-bar", e.bar());
+  Expect.equals("M2-baz", e.baz());
+  Expect.equals("M2-fez", e.fez());
+
+  var f = new F();
+  Expect.equals("S-foo", f.foo());
+  Expect.equals("M1-bar", f.bar());
+  Expect.equals("M2-baz", f.baz());
+  Expect.equals("F-fez", f.fez());
+}
diff --git a/tests/language/mixin/mixin2_test.dart b/tests/language/mixin/mixin2_test.dart
new file mode 100644
index 0000000..b9da579
--- /dev/null
+++ b/tests/language/mixin/mixin2_test.dart
@@ -0,0 +1,34 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class M<T> {
+  t() {
+    return T;
+  }
+}
+
+class A<U> = Object with M<U>;
+
+class B<V> = Object with A<V>;
+
+class C<U> = Object with M<List<U>>;
+
+class D<V> = Object with C<Set<V>>;
+
+class E extends A<num> {}
+
+class F extends B<String> {}
+
+class G<T> extends C<T> {}
+
+class H<T> extends D<Map<String, T>> {}
+
+main() {
+  Expect.equals("num", new E().t().toString());
+  Expect.equals("String", new F().t().toString());
+  Expect.equals("List<bool>", new G<bool>().t().toString());
+  Expect.equals("List<Set<Map<String, int>>>", new H<int>().t().toString());
+}
diff --git a/tests/language/mixin/mixin3_test.dart b/tests/language/mixin/mixin3_test.dart
new file mode 100644
index 0000000..ecdb2bd
--- /dev/null
+++ b/tests/language/mixin/mixin3_test.dart
@@ -0,0 +1,51 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class M<T> {
+  t() {
+    return T;
+  }
+}
+
+class A<U> = Object with M<List<U>>;
+
+class B0 = Object with A<Set<bool>>;
+
+class B1 = Object with A<Set<int>>;
+
+class C0 extends B0 {}
+
+class C1 extends B1 {}
+
+class A2<K, V> = Object with M<Map<K, V>>;
+
+class B2<V> = Object with A2<Set<V>, List<V>>;
+
+class B3<K, V> = Object with A2<Set<K>, List<V>>;
+
+class C2<T> extends B2<T> {}
+
+class C3<T> extends B3<T, int> {}
+
+class N {
+  q() {
+    return 42;
+  }
+}
+
+class O<U> = Object with N;
+
+class P<K, V> = Object with O<V>;
+
+class Q<K, V> extends P<K, V> {}
+
+main() {
+  Expect.equals("List<Set<bool>>", new C0().t().toString());
+  Expect.equals("List<Set<int>>", new C1().t().toString());
+  Expect.equals("Map<Set<bool>, List<bool>>", new C2<bool>().t().toString());
+  Expect.equals("Map<Set<bool>, List<int>>", new C3<bool>().t().toString());
+  Expect.equals(42, new Q<bool, int>().q());
+}
diff --git a/tests/language/mixin/mixin4_test.dart b/tests/language/mixin/mixin4_test.dart
new file mode 100644
index 0000000..a982532
--- /dev/null
+++ b/tests/language/mixin/mixin4_test.dart
@@ -0,0 +1,31 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class I<T> {}
+
+class J<T> {}
+
+class S<T> {}
+
+class M<T> {
+  t() {
+    return T;
+  }
+}
+
+class A<U, V> = Object with M<Map<U, V>> implements I<V>;
+
+class C<T, K> = S<T> with A<T, List<K>> implements J<K>;
+
+main() {
+  var c = new C<int, bool>();
+  Expect.equals("Map<int, List<bool>>", c.t().toString());
+  Expect.isTrue(c is I<List<bool>>);
+  Expect.isTrue(c is J<bool>);
+  Expect.isTrue(c is S<int>);
+  Expect.isTrue(c is A<int, List<bool>>);
+  Expect.isTrue(c is M<Map<int, List<bool>>>);
+}
diff --git a/tests/language/mixin/mixin5_test.dart b/tests/language/mixin/mixin5_test.dart
new file mode 100644
index 0000000..064f53b
--- /dev/null
+++ b/tests/language/mixin/mixin5_test.dart
@@ -0,0 +1,36 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class I<T> {}
+
+class J<T> {}
+
+class K<T> {}
+
+class S<T> {}
+
+class M<T> {
+  m() {
+    return T;
+  }
+}
+
+class A<U, V> = Object with M<Map<U, V>> implements I<V>;
+
+class B<T> = Object with A<T, Set<T>> implements J<T>;
+
+class C<T> = S<List<T>> with B<List<T>> implements K<T>;
+
+main() {
+  var c = new C<int>();
+  Expect.equals("Map<List<int>, Set<List<int>>>", c.m().toString());
+  Expect.isTrue(c is K<int>);
+  Expect.isTrue(c is J<List<int>>);
+  Expect.isTrue(c is I<Set<List<int>>>);
+  Expect.isTrue(c is S<List<int>>);
+  Expect.isTrue(c is A<List<int>, Set<List<int>>>);
+  Expect.isTrue(c is M<Map<List<int>, Set<List<int>>>>);
+}
diff --git a/tests/language/mixin/mixin6_test.dart b/tests/language/mixin/mixin6_test.dart
new file mode 100644
index 0000000..eb2cadc
--- /dev/null
+++ b/tests/language/mixin/mixin6_test.dart
@@ -0,0 +1,36 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class I<T> {}
+
+class J<T> {}
+
+class K<T> {}
+
+class S<T> {}
+
+class M<T> {
+  m() {
+    return T;
+  }
+}
+
+class A<U, V> = Object with M<Map<U, V>> implements I<V>;
+
+class B<T> = Object with A<T, Set<T>> implements J<T>;
+
+class C<T> = S<List<T>> with B implements K<T>; // B is raw.
+
+main() {
+  var c = new C<int>();
+  Expect.equals("Map<dynamic, Set<dynamic>>", c.m().toString());
+  Expect.isTrue(c is K<int>);
+  Expect.isTrue(c is J);
+  Expect.isTrue(c is I<Set>);
+  Expect.isTrue(c is S<List<int>>);
+  Expect.isTrue(c is A<dynamic, Set>);
+  Expect.isTrue(c is M<Map<dynamic, Set>>);
+}
diff --git a/tests/language/mixin/mixin7_test.dart b/tests/language/mixin/mixin7_test.dart
new file mode 100644
index 0000000..3c5c282
--- /dev/null
+++ b/tests/language/mixin/mixin7_test.dart
@@ -0,0 +1,36 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class I<T> {}
+
+class J<T> {}
+
+class K<T> {}
+
+class S<T> {}
+
+class M<T> {
+  m() {
+    return T;
+  }
+}
+
+class A<U, V> = Object with M implements I<V>; // M is raw.
+
+class B<T> = Object with A implements J<T>; // A is raw.
+
+class C<T> = S<List<T>> with B implements K<T>; // B is raw.
+
+main() {
+  var c = new C<int>();
+  Expect.equals("dynamic", c.m().toString());
+  Expect.isTrue(c is K<int>);
+  Expect.isTrue(c is J);
+  Expect.isTrue(c is I);
+  Expect.isTrue(c is S<List<int>>);
+  Expect.isTrue(c is A);
+  Expect.isTrue(c is M);
+}
diff --git a/tests/language/mixin/mixin_bound2_test.dart b/tests/language/mixin/mixin_bound2_test.dart
new file mode 100644
index 0000000..76da3a9
--- /dev/null
+++ b/tests/language/mixin/mixin_bound2_test.dart
@@ -0,0 +1,37 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class I<T> {}
+
+class J<T> {}
+
+class K<T> {}
+
+class S<U extends Set<V>, V> {}
+
+class M<U, V, T extends Map<U, V>> {
+  m() {
+    return T;
+  }
+}
+
+class A<U, V extends Set<U>> = Object with M<U, V, Map<U, V>> implements I<V>;
+
+class B<T extends List<num>> = Object with A<T, Set<T>> implements J<T>;
+
+class C<T extends num> = S<Set<T>, T> with B<List<T>> implements K<T>;
+
+main() {
+  var c = new C<int>();
+  Expect.equals("Map<List<int>, Set<List<int>>>", c.m().toString());
+  Expect.isTrue(c is K<int>);
+  Expect.isTrue(c is J<List<int>>);
+  Expect.isTrue(c is I<Set<List<int>>>);
+  Expect.isTrue(c is S<Set<int>, int>);
+  Expect.isTrue(c is A<List<int>, Set<List<int>>>);
+  Expect.isTrue(
+      c is M<List<int>, Set<List<int>>, Map<List<int>, Set<List<int>>>>);
+}
diff --git a/tests/language/mixin/mixin_bound_test.dart b/tests/language/mixin/mixin_bound_test.dart
new file mode 100644
index 0000000..dfa6273
--- /dev/null
+++ b/tests/language/mixin/mixin_bound_test.dart
@@ -0,0 +1,31 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class I<T> {}
+
+class J<T> {}
+
+class S<U extends Set<V>, V> {}
+
+class M<U, V, T extends Map<U, V>> {
+  t() {
+    return T;
+  }
+}
+
+class A<U, V extends List> = Object with M<U, V, Map<U, V>> implements I<V>;
+
+class C<T, K> = S<Set<T>, T> with A<T, List<K>> implements J<K>;
+
+main() {
+  var c = new C<int, bool>();
+  Expect.equals("Map<int, List<bool>>", c.t().toString());
+  Expect.isTrue(c is I<List<bool>>);
+  Expect.isTrue(c is J<bool>);
+  Expect.isTrue(c is S<Set<int>, int>);
+  Expect.isTrue(c is A<int, List<bool>>);
+  Expect.isTrue(c is M<int, List<bool>, Map<int, List<bool>>>);
+}
diff --git a/tests/language/mixin/mixin_test.dart b/tests/language/mixin/mixin_test.dart
new file mode 100644
index 0000000..8f32aba
--- /dev/null
+++ b/tests/language/mixin/mixin_test.dart
@@ -0,0 +1,24 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class M1 {
+  foo() => 42;
+}
+
+class M2 = Object with M1;
+
+class S {}
+
+class C = S with M2;
+
+main() {
+  var c = new C();
+  Expect.isTrue(c is S);
+  Expect.isTrue(c is M1);
+  Expect.isTrue(c is M2);
+  Expect.isTrue(c is C);
+  Expect.equals(42, c.foo());
+}
diff --git a/tests/language/mixin/mixin_type_arguments_test.dart b/tests/language/mixin/mixin_type_arguments_test.dart
new file mode 100644
index 0000000..08a3d9c
--- /dev/null
+++ b/tests/language/mixin/mixin_type_arguments_test.dart
@@ -0,0 +1,97 @@
+// 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:expect/expect.dart' show Expect;
+
+@pragma("vm:entry-point") // Prevent obfuscation
+class A {}
+
+@pragma("vm:entry-point") // Prevent obfuscation
+class B {}
+
+@pragma("vm:entry-point") // Prevent obfuscation
+class C {}
+
+@pragma("vm:entry-point") // Prevent obfuscation
+class D {}
+
+@pragma("vm:entry-point") // Prevent obfuscation
+class E {}
+
+@pragma("vm:entry-point") // Prevent obfuscation
+class F {}
+
+@pragma("vm:entry-point") // Prevent obfuscation
+class M1<Tm1> {
+  m1() => "M1<$Tm1>";
+}
+
+@pragma("vm:entry-point") // Prevent obfuscation
+class M2<Tm2> {
+  m2() => "M2<$Tm2>";
+}
+
+@pragma("vm:entry-point") // Prevent obfuscation
+class M3<Tm3> {
+  m3() => "M3<$Tm3>";
+}
+
+@pragma("vm:entry-point") // Prevent obfuscation
+class M4<Tm4> {
+  m4() => "M4<$Tm4>";
+}
+
+@pragma("vm:entry-point") // Prevent obfuscation
+class M5<Tm5> {
+  m5() => "M5<$Tm5>";
+}
+
+class C1 = Object with M1, M2<A>, M3, M4<B>, M5<C>;
+
+class C2 = Object with M1<A>, M2<B>, M3<C>, M4<D>, M5<E>;
+
+class C3<T> = Object with M1<A>, M2<T>, M3, M4, M5<B>;
+
+class C4 extends Object with M1, M2<A>, M3, M4<B>, M5<C> {}
+
+class C5 extends Object with M1<A>, M2<B>, M3<C>, M4<D>, M5<E> {}
+
+class C6<T> extends Object with M1<A>, M2<T>, M3, M4, M5<B> {}
+
+class C7 = Object with M1<A>, M2<A>, M3<A>, M4<A>, M5<A>;
+
+class C8 extends Object with M1<A>, M2<A>, M3<A>, M4<A>, M5<A> {}
+
+class C9 = Object
+    with M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>>;
+
+class CA extends Object
+    with M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>> {}
+
+trace(x) => "${x.m1()}, ${x.m2()}, ${x.m3()}, ${x.m4()}, ${x.m5()}";
+
+main() {
+  Expect.stringEquals(
+      "M1<dynamic>, M2<A>, M3<dynamic>, M4<B>, M5<C>", trace(new C1()));
+  Expect.stringEquals("M1<A>, M2<B>, M3<C>, M4<D>, M5<E>", trace(new C2()));
+  Expect.stringEquals(
+      "M1<A>, M2<dynamic>, M3<dynamic>, M4<dynamic>, M5<B>", trace(new C3()));
+  Expect.stringEquals(
+      "M1<A>, M2<F>, M3<dynamic>, M4<dynamic>, M5<B>", trace(new C3<F>()));
+  Expect.stringEquals(
+      "M1<dynamic>, M2<A>, M3<dynamic>, M4<B>, M5<C>", trace(new C4()));
+  Expect.stringEquals("M1<A>, M2<B>, M3<C>, M4<D>, M5<E>", trace(new C5()));
+  Expect.stringEquals(
+      "M1<A>, M2<dynamic>, M3<dynamic>, M4<dynamic>, M5<B>", trace(new C6()));
+  Expect.stringEquals(
+      "M1<A>, M2<F>, M3<dynamic>, M4<dynamic>, M5<B>", trace(new C6<F>()));
+  Expect.stringEquals("M1<A>, M2<A>, M3<A>, M4<A>, M5<A>", trace(new C7()));
+  Expect.stringEquals("M1<A>, M2<A>, M3<A>, M4<A>, M5<A>", trace(new C8()));
+  Expect.stringEquals(
+      "M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>>",
+      trace(new C9()));
+  Expect.stringEquals(
+      "M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>>",
+      trace(new CA()));
+}
diff --git a/tests/language/mixin/named_constructor_test.dart b/tests/language/mixin/named_constructor_test.dart
new file mode 100644
index 0000000..081af92
--- /dev/null
+++ b/tests/language/mixin/named_constructor_test.dart
@@ -0,0 +1,30 @@
+// 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:expect/expect.dart";
+
+var calls = <String>[];
+
+abstract class A {
+  bool _done = true;
+  var a = calls.add('A()') as dynamic;
+}
+
+abstract class B {
+  B.protected() {
+    calls.add('B.protected()');
+  }
+}
+
+class C extends B with A {
+  C() : super.protected() {
+    calls.add('C()');
+  }
+}
+
+void main() {
+  var c = new C();
+  Expect.isTrue(c._done);
+  Expect.equals(calls.join(', '), 'A(), B.protected(), C()');
+}
diff --git a/tests/language/mixin/naming_test.dart b/tests/language/mixin/naming_test.dart
new file mode 100644
index 0000000..a4c267a
--- /dev/null
+++ b/tests/language/mixin/naming_test.dart
@@ -0,0 +1,51 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class S {}
+
+class M1 {}
+
+class M2 {}
+
+class M3 {}
+
+class C = S with M1, M2, M3;
+
+class D extends S with M1, M2, M3 {}
+
+class S_M1 {}
+
+class S_M1_M2 {}
+
+main() {
+  var c = new C();
+  Expect.isTrue(c is C);
+  Expect.isFalse(c is D);
+  Expect.isTrue(c is S);
+  Expect.isFalse(c is S_M1);
+  Expect.isFalse(c is S_M1_M2);
+
+  var d = new D();
+  Expect.isFalse(d is C);
+  Expect.isTrue(d is D);
+  Expect.isTrue(d is S);
+  Expect.isFalse(d is S_M1);
+  Expect.isFalse(d is S_M1_M2);
+
+  var sm = new S_M1();
+  Expect.isFalse(sm is C);
+  Expect.isFalse(sm is D);
+  Expect.isFalse(sm is S);
+  Expect.isTrue(sm is S_M1);
+  Expect.isFalse(sm is S_M1_M2);
+
+  var smm = new S_M1_M2();
+  Expect.isFalse(smm is C);
+  Expect.isFalse(smm is D);
+  Expect.isFalse(smm is S);
+  Expect.isFalse(smm is S_M1);
+  Expect.isTrue(smm is S_M1_M2);
+}
diff --git a/tests/language/mixin/only_for_rti_test.dart b/tests/language/mixin/only_for_rti_test.dart
new file mode 100644
index 0000000..d401e85
--- /dev/null
+++ b/tests/language/mixin/only_for_rti_test.dart
@@ -0,0 +1,29 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class Tester<T> {
+  testGenericType(x) {
+    return x is T;
+  }
+}
+
+abstract class A = B with C;
+
+class B {}
+
+class C {}
+
+class X extends Y with Z {}
+
+class Y {}
+
+class Z {}
+
+main() {
+  // Classes A and X are only used as generic arguments.
+  Expect.isFalse(new Tester<A>().testGenericType(new Object()));
+  Expect.isFalse(new Tester<X>().testGenericType(new Object()));
+}
diff --git a/tests/language/mixin/override_regression_test.dart b/tests/language/mixin/override_regression_test.dart
new file mode 100644
index 0000000..cb032e0
--- /dev/null
+++ b/tests/language/mixin/override_regression_test.dart
@@ -0,0 +1,25 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class C0 {
+  int m1() => 5;
+  int m2() => m1();
+}
+
+class C1 = Object with C0;
+
+class D {
+  int m1() => 7;
+}
+
+class E0 extends C0 with D {}
+
+class E1 extends C1 with D {}
+
+main() {
+  Expect.equals(7, new E0().m2());
+  Expect.equals(7, new E1().m2());
+}
diff --git a/tests/language/mixin/prefix_lib.dart b/tests/language/mixin/prefix_lib.dart
new file mode 100644
index 0000000..031c040
--- /dev/null
+++ b/tests/language/mixin/prefix_lib.dart
@@ -0,0 +1,11 @@
+// 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.
+
+library mixin_prefix_lib;
+
+import "dart:convert";
+
+class MixinClass {
+  String bar() => json.encode({'a': 1});
+}
diff --git a/tests/language/mixin/prefix_test.dart b/tests/language/mixin/prefix_test.dart
new file mode 100644
index 0000000..59eb442
--- /dev/null
+++ b/tests/language/mixin/prefix_test.dart
@@ -0,0 +1,17 @@
+// 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.
+
+// Regression test for issue 11891.
+
+import "package:expect/expect.dart";
+import "prefix_lib.dart";
+
+class A extends Object with MixinClass {
+  String baz() => bar();
+}
+
+void main() {
+  var a = new A();
+  Expect.equals('{"a":1}', a.baz());
+}
diff --git a/tests/language/mixin/proto_test.dart b/tests/language/mixin/proto_test.dart
new file mode 100644
index 0000000..b8b19f1
--- /dev/null
+++ b/tests/language/mixin/proto_test.dart
@@ -0,0 +1,40 @@
+// 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.
+
+// Tests that a program in csp mode doesn't access the prototype chain
+// on platforms that don't support direct access to __proto__.
+// This test is most useful with --csp and on a platform that doesn't support
+// __proto__ access (such as Rhino).
+// See http://dartbug.com/27290 .
+
+import 'package:expect/expect.dart';
+
+class A {
+  var x;
+  foo() => 44;
+  bar() => 22;
+}
+
+class B {
+  var y;
+  foo() => 42;
+}
+
+class C extends A with B {
+  var z;
+  bar() => 499;
+}
+
+@pragma('dart2js:noInline')
+@pragma('dart2js:assumeDynamic')
+confuse(x) => x;
+
+main() {
+  var all = [new A(), new B(), new C()];
+  Expect.equals(44, confuse(all[0]).foo());
+  Expect.equals(22, confuse(all[0]).bar());
+  Expect.equals(42, confuse(all[1]).foo());
+  Expect.equals(42, confuse(all[2]).foo());
+  Expect.equals(499, confuse(all[2]).bar());
+}
diff --git a/tests/language/mixin/recursive_mixin_test.dart b/tests/language/mixin/recursive_mixin_test.dart
new file mode 100644
index 0000000..a961ea91
--- /dev/null
+++ b/tests/language/mixin/recursive_mixin_test.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class A<T> {
+  bool foo(T x) => true;
+}
+
+class B extends Object with A<B>, C<B> {}
+
+// Tests #31290
+class C<T> {}
+
+main() {
+  var b = new B();
+  Expect.isTrue(b is B);
+  Expect.isTrue(b is A);
+  Expect.isTrue(b is C);
+
+  // Verify that runtime checking enforces A<B> instead of A
+  dynamic d = b;
+  Expect.isTrue(d.foo(b));
+  Expect.throws(() => d.foo(42));
+}
diff --git a/tests/language/mixin/regress_11398_test.dart b/tests/language/mixin/regress_11398_test.dart
new file mode 100644
index 0000000..eb6079a
--- /dev/null
+++ b/tests/language/mixin/regress_11398_test.dart
@@ -0,0 +1,44 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+void main() {
+  var hva = new HasValueA();
+  hva.value = '42';
+  Expect.equals('42', hva.value);
+
+  var hvb = new HasValueB();
+  hvb.value = '87';
+  Expect.equals('87', hvb.value);
+
+  var hvc = new HasValueC();
+  hvc.value = '99';
+  Expect.equals('99', hvc.value);
+}
+
+abstract class Delegate {
+  String invoke(String value);
+}
+
+abstract class DelegateMixin {
+  String invoke(String value) => value;
+}
+
+abstract class HasValueMixin implements Delegate {
+  String _value = '';
+  set value(String value) {
+    _value = invoke(value);
+  }
+
+  String get value => _value;
+}
+
+class HasValueA extends Object with HasValueMixin, DelegateMixin {}
+
+class HasValueB extends Object with DelegateMixin, HasValueMixin {}
+
+class HasValueC extends Object with HasValueMixin {
+  String invoke(String value) => value;
+}
diff --git a/tests/language/mixin/regress_13688_test.dart b/tests/language/mixin/regress_13688_test.dart
new file mode 100644
index 0000000..0c01537
--- /dev/null
+++ b/tests/language/mixin/regress_13688_test.dart
@@ -0,0 +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.
+
+import "package:expect/expect.dart";
+
+class ComparableMixin<E> {
+  e() {
+    return E;
+  }
+}
+
+class KUID extends Object with ComparableMixin<KUID> {}
+
+main() {
+  var kuid = new KUID();
+  Expect.equals(kuid.runtimeType.toString(), kuid.e().toString());
+}
diff --git a/tests/language/mixin/substitution_test.dart b/tests/language/mixin/substitution_test.dart
new file mode 100644
index 0000000..d6121db
--- /dev/null
+++ b/tests/language/mixin/substitution_test.dart
@@ -0,0 +1,26 @@
+// 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.
+
+// Test that mixins don't interfere with type variable substitution.
+
+import '../dynamic_type_helper.dart';
+
+class B<T> {
+  B(T x);
+}
+
+class M {}
+
+class A<T> extends B<T> with M {
+  A(T x) : super(x); // This line must be warning free.
+}
+
+class C<T> = B<T> with M;
+
+main() {
+  new A(null);
+  new C<String>('');
+  dynamic value = 0;
+  checkDynamicTypeError(() => new C<String>(value));
+}
diff --git a/tests/language/mixin/super_2_test.dart b/tests/language/mixin/super_2_test.dart
new file mode 100644
index 0000000..aac47ff
--- /dev/null
+++ b/tests/language/mixin/super_2_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 "package:expect/expect.dart";
+
+class B {
+  // 'super' resolves to Object, and in some tests, multiple points in the
+  // inheritance chain.
+  toString() => 'B(' + super.toString() + ')';
+}
+
+class R {
+  toString() => 'R[' + super.toString() + ']';
+}
+
+class D extends R with B {
+  toString() => 'D<' + super.toString() + '>';
+}
+
+class E extends D with B {
+  toString() => 'E{' + super.toString() + '}';
+}
+
+class F = R with B, B;
+
+class G extends F with B {
+  toString() => 'G{' + super.toString() + '}';
+}
+
+main() {
+  check(object, String expected) {
+    Expect.equals(expected, object.toString());
+  }
+
+  check(B(), "B(Instance of '$B')");
+  check(R(), "R[Instance of '$R']");
+  check(D(), "D<B(R[Instance of '$D'])>");
+  check(E(), "E{B(D<B(R[Instance of '$E'])>)}");
+  check(G(), "G{B(B(B(R[Instance of '$G'])))}");
+}
diff --git a/tests/language/mixin/super_bound_runtime_test.dart b/tests/language/mixin/super_bound_runtime_test.dart
new file mode 100644
index 0000000..6214978
--- /dev/null
+++ b/tests/language/mixin/super_bound_runtime_test.dart
@@ -0,0 +1,29 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+class M<U extends V, V> {}
+
+class N<U, V extends U> {}
+
+class S<T> {}
+
+class MNA<U, V extends U, W> extends S<List<U>>
+    with M<V, U>, N<List<W>, List<W>> {}
+
+class MNA2<U, V extends U, W> = S<List<U>> with M<V, U>, N<List<W>, List<W>>;
+
+main() {
+  new MNA<num, int, bool>();
+  new MNA2<num, int, bool>();
+
+  // Type parameter U of M must extend type parameter V, but
+  // type argument num is not a subtype of int.
+
+  // Type parameter U of M must extend type parameter V, but
+  // type argument num is not a subtype of int.
+
+}
diff --git a/tests/language/mixin/super_bound_test.dart b/tests/language/mixin/super_bound_test.dart
new file mode 100644
index 0000000..634c838
--- /dev/null
+++ b/tests/language/mixin/super_bound_test.dart
@@ -0,0 +1,35 @@
+// 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.
+
+class M<U extends V, V> {}
+
+class N<U, V extends U> {}
+
+class S<T> {}
+
+class MNA<U, V extends U, W> extends S<List<U>>
+    with M<V, U>, N<List<W>, List<W>> {}
+
+class MNA2<U, V extends U, W> = S<List<U>> with M<V, U>, N<List<W>, List<W>>;
+
+main() {
+  new MNA<num, int, bool>();
+  new MNA2<num, int, bool>();
+
+  // Type parameter U of M must extend type parameter V, but
+  // type argument num is not a subtype of int.
+  new MNA<int, num, bool>();
+  //  ^
+  // [cfe] Type argument 'num' doesn't conform to the bound 'U' of the type variable 'V' on 'MNA'.
+  //           ^^^
+  // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
+
+  // Type parameter U of M must extend type parameter V, but
+  // type argument num is not a subtype of int.
+  new MNA2<int, num, bool>();
+  //  ^
+  // [cfe] Type argument 'num' doesn't conform to the bound 'U' of the type variable 'V' on 'MNA2'.
+  //            ^^^
+  // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
+}
diff --git a/tests/language/mixin/super_constructor2_test.dart b/tests/language/mixin/super_constructor2_test.dart
new file mode 100644
index 0000000..bb3b60e
--- /dev/null
+++ b/tests/language/mixin/super_constructor2_test.dart
@@ -0,0 +1,39 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class Base {
+  var i, j;
+  Base.ctor1(int i, this.j) : this.i = i + 7;
+  Base.ctor2(int i, this.j) : this.i = i + 8;
+}
+
+abstract class M {
+  get i;
+  get j;
+  int k = 42;
+  foo() => i + j;
+}
+
+class C extends Base with M {
+  int l = 131;
+  C.ctor1() : super.ctor1(1, 13);
+  C.ctor2() : super.ctor2(1, 13);
+}
+
+main() {
+  C c1 = new C.ctor1();
+  Expect.equals(8, c1.i);
+  Expect.equals(13, c1.j);
+  Expect.equals(42, c1.k);
+  Expect.equals(131, c1.l);
+  Expect.equals(21, c1.foo());
+  C c2 = new C.ctor2();
+  Expect.equals(9, c2.i);
+  Expect.equals(13, c2.j);
+  Expect.equals(42, c2.k);
+  Expect.equals(131, c2.l);
+  Expect.equals(22, c2.foo());
+}
diff --git a/tests/language/mixin/super_constructor_default_test.dart b/tests/language/mixin/super_constructor_default_test.dart
new file mode 100644
index 0000000..81f2bfc
--- /dev/null
+++ b/tests/language/mixin/super_constructor_default_test.dart
@@ -0,0 +1,31 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class Base {
+  int i, j;
+  Base(int i, this.j) : this.i = i + 7;
+}
+
+abstract class M {
+  int get i;
+  int get j;
+  int k = 42;
+  foo() => i + j;
+}
+
+class C extends Base with M {
+  int l = 131;
+  C() : super(1, 13);
+}
+
+main() {
+  C c = new C();
+  Expect.equals(8, c.i);
+  Expect.equals(13, c.j);
+  Expect.equals(21, c.foo());
+  Expect.equals(42, c.k);
+  Expect.equals(131, c.l);
+}
diff --git a/tests/language/mixin/super_constructor_multiple_test.dart b/tests/language/mixin/super_constructor_multiple_test.dart
new file mode 100644
index 0000000..5201be3
--- /dev/null
+++ b/tests/language/mixin/super_constructor_multiple_test.dart
@@ -0,0 +1,22 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class S {
+  int i;
+  S.foo() : i = 1742;
+}
+
+class M1 {}
+
+class M2 {}
+
+class C extends S with M1, M2 {
+  C.foo() : super.foo();
+}
+
+main() {
+  Expect.equals(1742, new C.foo().i);
+}
diff --git a/tests/language/mixin/super_constructor_named_test.dart b/tests/language/mixin/super_constructor_named_test.dart
new file mode 100644
index 0000000..930877a
--- /dev/null
+++ b/tests/language/mixin/super_constructor_named_test.dart
@@ -0,0 +1,39 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class Base {
+  int? i, j;
+  Base.ctor(int? this.i
+            , {int? this.j: 10} //   //# 01: ok
+      ) {
+    if (j == null) {
+      j = 10;
+    }
+  }
+}
+
+abstract class M {
+  int? get i;
+  int? get j;
+  int k = 42;
+  foo() => i! + j!;
+}
+
+class C extends Base with M {
+  int l = 131;
+  C.foo() : super.ctor(1, j: 13); //# 01: continued
+  C.bar() : super.ctor(1);
+}
+
+main() {
+  C c1 = new C.foo(); //            //# 01: continued
+  C c2 = new C.bar();
+  Expect.equals(1, c2.i);
+  Expect.equals(10, c2.j);
+  Expect.equals(11, c2.foo());
+  Expect.equals(42, c2.k);
+  Expect.equals(131, c2.l);
+}
diff --git a/tests/language/mixin/super_constructor_positionals_test.dart b/tests/language/mixin/super_constructor_positionals_test.dart
new file mode 100644
index 0000000..d896276
--- /dev/null
+++ b/tests/language/mixin/super_constructor_positionals_test.dart
@@ -0,0 +1,38 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class Base {
+  int? i, j;
+  Base.ctor(
+      int? this.i,
+            [ //                 //# 01: ok
+      int? this.j
+            ] //                 //# 01: continued
+      );
+}
+
+abstract class M {
+  int? get i;
+  int? get j;
+  int k = 42;
+  foo() => i! + j!;
+}
+
+class C extends Base with M {
+  int l = 131;
+  C.foo() : super.ctor(1, 13);
+  C.bar() : super.ctor(1); //    //# 01: continued
+}
+
+main() {
+  C c1 = new C.foo();
+  Expect.equals(1, c1.i);
+  Expect.equals(13, c1.j);
+  Expect.equals(14, c1.foo());
+  Expect.equals(42, c1.k);
+  Expect.equals(131, c1.l);
+  C c2 = new C.bar(); //         //# 01: continued
+}
diff --git a/tests/language/mixin/super_constructor_test.dart b/tests/language/mixin/super_constructor_test.dart
new file mode 100644
index 0000000..f342fe8
--- /dev/null
+++ b/tests/language/mixin/super_constructor_test.dart
@@ -0,0 +1,31 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class Base {
+  int i, j;
+  Base.ctor(int i, this.j) : this.i = i + 7;
+}
+
+abstract class M {
+  int get i;
+  int get j;
+  int k = 42;
+  foo() => i + j;
+}
+
+class C extends Base with M {
+  int l = 131;
+  C() : super.ctor(1, 13);
+}
+
+main() {
+  C c = new C();
+  Expect.equals(8, c.i);
+  Expect.equals(13, c.j);
+  Expect.equals(42, c.k);
+  Expect.equals(131, c.l);
+  Expect.equals(21, c.foo());
+}
diff --git a/tests/language/mixin/super_test.dart b/tests/language/mixin/super_test.dart
new file mode 100644
index 0000000..77f72d6
--- /dev/null
+++ b/tests/language/mixin/super_test.dart
@@ -0,0 +1,104 @@
+// 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:expect/expect.dart";
+
+class MS<T> {
+  foo() {
+    return "MS<$T>.foo\n";
+  }
+}
+
+mixin M<T> on MS<List<T>> {
+  foo() {
+    return super.foo() + "M<$T>.foo\n";
+  }
+}
+
+class NS<T> {
+  foo() {
+    return "NS<$T>.foo\n";
+  }
+}
+
+mixin N<T> on NS<List<T>> {
+  foo() {
+    return super.foo() + "N<$T>.foo\n";
+  }
+}
+
+class S<T, V, W> implements MS<List<V>>, NS<List<W>> {
+  foo() {
+    return "S<$T,$V,$W>.foo\n";
+  }
+}
+
+class SM<U, V, W> = S<U, V, W> with M<V>;
+
+class MNA1<U, V, W> extends S<U, V, W> with M<V>, N<W> {
+  foo() {
+    return super.foo() + "MNA1<$U, $V, $W>.foo\n";
+  }
+}
+
+class MNA2<U, V, W> extends SM<U, V, W> with N<W> {
+  foo() {
+    return super.foo() + "MNA2<$U, $V, $W>.foo\n";
+  }
+}
+
+class MNA3<U, V, W> extends S<U, V, W> with M<V>, N<W> {
+  foo() {
+    return super.foo() + "MNA3<$U, $V, $W>.foo\n";
+  }
+}
+
+abstract class Base {
+  static String log = '';
+  Base() {
+    log += 'Base()\n';
+  }
+}
+
+mixin Foo on Base {
+  var x = Base.log += 'Foo.x\n';
+}
+
+mixin Bar on Base {
+  var y = Base.log += 'Bar.y\n';
+}
+
+class Derived extends Base with Foo, Bar {
+  String get log => Base.log;
+}
+
+main() {
+  Expect.equals(
+      "S<int,String,bool>.foo\n"
+      "M<String>.foo\n",
+      SM<int, String, bool>().foo());
+  Expect.equals(
+      "S<int,String,bool>.foo\n"
+      "M<String>.foo\n"
+      "N<bool>.foo\n"
+      "MNA1<int, String, bool>.foo\n",
+      MNA1<int, String, bool>().foo());
+  Expect.equals(
+      "S<int,String,bool>.foo\n"
+      "M<String>.foo\n"
+      "N<bool>.foo\n"
+      "MNA2<int, String, bool>.foo\n",
+      MNA2<int, String, bool>().foo());
+  Expect.equals(
+      "S<int,String,bool>.foo\n"
+      "M<String>.foo\n"
+      "N<bool>.foo\n"
+      "MNA3<int, String, bool>.foo\n",
+      MNA3<int, String, bool>().foo());
+  Expect.equals(
+      "Bar.y\n"
+      "Foo.x\n"
+      "Base()\n",
+      Derived().log);
+}
diff --git a/tests/language/mixin/super_use_test.dart b/tests/language/mixin/super_use_test.dart
new file mode 100644
index 0000000..f0fc152
--- /dev/null
+++ b/tests/language/mixin/super_use_test.dart
@@ -0,0 +1,65 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class M {}
+
+class P0 {
+  foo() {
+    super.toString();
+
+    void inner() {
+      super.toString();
+    }
+
+    inner();
+
+    (() {
+      super.toString();
+    })();
+
+    return 42;
+  }
+}
+
+class P1 {
+  bar() {
+    super.toString();
+    return 87;
+  }
+
+  // The test method is strategically placed here to try to force the
+  // P1 class and its bar method to be resolved before resolving the
+  // mixin applications.
+  test() {
+    new C();
+    var d = new D();
+    var e = new E();
+    var f = new F();
+    Expect.equals(42, d.foo());
+    Expect.equals(87, e.bar());
+    Expect.equals(99, f.baz());
+  }
+}
+
+class P2 {
+  baz() {
+    super.toString();
+    return 99;
+  }
+}
+
+class C = Object with M;
+class D = Object with P0;
+class E = Object with M, P1;
+class F = Object with P2, M;
+
+main() {
+  var p1 = new P1();
+  var p2 = new P2();
+  Expect.equals(87, p1.bar());
+  p1.test();
+  Expect.equals(99, p2.baz());
+}
diff --git a/tests/language/mixin/superclass_runtime_test.dart b/tests/language/mixin/superclass_runtime_test.dart
new file mode 100644
index 0000000..eeb1b9c
--- /dev/null
+++ b/tests/language/mixin/superclass_runtime_test.dart
@@ -0,0 +1,125 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+class S0 {}
+
+class S1 extends Object {}
+
+class S2 extends S0 {}
+
+class M0 {}
+
+class M1 extends Object {}
+
+mixin M2 on M0 {}
+
+class C00 = S0 with M0;
+class C01 = S0 with M1;
+
+class C03 = S0 with M0, M1;
+class C04 = S0 with M0, M2;
+
+
+
+
+class C10 = S1 with M0;
+class C11 = S1 with M1;
+
+class C13 = S1 with M0, M1;
+class C14 = S1 with M0, M2;
+
+
+
+
+class C20 = S2 with M0;
+class C21 = S2 with M1;
+
+class C23 = S2 with M0, M1;
+class C24 = S2 with M0, M2;
+
+
+
+
+class D00 extends S0 with M0 {}
+
+class D01 extends S0 with M1 {}
+
+
+
+class D03 extends S0 with M0, M1 {}
+
+class D04 extends S0 with M0, M2 {}
+
+
+
+
+
+
+
+class D10 extends S1 with M0 {}
+
+class D11 extends S1 with M1 {}
+
+
+
+class D13 extends S1 with M0, M1 {}
+
+class D14 extends S1 with M0, M2 {}
+
+
+
+
+
+
+
+class D20 extends S2 with M0 {}
+
+class D21 extends S2 with M1 {}
+
+
+
+class D23 extends S2 with M0, M1 {}
+
+class D24 extends S2 with M0, M2 {}
+
+
+
+
+
+
+
+main() {
+  new C00();
+  new C01();
+  new C03();
+  new C04();
+
+  new C10();
+  new C11();
+  new C13();
+  new C14();
+
+  new C20();
+  new C21();
+  new C23();
+  new C24();
+
+  new D00();
+  new D01();
+  new D03();
+  new D04();
+
+  new D10();
+  new D11();
+  new D13();
+  new D14();
+
+  new D20();
+  new D21();
+  new D23();
+  new D24();
+}
diff --git a/tests/language/mixin/superclass_test.dart b/tests/language/mixin/superclass_test.dart
new file mode 100644
index 0000000..5b9a8ee
--- /dev/null
+++ b/tests/language/mixin/superclass_test.dart
@@ -0,0 +1,218 @@
+// 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.
+
+class S0 {}
+
+class S1 extends Object {}
+
+class S2 extends S0 {}
+
+class M0 {}
+
+class M1 extends Object {}
+
+mixin M2 on M0 {}
+
+class C00 = S0 with M0;
+class C01 = S0 with M1;
+class C02 = S0 with M2;
+//    ^
+// [cfe] 'S0' doesn't implement 'M0' so it can't be used with 'M2'.
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+class C03 = S0 with M0, M1;
+class C04 = S0 with M0, M2;
+class C05 = S0 with M2, M0;
+//    ^
+// [cfe] 'S0' doesn't implement 'M0' so it can't be used with 'M2'.
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+class C06 = S0 with M1, M2;
+//    ^
+// [cfe] '_C06&S0&M1' doesn't implement 'M0' so it can't be used with 'M2'.
+//                      ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+class C07 = S0 with M2, M1;
+//    ^
+// [cfe] 'S0' doesn't implement 'M0' so it can't be used with 'M2'.
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+
+class C10 = S1 with M0;
+class C11 = S1 with M1;
+class C12 = S1 with M2;
+//    ^
+// [cfe] 'S1' doesn't implement 'M0' so it can't be used with 'M2'.
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+class C13 = S1 with M0, M1;
+class C14 = S1 with M0, M2;
+class C15 = S1 with M2, M0;
+//    ^
+// [cfe] 'S1' doesn't implement 'M0' so it can't be used with 'M2'.
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+class C16 = S1 with M1, M2;
+//    ^
+// [cfe] '_C16&S1&M1' doesn't implement 'M0' so it can't be used with 'M2'.
+//                      ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+class C17 = S1 with M2, M1;
+//    ^
+// [cfe] 'S1' doesn't implement 'M0' so it can't be used with 'M2'.
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+
+class C20 = S2 with M0;
+class C21 = S2 with M1;
+class C22 = S2 with M2;
+//    ^
+// [cfe] 'S2' doesn't implement 'M0' so it can't be used with 'M2'.
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+class C23 = S2 with M0, M1;
+class C24 = S2 with M0, M2;
+class C25 = S2 with M2, M0;
+//    ^
+// [cfe] 'S2' doesn't implement 'M0' so it can't be used with 'M2'.
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+class C26 = S2 with M1, M2;
+//    ^
+// [cfe] '_C26&S2&M1' doesn't implement 'M0' so it can't be used with 'M2'.
+//                      ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+class C27 = S2 with M2, M1;
+//    ^
+// [cfe] 'S2' doesn't implement 'M0' so it can't be used with 'M2'.
+//                  ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+
+class D00 extends S0 with M0 {}
+
+class D01 extends S0 with M1 {}
+
+class D02 extends S0 with M2 {}
+//    ^
+// [cfe] 'S0' doesn't implement 'M0' so it can't be used with 'M2'.
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+
+class D03 extends S0 with M0, M1 {}
+
+class D04 extends S0 with M0, M2 {}
+
+class D05 extends S0 with M2, M0 {}
+//    ^
+// [cfe] 'S0' doesn't implement 'M0' so it can't be used with 'M2'.
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+
+class D06 extends S0 with M1, M2 {}
+//    ^
+// [cfe] '_D06&S0&M1' doesn't implement 'M0' so it can't be used with 'M2'.
+//                            ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+
+class D07 extends S0 with M2, M1 {}
+//    ^
+// [cfe] 'S0' doesn't implement 'M0' so it can't be used with 'M2'.
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+
+class D10 extends S1 with M0 {}
+
+class D11 extends S1 with M1 {}
+
+class D12 extends S1 with M2 {}
+//    ^
+// [cfe] 'S1' doesn't implement 'M0' so it can't be used with 'M2'.
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+
+class D13 extends S1 with M0, M1 {}
+
+class D14 extends S1 with M0, M2 {}
+
+class D15 extends S1 with M2, M0 {}
+//    ^
+// [cfe] 'S1' doesn't implement 'M0' so it can't be used with 'M2'.
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+
+class D16 extends S1 with M1, M2 {}
+//    ^
+// [cfe] '_D16&S1&M1' doesn't implement 'M0' so it can't be used with 'M2'.
+//                            ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+
+class D17 extends S1 with M2, M1 {}
+//    ^
+// [cfe] 'S1' doesn't implement 'M0' so it can't be used with 'M2'.
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+
+class D20 extends S2 with M0 {}
+
+class D21 extends S2 with M1 {}
+
+class D22 extends S2 with M2 {}
+//    ^
+// [cfe] 'S2' doesn't implement 'M0' so it can't be used with 'M2'.
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+
+class D23 extends S2 with M0, M1 {}
+
+class D24 extends S2 with M0, M2 {}
+
+class D25 extends S2 with M2, M0 {}
+//    ^
+// [cfe] 'S2' doesn't implement 'M0' so it can't be used with 'M2'.
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+
+class D26 extends S2 with M1, M2 {}
+//    ^
+// [cfe] '_D26&S2&M1' doesn't implement 'M0' so it can't be used with 'M2'.
+//                            ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+
+class D27 extends S2 with M2, M1 {}
+//    ^
+// [cfe] 'S2' doesn't implement 'M0' so it can't be used with 'M2'.
+//                        ^^
+// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
+
+main() {
+  new C00();
+  new C01();
+  new C03();
+  new C04();
+
+  new C10();
+  new C11();
+  new C13();
+  new C14();
+
+  new C20();
+  new C21();
+  new C23();
+  new C24();
+
+  new D00();
+  new D01();
+  new D03();
+  new D04();
+
+  new D10();
+  new D11();
+  new D13();
+  new D14();
+
+  new D20();
+  new D21();
+  new D23();
+  new D24();
+}
diff --git a/tests/language/mixin/supertype_subclass2_test.dart b/tests/language/mixin/supertype_subclass2_test.dart
new file mode 100644
index 0000000..0bafafc
--- /dev/null
+++ b/tests/language/mixin/supertype_subclass2_test.dart
@@ -0,0 +1,28 @@
+// 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.
+
+class B {}
+
+class C {}
+
+class D {}
+
+class E extends B with C implements D {}
+
+class F extends E {}
+
+// M is mixed onto E which implements B, C and D.
+mixin M //
+  on B //# 01: ok
+  on C //# 02: ok
+  on D //# 03: ok
+  on E //# 04: ok
+  on F //# 05: compile-time error
+{}
+
+class A extends E with M {}
+
+main() {
+  new A();
+}
diff --git a/tests/language/mixin/supertype_subclass_test.dart b/tests/language/mixin/supertype_subclass_test.dart
new file mode 100644
index 0000000..1e2c7ca
--- /dev/null
+++ b/tests/language/mixin/supertype_subclass_test.dart
@@ -0,0 +1,28 @@
+// 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.
+
+class B {}
+
+class C {}
+
+class D {}
+
+class E extends B with C implements D {}
+
+class F extends E {}
+
+// M is mixed onto E which implements B, C and D.
+mixin M //
+  on B //# 01: ok
+  on C //# 02: ok
+  on D //# 03: ok
+  on E //# 04: ok
+  on F //# 05: compile-time error
+{}
+
+class A = E with M;
+
+main() {
+  new A();
+}
diff --git a/tests/language/mixin/this_use_test.dart b/tests/language/mixin/this_use_test.dart
new file mode 100644
index 0000000..23d2e99
--- /dev/null
+++ b/tests/language/mixin/this_use_test.dart
@@ -0,0 +1,30 @@
+// 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.
+
+// Test that [:this:] in a class A used as a mixin in class D knows it can be an
+// instance of D.
+
+import "package:expect/expect.dart";
+
+class A {
+  foo() => bar(); // Implicit use of [:this:]
+  bar() => 42;
+}
+
+class B {}
+
+class C = B with A;
+
+class D extends C {
+  bar() => 54;
+}
+
+class E extends A {
+  bar() => 68;
+}
+
+main() {
+  Expect.equals(54, new D().foo());
+  Expect.equals(68, new E().foo());
+}
diff --git a/tests/language/mixin/type_parameter1_test.dart b/tests/language/mixin/type_parameter1_test.dart
new file mode 100644
index 0000000..1928ec4
--- /dev/null
+++ b/tests/language/mixin/type_parameter1_test.dart
@@ -0,0 +1,23 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+abstract class Mixin1<T> {}
+
+abstract class Mixin2<T> {}
+
+class A {}
+
+class MyTypedef<K, V> = A with Mixin1<K>, Mixin2<V>;
+
+class B<K, V> extends MyTypedef<K, V> {}
+
+main() {
+  var b = new B<num, String>();
+  Expect.isTrue(b is Mixin1<num>);
+  Expect.isTrue(b is! Mixin1<String>);
+  Expect.isTrue(b is Mixin2<String>);
+  Expect.isTrue(b is! Mixin2<num>);
+}
diff --git a/tests/language/mixin/type_parameter2_test.dart b/tests/language/mixin/type_parameter2_test.dart
new file mode 100644
index 0000000..129fdf1
--- /dev/null
+++ b/tests/language/mixin/type_parameter2_test.dart
@@ -0,0 +1,27 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+abstract class Mixin1<T> {}
+
+abstract class Mixin2<T> {}
+
+class A {
+  A(foo);
+}
+
+class MyTypedef<K, V> = A with Mixin1<K>, Mixin2<V>;
+
+class B<K, V> extends MyTypedef<K, V> {
+  B(foo) : super(foo);
+}
+
+main() {
+  var b = new B<num, String>(null);
+  Expect.isTrue(b is Mixin1<num>);
+  Expect.isTrue(b is! Mixin1<String>);
+  Expect.isTrue(b is Mixin2<String>);
+  Expect.isTrue(b is! Mixin2<num>);
+}
diff --git a/tests/language/mixin/type_parameter3_test.dart b/tests/language/mixin/type_parameter3_test.dart
new file mode 100644
index 0000000..51164d9
--- /dev/null
+++ b/tests/language/mixin/type_parameter3_test.dart
@@ -0,0 +1,25 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+abstract class Mixin1<T> {}
+
+abstract class Mixin2<T> {}
+
+class A {
+  A(foo);
+}
+
+class B<K, V> extends A with Mixin1<K>, Mixin2<V> {
+  B(foo) : super(foo);
+}
+
+main() {
+  var b = new B<num, String>(null);
+  Expect.isTrue(b is Mixin1<num>);
+  Expect.isTrue(b is! Mixin1<String>);
+  Expect.isTrue(b is Mixin2<String>);
+  Expect.isTrue(b is! Mixin2<num>);
+}
diff --git a/tests/language/mixin/type_parameter4_test.dart b/tests/language/mixin/type_parameter4_test.dart
new file mode 100644
index 0000000..d309b7f3
--- /dev/null
+++ b/tests/language/mixin/type_parameter4_test.dart
@@ -0,0 +1,24 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class R<E, F> {}
+
+class M<J> implements R<bool, J> {}
+
+class B1 {}
+
+class B2 {}
+
+class A1<T> extends B1 with M<T> {}
+
+class A2<T> = B2 with M<T>;
+
+main() {
+  var a1 = new A1<int>();
+  Expect.isTrue(a1 is R<bool, int>);
+  var a2 = new A2<int>();
+  Expect.isTrue(a2 is R<bool, int>);
+}
diff --git a/tests/language/mixin/type_parameter5_test.dart b/tests/language/mixin/type_parameter5_test.dart
new file mode 100644
index 0000000..5f2309c
--- /dev/null
+++ b/tests/language/mixin/type_parameter5_test.dart
@@ -0,0 +1,26 @@
+// 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.
+
+class MixinA<T> {
+  T? intField;
+}
+
+class MixinB<S> {
+  S? stringField;
+}
+
+class MixinC<U, V> {
+  U? listField;
+  V? mapField;
+}
+
+class C extends Object with MixinA<int>, MixinB<String>, MixinC<List, Map> {}
+
+void main() {
+  var c = new C();
+  c.intField = 0;
+  c.stringField = '';
+  c.listField = [];
+  c.mapField = {};
+}
diff --git a/tests/language/mixin/type_parameter6_test.dart b/tests/language/mixin/type_parameter6_test.dart
new file mode 100644
index 0000000..8c81ef1
--- /dev/null
+++ b/tests/language/mixin/type_parameter6_test.dart
@@ -0,0 +1,17 @@
+// 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.
+
+class A<T> {}
+
+class B<S> {
+  int? foo(S s) => null;
+}
+
+class C extends A<int> with B<String> {}
+
+main() {
+  var list = <String>['foo'];
+  var c = new C();
+  list.map(c.foo);
+}
diff --git a/tests/language/mixin/type_parameter_inference_error_test.dart b/tests/language/mixin/type_parameter_inference_error_test.dart
new file mode 100644
index 0000000..c720e49
--- /dev/null
+++ b/tests/language/mixin/type_parameter_inference_error_test.dart
@@ -0,0 +1,24 @@
+// 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<T> {}
+
+class B {}
+
+mixin M<T> on A<T> {}
+
+// No matching class from which to infer the type parameter of M
+class C extends Object with M {} //# 01: compile-time error
+
+class C = Object with M; //# 02: compile-time error
+
+// Satisfying the constraint with an "implements" clause is not sufficient
+class C extends Object with M implements A<B> {} //# 03: compile-time error
+
+class C = Object with M implements A<B>; //# 04: compile-time error
+
+// Mixin works when used correctly.
+class D = A<B> with M<B>;
+
+main() {}
diff --git a/tests/language/mixin/type_parameter_inference_previous_mixin_test.dart b/tests/language/mixin/type_parameter_inference_previous_mixin_test.dart
new file mode 100644
index 0000000..a3d9ce5
--- /dev/null
+++ b/tests/language/mixin/type_parameter_inference_previous_mixin_test.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.
+
+import "package:expect/expect.dart";
+
+abstract class A<T> {
+  // This is ok because type inference will ensure that in C, A and M are
+  // instantiated with the same T.
+  T f(T x) => x; //# 01: ok
+}
+
+class B {}
+
+abstract class M1 implements A<B> {}
+
+mixin M2<T> on A<T> {
+  T f(T x) => x;
+  T g(T x) => x;
+  Type h() => T;
+}
+
+// Inferred as `class C extends Object with M1, M2<B>`
+class C extends Object with M1, M2 {}
+
+main() {
+  C c = new C();
+
+  // M is instantiated with B, so C.g has type (B) -> B.
+  B Function(B) x = c.g; //# 02: ok
+  Null Function(Null) x = c.g; //# 03: compile-time error
+  Object Function(Object) x = c.g; //# 04: compile-time error
+
+  // And verify that the runtime system has the right type for the type
+  // parameter
+  Expect.equals(c.h(), B); //# 05: ok
+}
diff --git a/tests/language/mixin/type_parameter_inference_test.dart b/tests/language/mixin/type_parameter_inference_test.dart
new file mode 100644
index 0000000..8d5f336
--- /dev/null
+++ b/tests/language/mixin/type_parameter_inference_test.dart
@@ -0,0 +1,73 @@
+// 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:expect/expect.dart";
+
+abstract class A<T> {
+  // This is ok because type inference will ensure that in C, A and M are
+  // instantiated with the same T.
+  T f(T x) => x; //# 01: ok
+}
+
+class B {}
+
+mixin M1<T> on A<T> {
+  T f(T x) => x;
+  T g(T x) => x;
+  Type h() => T;
+}
+
+class M2<T> {
+  T g(T x) => x;
+  Type h() => T;
+}
+
+// Inferred as `class C extends A<B> with M1<B>`
+class C extends A<B> with M1 {}
+
+// Inferred as `class D = A<B> with M1<B>`
+class D = A<B> with M1;
+
+// Inferred as `class E extends Object with M2<dynamic>`
+class E extends Object with M2 {}
+
+// Ok because a type parameter is supplied
+class F extends Object with M2<B> {}
+
+main() {
+  C c = new C();
+  D d = new D();
+  E e = new E();
+  F f = new F();
+
+  // M1 is instantiated with B, so C.g has type (B) -> B.
+  B Function(B) x = c.g; //# 02: ok
+  B Function(B) x = d.g; //# 03: ok
+  Null Function(Null) x = c.g; //# 04: compile-time error
+  Null Function(Null) x = d.g; //# 05: compile-time error
+  Object Function(Object) x = c.g; //# 06: compile-time error
+  Object Function(Object) x = d.g; //# 07: compile-time error
+
+  // And verify that the runtime system has the right type for the type
+  // parameter
+  Expect.equals(c.h(), B); //# 08: ok
+  Expect.equals(c.h(), B); //# 09: ok
+
+  // M2 is instantiated with dynamic, so E.g has type (dynamic) -> dynamic.
+  dynamic Function(dynamic) x = e.g; //# 10: ok
+  B Function(B) x = e.g; //# 11: compile-time error
+
+  // And verify that the runtime system has the right type for the type
+  // parameter
+  Expect.equals(e.h(), dynamic); //# 12: ok
+
+  // M2 is instantiated with B, so F.g has type (B) -> B.
+  B Function(B) x = f.g; //# 13: ok
+  Null Function(Null) x = f.g; //# 14: compile-time error
+  Object Function(Object) x = f.g; //# 15: compile-time error
+
+  // And verify that the runtime system has the right type for the type
+  // parameter
+  Expect.equals(f.h(), B); //# 16: ok
+}
diff --git a/tests/language/mixin/type_parameters_errors_runtime_test.dart b/tests/language/mixin/type_parameters_errors_runtime_test.dart
new file mode 100644
index 0000000..ee3b7ca
--- /dev/null
+++ b/tests/language/mixin/type_parameters_errors_runtime_test.dart
@@ -0,0 +1,26 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+class S<T> {}
+
+class M<U> {}
+
+class A<X> extends S<int> with M<double> {}
+
+
+
+class F<X> = S<X> with M<X>;
+
+
+main() {
+  var a;
+  a = new A();
+  a = new A<int>();
+
+  a = new F<int>();
+
+}
diff --git a/tests/language/mixin/type_parameters_errors_test.dart b/tests/language/mixin/type_parameters_errors_test.dart
new file mode 100644
index 0000000..2988b2f
--- /dev/null
+++ b/tests/language/mixin/type_parameters_errors_test.dart
@@ -0,0 +1,42 @@
+// 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.
+
+class S<T> {}
+
+class M<U> {}
+
+class A<X> extends S<int> with M<double> {}
+class B<U, V> extends S with M<U, V> { }
+//    ^
+// [cfe] The type 'M<U, V>' can't be mixed in.
+//                           ^^^^^^^
+// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+// [cfe] Expected 1 type arguments.
+class C<A, B> extends S<A, int> with M { }
+//                    ^^^^^^^^^
+// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+// [cfe] Expected 1 type arguments.
+
+class F<X> = S<X> with M<X>;
+class G = S<int> with M<double, double>;
+//    ^
+// [cfe] The type 'M<double, double>' can't be mixed in.
+//                    ^^^^^^^^^^^^^^^^^
+// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+// [cfe] Expected 1 type arguments.
+
+main() {
+  var a;
+  a = new A();
+  a = new A<int>();
+  a = new A<String, String>();
+  //      ^^^^^^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+  // [cfe] Expected 1 type arguments.
+  a = new F<int>();
+  a = new F<int, String>();
+  //      ^^^^^^^^^^^^^^
+  // [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+  // [cfe] Expected 1 type arguments.
+}
diff --git a/tests/language/mixin/type_parameters_mixin_extends_test.dart b/tests/language/mixin/type_parameters_mixin_extends_test.dart
new file mode 100644
index 0000000..69f3bbf
--- /dev/null
+++ b/tests/language/mixin/type_parameters_mixin_extends_test.dart
@@ -0,0 +1,130 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class M<T> {
+  bool matches(o) {
+    bool isChecked = checkUsingIs(o);
+    if (checkedMode) {
+      Expect.equals(isChecked, checkUsingCheckedMode(o));
+    }
+    return isChecked;
+  }
+
+  bool checkUsingIs(o) {
+    return o is T;
+  }
+
+  bool checkUsingCheckedMode(o) {
+    try {
+      T x = o;
+    } on Error {
+      return false;
+    }
+    return true;
+  }
+
+  static final bool checkedMode = computeCheckedMode();
+  static bool computeCheckedMode() {
+    try {
+      int x = "foo" as dynamic;
+    } on Error {
+      return true;
+    }
+    return false;
+  }
+}
+
+class S {}
+
+class C0<T> extends S with M {}
+
+class C1<T> extends S with M<T> {}
+
+class C2<T> extends S with M<int> {}
+
+class C3 extends S with M<String> {}
+
+main() {
+  var c0 = new C0();
+  Expect.isTrue(c0 is M);
+  Expect.isFalse(c0 is M<int>);
+  Expect.isFalse(c0 is M<String>);
+  Expect.isTrue(c0.matches(c0));
+  Expect.isTrue(c0.matches(42));
+  Expect.isTrue(c0.matches("hello"));
+
+  var c0_int = new C0<int>();
+  Expect.isTrue(c0_int is M);
+  Expect.isFalse(c0_int is M<int>);
+  Expect.isFalse(c0_int is M<String>);
+  Expect.isTrue(c0_int.matches(c0));
+  Expect.isTrue(c0_int.matches(42));
+  Expect.isTrue(c0_int.matches("hello"));
+
+  var c0_String = new C0<String>();
+  Expect.isTrue(c0_String is M);
+  Expect.isFalse(c0_String is M<int>);
+  Expect.isFalse(c0_String is M<String>);
+  Expect.isTrue(c0_String.matches(c0));
+  Expect.isTrue(c0_String.matches(42));
+  Expect.isTrue(c0_String.matches("hello"));
+
+  var c1 = new C1();
+  Expect.isTrue(c1 is M);
+  Expect.isFalse(c1 is M<int>);
+  Expect.isFalse(c1 is M<String>);
+  Expect.isTrue(c1.matches(c1));
+  Expect.isTrue(c1.matches(42));
+  Expect.isTrue(c1.matches("hello"));
+
+  var c1_int = new C1<int>();
+  Expect.isTrue(c1_int is M);
+  Expect.isTrue(c1_int is M<int>);
+  Expect.isFalse(c1_int is M<String>);
+  Expect.isFalse(c1_int.matches(c1));
+  Expect.isTrue(c1_int.matches(42));
+  Expect.isFalse(c1_int.matches("hello"));
+
+  var c1_String = new C1<String>();
+  Expect.isTrue(c1_String is M);
+  Expect.isFalse(c1_String is M<int>);
+  Expect.isTrue(c1_String is M<String>);
+  Expect.isFalse(c1_String.matches(c1));
+  Expect.isFalse(c1_String.matches(42));
+  Expect.isTrue(c1_String.matches("hello"));
+
+  var c2 = new C2();
+  Expect.isTrue(c2 is M);
+  Expect.isTrue(c2 is M<int>);
+  Expect.isFalse(c2 is M<String>);
+  Expect.isFalse(c2.matches(c2));
+  Expect.isTrue(c2.matches(42));
+  Expect.isFalse(c2.matches("hello"));
+
+  var c2_int = new C2<int>();
+  Expect.isTrue(c2_int is M);
+  Expect.isTrue(c2_int is M<int>);
+  Expect.isFalse(c2_int is M<String>);
+  Expect.isFalse(c2_int.matches(c2));
+  Expect.isTrue(c2_int.matches(42));
+  Expect.isFalse(c2_int.matches("hello"));
+
+  var c2_String = new C2<String>();
+  Expect.isTrue(c2_String is M);
+  Expect.isTrue(c2_String is M<int>);
+  Expect.isFalse(c2_String is M<String>);
+  Expect.isFalse(c2_String.matches(c2));
+  Expect.isTrue(c2_String.matches(42));
+  Expect.isFalse(c2_String.matches("hello"));
+
+  var c3 = new C3();
+  Expect.isTrue(c3 is M);
+  Expect.isFalse(c3 is M<int>);
+  Expect.isTrue(c3 is M<String>);
+  Expect.isFalse(c3.matches(c2));
+  Expect.isFalse(c3.matches(42));
+  Expect.isTrue(c3.matches("hello"));
+}
diff --git a/tests/language/mixin/type_parameters_mixin_test.dart b/tests/language/mixin/type_parameters_mixin_test.dart
new file mode 100644
index 0000000..8a6e569
--- /dev/null
+++ b/tests/language/mixin/type_parameters_mixin_test.dart
@@ -0,0 +1,127 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class M<T> {
+  bool matches(o) {
+    bool isChecked = checkUsingIs(o);
+    if (checkedMode) {
+      Expect.equals(isChecked, checkUsingCheckedMode(o));
+    }
+    return isChecked;
+  }
+
+  bool checkUsingIs(o) {
+    return o is T;
+  }
+
+  bool checkUsingCheckedMode(o) {
+    try {
+      T x = o;
+    } on Error {
+      return false;
+    }
+    return true;
+  }
+
+  static final bool checkedMode = computeCheckedMode();
+  static bool computeCheckedMode() {
+    try {
+      int x = "foo" as dynamic;
+    } on Error {
+      return true;
+    }
+    return false;
+  }
+}
+
+class S {}
+
+class C0<T> = S with M;
+class C1<T> = S with M<T>;
+class C2<T> = S with M<int>;
+class C3 = S with M<String>;
+
+main() {
+  var c0 = new C0();
+  Expect.isTrue(c0 is M);
+  Expect.isFalse(c0 is M<int>);
+  Expect.isFalse(c0 is M<String>);
+  Expect.isTrue(c0.matches(c0));
+  Expect.isTrue(c0.matches(42));
+  Expect.isTrue(c0.matches("hello"));
+
+  var c0_int = new C0<int>();
+  Expect.isTrue(c0_int is M);
+  Expect.isFalse(c0_int is M<int>);
+  Expect.isFalse(c0_int is M<String>);
+  Expect.isTrue(c0_int.matches(c0));
+  Expect.isTrue(c0_int.matches(42));
+  Expect.isTrue(c0_int.matches("hello"));
+
+  var c0_String = new C0<String>();
+  Expect.isTrue(c0_String is M);
+  Expect.isFalse(c0_String is M<int>);
+  Expect.isFalse(c0_String is M<String>);
+  Expect.isTrue(c0_String.matches(c0));
+  Expect.isTrue(c0_String.matches(42));
+  Expect.isTrue(c0_String.matches("hello"));
+
+  var c1 = new C1();
+  Expect.isTrue(c1 is M);
+  Expect.isFalse(c1 is M<int>);
+  Expect.isFalse(c1 is M<String>);
+  Expect.isTrue(c1.matches(c1));
+  Expect.isTrue(c1.matches(42));
+  Expect.isTrue(c1.matches("hello"));
+
+  var c1_int = new C1<int>();
+  Expect.isTrue(c1_int is M);
+  Expect.isTrue(c1_int is M<int>);
+  Expect.isFalse(c1_int is M<String>);
+  Expect.isFalse(c1_int.matches(c1));
+  Expect.isTrue(c1_int.matches(42));
+  Expect.isFalse(c1_int.matches("hello"));
+
+  var c1_String = new C1<String>();
+  Expect.isTrue(c1_String is M);
+  Expect.isFalse(c1_String is M<int>);
+  Expect.isTrue(c1_String is M<String>);
+  Expect.isFalse(c1_String.matches(c1));
+  Expect.isFalse(c1_String.matches(42));
+  Expect.isTrue(c1_String.matches("hello"));
+
+  var c2 = new C2();
+  Expect.isTrue(c2 is M);
+  Expect.isTrue(c2 is M<int>);
+  Expect.isFalse(c2 is M<String>);
+  Expect.isFalse(c2.matches(c2));
+  Expect.isTrue(c2.matches(42));
+  Expect.isFalse(c2.matches("hello"));
+
+  var c2_int = new C2<int>();
+  Expect.isTrue(c2_int is M);
+  Expect.isTrue(c2_int is M<int>);
+  Expect.isFalse(c2_int is M<String>);
+  Expect.isFalse(c2_int.matches(c2));
+  Expect.isTrue(c2_int.matches(42));
+  Expect.isFalse(c2_int.matches("hello"));
+
+  var c2_String = new C2<String>();
+  Expect.isTrue(c2_String is M);
+  Expect.isTrue(c2_String is M<int>);
+  Expect.isFalse(c2_String is M<String>);
+  Expect.isFalse(c2_String.matches(c2));
+  Expect.isTrue(c2_String.matches(42));
+  Expect.isFalse(c2_String.matches("hello"));
+
+  var c3 = new C3();
+  Expect.isTrue(c3 is M);
+  Expect.isFalse(c3 is M<int>);
+  Expect.isTrue(c3 is M<String>);
+  Expect.isFalse(c3.matches(c2));
+  Expect.isFalse(c3.matches(42));
+  Expect.isTrue(c3.matches("hello"));
+}
diff --git a/tests/language/mixin/type_parameters_simple_test.dart b/tests/language/mixin/type_parameters_simple_test.dart
new file mode 100644
index 0000000..8721735
--- /dev/null
+++ b/tests/language/mixin/type_parameters_simple_test.dart
@@ -0,0 +1,29 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class S {}
+
+class M1<X> {
+  m1() => X;
+}
+
+class M2<Y> {
+  m2() => Y;
+}
+
+class A<T> extends S with M1<T>, M2<T> {}
+
+main() {
+  var a = new A<int>();
+  // Getting "int" when calling toString() on the int type is not required.
+  // However, we want to keep the original names for the most common core types
+  // so we make sure to handle these specifically in the compiler.
+  Expect.equals("int", a.m1().toString());
+  Expect.equals("int", a.m2().toString());
+  var a2 = new A<String>();
+  Expect.equals("String", a2.m1().toString());
+  Expect.equals("String", a2.m2().toString());
+}
diff --git a/tests/language/mixin/type_parameters_super_extends_test.dart b/tests/language/mixin/type_parameters_super_extends_test.dart
new file mode 100644
index 0000000..a21e2c3
--- /dev/null
+++ b/tests/language/mixin/type_parameters_super_extends_test.dart
@@ -0,0 +1,130 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class S<T> {
+  bool matches(o) {
+    bool isChecked = checkUsingIs(o);
+    if (checkedMode) {
+      Expect.equals(isChecked, checkUsingCheckedMode(o));
+    }
+    return isChecked;
+  }
+
+  bool checkUsingIs(o) {
+    return o is T;
+  }
+
+  bool checkUsingCheckedMode(o) {
+    try {
+      T x = o;
+    } on Error {
+      return false;
+    }
+    return true;
+  }
+
+  static final bool checkedMode = computeCheckedMode();
+  static bool computeCheckedMode() {
+    try {
+      int x = "foo" as dynamic;
+    } on Error {
+      return true;
+    }
+    return false;
+  }
+}
+
+class M {}
+
+class C0<T> extends S with M {}
+
+class C1<T> extends S<T> with M {}
+
+class C2<T> extends S<int> with M {}
+
+class C3 extends S<String> with M {}
+
+main() {
+  var c0 = new C0();
+  Expect.isTrue(c0 is S);
+  Expect.isFalse(c0 is S<int>);
+  Expect.isFalse(c0 is S<String>);
+  Expect.isTrue(c0.matches(c0));
+  Expect.isTrue(c0.matches(42));
+  Expect.isTrue(c0.matches("hello"));
+
+  var c0_int = new C0<int>();
+  Expect.isTrue(c0_int is S);
+  Expect.isFalse(c0_int is S<int>);
+  Expect.isFalse(c0_int is S<String>);
+  Expect.isTrue(c0_int.matches(c0));
+  Expect.isTrue(c0_int.matches(42));
+  Expect.isTrue(c0_int.matches("hello"));
+
+  var c0_String = new C0<String>();
+  Expect.isTrue(c0_String is S);
+  Expect.isFalse(c0_String is S<int>);
+  Expect.isFalse(c0_String is S<String>);
+  Expect.isTrue(c0_String.matches(c0));
+  Expect.isTrue(c0_String.matches(42));
+  Expect.isTrue(c0_String.matches("hello"));
+
+  var c1 = new C1();
+  Expect.isTrue(c1 is S);
+  Expect.isFalse(c1 is S<int>);
+  Expect.isFalse(c1 is S<String>);
+  Expect.isTrue(c1.matches(c1));
+  Expect.isTrue(c1.matches(42));
+  Expect.isTrue(c1.matches("hello"));
+
+  var c1_int = new C1<int>();
+  Expect.isTrue(c1_int is S);
+  Expect.isTrue(c1_int is S<int>);
+  Expect.isFalse(c1_int is S<String>);
+  Expect.isFalse(c1_int.matches(c1));
+  Expect.isTrue(c1_int.matches(42));
+  Expect.isFalse(c1_int.matches("hello"));
+
+  var c1_String = new C1<String>();
+  Expect.isTrue(c1_String is S);
+  Expect.isFalse(c1_String is S<int>);
+  Expect.isTrue(c1_String is S<String>);
+  Expect.isFalse(c1_String.matches(c1));
+  Expect.isFalse(c1_String.matches(42));
+  Expect.isTrue(c1_String.matches("hello"));
+
+  var c2 = new C2();
+  Expect.isTrue(c2 is S);
+  Expect.isTrue(c2 is S<int>);
+  Expect.isFalse(c2 is S<String>);
+  Expect.isFalse(c2.matches(c2));
+  Expect.isTrue(c2.matches(42));
+  Expect.isFalse(c2.matches("hello"));
+
+  var c2_int = new C2<int>();
+  Expect.isTrue(c2_int is S);
+  Expect.isTrue(c2_int is S<int>);
+  Expect.isFalse(c2_int is S<String>);
+  Expect.isFalse(c2_int.matches(c2));
+  Expect.isTrue(c2_int.matches(42));
+  Expect.isFalse(c2_int.matches("hello"));
+
+  var c2_String = new C2<String>();
+  Expect.isTrue(c2_String is S);
+  Expect.isTrue(c2_String is S<int>);
+  Expect.isFalse(c2_String is S<String>);
+  Expect.isFalse(c2_String.matches(c2));
+  Expect.isTrue(c2_String.matches(42));
+  Expect.isFalse(c2_String.matches("hello"));
+
+  var c3 = new C3();
+  Expect.isTrue(c3 is S);
+  Expect.isFalse(c3 is S<int>);
+  Expect.isTrue(c3 is S<String>);
+  Expect.isFalse(c3.matches(c2));
+  Expect.isFalse(c3.matches(42));
+  Expect.isTrue(c3.matches("hello"));
+}
diff --git a/tests/language/mixin/type_parameters_super_test.dart b/tests/language/mixin/type_parameters_super_test.dart
new file mode 100644
index 0000000..b4c1ee2
--- /dev/null
+++ b/tests/language/mixin/type_parameters_super_test.dart
@@ -0,0 +1,98 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class S<T> {
+  bool matches(o) => o is T;
+}
+
+class M {}
+
+class C0<T> = S with M;
+class C1<T> = S<T> with M;
+class C2<T> = S<int> with M;
+class C3 = S<String> with M;
+
+main() {
+  var c0 = new C0();
+  Expect.isTrue(c0 is S);
+  Expect.isFalse(c0 is S<int>);
+  Expect.isFalse(c0 is S<String>);
+  Expect.isTrue(c0.matches(c0));
+  Expect.isTrue(c0.matches(42));
+  Expect.isTrue(c0.matches("hello"));
+
+  var c0_int = new C0<int>();
+  Expect.isTrue(c0_int is S);
+  Expect.isFalse(c0_int is S<int>);
+  Expect.isFalse(c0_int is S<String>);
+  Expect.isTrue(c0_int.matches(c0));
+  Expect.isTrue(c0_int.matches(42));
+  Expect.isTrue(c0_int.matches("hello"));
+
+  var c0_String = new C0<String>();
+  Expect.isTrue(c0_String is S);
+  Expect.isFalse(c0_String is S<int>);
+  Expect.isFalse(c0_String is S<String>);
+  Expect.isTrue(c0_String.matches(c0));
+  Expect.isTrue(c0_String.matches(42));
+  Expect.isTrue(c0_String.matches("hello"));
+
+  var c1 = new C1();
+  Expect.isTrue(c1 is S);
+  Expect.isFalse(c1 is S<int>);
+  Expect.isFalse(c1 is S<String>);
+  Expect.isTrue(c1.matches(c1));
+  Expect.isTrue(c1.matches(42));
+  Expect.isTrue(c1.matches("hello"));
+
+  var c1_int = new C1<int>();
+  Expect.isTrue(c1_int is S);
+  Expect.isTrue(c1_int is S<int>);
+  Expect.isFalse(c1_int is S<String>);
+  Expect.isFalse(c1_int.matches(c1));
+  Expect.isTrue(c1_int.matches(42));
+  Expect.isFalse(c1_int.matches("hello"));
+
+  var c1_String = new C1<String>();
+  Expect.isTrue(c1_String is S);
+  Expect.isFalse(c1_String is S<int>);
+  Expect.isTrue(c1_String is S<String>);
+  Expect.isFalse(c1_String.matches(c1));
+  Expect.isFalse(c1_String.matches(42));
+  Expect.isTrue(c1_String.matches("hello"));
+
+  var c2 = new C2();
+  Expect.isTrue(c2 is S);
+  Expect.isTrue(c2 is S<int>);
+  Expect.isFalse(c2 is S<String>);
+  Expect.isFalse(c2.matches(c2));
+  Expect.isTrue(c2.matches(42));
+  Expect.isFalse(c2.matches("hello"));
+
+  var c2_int = new C2<int>();
+  Expect.isTrue(c2_int is S);
+  Expect.isTrue(c2_int is S<int>);
+  Expect.isFalse(c2_int is S<String>);
+  Expect.isFalse(c2_int.matches(c2));
+  Expect.isTrue(c2_int.matches(42));
+  Expect.isFalse(c2_int.matches("hello"));
+
+  var c2_String = new C2<String>();
+  Expect.isTrue(c2_String is S);
+  Expect.isTrue(c2_String is S<int>);
+  Expect.isFalse(c2_String is S<String>);
+  Expect.isFalse(c2_String.matches(c2));
+  Expect.isTrue(c2_String.matches(42));
+  Expect.isFalse(c2_String.matches("hello"));
+
+  var c3 = new C3();
+  Expect.isTrue(c3 is S);
+  Expect.isFalse(c3 is S<int>);
+  Expect.isTrue(c3 is S<String>);
+  Expect.isFalse(c3.matches(c2));
+  Expect.isFalse(c3.matches(42));
+  Expect.isTrue(c3.matches("hello"));
+}
diff --git a/tests/language/mixin/type_variable_test.dart b/tests/language/mixin/type_variable_test.dart
new file mode 100644
index 0000000..9b4b0df
--- /dev/null
+++ b/tests/language/mixin/type_variable_test.dart
@@ -0,0 +1,32 @@
+// 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.
+
+// Regression test for generic mixin fields.
+
+class A<T> {
+  T? field;
+}
+
+class B<T> = Object with A<T>;
+
+class C<T> extends B<T> {} //# 03: ok
+class D extends B<int> {} //# 04: ok
+
+class E = Object with A<int>;
+
+class F extends E {} //# 06: ok
+
+class G<T> extends Object with A<T> {} //# 07: ok
+class H extends Object with A<int> {} //# 08: ok
+
+void main() {
+  new A<num>(); //# 01: ok
+  new B<num>(); //# 02: ok
+  new C<num>(); //# 03: continued
+  new D(); //# 04: continued
+  new E(); //# 05: ok
+  new F(); //# 06: continued
+  new G<num>(); //# 07: continued
+  new H(); //# 08: continued
+}
diff --git a/tests/language/mixin/typedef_constructor_test.dart b/tests/language/mixin/typedef_constructor_test.dart
new file mode 100644
index 0000000..a73fea1
--- /dev/null
+++ b/tests/language/mixin/typedef_constructor_test.dart
@@ -0,0 +1,22 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class A {
+  var field;
+  A(this.field);
+}
+
+class Mixin {
+  var mixinField = 54;
+}
+
+class MyClass = A with Mixin;
+
+main() {
+  var a = new MyClass(42);
+  Expect.equals(42, a.field);
+  Expect.equals(54, a.mixinField);
+}
diff --git a/tests/language/mixin/with_named_import_test.dart b/tests/language/mixin/with_named_import_test.dart
new file mode 100644
index 0000000..0af06a8
--- /dev/null
+++ b/tests/language/mixin/with_named_import_test.dart
@@ -0,0 +1,16 @@
+// 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 'dart:collection' as collection;
+
+class Foo extends Object with collection.ListMixin {
+  int get length => 0;
+  operator [](int index) => null;
+  void operator []=(int index, value) => null;
+  set length(int newLength) => null;
+}
+
+main() {
+  new Foo();
+}
diff --git a/tests/language/mixin/with_two_implicit_constructors_test.dart b/tests/language/mixin/with_two_implicit_constructors_test.dart
new file mode 100644
index 0000000..198461b
--- /dev/null
+++ b/tests/language/mixin/with_two_implicit_constructors_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class A {
+  var field;
+  A.bar() : field = 1;
+  A() : field = 2;
+}
+
+class Mixin {}
+
+class B extends A with Mixin {}
+
+main() {
+  Expect.equals(2, new B().field);
+  new B.bar(); /*@compile-error=unspecified*/
+}
diff --git a/tests/language/mixin_constructor_forwarding/const_constructor_test.dart b/tests/language/mixin_constructor_forwarding/const_constructor_test.dart
new file mode 100644
index 0000000..ba57bdf
--- /dev/null
+++ b/tests/language/mixin_constructor_forwarding/const_constructor_test.dart
@@ -0,0 +1,78 @@
+// 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:expect/expect.dart";
+
+abstract class Mixin {
+  // Declares no instance variable.
+  int get x;
+  int get m => x;
+}
+
+class Base {
+  final int x;
+
+  // Non-const constructors.
+  Base.c1(this.x);
+  Base.c2([this.x = 37]);
+  Base.c3({this.x = 37});
+
+  // Non-forwarding generative const constructors.
+  const Base.c4(this.x);
+  const Base.c5([this.x = 37]);
+  const Base.c6({this.x = 37});
+
+  // Forwarding generative const constructors.
+  const Base.c7(int x) : this.c4(x);
+  const Base.c8([int x = 87]) : this.c4(x);
+  const Base.c9({int x = 87}) : this.c4(x);
+  const Base.c10(int x) : this.c5(x);
+  const Base.c11([int x = 87]) : this.c5(x);
+  const Base.c12({int x = 87}) : this.c5(x);
+  const Base.c13(int x) : this.c6(x: x);
+  const Base.c14([int x = 87]) : this.c6(x: x);
+  const Base.c15({int x = 87}) : this.c6(x: x);
+
+  // Non-generative constructor.
+  const factory Base() = Base.c5;
+}
+
+class Application = Base with Mixin;
+
+main() {
+  Expect.equals(42, new Application.c1(42).m);
+  Expect.equals(42, new Application.c2(42).m);
+  Expect.equals(42, new Application.c3(x: 42).m);
+  Expect.equals(42, const Application.c4(42).m);
+  Expect.equals(42, const Application.c5(42).m);
+  Expect.equals(42, const Application.c6(x: 42).m);
+  Expect.equals(42, const Application.c7(42).m);
+  Expect.equals(42, const Application.c8(42).m);
+  Expect.equals(42, const Application.c9(x: 42).m);
+  Expect.equals(42, const Application.c10(42).m);
+  Expect.equals(42, const Application.c11(42).m);
+  Expect.equals(42, const Application.c12(x: 42).m);
+  Expect.equals(42, const Application.c13(42).m);
+  Expect.equals(42, const Application.c14(42).m);
+  Expect.equals(42, const Application.c15(x: 42).m);
+
+  Expect.equals(37, new Application.c2().m); //# issue38304: ok
+  Expect.equals(37, new Application.c3().m);
+  Expect.equals(37, const Application.c5().m); //# issue38304: continued
+  Expect.equals(37, const Application.c6().m);
+  Expect.equals(87, const Application.c8().m); //# issue38304: continued
+  Expect.equals(87, const Application.c9().m);
+  Expect.equals(87, const Application.c11().m); //# issue38304: continued
+  Expect.equals(87, const Application.c12().m);
+  Expect.equals(87, const Application.c14().m); //# issue38304: continued
+  Expect.equals(87, const Application.c15().m);
+
+  // Only make forwarders const if original constructor is const.
+  const Application.c1(0); //# 01: compile-time error
+  const Application.c2(0); //# 02: compile-time error
+  const Application.c3(x: 0); //# 03: compile-time error
+
+  // Only insert forwarders for generative constructors.
+  new Application(); //# 04: compile-time error
+}
diff --git a/tests/language/mixin_constructor_forwarding/const_constructor_with_field_test.dart b/tests/language/mixin_constructor_forwarding/const_constructor_with_field_test.dart
new file mode 100644
index 0000000..e22be63
--- /dev/null
+++ b/tests/language/mixin_constructor_forwarding/const_constructor_with_field_test.dart
@@ -0,0 +1,91 @@
+// 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:expect/expect.dart";
+
+abstract class Mixin {
+  // Declares an instance variable.
+  // Declaration would be valid in a "const class", but mixin application
+  // won't get const constructor forwarders.
+  final int y = 0;
+
+  int get x;
+  int get m => x;
+}
+
+class Base {
+  final int x;
+
+  // Non-const constructors.
+  Base.c1(this.x);
+  Base.c2([this.x = 37]);
+  Base.c3({this.x = 37});
+
+  // Non-forwarding generative const constructors.
+  const Base.c4(this.x);
+  const Base.c5([this.x = 37]);
+  const Base.c6({this.x = 37});
+
+  // Forwarding generative const constructors.
+  const Base.c7(int x) : this.c4(x);
+  const Base.c8([int x = 87]) : this.c4(x);
+  const Base.c9({int x = 87}) : this.c4(x);
+  const Base.c10(int x) : this.c5(x);
+  const Base.c11([int x = 87]) : this.c5(x);
+  const Base.c12({int x = 87}) : this.c5(x);
+  const Base.c13(int x) : this.c6(x: x);
+  const Base.c14([int x = 87]) : this.c6(x: x);
+  const Base.c15({int x = 87}) : this.c6(x: x);
+
+  // Non-generative constructor.
+  const factory Base() = Base.c5;
+}
+
+class Application = Base with Mixin;
+
+main() {
+  Expect.equals(42, new Application.c1(42).m);
+  Expect.equals(42, new Application.c2(42).m);
+  Expect.equals(42, new Application.c3(x: 42).m);
+  Expect.equals(42, new Application.c4(42).m);
+  Expect.equals(42, new Application.c5(42).m);
+  Expect.equals(42, new Application.c6(x: 42).m);
+  Expect.equals(42, new Application.c7(42).m);
+  Expect.equals(42, new Application.c8(42).m);
+  Expect.equals(42, new Application.c9(x: 42).m);
+  Expect.equals(42, new Application.c10(42).m);
+  Expect.equals(42, new Application.c11(42).m);
+  Expect.equals(42, new Application.c12(x: 42).m);
+  Expect.equals(42, new Application.c13(42).m);
+  Expect.equals(42, new Application.c14(42).m);
+  Expect.equals(42, new Application.c15(x: 42).m);
+
+  Expect.equals(37, new Application.c2().m); //# issue38304: ok
+  Expect.equals(37, new Application.c3().m);
+  Expect.equals(37, new Application.c5().m); //# issue38304: continued
+  Expect.equals(37, new Application.c6().m);
+  Expect.equals(87, new Application.c8().m); //# issue38304: continued
+  Expect.equals(87, new Application.c9().m);
+  Expect.equals(87, new Application.c11().m); //# issue38304: continued
+  Expect.equals(87, new Application.c12().m);
+  Expect.equals(87, new Application.c14().m); //# issue38304: continued
+  Expect.equals(87, new Application.c15().m);
+
+  // Don't make constructors const if mixin declares instance variable.
+  const Application.c4(42); //# 00: compile-time error
+  const Application.c5(42); //# 01: compile-time error
+  const Application.c6(x: 42); //# 02: compile-time error
+  const Application.c7(42); //# 03: compile-time error
+  const Application.c8(42); //# 04: compile-time error
+  const Application.c9(x: 42); //# 05: compile-time error
+  const Application.c10(42); //# 06: compile-time error
+  const Application.c11(42); //# 07: compile-time error
+  const Application.c12(x: 42); //# 08: compile-time error
+  const Application.c13(42); //# 09: compile-time error
+  const Application.c14(42); //# 10: compile-time error
+  const Application.c15(x: 42); //# 11: compile-time error
+
+  // Only insert forwarders for generative constructors.
+  new Application(); //# 12: compile-time error
+}
diff --git a/tests/language/mixin_constructor_forwarding/optional_named_parameters_test.dart b/tests/language/mixin_constructor_forwarding/optional_named_parameters_test.dart
new file mode 100644
index 0000000..8cab4c5
--- /dev/null
+++ b/tests/language/mixin_constructor_forwarding/optional_named_parameters_test.dart
@@ -0,0 +1,38 @@
+// 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:expect/expect.dart";
+
+abstract class Mixin {
+  int get x;
+  int get m => x;
+}
+
+class Base {
+  final int x;
+  Base.c1(this.x);
+  Base.c2({this.x = 37});
+  Base.c3(int x) : this.c1(x);
+  Base.c4({int x = 37}) : this.c1(x);
+  Base.c5(int x) : this.c2(x: x);
+  Base.c6({int x = 37}) : this.c2(x: x);
+  factory Base() = Base.c2;
+}
+
+class Application = Base with Mixin;
+
+main() {
+  Expect.equals(42, new Application.c1(42).m);
+  Expect.equals(42, new Application.c2(x: 42).m);
+  Expect.equals(42, new Application.c3(42).m);
+  Expect.equals(42, new Application.c4(x: 42).m);
+  Expect.equals(42, new Application.c5(42).m);
+  Expect.equals(42, new Application.c6(x: 42).m);
+  Expect.equals(37, new Application.c2().m);
+  Expect.equals(37, new Application.c4().m);
+  Expect.equals(37, new Application.c6().m);
+
+  // Only insert forwarders for generative constructors.
+  new Application(); //# 01: compile-time error
+}
diff --git a/tests/language/mixin_constructor_forwarding/optional_positional_parameters_test.dart b/tests/language/mixin_constructor_forwarding/optional_positional_parameters_test.dart
new file mode 100644
index 0000000..1411223
--- /dev/null
+++ b/tests/language/mixin_constructor_forwarding/optional_positional_parameters_test.dart
@@ -0,0 +1,38 @@
+// 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:expect/expect.dart";
+
+abstract class Mixin {
+  int get x;
+  int get m => x;
+}
+
+class Base {
+  final int x;
+  Base.c1(this.x);
+  Base.c2([this.x = 37]);
+  Base.c3(int x) : this.c1(x);
+  Base.c4([int x = 37]) : this.c1(x);
+  Base.c5(int x) : this.c2(x);
+  Base.c6([int x = 37]) : this.c2(x);
+  factory Base() = Base.c2;
+}
+
+class Application = Base with Mixin;
+
+main() {
+  Expect.equals(42, new Application.c1(42).m);
+  Expect.equals(42, new Application.c2(42).m);
+  Expect.equals(42, new Application.c3(42).m);
+  Expect.equals(42, new Application.c4(42).m);
+  Expect.equals(42, new Application.c5(42).m);
+  Expect.equals(42, new Application.c6(42).m);
+  Expect.equals(37, new Application.c2().m);
+  Expect.equals(37, new Application.c4().m);
+  Expect.equals(37, new Application.c6().m);
+
+  // Only insert forwarders for generative constructors.
+  new Application(); //# 01: compile-time error
+}
diff --git a/tests/language/new/create_unresolved_type_runtime_test.dart b/tests/language/new/create_unresolved_type_runtime_test.dart
new file mode 100644
index 0000000..13d07d8
--- /dev/null
+++ b/tests/language/new/create_unresolved_type_runtime_test.dart
@@ -0,0 +1,10 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+main() {
+
+}
diff --git a/tests/language/new/create_unresolved_type_test.dart b/tests/language/new/create_unresolved_type_test.dart
new file mode 100644
index 0000000..b1ce560
--- /dev/null
+++ b/tests/language/new/create_unresolved_type_test.dart
@@ -0,0 +1,10 @@
+// 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.
+
+main() {
+  new F<int>();
+  //  ^
+  // [analyzer] STATIC_WARNING.NEW_WITH_NON_TYPE
+  // [cfe] Method not found: 'F'.
+}
diff --git a/tests/language/new/expression1_test.dart b/tests/language/new/expression1_test.dart
new file mode 100644
index 0000000..b06ff2a
--- /dev/null
+++ b/tests/language/new/expression1_test.dart
@@ -0,0 +1,12 @@
+// 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.
+
+class C {}
+
+main() {
+  new C;
+  //  ^
+  // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+  // [cfe] Expected '(' after this.
+}
diff --git a/tests/language/new/expression2_test.dart b/tests/language/new/expression2_test.dart
new file mode 100644
index 0000000..6695b3b
--- /dev/null
+++ b/tests/language/new/expression2_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+class C {}
+
+main() {
+  new C(;
+  //   ^
+  // [cfe] Can't find ')' to match '('.
+  //   ^
+  // [cfe] Too many positional arguments: 0 allowed, but 1 found.
+  //    ^
+  // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+  // [cfe] Expected an identifier, but got ';'.
+  //    ^
+  // [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
+}
diff --git a/tests/language/new/expression3_test.dart b/tests/language/new/expression3_test.dart
new file mode 100644
index 0000000..ee1edff
--- /dev/null
+++ b/tests/language/new/expression3_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+class C {}
+
+main() {
+  new C(...;
+  //   ^
+  // [cfe] Can't find ')' to match '('.
+  //   ^
+  // [cfe] Too many positional arguments: 0 allowed, but 1 found.
+  //    ^^^
+  // [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
+  // [cfe] Expected an identifier, but got '...'.
+  //       ^
+  // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+}
diff --git a/tests/language/new/expression_type_args_runtime_test.dart b/tests/language/new/expression_type_args_runtime_test.dart
new file mode 100644
index 0000000..96f8c18
--- /dev/null
+++ b/tests/language/new/expression_type_args_runtime_test.dart
@@ -0,0 +1,25 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+// Tests showing errors using type-arguments in new expressions:
+class A<T> {
+  // Can't instantiate type parameter (within static or instance method).
+
+
+
+  // OK when used within instance method, but not in static method.
+  m3() => new A<T>();
+
+}
+
+main() {
+  A a = new A();
+
+
+  a.m3();
+
+}
diff --git a/tests/language/new/expression_type_args_test.dart b/tests/language/new/expression_type_args_test.dart
new file mode 100644
index 0000000..debf248
--- /dev/null
+++ b/tests/language/new/expression_type_args_test.dart
@@ -0,0 +1,33 @@
+// 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.
+
+// Tests showing errors using type-arguments in new expressions:
+class A<T> {
+  // Can't instantiate type parameter (within static or instance method).
+  m1() => new T();
+  //          ^
+  // [analyzer] STATIC_WARNING.NEW_WITH_NON_TYPE
+  // [cfe] Method not found: 'T'.
+  static m2() => new T();
+  //                 ^
+  // [analyzer] STATIC_WARNING.NEW_WITH_NON_TYPE
+  // [cfe] Method not found: 'T'.
+  //                 ^
+  // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+
+  // OK when used within instance method, but not in static method.
+  m3() => new A<T>();
+  static m4() => new A<T>();
+  //                   ^
+  // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+  // [cfe] Type variables can't be used in static members.
+}
+
+main() {
+  A a = new A();
+  a.m1();
+  A.m2();
+  a.m3();
+  A.m4();
+}
diff --git a/tests/language/new/prefix_runtime_test.dart b/tests/language/new/prefix_runtime_test.dart
new file mode 100644
index 0000000..1a7288b
--- /dev/null
+++ b/tests/language/new/prefix_runtime_test.dart
@@ -0,0 +1,12 @@
+// TODO(multitest): This was automatically migrated from a multitest and may
+// contain strange or dead code.
+
+// 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.
+
+import 'dart:core' as prefix;
+
+main() {
+
+}
diff --git a/tests/language/new/prefix_test.dart b/tests/language/new/prefix_test.dart
new file mode 100644
index 0000000..72794c8
--- /dev/null
+++ b/tests/language/new/prefix_test.dart
@@ -0,0 +1,12 @@
+// 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.
+
+import 'dart:core' as prefix;
+
+main() {
+  return new prefix();
+  //         ^^^^^^
+  // [analyzer] STATIC_WARNING.NEW_WITH_NON_TYPE
+  // [cfe] Method not found: 'prefix'.
+}
diff --git a/tests/language/new/statement_test.dart b/tests/language/new/statement_test.dart
new file mode 100644
index 0000000..4542501
--- /dev/null
+++ b/tests/language/new/statement_test.dart
@@ -0,0 +1,32 @@
+// 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.
+// Test a new statement by itself.
+
+import "package:expect/expect.dart";
+
+class A {
+  int a;
+  int b;
+  static int c = -1;
+  static int d = -1;
+
+  A(int x, int y)
+      : a = x,
+        b = y {
+    A.c = x;
+    A.d = y;
+  }
+}
+
+class NewStatementTest {
+  static testMain() {
+    new A(10, 20);
+    Expect.equals(10, A.c);
+    Expect.equals(20, A.d);
+  }
+}
+
+main() {
+  NewStatementTest.testMain();
+}
diff --git a/tests/language/nnbd/subtyping/type_casts_legacy_library.dart b/tests/language/nnbd/subtyping/type_casts_legacy_library.dart
deleted file mode 100644
index 1e22641..0000000
--- a/tests/language/nnbd/subtyping/type_casts_legacy_library.dart
+++ /dev/null
@@ -1,28 +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.
-
-// Opt out of Null Safety:
-// @dart = 2.6
-
-import 'type_casts_null_safe_library.dart';
-
-class A<T> {
-  @pragma('vm:never-inline')
-  asT(arg) => arg as T;
-
-  @pragma('vm:never-inline')
-  asBT(arg) => arg as B<T>;
-}
-
-class B<T> {}
-
-class C {}
-
-class D extends C {}
-
-newAOfLegacyC() => new A<C>();
-newAOfLegacyBOfLegacyC() => new A<B<C>>();
-newWOfLegacyC() => new W<C>();
-newWOfLegacyBOfLegacyC() => new W<B<C>>();
-newXOfLegacyY() => new X<Y>();
diff --git a/tests/language/nnbd/subtyping/type_casts_null_safe_library.dart b/tests/language/nnbd/subtyping/type_casts_null_safe_library.dart
deleted file mode 100644
index fedcfc1..0000000
--- a/tests/language/nnbd/subtyping/type_casts_null_safe_library.dart
+++ /dev/null
@@ -1,26 +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.
-
-class W<T> {
-  @pragma('vm:never-inline')
-  asT(arg) => arg as T;
-
-  @pragma('vm:never-inline')
-  asNullableT(arg) => arg as T?;
-
-  @pragma('vm:never-inline')
-  asXT(arg) => arg as X<T>;
-
-  @pragma('vm:never-inline')
-  asNullableXT(arg) => arg as X<T>?;
-
-  @pragma('vm:never-inline')
-  asXNullableT(arg) => arg as X<T?>;
-}
-
-class X<T> {}
-
-class Y {}
-
-class Z extends Y {}
diff --git a/tests/language/nnbd/subtyping/type_casts_strong_test.dart b/tests/language/nnbd/subtyping/type_casts_strong_test.dart
index 7c8ac23..7d7c2e5 100644
--- a/tests/language/nnbd/subtyping/type_casts_strong_test.dart
+++ b/tests/language/nnbd/subtyping/type_casts_strong_test.dart
@@ -7,80 +7,33 @@
 // Requirements=nnbd-strong
 
 import 'package:expect/expect.dart';
-import 'type_casts_legacy_library.dart'; // A, B, C, D
-import 'type_casts_null_safe_library.dart'; // W, X, Y, Z
+
+class C {}
+
+class W<T> {
+  @pragma('vm:never-inline')
+  asT(arg) => arg as T;
+
+  @pragma('vm:never-inline')
+  asNullableT(arg) => arg as T?;
+
+  @pragma('vm:never-inline')
+  asXT(arg) => arg as X<T>;
+
+  @pragma('vm:never-inline')
+  asNullableXT(arg) => arg as X<T>?;
+
+  @pragma('vm:never-inline')
+  asXNullableT(arg) => arg as X<T?>;
+}
+
+class X<T> {}
+
+class Y {}
+
+class Z extends Y {}
 
 doTests() {
-  // Testing 'arg as T*', T = C*
-  final ac = newAOfLegacyC();
-  ac.asT(new C());
-  ac.asT(new D());
-  ac.asT(null);
-  Expect.throwsTypeError(() {
-    ac.asT(new Y());
-  });
-
-  // Testing 'arg as T*', T = B<C*>*
-  final abc = newAOfLegacyBOfLegacyC();
-  abc.asT(new B<C>());
-  abc.asT(new B<D>());
-  abc.asT(null);
-  Expect.throwsTypeError(() {
-    abc.asT(new B<dynamic>());
-  });
-  Expect.throwsTypeError(() {
-    abc.asT(new B<Y>());
-  });
-
-  // Testing 'arg as T*', T = Y
-  final ay = new A<Y>();
-  ay.asT(new Y());
-  ay.asT(new Z());
-  ay.asT(null);
-  Expect.throwsTypeError(() {
-    ay.asT(new C());
-  });
-
-  // Testing 'arg as T', T = C*
-  final wc = newWOfLegacyC();
-  wc.asT(new C());
-  wc.asT(new D());
-  wc.asT(null);
-  Expect.throwsTypeError(() {
-    wc.asT(new Y());
-  });
-
-  // Testing 'arg as T?', T = C*
-  wc.asNullableT(new C());
-  wc.asNullableT(new D());
-  wc.asNullableT(null);
-  Expect.throwsTypeError(() {
-    wc.asNullableT(new Y());
-  });
-
-  // Testing 'arg as T', T = B<C*>*
-  final wby = newWOfLegacyBOfLegacyC();
-  wby.asT(new B<C>());
-  wby.asT(new B<D>());
-  wby.asT(null);
-  Expect.throwsTypeError(() {
-    wby.asT(new B<dynamic>());
-  });
-  Expect.throwsTypeError(() {
-    wby.asT(new B<Y>());
-  });
-
-  // Testing 'arg as T?', T = B<C*>*
-  wby.asNullableT(new B<C>());
-  wby.asNullableT(new B<D>());
-  wby.asNullableT(null);
-  Expect.throwsTypeError(() {
-    wby.asNullableT(new B<dynamic>());
-  });
-  Expect.throwsTypeError(() {
-    wby.asNullableT(new B<Y>());
-  });
-
   // Testing 'arg as T', T = Y
   final wy = new W<Y>();
   wy.asT(new Y());
@@ -100,21 +53,9 @@
     wy.asNullableT(new C());
   });
 
-  // Testing 'arg as B<T*>*', T = Y
-  ay.asBT(new B<Y>());
-  ay.asBT(new B<Z>());
-  ay.asBT(null);
-  Expect.throwsTypeError(() {
-    ay.asBT(new B<dynamic>());
-  });
-  Expect.throwsTypeError(() {
-    ay.asBT(new B<C>());
-  });
-
   // Testing 'arg as X<T>', T = Y
   wy.asXT(new X<Y>());
   wy.asXT(new X<Z>());
-  wy.asXT(newXOfLegacyY());
   Expect.throwsTypeError(() {
     wy.asXT(null);
   });
@@ -128,7 +69,6 @@
   // Testing 'arg as X<T>?', T = Y
   wy.asNullableXT(new X<Y>());
   wy.asNullableXT(new X<Z>());
-  wy.asNullableXT(newXOfLegacyY());
   wy.asNullableXT(null);
   Expect.throwsTypeError(() {
     wy.asNullableXT(new X<dynamic>());
@@ -141,7 +81,6 @@
   wy.asXNullableT(new X<Y>());
   wy.asXNullableT(new X<Z>());
   wy.asXNullableT(new X<Y?>());
-  wy.asXNullableT(newXOfLegacyY());
   Expect.throwsTypeError(() {
     wy.asXNullableT(null);
   });
@@ -154,7 +93,6 @@
   wny.asXT(new X<Y>());
   wny.asXT(new X<Z>());
   wny.asXT(new X<Y?>());
-  wny.asXT(newXOfLegacyY());
   Expect.throwsTypeError(() {
     wny.asXT(null);
   });
diff --git a/tests/language/no_such_method/dispatcher_test.dart b/tests/language/no_such_method/dispatcher_test.dart
new file mode 100644
index 0000000..d0042dc
--- /dev/null
+++ b/tests/language/no_such_method/dispatcher_test.dart
@@ -0,0 +1,63 @@
+// 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.
+// VMOptions=--optimization-counter-threshold=10 --no-use-osr --no-background-compilation
+
+import "package:expect/expect.dart";
+
+// Test that noSuchMethod dispatching and auto-closurization work correctly.
+
+class A {
+  noSuchMethod(m) {
+    return 123;
+  }
+
+  bar(x) => x + 1;
+}
+
+class B extends A {}
+
+class C {
+  C(this.pos, this.named, this.posArgs, this.namedArgs);
+  var pos, named;
+  noSuchMethod(m) {
+    Expect.equals(pos, m.positionalArguments.length);
+    Expect.equals(named, m.namedArguments.length);
+    for (var i = 0; i < posArgs.length; ++i) {
+      Expect.equals(posArgs[i], m.positionalArguments[i]);
+    }
+    for (var k in namedArgs.keys) {
+      Expect.equals(namedArgs[k], m.namedArguments[k]);
+    }
+    return 123;
+  }
+
+  List posArgs;
+  Map namedArgs;
+}
+
+main() {
+  var a = new A() as dynamic;
+  for (var i = 0; i < 20; ++i) Expect.equals(123, a.foo());
+  Expect.throws(() => (a.foo)());
+  Expect.equals("123", (a.foo).toString());
+
+  var b = new B() as dynamic;
+  for (var i = 0; i < 20; ++i) {
+    Expect.equals(2, b.bar(1));
+    Expect.equals(123, b.bar());
+    Expect.equals(2, b.bar(1));
+  }
+
+  for (var i = 0; i < 20; ++i) {
+    Expect.equals(123, b.bar(1, 2, 3));
+    Expect.equals(123, b.bar(1, 2, foo: 3));
+  }
+
+  // Test named and positional arguments.
+  var c = new C(1, 2, [100], {#n1: 101, #n2: 102}) as dynamic;
+  for (var i = 0; i < 20; ++i) {
+    Expect.equals(123, c.bar(100, n1: 101, n2: 102));
+    Expect.equals(123, c.bar(100, n2: 102, n1: 101));
+  }
+}
diff --git a/tests/language/no_such_method/empty_selector_test.dart b/tests/language/no_such_method/empty_selector_test.dart
new file mode 100644
index 0000000..447cba1
--- /dev/null
+++ b/tests/language/no_such_method/empty_selector_test.dart
@@ -0,0 +1,34 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class A {
+  noSuchMethod(_) => 'foo';
+  get hashCode => 42;
+}
+
+// Keep that list empty to make the inferrer infer an empty element
+// type.
+var a = [];
+var b = [new A(), new Object() as dynamic];
+
+main() {
+  // The following [hashCode] call will create a selector whose
+  // receiver type is empty. This used to make dart2js generate a
+  // [noSuchMethod] handler for [hashCode] on the Object class, which
+  // would override the actual implementation.
+  Expect.throwsRangeError(() => a[0].hashCode);
+
+  // This code calls the [hashCode] method put on the [Object] class,
+  // which used to be a [noSuchMethod] handler method.
+  Expect.isTrue(b[1].hashCode is int);
+
+  // Sanity checks.
+  Expect.equals(42, b[0].hashCode);
+  Expect.equals('foo', b[0].foo());
+
+  // Prevent optimizations on the [b] variable.
+  b.clear();
+}
diff --git a/tests/language/no_such_method/many_overridden_test.dart b/tests/language/no_such_method/many_overridden_test.dart
new file mode 100644
index 0000000..77750d3c
--- /dev/null
+++ b/tests/language/no_such_method/many_overridden_test.dart
@@ -0,0 +1,22 @@
+// 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.
+// VMOptions=--optimization-counter-threshold=10
+
+library OverriddenNoSuchMethodTest.dart;
+
+import "package:expect/expect.dart";
+
+part "overridden.dart";
+
+class ManyOverriddenNoSuchMethodTest {
+  static testMain() {
+    for (int i = 0; i < 20; i++) {
+      OverriddenNoSuchMethod.testMain();
+    }
+  }
+}
+
+main() {
+  ManyOverriddenNoSuchMethodTest.testMain();
+}
diff --git a/tests/language/no_such_method/megamorphic_test.dart b/tests/language/no_such_method/megamorphic_test.dart
new file mode 100644
index 0000000..bbae61a
--- /dev/null
+++ b/tests/language/no_such_method/megamorphic_test.dart
@@ -0,0 +1,77 @@
+// 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.
+// Test program for correct optimizations related to types fo allocated lists.
+// VMOptions=--optimization-counter-threshold=10 --no-use-osr
+
+import "package:expect/expect.dart";
+
+// Classes to induce polymorphism of degree 10.
+class A0 {
+  test() => 0;
+}
+
+class A1 {
+  test() => 1;
+}
+
+class A2 {
+  test() => 2;
+}
+
+class A3 {
+  test() => 3;
+}
+
+class A4 {
+  test() => 4;
+}
+
+class A5 {
+  test() => 5;
+}
+
+class A6 {
+  test() => 6;
+}
+
+class A7 {
+  test() => 7;
+}
+
+class A8 {
+  test() => 8;
+}
+
+class A9 {
+  test() => 9;
+}
+
+// Class with no test method.
+class B {}
+
+test(obj) {
+  return obj.test();
+}
+
+main() {
+  // Trigger optimization of 'test' function.
+  List list = [
+    new A0(),
+    new A1(),
+    new A2(),
+    new A3(),
+    new A4(),
+    new A5(),
+    new A6(),
+    new A7(),
+    new A8(),
+    new A9()
+  ];
+  for (int i = 0; i < 20; i++) {
+    for (var obj in list) {
+      test(obj);
+    }
+  }
+  Expect.throwsNoSuchMethodError(() => test(new B()));
+}
diff --git a/tests/language/no_such_method/mock_test.dart b/tests/language/no_such_method/mock_test.dart
new file mode 100644
index 0000000..c6af6b4
--- /dev/null
+++ b/tests/language/no_such_method/mock_test.dart
@@ -0,0 +1,173 @@
+// 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 test program testing that NoSuchMethod is properly called.
+
+import "package:expect/expect.dart";
+
+class Cat {
+  bool eatFood(String food) => true;
+  String scratch(String furniture) => 'purr';
+  String mood = '';
+}
+
+class MockCat implements Cat {
+  dynamic noSuchMethod(Invocation invocation) {
+    var arg = invocation.positionalArguments[0];
+    return arg is String && arg.isNotEmpty;
+  }
+}
+
+class MockCat2 extends MockCat {
+  // this apparently works.
+  noSuchMethod(_);
+}
+
+class MockCat3 extends MockCat2 implements Cat {
+  bool eatFood(String food, {double amount});
+  String scratch(String furniture, [String? furniture2]);
+
+  dynamic noSuchMethod(Invocation invocation) {
+    if (invocation.memberName == #scratch) {
+      return invocation.positionalArguments.join(',');
+    }
+
+    return (invocation.positionalArguments[0] as String).isNotEmpty &&
+        invocation.namedArguments[#amount] > 0.5;
+  }
+}
+
+class MockWithGenerics {
+  List<Type> doStuff<T>(T t);
+
+  noSuchMethod(i) => (i as dynamic).typeArguments;
+}
+
+class MockWithGetterSetter {
+  get getter;
+  set setter(value);
+
+  late Invocation invocation;
+  noSuchMethod(i) {
+    invocation = i;
+  }
+}
+
+class Callable {
+  int call() => 1;
+  int m() => 2;
+}
+
+class MockCallable implements Callable {
+  noSuchMethod(i) => i.memberName == #call ? 42 : 0;
+}
+
+void main() {
+  MockCat mock = new MockCat();
+  Expect.isTrue((mock as dynamic).eatFood("cat food"));
+  Expect.isFalse(mock.eatFood(""));
+  mock.mood = 'sleepy';
+  (mock as dynamic).mood = 'playful';
+  Expect.throwsTypeError(() {
+    (mock as dynamic).mood = 42;
+  });
+
+  // In strong mode this will be a runtime type error:
+  // bool is not a String. VM will fail with noSuchMethod +.
+  Expect.throws(() => mock.scratch("couch") + '');
+
+  var mock2 = new MockCat2();
+  Expect.isTrue(mock2.eatFood("cat food"));
+
+  var mock3 = new MockCat3();
+  Expect.isTrue(mock3.eatFood("cat food", amount: 0.9));
+  Expect.isFalse(mock3.eatFood("cat food", amount: 0.3));
+  Expect.equals("chair,null", mock3.scratch("chair"));
+  Expect.equals("chair,couch", mock3.scratch("chair", "couch"));
+  Expect.equals("chair,null", mock3.scratch("chair", null));
+  Expect.equals("chair,", mock3.scratch("chair", ""));
+
+  var g = new MockWithGenerics();
+  Expect.listEquals([int], g.doStuff(42));
+  Expect.listEquals([num], g.doStuff<num>(42));
+  Expect.listEquals([String], g.doStuff('hi'));
+
+  var s = new MockWithGetterSetter();
+  s.getter;
+  Expect.equals(0, s.invocation.positionalArguments.length);
+  Expect.isTrue(s.invocation.isGetter);
+  Expect.isFalse(s.invocation.isSetter);
+  Expect.isFalse(s.invocation.isMethod);
+  s.setter = 42;
+  Expect.equals(42, s.invocation.positionalArguments.single);
+  Expect.isFalse(s.invocation.isGetter);
+  Expect.isTrue(s.invocation.isSetter);
+  Expect.isFalse(s.invocation.isMethod);
+
+  testMockTearoffs();
+  testMockCallable();
+  testMockCallableTearoff();
+}
+
+testMockCallable() {
+  Callable call = new MockCallable();
+  Expect.equals(42, call());
+  Expect.equals(42, (call as dynamic)());
+  Expect.equals(0, call.m());
+  Expect.equals(0, (call as dynamic).m());
+}
+
+testMockCallableTearoff() {
+  var mock = new MockCallable();
+  Function f = mock;
+  Expect.equals(42, f());
+  Expect.equals(42, (f as dynamic)());
+  Expect.equals(f, mock.call);
+  Expect.equals(f.call, mock.call);
+  Expect.equals((f as dynamic).call, mock.call);
+  Expect.equals(f.call, (mock as dynamic).call);
+}
+
+typedef bool EatFoodType(String food);
+
+testMockTearoffs() {
+  var mock2 = new MockCat2();
+  var eat = mock2.eatFood;
+  var eat2 = (mock2 as dynamic).eatFood;
+
+  Expect.isTrue(eat is EatFoodType, 'eat is EatFoodType');
+  Expect.isTrue(eat2 is EatFoodType, 'eat2 is EatFoodType');
+  Expect.equals(eat, eat2, 'eat == eat2');
+  Expect.isTrue(eat.runtimeType == eat2.runtimeType,
+      'eat.runtimeType == eat2.runtimeType');
+
+  Expect.isTrue(eat("cat food"), 'eat("cat food")');
+  Expect.isFalse(eat(""), 'eat("")');
+  Expect.isTrue(eat2("cat food"), 'eat2("cat food")');
+  Expect.isFalse(eat2(""), 'eat2("")');
+
+  var g = new MockWithGenerics();
+  var doStuff = g.doStuff;
+  var doStuff2 = (g as dynamic).doStuff;
+
+  Expect.equals(doStuff, doStuff2, 'doStuff == doStuff2');
+  Expect.equals(doStuff.runtimeType, doStuff2.runtimeType,
+      'doStuff.runtimeType == doStuff2.runtimeType');
+
+  Expect.listEquals([int], doStuff(42));
+  Expect.listEquals([num], doStuff<num>(42));
+  Expect.listEquals([String], doStuff('hi'));
+
+  // no inference happens because `doStuff2` is dynamic.
+  Expect.listEquals([num], doStuff2<num>(42));
+  expectIsDynamicOrObject(List types) {
+    Expect.equals(1, types.length);
+    var t = types[0];
+    // TODO(jmesserly): allows either type because of
+    // https://github.com/dart-lang/sdk/issues/32483
+    Expect.isTrue(t == dynamic || t == Object, '$t == dynamic || $t == Object');
+  }
+
+  expectIsDynamicOrObject(doStuff2(42));
+  expectIsDynamicOrObject(doStuff2('hi'));
+}
diff --git a/tests/language/no_such_method/native_test.dart b/tests/language/no_such_method/native_test.dart
new file mode 100644
index 0000000..d96cc47
--- /dev/null
+++ b/tests/language/no_such_method/native_test.dart
@@ -0,0 +1,35 @@
+// 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 testing that NoSuchMethod is properly called.
+
+import "package:expect/expect.dart";
+
+late Invocation invocation;
+
+class C {
+  noSuchMethod(Invocation i) {
+    invocation = i;
+    return 42;
+  }
+}
+
+expectNSME(Object? d) {
+  try {
+    d.noSuchMethod(invocation);
+  } on NoSuchMethodError catch (e) {
+    Expect.isTrue(e.toString().contains('foobar'));
+  }
+}
+
+main() {
+  dynamic c = new C() as dynamic;
+  Expect.equals(42, c.foobar(123));
+  Expect.equals(#foobar, invocation.memberName);
+  Expect.listEquals([123], invocation.positionalArguments);
+  expectNSME(null);
+  expectNSME(777);
+  expectNSME('hello');
+  expectNSME([]);
+  expectNSME(<String>['a', 'b', 'c']);
+}
diff --git a/tests/language/no_such_method/no_such_method2_test.dart b/tests/language/no_such_method/no_such_method2_test.dart
new file mode 100644
index 0000000..07f10e2
--- /dev/null
+++ b/tests/language/no_such_method/no_such_method2_test.dart
@@ -0,0 +1,47 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+// Regression test for https://code.google.com/p/dart/issues/detail?id=7697.
+// dart2js used to optimize [noSuchMethod] based on the user-provided
+// argument, and forget that the runtime might call it with its own
+// [Invocation] implementation.
+
+class Hey {
+  foo() => noSuchMethod(new FakeInvocationMirror());
+  noSuchMethod(x) => x;
+}
+
+class You extends Hey {
+  // We used to think this method is always called with a
+  // FakeInvocationMirror instance, but it's also called with the
+  // internal mirror implementation.
+  noSuchMethod(x) => x.isGetter;
+}
+
+class FakeInvocationMirror extends Invocation {
+  final bool isGetter = false;
+  @override
+  bool get isMethod => false;
+
+  @override
+  bool get isSetter => false;
+
+  @override
+  Symbol get memberName => Symbol('fake');
+
+  @override
+  Map<Symbol, dynamic> get namedArguments => {};
+
+  @override
+  List get positionalArguments => [];
+}
+
+main() {
+  var x = new Hey();
+  Expect.isTrue(x.foo() is FakeInvocationMirror);
+  var y = [new You() as dynamic];
+  Expect.isTrue(y[0].bar);
+}
diff --git a/tests/language/no_such_method/no_such_method3_test.dart b/tests/language/no_such_method/no_such_method3_test.dart
new file mode 100644
index 0000000..ba0d0ca
--- /dev/null
+++ b/tests/language/no_such_method/no_such_method3_test.dart
@@ -0,0 +1,38 @@
+// 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.
+
+// Test that a static type inferrer takes [noSuchMethod] into account.
+
+// VMOptions=--optimization-counter-threshold=10 --no-background-compilation
+
+import "package:expect/expect.dart";
+
+class A {
+  B foobarbaz() {
+    return new B();
+  }
+}
+
+class B {
+  noSuchMethod(im) {
+    return 42;
+  }
+}
+
+bar() {
+  var b;
+  for (int i = 0; i < 20; ++i)
+    if (i % 2 == 0)
+      b = new A();
+    else
+      b = new B();
+  return b;
+}
+
+void main() {
+  var x = bar();
+  var y = x.foobarbaz();
+  Expect.equals(42, y);
+  Expect.isFalse(y is B);
+}
diff --git a/tests/language/no_such_method/no_such_method4_test.dart b/tests/language/no_such_method/no_such_method4_test.dart
new file mode 100644
index 0000000..23b2feb
--- /dev/null
+++ b/tests/language/no_such_method/no_such_method4_test.dart
@@ -0,0 +1,18 @@
+// 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:expect/expect.dart';
+
+class NoSuchMethodNegativeTest {
+  foo() {
+    return 1;
+  }
+}
+
+main() {
+  var obj = new NoSuchMethodNegativeTest() as dynamic;
+  Expect.throwsNoSuchMethodError(() {
+    obj.moo();
+  });
+}
diff --git a/tests/language/no_such_method/no_such_method_private_setter_lib.dart b/tests/language/no_such_method/no_such_method_private_setter_lib.dart
new file mode 100644
index 0000000..4f3ecb33
--- /dev/null
+++ b/tests/language/no_such_method/no_such_method_private_setter_lib.dart
@@ -0,0 +1,11 @@
+// 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.
+
+class Bar {
+  int _x = -1;
+}
+
+void baz(Bar bar) {
+  (bar as dynamic)._x = "Sixtyfour"; //# 01: runtime error
+}
diff --git a/tests/language/no_such_method/no_such_method_test.dart b/tests/language/no_such_method/no_such_method_test.dart
new file mode 100644
index 0000000..f38285a
--- /dev/null
+++ b/tests/language/no_such_method/no_such_method_test.dart
@@ -0,0 +1,24 @@
+// 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 test program testing that NoSuchMethod is properly called.
+
+import "package:expect/expect.dart";
+
+class NoSuchMethodTest {
+  foo({a: 10, b: 20}) {
+    return (10 * a) + b;
+  }
+
+  noSuchMethod(Invocation im) {
+    Expect.equals(#moo, im.memberName);
+    Expect.equals(0, im.positionalArguments.length);
+    Expect.equals(1, im.namedArguments.length);
+    return foo(b: im.namedArguments[const Symbol("b")]);
+  }
+}
+
+main() {
+  var obj = new NoSuchMethodTest() as dynamic;
+  Expect.equals(199, obj.moo(b: 99)); // obj.NoSuchMethod called here.
+}
diff --git a/tests/language/no_such_method/nsm4_test.dart b/tests/language/no_such_method/nsm4_test.dart
new file mode 100644
index 0000000..3ff05c0
--- /dev/null
+++ b/tests/language/no_such_method/nsm4_test.dart
@@ -0,0 +1,22 @@
+// 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.
+
+// Test for compile-time errors for member access on classes that inherit a
+// user defined noSuchMethod.
+
+import "package:expect/expect.dart";
+
+class Mock {
+  noSuchMethod(i) => 42;
+}
+
+abstract class Foo {
+  int foo();
+}
+
+class Valid extends Mock implements Foo {}
+
+main() {
+  Expect.equals(new Valid().foo(), 42);
+}
diff --git a/tests/language/no_such_method/nsm5_test.dart b/tests/language/no_such_method/nsm5_test.dart
new file mode 100644
index 0000000..b8ddb77
--- /dev/null
+++ b/tests/language/no_such_method/nsm5_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+// Test for compile-time errors for member access on classes that inherit a
+// user defined noSuchMethod, even if it is abstract.
+
+import 'package:expect/expect.dart';
+
+abstract class Mock {
+  noSuchMethod(i);
+}
+
+abstract class Foo {
+  int foo();
+}
+
+/*@compile-error=unspecified*/ class WarnMe extends Mock implements Foo {}
+
+main() {}
diff --git a/tests/language/no_such_method/overridden.dart b/tests/language/no_such_method/overridden.dart
new file mode 100644
index 0000000..9e86672
--- /dev/null
+++ b/tests/language/no_such_method/overridden.dart
@@ -0,0 +1,25 @@
+// 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 test program testing overridden messageNotUnderstood.
+
+part of OverriddenNoSuchMethodTest.dart;
+
+class OverriddenNoSuchMethod {
+  OverriddenNoSuchMethod() {}
+
+  noSuchMethod(Invocation mirror) {
+    Expect.equals(#foo, mirror.memberName);
+    // 'foo' was called with two parameters (not counting receiver).
+    List args = mirror.positionalArguments;
+    Expect.equals(2, args.length);
+    Expect.equals(101, args[0]);
+    Expect.equals(202, args[1]);
+    return 5;
+  }
+
+  static testMain() {
+    dynamic obj = new OverriddenNoSuchMethod();
+    obj.foo(101, 202);
+  }
+}
diff --git a/tests/language/no_such_method/overridden_no_such_method_test.dart b/tests/language/no_such_method/overridden_no_such_method_test.dart
new file mode 100644
index 0000000..598ffb1
--- /dev/null
+++ b/tests/language/no_such_method/overridden_no_such_method_test.dart
@@ -0,0 +1,13 @@
+// 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 test program testing overridden messageNotUnderstood.
+
+library OverriddenNoSuchMethodTest.dart;
+
+import "package:expect/expect.dart";
+part "overridden.dart";
+
+main() {
+  OverriddenNoSuchMethod.testMain();
+}
diff --git a/tests/language/no_such_method/private_setter_test.dart b/tests/language/no_such_method/private_setter_test.dart
new file mode 100644
index 0000000..0f110bb
--- /dev/null
+++ b/tests/language/no_such_method/private_setter_test.dart
@@ -0,0 +1,11 @@
+// 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 'no_such_method_private_setter_lib.dart';
+
+class Foo implements Bar {}
+
+main() {
+  baz(new Foo()); //# 01: runtime error
+}
diff --git a/tests/language/no_such_method/simple_type_arguments_test.dart b/tests/language/no_such_method/simple_type_arguments_test.dart
new file mode 100644
index 0000000..7375f4a
--- /dev/null
+++ b/tests/language/no_such_method/simple_type_arguments_test.dart
@@ -0,0 +1,23 @@
+// 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.
+// dart2jsOptions=--disable-rti-optimization
+
+// Dart test program testing that type arguments are captured by the Invocation
+// passed to noSuchMethod from a dynamic call.
+
+import "package:expect/expect.dart";
+
+class Mock {
+  noSuchMethod(i) => i.typeArguments;
+}
+
+void main() {
+  var g = new Mock();
+
+  Expect.listEquals(
+      [String, int], (g as dynamic).hurrah<String, int>(moose: 42, duck: 12));
+
+  // map has interceptor calling convention in dart2js.
+  Expect.listEquals([String, int], (g as dynamic).map<String, int>());
+}
diff --git a/tests/language/no_such_method/subtype_test.dart b/tests/language/no_such_method/subtype_test.dart
new file mode 100644
index 0000000..a843c91
--- /dev/null
+++ b/tests/language/no_such_method/subtype_test.dart
@@ -0,0 +1,27 @@
+// 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.
+
+import "package:expect/expect.dart";
+
+class A {
+  foo() => 42;
+}
+
+class B implements A {
+  noSuchMethod(im) => 84;
+}
+
+main() {
+  var a = [new A(), new B()];
+  var b = a[1];
+  if (b is A) {
+    // `b.foo()` will create a typed selector whose receiver type is a
+    // subtype of `A`. Because not all subtypes of `A` implement
+    // `foo`, dart2js must generate a `noSuchMethod` stub for `foo` in
+    // the top Object class.
+    Expect.equals(84, b.foo());
+    return;
+  }
+  Expect.fail('Should not be here');
+}
diff --git a/tests/language/no_such_method/tearoff_fta_test.dart b/tests/language/no_such_method/tearoff_fta_test.dart
new file mode 100644
index 0000000..163dc7e
--- /dev/null
+++ b/tests/language/no_such_method/tearoff_fta_test.dart
@@ -0,0 +1,15 @@
+// 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:expect/expect.dart';
+
+void foo() {}
+
+main() {
+  final dynamic tearoff = foo;
+
+  Expect.throwsNoSuchMethodError(() {
+    tearoff<String>(3);
+  }, 'Providing type arguments to a non-generic tearoff should throw go NSM.');
+}
diff --git a/tests/language/nosuchmethod_forwarding/abstract_override_with_different_type.dart b/tests/language/nosuchmethod_forwarding/abstract_override_with_different_type.dart
new file mode 100644
index 0000000..9a1aa2d
--- /dev/null
+++ b/tests/language/nosuchmethod_forwarding/abstract_override_with_different_type.dart
@@ -0,0 +1,44 @@
+// 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.
+
+// This is a regression test for http://dartbug.com/40248.
+
+import "package:expect/expect.dart";
+
+class Base {
+  set push(int x);
+  set float(covariant int x);
+  noSuchMethod(i) => print("${runtimeType}: ${i.positionalArguments[0]}");
+}
+
+class Me extends Base {}
+
+class You extends Base {
+  set push(num x);
+  set float(num x);
+}
+
+main() {
+  List<Base> list = [Me(), You()];
+  for (Base baba in list) {
+    baba.push = 0;
+    baba.float = 1;
+    if (baba is You) {
+      baba.push = 2.3;
+      baba.float = 4.5;
+    }
+    try {
+      (baba as dynamic).push = 6.7;
+      Expect.isTrue(baba is You);
+    } on TypeError {
+      Expect.isTrue(baba is Me);
+    }
+    try {
+      (baba as dynamic).float = 8.9;
+      Expect.isTrue(baba is You);
+    } on TypeError {
+      Expect.isTrue(baba is Me);
+    }
+  }
+}
diff --git a/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart b/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart
new file mode 100644
index 0000000..08a79ad
--- /dev/null
+++ b/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart
@@ -0,0 +1,102 @@
+// 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.
+
+// Testing that `noSuchMethod` forwarding properly handles optional, named and
+// type parameters, and result type checking.
+
+import 'package:expect/expect.dart';
+
+class A {
+  dynamic noSuchMethod(Invocation invoke) {
+    if (invoke.memberName == #test0) {
+      Expect.equals(invoke.positionalArguments[0], 1);
+      Expect.equals(invoke.positionalArguments[1], 2);
+      return null;
+    } else if (invoke.memberName == #test1) {
+      Expect.isTrue(invoke.namedArguments.length == 1);
+      Expect.equals(null, invoke.namedArguments[#x]);
+      return null;
+    } else if (invoke.memberName == #test2) {
+      Expect.isTrue(invoke.namedArguments.length == 1);
+      Expect.equals("w/e", invoke.namedArguments[#x]);
+      return null;
+    } else if (invoke.memberName == #test3) {
+      Expect.equals(invoke.namedArguments[#x], "ok");
+      return null;
+    } else if (invoke.memberName == #test4) {
+      Expect.equals(invoke.positionalArguments[0], "ok");
+      return null;
+    } else if (invoke.memberName == #test5) {
+      Expect.equals(invoke.typeArguments[0].toString(), "int");
+      return null;
+    } else if (invoke.memberName == #test6) {
+      return 1;
+    } else if (invoke.memberName == #test7) {
+      return "hi";
+    } else if (invoke.memberName == #allTogetherNow) {
+      Expect.equals(invoke.typeArguments.length, 2);
+      Expect.equals(invoke.typeArguments[0].toString(), "num");
+      Expect.equals(invoke.typeArguments[1].toString(), "double");
+
+      Expect.equals(invoke.positionalArguments.length, 1);
+      Expect.equals(invoke.positionalArguments[0], 2.0);
+
+      Expect.equals(invoke.namedArguments.length, 1);
+      Expect.equals(invoke.namedArguments[#foo], const <num>[3, 4]);
+      return 1;
+    } else if (invoke.memberName == #test8) {
+      Expect.equals(1, invoke.positionalArguments.length);
+      Expect.equals(null, invoke.positionalArguments[0]);
+    }
+  }
+
+  void test0(int x, int y);
+  void test1({String? x});
+  void test2({String x: "w/e"});
+  void test3({String x: "w/e"});
+  void test4([String? x]);
+  void test5<T extends num>(T x);
+  String test6();
+
+  int get test7;
+  void set test7(int x);
+
+  void test8([String? x]);
+
+  T allTogetherNow<T, S extends T>(S x1, {List<T> foo: const <Never>[]});
+}
+
+main() {
+  var a = new A();
+
+  a.test0(1, 2);
+  (a.test0 as dynamic)(1, 2);
+
+  a.test1();
+  (a.test1 as dynamic)();
+
+  a.test2();
+  (a.test2 as dynamic)();
+
+  a.test3(x: "ok");
+  (a.test3 as dynamic)(x: "ok");
+
+  a.test4("ok");
+  (a.test4 as dynamic)("ok");
+
+  a.test5<int>(1);
+  (a.test5 as dynamic)<int>(1);
+  Expect.throwsTypeError(() => (a.test5 as dynamic)<String>("foo"));
+  Expect.throwsTypeError(() => (a.test5 as dynamic)<int>(3.1));
+
+  Expect.throwsTypeError(() => a.test6());
+  Expect.throwsTypeError(() => (a.test6 as dynamic)());
+
+  Expect.throwsTypeError(() => a.test7);
+  Expect.throwsTypeError(() => (a as dynamic).test7 = "hi");
+
+  a.allTogetherNow<num, double>(2.0, foo: const <num>[3, 4]);
+
+  a.test8();
+}
diff --git a/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_partial_instantiation_test.dart b/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_partial_instantiation_test.dart
new file mode 100644
index 0000000..a44cf30
--- /dev/null
+++ b/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_partial_instantiation_test.dart
@@ -0,0 +1,25 @@
+// 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.
+
+// Testing that `noSuchMethod` forwarders can be partially instantiated, and
+// that their delayed type arguments are transparently passed to `noSuchMethod`.
+
+import 'package:expect/expect.dart';
+
+class C {
+  T test1<T>(T x);
+
+  dynamic noSuchMethod(Invocation invoke) {
+    Expect.equals(invoke.typeArguments.length, 1);
+    Expect.equals(invoke.typeArguments[0].toString(), 'int');
+    Expect.equals(invoke.positionalArguments[0], 1);
+    return 1;
+  }
+}
+
+void main() {
+  var c = new C();
+  int Function(int) k1 = c.test1;
+  k1(1);
+}
diff --git a/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_test.dart b/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_test.dart
new file mode 100644
index 0000000..d54a784
--- /dev/null
+++ b/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_test.dart
@@ -0,0 +1,54 @@
+// 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.
+
+// Testing that `noSuchMethod` appears to use implicit forwarders (we don't
+// care how it's actually implemented, but it should look like that).
+
+import 'package:expect/expect.dart';
+
+// "Template" class: Something to emulate.
+class A {
+  int foo(String s) => s.length;
+}
+
+// Emulate `A`, but only dynamically.
+class B {
+  noSuchMethod(_) => 31;
+}
+
+// Emulate `A`, including its type.
+class C implements A {
+  noSuchMethod(_) => 41;
+}
+
+// Emulate `A` with its type, based on an inherited `noSuchMethod`.
+class D extends B implements A {}
+
+void test(A a, int expectedValue) {
+  // Regular superinterfaces can be supported by `noSuchMethod`.
+  Expect.equals(expectedValue, a.foo('Hello!')); //# 04: ok
+
+  // `noSuchMethod` triggers generation of forwarders, so a statically
+  // known instance method tear-off yields a `Function`, also when invoked
+  // dynamically.
+  Expect.isTrue(a.foo is Function); //# 05: ok
+  Expect.isTrue((a as dynamic).foo is Function); //# 06: ok
+
+  // For an unknown member name the invocation must be dynamic, and in that
+  // case it does not match a forwarder, but we invoke `noSuchMethod`.
+  Expect.equals(expectedValue, (a as dynamic).bar); //# 07: ok
+}
+
+main() {
+  // Dynamic invocations can make a `B` seem to implement `A`.
+  Expect.equals(31, (new B() as dynamic).foo('Hello!')); //# 01: ok
+
+  // But `noSuchMethod` does not affect the type or interface of a class.
+  A a; //# 02: continued
+  Expect.throws(() => a = new B() as dynamic); //# 02: ok
+  new B().foo('Hello!'); //# 03: compile-time error
+
+  test(new C(), 41);
+  test(new D(), 31);
+}
diff --git a/tests/language/regress/regress41983_test.dart b/tests/language/regress/regress41983_test.dart
new file mode 100644
index 0000000..c8769be
--- /dev/null
+++ b/tests/language/regress/regress41983_test.dart
@@ -0,0 +1,20014 @@
+// 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 "package:expect/expect.dart";
+
+main() {
+  List<int> ints = <int>[]
+    ..add(0)
+    ..add(1)
+    ..add(2)
+    ..add(3)
+    ..add(4)
+    ..add(5)
+    ..add(6)
+    ..add(7)
+    ..add(8)
+    ..add(9)
+    ..add(10)
+    ..add(11)
+    ..add(12)
+    ..add(13)
+    ..add(14)
+    ..add(15)
+    ..add(16)
+    ..add(17)
+    ..add(18)
+    ..add(19)
+    ..add(20)
+    ..add(21)
+    ..add(22)
+    ..add(23)
+    ..add(24)
+    ..add(25)
+    ..add(26)
+    ..add(27)
+    ..add(28)
+    ..add(29)
+    ..add(30)
+    ..add(31)
+    ..add(32)
+    ..add(33)
+    ..add(34)
+    ..add(35)
+    ..add(36)
+    ..add(37)
+    ..add(38)
+    ..add(39)
+    ..add(40)
+    ..add(41)
+    ..add(42)
+    ..add(43)
+    ..add(44)
+    ..add(45)
+    ..add(46)
+    ..add(47)
+    ..add(48)
+    ..add(49)
+    ..add(50)
+    ..add(51)
+    ..add(52)
+    ..add(53)
+    ..add(54)
+    ..add(55)
+    ..add(56)
+    ..add(57)
+    ..add(58)
+    ..add(59)
+    ..add(60)
+    ..add(61)
+    ..add(62)
+    ..add(63)
+    ..add(64)
+    ..add(65)
+    ..add(66)
+    ..add(67)
+    ..add(68)
+    ..add(69)
+    ..add(70)
+    ..add(71)
+    ..add(72)
+    ..add(73)
+    ..add(74)
+    ..add(75)
+    ..add(76)
+    ..add(77)
+    ..add(78)
+    ..add(79)
+    ..add(80)
+    ..add(81)
+    ..add(82)
+    ..add(83)
+    ..add(84)
+    ..add(85)
+    ..add(86)
+    ..add(87)
+    ..add(88)
+    ..add(89)
+    ..add(90)
+    ..add(91)
+    ..add(92)
+    ..add(93)
+    ..add(94)
+    ..add(95)
+    ..add(96)
+    ..add(97)
+    ..add(98)
+    ..add(99)
+    ..add(100)
+    ..add(101)
+    ..add(102)
+    ..add(103)
+    ..add(104)
+    ..add(105)
+    ..add(106)
+    ..add(107)
+    ..add(108)
+    ..add(109)
+    ..add(110)
+    ..add(111)
+    ..add(112)
+    ..add(113)
+    ..add(114)
+    ..add(115)
+    ..add(116)
+    ..add(117)
+    ..add(118)
+    ..add(119)
+    ..add(120)
+    ..add(121)
+    ..add(122)
+    ..add(123)
+    ..add(124)
+    ..add(125)
+    ..add(126)
+    ..add(127)
+    ..add(128)
+    ..add(129)
+    ..add(130)
+    ..add(131)
+    ..add(132)
+    ..add(133)
+    ..add(134)
+    ..add(135)
+    ..add(136)
+    ..add(137)
+    ..add(138)
+    ..add(139)
+    ..add(140)
+    ..add(141)
+    ..add(142)
+    ..add(143)
+    ..add(144)
+    ..add(145)
+    ..add(146)
+    ..add(147)
+    ..add(148)
+    ..add(149)
+    ..add(150)
+    ..add(151)
+    ..add(152)
+    ..add(153)
+    ..add(154)
+    ..add(155)
+    ..add(156)
+    ..add(157)
+    ..add(158)
+    ..add(159)
+    ..add(160)
+    ..add(161)
+    ..add(162)
+    ..add(163)
+    ..add(164)
+    ..add(165)
+    ..add(166)
+    ..add(167)
+    ..add(168)
+    ..add(169)
+    ..add(170)
+    ..add(171)
+    ..add(172)
+    ..add(173)
+    ..add(174)
+    ..add(175)
+    ..add(176)
+    ..add(177)
+    ..add(178)
+    ..add(179)
+    ..add(180)
+    ..add(181)
+    ..add(182)
+    ..add(183)
+    ..add(184)
+    ..add(185)
+    ..add(186)
+    ..add(187)
+    ..add(188)
+    ..add(189)
+    ..add(190)
+    ..add(191)
+    ..add(192)
+    ..add(193)
+    ..add(194)
+    ..add(195)
+    ..add(196)
+    ..add(197)
+    ..add(198)
+    ..add(199)
+    ..add(200)
+    ..add(201)
+    ..add(202)
+    ..add(203)
+    ..add(204)
+    ..add(205)
+    ..add(206)
+    ..add(207)
+    ..add(208)
+    ..add(209)
+    ..add(210)
+    ..add(211)
+    ..add(212)
+    ..add(213)
+    ..add(214)
+    ..add(215)
+    ..add(216)
+    ..add(217)
+    ..add(218)
+    ..add(219)
+    ..add(220)
+    ..add(221)
+    ..add(222)
+    ..add(223)
+    ..add(224)
+    ..add(225)
+    ..add(226)
+    ..add(227)
+    ..add(228)
+    ..add(229)
+    ..add(230)
+    ..add(231)
+    ..add(232)
+    ..add(233)
+    ..add(234)
+    ..add(235)
+    ..add(236)
+    ..add(237)
+    ..add(238)
+    ..add(239)
+    ..add(240)
+    ..add(241)
+    ..add(242)
+    ..add(243)
+    ..add(244)
+    ..add(245)
+    ..add(246)
+    ..add(247)
+    ..add(248)
+    ..add(249)
+    ..add(250)
+    ..add(251)
+    ..add(252)
+    ..add(253)
+    ..add(254)
+    ..add(255)
+    ..add(256)
+    ..add(257)
+    ..add(258)
+    ..add(259)
+    ..add(260)
+    ..add(261)
+    ..add(262)
+    ..add(263)
+    ..add(264)
+    ..add(265)
+    ..add(266)
+    ..add(267)
+    ..add(268)
+    ..add(269)
+    ..add(270)
+    ..add(271)
+    ..add(272)
+    ..add(273)
+    ..add(274)
+    ..add(275)
+    ..add(276)
+    ..add(277)
+    ..add(278)
+    ..add(279)
+    ..add(280)
+    ..add(281)
+    ..add(282)
+    ..add(283)
+    ..add(284)
+    ..add(285)
+    ..add(286)
+    ..add(287)
+    ..add(288)
+    ..add(289)
+    ..add(290)
+    ..add(291)
+    ..add(292)
+    ..add(293)
+    ..add(294)
+    ..add(295)
+    ..add(296)
+    ..add(297)
+    ..add(298)
+    ..add(299)
+    ..add(300)
+    ..add(301)
+    ..add(302)
+    ..add(303)
+    ..add(304)
+    ..add(305)
+    ..add(306)
+    ..add(307)
+    ..add(308)
+    ..add(309)
+    ..add(310)
+    ..add(311)
+    ..add(312)
+    ..add(313)
+    ..add(314)
+    ..add(315)
+    ..add(316)
+    ..add(317)
+    ..add(318)
+    ..add(319)
+    ..add(320)
+    ..add(321)
+    ..add(322)
+    ..add(323)
+    ..add(324)
+    ..add(325)
+    ..add(326)
+    ..add(327)
+    ..add(328)
+    ..add(329)
+    ..add(330)
+    ..add(331)
+    ..add(332)
+    ..add(333)
+    ..add(334)
+    ..add(335)
+    ..add(336)
+    ..add(337)
+    ..add(338)
+    ..add(339)
+    ..add(340)
+    ..add(341)
+    ..add(342)
+    ..add(343)
+    ..add(344)
+    ..add(345)
+    ..add(346)
+    ..add(347)
+    ..add(348)
+    ..add(349)
+    ..add(350)
+    ..add(351)
+    ..add(352)
+    ..add(353)
+    ..add(354)
+    ..add(355)
+    ..add(356)
+    ..add(357)
+    ..add(358)
+    ..add(359)
+    ..add(360)
+    ..add(361)
+    ..add(362)
+    ..add(363)
+    ..add(364)
+    ..add(365)
+    ..add(366)
+    ..add(367)
+    ..add(368)
+    ..add(369)
+    ..add(370)
+    ..add(371)
+    ..add(372)
+    ..add(373)
+    ..add(374)
+    ..add(375)
+    ..add(376)
+    ..add(377)
+    ..add(378)
+    ..add(379)
+    ..add(380)
+    ..add(381)
+    ..add(382)
+    ..add(383)
+    ..add(384)
+    ..add(385)
+    ..add(386)
+    ..add(387)
+    ..add(388)
+    ..add(389)
+    ..add(390)
+    ..add(391)
+    ..add(392)
+    ..add(393)
+    ..add(394)
+    ..add(395)
+    ..add(396)
+    ..add(397)
+    ..add(398)
+    ..add(399)
+    ..add(400)
+    ..add(401)
+    ..add(402)
+    ..add(403)
+    ..add(404)
+    ..add(405)
+    ..add(406)
+    ..add(407)
+    ..add(408)
+    ..add(409)
+    ..add(410)
+    ..add(411)
+    ..add(412)
+    ..add(413)
+    ..add(414)
+    ..add(415)
+    ..add(416)
+    ..add(417)
+    ..add(418)
+    ..add(419)
+    ..add(420)
+    ..add(421)
+    ..add(422)
+    ..add(423)
+    ..add(424)
+    ..add(425)
+    ..add(426)
+    ..add(427)
+    ..add(428)
+    ..add(429)
+    ..add(430)
+    ..add(431)
+    ..add(432)
+    ..add(433)
+    ..add(434)
+    ..add(435)
+    ..add(436)
+    ..add(437)
+    ..add(438)
+    ..add(439)
+    ..add(440)
+    ..add(441)
+    ..add(442)
+    ..add(443)
+    ..add(444)
+    ..add(445)
+    ..add(446)
+    ..add(447)
+    ..add(448)
+    ..add(449)
+    ..add(450)
+    ..add(451)
+    ..add(452)
+    ..add(453)
+    ..add(454)
+    ..add(455)
+    ..add(456)
+    ..add(457)
+    ..add(458)
+    ..add(459)
+    ..add(460)
+    ..add(461)
+    ..add(462)
+    ..add(463)
+    ..add(464)
+    ..add(465)
+    ..add(466)
+    ..add(467)
+    ..add(468)
+    ..add(469)
+    ..add(470)
+    ..add(471)
+    ..add(472)
+    ..add(473)
+    ..add(474)
+    ..add(475)
+    ..add(476)
+    ..add(477)
+    ..add(478)
+    ..add(479)
+    ..add(480)
+    ..add(481)
+    ..add(482)
+    ..add(483)
+    ..add(484)
+    ..add(485)
+    ..add(486)
+    ..add(487)
+    ..add(488)
+    ..add(489)
+    ..add(490)
+    ..add(491)
+    ..add(492)
+    ..add(493)
+    ..add(494)
+    ..add(495)
+    ..add(496)
+    ..add(497)
+    ..add(498)
+    ..add(499)
+    ..add(500)
+    ..add(501)
+    ..add(502)
+    ..add(503)
+    ..add(504)
+    ..add(505)
+    ..add(506)
+    ..add(507)
+    ..add(508)
+    ..add(509)
+    ..add(510)
+    ..add(511)
+    ..add(512)
+    ..add(513)
+    ..add(514)
+    ..add(515)
+    ..add(516)
+    ..add(517)
+    ..add(518)
+    ..add(519)
+    ..add(520)
+    ..add(521)
+    ..add(522)
+    ..add(523)
+    ..add(524)
+    ..add(525)
+    ..add(526)
+    ..add(527)
+    ..add(528)
+    ..add(529)
+    ..add(530)
+    ..add(531)
+    ..add(532)
+    ..add(533)
+    ..add(534)
+    ..add(535)
+    ..add(536)
+    ..add(537)
+    ..add(538)
+    ..add(539)
+    ..add(540)
+    ..add(541)
+    ..add(542)
+    ..add(543)
+    ..add(544)
+    ..add(545)
+    ..add(546)
+    ..add(547)
+    ..add(548)
+    ..add(549)
+    ..add(550)
+    ..add(551)
+    ..add(552)
+    ..add(553)
+    ..add(554)
+    ..add(555)
+    ..add(556)
+    ..add(557)
+    ..add(558)
+    ..add(559)
+    ..add(560)
+    ..add(561)
+    ..add(562)
+    ..add(563)
+    ..add(564)
+    ..add(565)
+    ..add(566)
+    ..add(567)
+    ..add(568)
+    ..add(569)
+    ..add(570)
+    ..add(571)
+    ..add(572)
+    ..add(573)
+    ..add(574)
+    ..add(575)
+    ..add(576)
+    ..add(577)
+    ..add(578)
+    ..add(579)
+    ..add(580)
+    ..add(581)
+    ..add(582)
+    ..add(583)
+    ..add(584)
+    ..add(585)
+    ..add(586)
+    ..add(587)
+    ..add(588)
+    ..add(589)
+    ..add(590)
+    ..add(591)
+    ..add(592)
+    ..add(593)
+    ..add(594)
+    ..add(595)
+    ..add(596)
+    ..add(597)
+    ..add(598)
+    ..add(599)
+    ..add(600)
+    ..add(601)
+    ..add(602)
+    ..add(603)
+    ..add(604)
+    ..add(605)
+    ..add(606)
+    ..add(607)
+    ..add(608)
+    ..add(609)
+    ..add(610)
+    ..add(611)
+    ..add(612)
+    ..add(613)
+    ..add(614)
+    ..add(615)
+    ..add(616)
+    ..add(617)
+    ..add(618)
+    ..add(619)
+    ..add(620)
+    ..add(621)
+    ..add(622)
+    ..add(623)
+    ..add(624)
+    ..add(625)
+    ..add(626)
+    ..add(627)
+    ..add(628)
+    ..add(629)
+    ..add(630)
+    ..add(631)
+    ..add(632)
+    ..add(633)
+    ..add(634)
+    ..add(635)
+    ..add(636)
+    ..add(637)
+    ..add(638)
+    ..add(639)
+    ..add(640)
+    ..add(641)
+    ..add(642)
+    ..add(643)
+    ..add(644)
+    ..add(645)
+    ..add(646)
+    ..add(647)
+    ..add(648)
+    ..add(649)
+    ..add(650)
+    ..add(651)
+    ..add(652)
+    ..add(653)
+    ..add(654)
+    ..add(655)
+    ..add(656)
+    ..add(657)
+    ..add(658)
+    ..add(659)
+    ..add(660)
+    ..add(661)
+    ..add(662)
+    ..add(663)
+    ..add(664)
+    ..add(665)
+    ..add(666)
+    ..add(667)
+    ..add(668)
+    ..add(669)
+    ..add(670)
+    ..add(671)
+    ..add(672)
+    ..add(673)
+    ..add(674)
+    ..add(675)
+    ..add(676)
+    ..add(677)
+    ..add(678)
+    ..add(679)
+    ..add(680)
+    ..add(681)
+    ..add(682)
+    ..add(683)
+    ..add(684)
+    ..add(685)
+    ..add(686)
+    ..add(687)
+    ..add(688)
+    ..add(689)
+    ..add(690)
+    ..add(691)
+    ..add(692)
+    ..add(693)
+    ..add(694)
+    ..add(695)
+    ..add(696)
+    ..add(697)
+    ..add(698)
+    ..add(699)
+    ..add(700)
+    ..add(701)
+    ..add(702)
+    ..add(703)
+    ..add(704)
+    ..add(705)
+    ..add(706)
+    ..add(707)
+    ..add(708)
+    ..add(709)
+    ..add(710)
+    ..add(711)
+    ..add(712)
+    ..add(713)
+    ..add(714)
+    ..add(715)
+    ..add(716)
+    ..add(717)
+    ..add(718)
+    ..add(719)
+    ..add(720)
+    ..add(721)
+    ..add(722)
+    ..add(723)
+    ..add(724)
+    ..add(725)
+    ..add(726)
+    ..add(727)
+    ..add(728)
+    ..add(729)
+    ..add(730)
+    ..add(731)
+    ..add(732)
+    ..add(733)
+    ..add(734)
+    ..add(735)
+    ..add(736)
+    ..add(737)
+    ..add(738)
+    ..add(739)
+    ..add(740)
+    ..add(741)
+    ..add(742)
+    ..add(743)
+    ..add(744)
+    ..add(745)
+    ..add(746)
+    ..add(747)
+    ..add(748)
+    ..add(749)
+    ..add(750)
+    ..add(751)
+    ..add(752)
+    ..add(753)
+    ..add(754)
+    ..add(755)
+    ..add(756)
+    ..add(757)
+    ..add(758)
+    ..add(759)
+    ..add(760)
+    ..add(761)
+    ..add(762)
+    ..add(763)
+    ..add(764)
+    ..add(765)
+    ..add(766)
+    ..add(767)
+    ..add(768)
+    ..add(769)
+    ..add(770)
+    ..add(771)
+    ..add(772)
+    ..add(773)
+    ..add(774)
+    ..add(775)
+    ..add(776)
+    ..add(777)
+    ..add(778)
+    ..add(779)
+    ..add(780)
+    ..add(781)
+    ..add(782)
+    ..add(783)
+    ..add(784)
+    ..add(785)
+    ..add(786)
+    ..add(787)
+    ..add(788)
+    ..add(789)
+    ..add(790)
+    ..add(791)
+    ..add(792)
+    ..add(793)
+    ..add(794)
+    ..add(795)
+    ..add(796)
+    ..add(797)
+    ..add(798)
+    ..add(799)
+    ..add(800)
+    ..add(801)
+    ..add(802)
+    ..add(803)
+    ..add(804)
+    ..add(805)
+    ..add(806)
+    ..add(807)
+    ..add(808)
+    ..add(809)
+    ..add(810)
+    ..add(811)
+    ..add(812)
+    ..add(813)
+    ..add(814)
+    ..add(815)
+    ..add(816)
+    ..add(817)
+    ..add(818)
+    ..add(819)
+    ..add(820)
+    ..add(821)
+    ..add(822)
+    ..add(823)
+    ..add(824)
+    ..add(825)
+    ..add(826)
+    ..add(827)
+    ..add(828)
+    ..add(829)
+    ..add(830)
+    ..add(831)
+    ..add(832)
+    ..add(833)
+    ..add(834)
+    ..add(835)
+    ..add(836)
+    ..add(837)
+    ..add(838)
+    ..add(839)
+    ..add(840)
+    ..add(841)
+    ..add(842)
+    ..add(843)
+    ..add(844)
+    ..add(845)
+    ..add(846)
+    ..add(847)
+    ..add(848)
+    ..add(849)
+    ..add(850)
+    ..add(851)
+    ..add(852)
+    ..add(853)
+    ..add(854)
+    ..add(855)
+    ..add(856)
+    ..add(857)
+    ..add(858)
+    ..add(859)
+    ..add(860)
+    ..add(861)
+    ..add(862)
+    ..add(863)
+    ..add(864)
+    ..add(865)
+    ..add(866)
+    ..add(867)
+    ..add(868)
+    ..add(869)
+    ..add(870)
+    ..add(871)
+    ..add(872)
+    ..add(873)
+    ..add(874)
+    ..add(875)
+    ..add(876)
+    ..add(877)
+    ..add(878)
+    ..add(879)
+    ..add(880)
+    ..add(881)
+    ..add(882)
+    ..add(883)
+    ..add(884)
+    ..add(885)
+    ..add(886)
+    ..add(887)
+    ..add(888)
+    ..add(889)
+    ..add(890)
+    ..add(891)
+    ..add(892)
+    ..add(893)
+    ..add(894)
+    ..add(895)
+    ..add(896)
+    ..add(897)
+    ..add(898)
+    ..add(899)
+    ..add(900)
+    ..add(901)
+    ..add(902)
+    ..add(903)
+    ..add(904)
+    ..add(905)
+    ..add(906)
+    ..add(907)
+    ..add(908)
+    ..add(909)
+    ..add(910)
+    ..add(911)
+    ..add(912)
+    ..add(913)
+    ..add(914)
+    ..add(915)
+    ..add(916)
+    ..add(917)
+    ..add(918)
+    ..add(919)
+    ..add(920)
+    ..add(921)
+    ..add(922)
+    ..add(923)
+    ..add(924)
+    ..add(925)
+    ..add(926)
+    ..add(927)
+    ..add(928)
+    ..add(929)
+    ..add(930)
+    ..add(931)
+    ..add(932)
+    ..add(933)
+    ..add(934)
+    ..add(935)
+    ..add(936)
+    ..add(937)
+    ..add(938)
+    ..add(939)
+    ..add(940)
+    ..add(941)
+    ..add(942)
+    ..add(943)
+    ..add(944)
+    ..add(945)
+    ..add(946)
+    ..add(947)
+    ..add(948)
+    ..add(949)
+    ..add(950)
+    ..add(951)
+    ..add(952)
+    ..add(953)
+    ..add(954)
+    ..add(955)
+    ..add(956)
+    ..add(957)
+    ..add(958)
+    ..add(959)
+    ..add(960)
+    ..add(961)
+    ..add(962)
+    ..add(963)
+    ..add(964)
+    ..add(965)
+    ..add(966)
+    ..add(967)
+    ..add(968)
+    ..add(969)
+    ..add(970)
+    ..add(971)
+    ..add(972)
+    ..add(973)
+    ..add(974)
+    ..add(975)
+    ..add(976)
+    ..add(977)
+    ..add(978)
+    ..add(979)
+    ..add(980)
+    ..add(981)
+    ..add(982)
+    ..add(983)
+    ..add(984)
+    ..add(985)
+    ..add(986)
+    ..add(987)
+    ..add(988)
+    ..add(989)
+    ..add(990)
+    ..add(991)
+    ..add(992)
+    ..add(993)
+    ..add(994)
+    ..add(995)
+    ..add(996)
+    ..add(997)
+    ..add(998)
+    ..add(999)
+    ..add(1000)
+    ..add(1001)
+    ..add(1002)
+    ..add(1003)
+    ..add(1004)
+    ..add(1005)
+    ..add(1006)
+    ..add(1007)
+    ..add(1008)
+    ..add(1009)
+    ..add(1010)
+    ..add(1011)
+    ..add(1012)
+    ..add(1013)
+    ..add(1014)
+    ..add(1015)
+    ..add(1016)
+    ..add(1017)
+    ..add(1018)
+    ..add(1019)
+    ..add(1020)
+    ..add(1021)
+    ..add(1022)
+    ..add(1023)
+    ..add(1024)
+    ..add(1025)
+    ..add(1026)
+    ..add(1027)
+    ..add(1028)
+    ..add(1029)
+    ..add(1030)
+    ..add(1031)
+    ..add(1032)
+    ..add(1033)
+    ..add(1034)
+    ..add(1035)
+    ..add(1036)
+    ..add(1037)
+    ..add(1038)
+    ..add(1039)
+    ..add(1040)
+    ..add(1041)
+    ..add(1042)
+    ..add(1043)
+    ..add(1044)
+    ..add(1045)
+    ..add(1046)
+    ..add(1047)
+    ..add(1048)
+    ..add(1049)
+    ..add(1050)
+    ..add(1051)
+    ..add(1052)
+    ..add(1053)
+    ..add(1054)
+    ..add(1055)
+    ..add(1056)
+    ..add(1057)
+    ..add(1058)
+    ..add(1059)
+    ..add(1060)
+    ..add(1061)
+    ..add(1062)
+    ..add(1063)
+    ..add(1064)
+    ..add(1065)
+    ..add(1066)
+    ..add(1067)
+    ..add(1068)
+    ..add(1069)
+    ..add(1070)
+    ..add(1071)
+    ..add(1072)
+    ..add(1073)
+    ..add(1074)
+    ..add(1075)
+    ..add(1076)
+    ..add(1077)
+    ..add(1078)
+    ..add(1079)
+    ..add(1080)
+    ..add(1081)
+    ..add(1082)
+    ..add(1083)
+    ..add(1084)
+    ..add(1085)
+    ..add(1086)
+    ..add(1087)
+    ..add(1088)
+    ..add(1089)
+    ..add(1090)
+    ..add(1091)
+    ..add(1092)
+    ..add(1093)
+    ..add(1094)
+    ..add(1095)
+    ..add(1096)
+    ..add(1097)
+    ..add(1098)
+    ..add(1099)
+    ..add(1100)
+    ..add(1101)
+    ..add(1102)
+    ..add(1103)
+    ..add(1104)
+    ..add(1105)
+    ..add(1106)
+    ..add(1107)
+    ..add(1108)
+    ..add(1109)
+    ..add(1110)
+    ..add(1111)
+    ..add(1112)
+    ..add(1113)
+    ..add(1114)
+    ..add(1115)
+    ..add(1116)
+    ..add(1117)
+    ..add(1118)
+    ..add(1119)
+    ..add(1120)
+    ..add(1121)
+    ..add(1122)
+    ..add(1123)
+    ..add(1124)
+    ..add(1125)
+    ..add(1126)
+    ..add(1127)
+    ..add(1128)
+    ..add(1129)
+    ..add(1130)
+    ..add(1131)
+    ..add(1132)
+    ..add(1133)
+    ..add(1134)
+    ..add(1135)
+    ..add(1136)
+    ..add(1137)
+    ..add(1138)
+    ..add(1139)
+    ..add(1140)
+    ..add(1141)
+    ..add(1142)
+    ..add(1143)
+    ..add(1144)
+    ..add(1145)
+    ..add(1146)
+    ..add(1147)
+    ..add(1148)
+    ..add(1149)
+    ..add(1150)
+    ..add(1151)
+    ..add(1152)
+    ..add(1153)
+    ..add(1154)
+    ..add(1155)
+    ..add(1156)
+    ..add(1157)
+    ..add(1158)
+    ..add(1159)
+    ..add(1160)
+    ..add(1161)
+    ..add(1162)
+    ..add(1163)
+    ..add(1164)
+    ..add(1165)
+    ..add(1166)
+    ..add(1167)
+    ..add(1168)
+    ..add(1169)
+    ..add(1170)
+    ..add(1171)
+    ..add(1172)
+    ..add(1173)
+    ..add(1174)
+    ..add(1175)
+    ..add(1176)
+    ..add(1177)
+    ..add(1178)
+    ..add(1179)
+    ..add(1180)
+    ..add(1181)
+    ..add(1182)
+    ..add(1183)
+    ..add(1184)
+    ..add(1185)
+    ..add(1186)
+    ..add(1187)
+    ..add(1188)
+    ..add(1189)
+    ..add(1190)
+    ..add(1191)
+    ..add(1192)
+    ..add(1193)
+    ..add(1194)
+    ..add(1195)
+    ..add(1196)
+    ..add(1197)
+    ..add(1198)
+    ..add(1199)
+    ..add(1200)
+    ..add(1201)
+    ..add(1202)
+    ..add(1203)
+    ..add(1204)
+    ..add(1205)
+    ..add(1206)
+    ..add(1207)
+    ..add(1208)
+    ..add(1209)
+    ..add(1210)
+    ..add(1211)
+    ..add(1212)
+    ..add(1213)
+    ..add(1214)
+    ..add(1215)
+    ..add(1216)
+    ..add(1217)
+    ..add(1218)
+    ..add(1219)
+    ..add(1220)
+    ..add(1221)
+    ..add(1222)
+    ..add(1223)
+    ..add(1224)
+    ..add(1225)
+    ..add(1226)
+    ..add(1227)
+    ..add(1228)
+    ..add(1229)
+    ..add(1230)
+    ..add(1231)
+    ..add(1232)
+    ..add(1233)
+    ..add(1234)
+    ..add(1235)
+    ..add(1236)
+    ..add(1237)
+    ..add(1238)
+    ..add(1239)
+    ..add(1240)
+    ..add(1241)
+    ..add(1242)
+    ..add(1243)
+    ..add(1244)
+    ..add(1245)
+    ..add(1246)
+    ..add(1247)
+    ..add(1248)
+    ..add(1249)
+    ..add(1250)
+    ..add(1251)
+    ..add(1252)
+    ..add(1253)
+    ..add(1254)
+    ..add(1255)
+    ..add(1256)
+    ..add(1257)
+    ..add(1258)
+    ..add(1259)
+    ..add(1260)
+    ..add(1261)
+    ..add(1262)
+    ..add(1263)
+    ..add(1264)
+    ..add(1265)
+    ..add(1266)
+    ..add(1267)
+    ..add(1268)
+    ..add(1269)
+    ..add(1270)
+    ..add(1271)
+    ..add(1272)
+    ..add(1273)
+    ..add(1274)
+    ..add(1275)
+    ..add(1276)
+    ..add(1277)
+    ..add(1278)
+    ..add(1279)
+    ..add(1280)
+    ..add(1281)
+    ..add(1282)
+    ..add(1283)
+    ..add(1284)
+    ..add(1285)
+    ..add(1286)
+    ..add(1287)
+    ..add(1288)
+    ..add(1289)
+    ..add(1290)
+    ..add(1291)
+    ..add(1292)
+    ..add(1293)
+    ..add(1294)
+    ..add(1295)
+    ..add(1296)
+    ..add(1297)
+    ..add(1298)
+    ..add(1299)
+    ..add(1300)
+    ..add(1301)
+    ..add(1302)
+    ..add(1303)
+    ..add(1304)
+    ..add(1305)
+    ..add(1306)
+    ..add(1307)
+    ..add(1308)
+    ..add(1309)
+    ..add(1310)
+    ..add(1311)
+    ..add(1312)
+    ..add(1313)
+    ..add(1314)
+    ..add(1315)
+    ..add(1316)
+    ..add(1317)
+    ..add(1318)
+    ..add(1319)
+    ..add(1320)
+    ..add(1321)
+    ..add(1322)
+    ..add(1323)
+    ..add(1324)
+    ..add(1325)
+    ..add(1326)
+    ..add(1327)
+    ..add(1328)
+    ..add(1329)
+    ..add(1330)
+    ..add(1331)
+    ..add(1332)
+    ..add(1333)
+    ..add(1334)
+    ..add(1335)
+    ..add(1336)
+    ..add(1337)
+    ..add(1338)
+    ..add(1339)
+    ..add(1340)
+    ..add(1341)
+    ..add(1342)
+    ..add(1343)
+    ..add(1344)
+    ..add(1345)
+    ..add(1346)
+    ..add(1347)
+    ..add(1348)
+    ..add(1349)
+    ..add(1350)
+    ..add(1351)
+    ..add(1352)
+    ..add(1353)
+    ..add(1354)
+    ..add(1355)
+    ..add(1356)
+    ..add(1357)
+    ..add(1358)
+    ..add(1359)
+    ..add(1360)
+    ..add(1361)
+    ..add(1362)
+    ..add(1363)
+    ..add(1364)
+    ..add(1365)
+    ..add(1366)
+    ..add(1367)
+    ..add(1368)
+    ..add(1369)
+    ..add(1370)
+    ..add(1371)
+    ..add(1372)
+    ..add(1373)
+    ..add(1374)
+    ..add(1375)
+    ..add(1376)
+    ..add(1377)
+    ..add(1378)
+    ..add(1379)
+    ..add(1380)
+    ..add(1381)
+    ..add(1382)
+    ..add(1383)
+    ..add(1384)
+    ..add(1385)
+    ..add(1386)
+    ..add(1387)
+    ..add(1388)
+    ..add(1389)
+    ..add(1390)
+    ..add(1391)
+    ..add(1392)
+    ..add(1393)
+    ..add(1394)
+    ..add(1395)
+    ..add(1396)
+    ..add(1397)
+    ..add(1398)
+    ..add(1399)
+    ..add(1400)
+    ..add(1401)
+    ..add(1402)
+    ..add(1403)
+    ..add(1404)
+    ..add(1405)
+    ..add(1406)
+    ..add(1407)
+    ..add(1408)
+    ..add(1409)
+    ..add(1410)
+    ..add(1411)
+    ..add(1412)
+    ..add(1413)
+    ..add(1414)
+    ..add(1415)
+    ..add(1416)
+    ..add(1417)
+    ..add(1418)
+    ..add(1419)
+    ..add(1420)
+    ..add(1421)
+    ..add(1422)
+    ..add(1423)
+    ..add(1424)
+    ..add(1425)
+    ..add(1426)
+    ..add(1427)
+    ..add(1428)
+    ..add(1429)
+    ..add(1430)
+    ..add(1431)
+    ..add(1432)
+    ..add(1433)
+    ..add(1434)
+    ..add(1435)
+    ..add(1436)
+    ..add(1437)
+    ..add(1438)
+    ..add(1439)
+    ..add(1440)
+    ..add(1441)
+    ..add(1442)
+    ..add(1443)
+    ..add(1444)
+    ..add(1445)
+    ..add(1446)
+    ..add(1447)
+    ..add(1448)
+    ..add(1449)
+    ..add(1450)
+    ..add(1451)
+    ..add(1452)
+    ..add(1453)
+    ..add(1454)
+    ..add(1455)
+    ..add(1456)
+    ..add(1457)
+    ..add(1458)
+    ..add(1459)
+    ..add(1460)
+    ..add(1461)
+    ..add(1462)
+    ..add(1463)
+    ..add(1464)
+    ..add(1465)
+    ..add(1466)
+    ..add(1467)
+    ..add(1468)
+    ..add(1469)
+    ..add(1470)
+    ..add(1471)
+    ..add(1472)
+    ..add(1473)
+    ..add(1474)
+    ..add(1475)
+    ..add(1476)
+    ..add(1477)
+    ..add(1478)
+    ..add(1479)
+    ..add(1480)
+    ..add(1481)
+    ..add(1482)
+    ..add(1483)
+    ..add(1484)
+    ..add(1485)
+    ..add(1486)
+    ..add(1487)
+    ..add(1488)
+    ..add(1489)
+    ..add(1490)
+    ..add(1491)
+    ..add(1492)
+    ..add(1493)
+    ..add(1494)
+    ..add(1495)
+    ..add(1496)
+    ..add(1497)
+    ..add(1498)
+    ..add(1499)
+    ..add(1500)
+    ..add(1501)
+    ..add(1502)
+    ..add(1503)
+    ..add(1504)
+    ..add(1505)
+    ..add(1506)
+    ..add(1507)
+    ..add(1508)
+    ..add(1509)
+    ..add(1510)
+    ..add(1511)
+    ..add(1512)
+    ..add(1513)
+    ..add(1514)
+    ..add(1515)
+    ..add(1516)
+    ..add(1517)
+    ..add(1518)
+    ..add(1519)
+    ..add(1520)
+    ..add(1521)
+    ..add(1522)
+    ..add(1523)
+    ..add(1524)
+    ..add(1525)
+    ..add(1526)
+    ..add(1527)
+    ..add(1528)
+    ..add(1529)
+    ..add(1530)
+    ..add(1531)
+    ..add(1532)
+    ..add(1533)
+    ..add(1534)
+    ..add(1535)
+    ..add(1536)
+    ..add(1537)
+    ..add(1538)
+    ..add(1539)
+    ..add(1540)
+    ..add(1541)
+    ..add(1542)
+    ..add(1543)
+    ..add(1544)
+    ..add(1545)
+    ..add(1546)
+    ..add(1547)
+    ..add(1548)
+    ..add(1549)
+    ..add(1550)
+    ..add(1551)
+    ..add(1552)
+    ..add(1553)
+    ..add(1554)
+    ..add(1555)
+    ..add(1556)
+    ..add(1557)
+    ..add(1558)
+    ..add(1559)
+    ..add(1560)
+    ..add(1561)
+    ..add(1562)
+    ..add(1563)
+    ..add(1564)
+    ..add(1565)
+    ..add(1566)
+    ..add(1567)
+    ..add(1568)
+    ..add(1569)
+    ..add(1570)
+    ..add(1571)
+    ..add(1572)
+    ..add(1573)
+    ..add(1574)
+    ..add(1575)
+    ..add(1576)
+    ..add(1577)
+    ..add(1578)
+    ..add(1579)
+    ..add(1580)
+    ..add(1581)
+    ..add(1582)
+    ..add(1583)
+    ..add(1584)
+    ..add(1585)
+    ..add(1586)
+    ..add(1587)
+    ..add(1588)
+    ..add(1589)
+    ..add(1590)
+    ..add(1591)
+    ..add(1592)
+    ..add(1593)
+    ..add(1594)
+    ..add(1595)
+    ..add(1596)
+    ..add(1597)
+    ..add(1598)
+    ..add(1599)
+    ..add(1600)
+    ..add(1601)
+    ..add(1602)
+    ..add(1603)
+    ..add(1604)
+    ..add(1605)
+    ..add(1606)
+    ..add(1607)
+    ..add(1608)
+    ..add(1609)
+    ..add(1610)
+    ..add(1611)
+    ..add(1612)
+    ..add(1613)
+    ..add(1614)
+    ..add(1615)
+    ..add(1616)
+    ..add(1617)
+    ..add(1618)
+    ..add(1619)
+    ..add(1620)
+    ..add(1621)
+    ..add(1622)
+    ..add(1623)
+    ..add(1624)
+    ..add(1625)
+    ..add(1626)
+    ..add(1627)
+    ..add(1628)
+    ..add(1629)
+    ..add(1630)
+    ..add(1631)
+    ..add(1632)
+    ..add(1633)
+    ..add(1634)
+    ..add(1635)
+    ..add(1636)
+    ..add(1637)
+    ..add(1638)
+    ..add(1639)
+    ..add(1640)
+    ..add(1641)
+    ..add(1642)
+    ..add(1643)
+    ..add(1644)
+    ..add(1645)
+    ..add(1646)
+    ..add(1647)
+    ..add(1648)
+    ..add(1649)
+    ..add(1650)
+    ..add(1651)
+    ..add(1652)
+    ..add(1653)
+    ..add(1654)
+    ..add(1655)
+    ..add(1656)
+    ..add(1657)
+    ..add(1658)
+    ..add(1659)
+    ..add(1660)
+    ..add(1661)
+    ..add(1662)
+    ..add(1663)
+    ..add(1664)
+    ..add(1665)
+    ..add(1666)
+    ..add(1667)
+    ..add(1668)
+    ..add(1669)
+    ..add(1670)
+    ..add(1671)
+    ..add(1672)
+    ..add(1673)
+    ..add(1674)
+    ..add(1675)
+    ..add(1676)
+    ..add(1677)
+    ..add(1678)
+    ..add(1679)
+    ..add(1680)
+    ..add(1681)
+    ..add(1682)
+    ..add(1683)
+    ..add(1684)
+    ..add(1685)
+    ..add(1686)
+    ..add(1687)
+    ..add(1688)
+    ..add(1689)
+    ..add(1690)
+    ..add(1691)
+    ..add(1692)
+    ..add(1693)
+    ..add(1694)
+    ..add(1695)
+    ..add(1696)
+    ..add(1697)
+    ..add(1698)
+    ..add(1699)
+    ..add(1700)
+    ..add(1701)
+    ..add(1702)
+    ..add(1703)
+    ..add(1704)
+    ..add(1705)
+    ..add(1706)
+    ..add(1707)
+    ..add(1708)
+    ..add(1709)
+    ..add(1710)
+    ..add(1711)
+    ..add(1712)
+    ..add(1713)
+    ..add(1714)
+    ..add(1715)
+    ..add(1716)
+    ..add(1717)
+    ..add(1718)
+    ..add(1719)
+    ..add(1720)
+    ..add(1721)
+    ..add(1722)
+    ..add(1723)
+    ..add(1724)
+    ..add(1725)
+    ..add(1726)
+    ..add(1727)
+    ..add(1728)
+    ..add(1729)
+    ..add(1730)
+    ..add(1731)
+    ..add(1732)
+    ..add(1733)
+    ..add(1734)
+    ..add(1735)
+    ..add(1736)
+    ..add(1737)
+    ..add(1738)
+    ..add(1739)
+    ..add(1740)
+    ..add(1741)
+    ..add(1742)
+    ..add(1743)
+    ..add(1744)
+    ..add(1745)
+    ..add(1746)
+    ..add(1747)
+    ..add(1748)
+    ..add(1749)
+    ..add(1750)
+    ..add(1751)
+    ..add(1752)
+    ..add(1753)
+    ..add(1754)
+    ..add(1755)
+    ..add(1756)
+    ..add(1757)
+    ..add(1758)
+    ..add(1759)
+    ..add(1760)
+    ..add(1761)
+    ..add(1762)
+    ..add(1763)
+    ..add(1764)
+    ..add(1765)
+    ..add(1766)
+    ..add(1767)
+    ..add(1768)
+    ..add(1769)
+    ..add(1770)
+    ..add(1771)
+    ..add(1772)
+    ..add(1773)
+    ..add(1774)
+    ..add(1775)
+    ..add(1776)
+    ..add(1777)
+    ..add(1778)
+    ..add(1779)
+    ..add(1780)
+    ..add(1781)
+    ..add(1782)
+    ..add(1783)
+    ..add(1784)
+    ..add(1785)
+    ..add(1786)
+    ..add(1787)
+    ..add(1788)
+    ..add(1789)
+    ..add(1790)
+    ..add(1791)
+    ..add(1792)
+    ..add(1793)
+    ..add(1794)
+    ..add(1795)
+    ..add(1796)
+    ..add(1797)
+    ..add(1798)
+    ..add(1799)
+    ..add(1800)
+    ..add(1801)
+    ..add(1802)
+    ..add(1803)
+    ..add(1804)
+    ..add(1805)
+    ..add(1806)
+    ..add(1807)
+    ..add(1808)
+    ..add(1809)
+    ..add(1810)
+    ..add(1811)
+    ..add(1812)
+    ..add(1813)
+    ..add(1814)
+    ..add(1815)
+    ..add(1816)
+    ..add(1817)
+    ..add(1818)
+    ..add(1819)
+    ..add(1820)
+    ..add(1821)
+    ..add(1822)
+    ..add(1823)
+    ..add(1824)
+    ..add(1825)
+    ..add(1826)
+    ..add(1827)
+    ..add(1828)
+    ..add(1829)
+    ..add(1830)
+    ..add(1831)
+    ..add(1832)
+    ..add(1833)
+    ..add(1834)
+    ..add(1835)
+    ..add(1836)
+    ..add(1837)
+    ..add(1838)
+    ..add(1839)
+    ..add(1840)
+    ..add(1841)
+    ..add(1842)
+    ..add(1843)
+    ..add(1844)
+    ..add(1845)
+    ..add(1846)
+    ..add(1847)
+    ..add(1848)
+    ..add(1849)
+    ..add(1850)
+    ..add(1851)
+    ..add(1852)
+    ..add(1853)
+    ..add(1854)
+    ..add(1855)
+    ..add(1856)
+    ..add(1857)
+    ..add(1858)
+    ..add(1859)
+    ..add(1860)
+    ..add(1861)
+    ..add(1862)
+    ..add(1863)
+    ..add(1864)
+    ..add(1865)
+    ..add(1866)
+    ..add(1867)
+    ..add(1868)
+    ..add(1869)
+    ..add(1870)
+    ..add(1871)
+    ..add(1872)
+    ..add(1873)
+    ..add(1874)
+    ..add(1875)
+    ..add(1876)
+    ..add(1877)
+    ..add(1878)
+    ..add(1879)
+    ..add(1880)
+    ..add(1881)
+    ..add(1882)
+    ..add(1883)
+    ..add(1884)
+    ..add(1885)
+    ..add(1886)
+    ..add(1887)
+    ..add(1888)
+    ..add(1889)
+    ..add(1890)
+    ..add(1891)
+    ..add(1892)
+    ..add(1893)
+    ..add(1894)
+    ..add(1895)
+    ..add(1896)
+    ..add(1897)
+    ..add(1898)
+    ..add(1899)
+    ..add(1900)
+    ..add(1901)
+    ..add(1902)
+    ..add(1903)
+    ..add(1904)
+    ..add(1905)
+    ..add(1906)
+    ..add(1907)
+    ..add(1908)
+    ..add(1909)
+    ..add(1910)
+    ..add(1911)
+    ..add(1912)
+    ..add(1913)
+    ..add(1914)
+    ..add(1915)
+    ..add(1916)
+    ..add(1917)
+    ..add(1918)
+    ..add(1919)
+    ..add(1920)
+    ..add(1921)
+    ..add(1922)
+    ..add(1923)
+    ..add(1924)
+    ..add(1925)
+    ..add(1926)
+    ..add(1927)
+    ..add(1928)
+    ..add(1929)
+    ..add(1930)
+    ..add(1931)
+    ..add(1932)
+    ..add(1933)
+    ..add(1934)
+    ..add(1935)
+    ..add(1936)
+    ..add(1937)
+    ..add(1938)
+    ..add(1939)
+    ..add(1940)
+    ..add(1941)
+    ..add(1942)
+    ..add(1943)
+    ..add(1944)
+    ..add(1945)
+    ..add(1946)
+    ..add(1947)
+    ..add(1948)
+    ..add(1949)
+    ..add(1950)
+    ..add(1951)
+    ..add(1952)
+    ..add(1953)
+    ..add(1954)
+    ..add(1955)
+    ..add(1956)
+    ..add(1957)
+    ..add(1958)
+    ..add(1959)
+    ..add(1960)
+    ..add(1961)
+    ..add(1962)
+    ..add(1963)
+    ..add(1964)
+    ..add(1965)
+    ..add(1966)
+    ..add(1967)
+    ..add(1968)
+    ..add(1969)
+    ..add(1970)
+    ..add(1971)
+    ..add(1972)
+    ..add(1973)
+    ..add(1974)
+    ..add(1975)
+    ..add(1976)
+    ..add(1977)
+    ..add(1978)
+    ..add(1979)
+    ..add(1980)
+    ..add(1981)
+    ..add(1982)
+    ..add(1983)
+    ..add(1984)
+    ..add(1985)
+    ..add(1986)
+    ..add(1987)
+    ..add(1988)
+    ..add(1989)
+    ..add(1990)
+    ..add(1991)
+    ..add(1992)
+    ..add(1993)
+    ..add(1994)
+    ..add(1995)
+    ..add(1996)
+    ..add(1997)
+    ..add(1998)
+    ..add(1999)
+    ..add(2000)
+    ..add(2001)
+    ..add(2002)
+    ..add(2003)
+    ..add(2004)
+    ..add(2005)
+    ..add(2006)
+    ..add(2007)
+    ..add(2008)
+    ..add(2009)
+    ..add(2010)
+    ..add(2011)
+    ..add(2012)
+    ..add(2013)
+    ..add(2014)
+    ..add(2015)
+    ..add(2016)
+    ..add(2017)
+    ..add(2018)
+    ..add(2019)
+    ..add(2020)
+    ..add(2021)
+    ..add(2022)
+    ..add(2023)
+    ..add(2024)
+    ..add(2025)
+    ..add(2026)
+    ..add(2027)
+    ..add(2028)
+    ..add(2029)
+    ..add(2030)
+    ..add(2031)
+    ..add(2032)
+    ..add(2033)
+    ..add(2034)
+    ..add(2035)
+    ..add(2036)
+    ..add(2037)
+    ..add(2038)
+    ..add(2039)
+    ..add(2040)
+    ..add(2041)
+    ..add(2042)
+    ..add(2043)
+    ..add(2044)
+    ..add(2045)
+    ..add(2046)
+    ..add(2047)
+    ..add(2048)
+    ..add(2049)
+    ..add(2050)
+    ..add(2051)
+    ..add(2052)
+    ..add(2053)
+    ..add(2054)
+    ..add(2055)
+    ..add(2056)
+    ..add(2057)
+    ..add(2058)
+    ..add(2059)
+    ..add(2060)
+    ..add(2061)
+    ..add(2062)
+    ..add(2063)
+    ..add(2064)
+    ..add(2065)
+    ..add(2066)
+    ..add(2067)
+    ..add(2068)
+    ..add(2069)
+    ..add(2070)
+    ..add(2071)
+    ..add(2072)
+    ..add(2073)
+    ..add(2074)
+    ..add(2075)
+    ..add(2076)
+    ..add(2077)
+    ..add(2078)
+    ..add(2079)
+    ..add(2080)
+    ..add(2081)
+    ..add(2082)
+    ..add(2083)
+    ..add(2084)
+    ..add(2085)
+    ..add(2086)
+    ..add(2087)
+    ..add(2088)
+    ..add(2089)
+    ..add(2090)
+    ..add(2091)
+    ..add(2092)
+    ..add(2093)
+    ..add(2094)
+    ..add(2095)
+    ..add(2096)
+    ..add(2097)
+    ..add(2098)
+    ..add(2099)
+    ..add(2100)
+    ..add(2101)
+    ..add(2102)
+    ..add(2103)
+    ..add(2104)
+    ..add(2105)
+    ..add(2106)
+    ..add(2107)
+    ..add(2108)
+    ..add(2109)
+    ..add(2110)
+    ..add(2111)
+    ..add(2112)
+    ..add(2113)
+    ..add(2114)
+    ..add(2115)
+    ..add(2116)
+    ..add(2117)
+    ..add(2118)
+    ..add(2119)
+    ..add(2120)
+    ..add(2121)
+    ..add(2122)
+    ..add(2123)
+    ..add(2124)
+    ..add(2125)
+    ..add(2126)
+    ..add(2127)
+    ..add(2128)
+    ..add(2129)
+    ..add(2130)
+    ..add(2131)
+    ..add(2132)
+    ..add(2133)
+    ..add(2134)
+    ..add(2135)
+    ..add(2136)
+    ..add(2137)
+    ..add(2138)
+    ..add(2139)
+    ..add(2140)
+    ..add(2141)
+    ..add(2142)
+    ..add(2143)
+    ..add(2144)
+    ..add(2145)
+    ..add(2146)
+    ..add(2147)
+    ..add(2148)
+    ..add(2149)
+    ..add(2150)
+    ..add(2151)
+    ..add(2152)
+    ..add(2153)
+    ..add(2154)
+    ..add(2155)
+    ..add(2156)
+    ..add(2157)
+    ..add(2158)
+    ..add(2159)
+    ..add(2160)
+    ..add(2161)
+    ..add(2162)
+    ..add(2163)
+    ..add(2164)
+    ..add(2165)
+    ..add(2166)
+    ..add(2167)
+    ..add(2168)
+    ..add(2169)
+    ..add(2170)
+    ..add(2171)
+    ..add(2172)
+    ..add(2173)
+    ..add(2174)
+    ..add(2175)
+    ..add(2176)
+    ..add(2177)
+    ..add(2178)
+    ..add(2179)
+    ..add(2180)
+    ..add(2181)
+    ..add(2182)
+    ..add(2183)
+    ..add(2184)
+    ..add(2185)
+    ..add(2186)
+    ..add(2187)
+    ..add(2188)
+    ..add(2189)
+    ..add(2190)
+    ..add(2191)
+    ..add(2192)
+    ..add(2193)
+    ..add(2194)
+    ..add(2195)
+    ..add(2196)
+    ..add(2197)
+    ..add(2198)
+    ..add(2199)
+    ..add(2200)
+    ..add(2201)
+    ..add(2202)
+    ..add(2203)
+    ..add(2204)
+    ..add(2205)
+    ..add(2206)
+    ..add(2207)
+    ..add(2208)
+    ..add(2209)
+    ..add(2210)
+    ..add(2211)
+    ..add(2212)
+    ..add(2213)
+    ..add(2214)
+    ..add(2215)
+    ..add(2216)
+    ..add(2217)
+    ..add(2218)
+    ..add(2219)
+    ..add(2220)
+    ..add(2221)
+    ..add(2222)
+    ..add(2223)
+    ..add(2224)
+    ..add(2225)
+    ..add(2226)
+    ..add(2227)
+    ..add(2228)
+    ..add(2229)
+    ..add(2230)
+    ..add(2231)
+    ..add(2232)
+    ..add(2233)
+    ..add(2234)
+    ..add(2235)
+    ..add(2236)
+    ..add(2237)
+    ..add(2238)
+    ..add(2239)
+    ..add(2240)
+    ..add(2241)
+    ..add(2242)
+    ..add(2243)
+    ..add(2244)
+    ..add(2245)
+    ..add(2246)
+    ..add(2247)
+    ..add(2248)
+    ..add(2249)
+    ..add(2250)
+    ..add(2251)
+    ..add(2252)
+    ..add(2253)
+    ..add(2254)
+    ..add(2255)
+    ..add(2256)
+    ..add(2257)
+    ..add(2258)
+    ..add(2259)
+    ..add(2260)
+    ..add(2261)
+    ..add(2262)
+    ..add(2263)
+    ..add(2264)
+    ..add(2265)
+    ..add(2266)
+    ..add(2267)
+    ..add(2268)
+    ..add(2269)
+    ..add(2270)
+    ..add(2271)
+    ..add(2272)
+    ..add(2273)
+    ..add(2274)
+    ..add(2275)
+    ..add(2276)
+    ..add(2277)
+    ..add(2278)
+    ..add(2279)
+    ..add(2280)
+    ..add(2281)
+    ..add(2282)
+    ..add(2283)
+    ..add(2284)
+    ..add(2285)
+    ..add(2286)
+    ..add(2287)
+    ..add(2288)
+    ..add(2289)
+    ..add(2290)
+    ..add(2291)
+    ..add(2292)
+    ..add(2293)
+    ..add(2294)
+    ..add(2295)
+    ..add(2296)
+    ..add(2297)
+    ..add(2298)
+    ..add(2299)
+    ..add(2300)
+    ..add(2301)
+    ..add(2302)
+    ..add(2303)
+    ..add(2304)
+    ..add(2305)
+    ..add(2306)
+    ..add(2307)
+    ..add(2308)
+    ..add(2309)
+    ..add(2310)
+    ..add(2311)
+    ..add(2312)
+    ..add(2313)
+    ..add(2314)
+    ..add(2315)
+    ..add(2316)
+    ..add(2317)
+    ..add(2318)
+    ..add(2319)
+    ..add(2320)
+    ..add(2321)
+    ..add(2322)
+    ..add(2323)
+    ..add(2324)
+    ..add(2325)
+    ..add(2326)
+    ..add(2327)
+    ..add(2328)
+    ..add(2329)
+    ..add(2330)
+    ..add(2331)
+    ..add(2332)
+    ..add(2333)
+    ..add(2334)
+    ..add(2335)
+    ..add(2336)
+    ..add(2337)
+    ..add(2338)
+    ..add(2339)
+    ..add(2340)
+    ..add(2341)
+    ..add(2342)
+    ..add(2343)
+    ..add(2344)
+    ..add(2345)
+    ..add(2346)
+    ..add(2347)
+    ..add(2348)
+    ..add(2349)
+    ..add(2350)
+    ..add(2351)
+    ..add(2352)
+    ..add(2353)
+    ..add(2354)
+    ..add(2355)
+    ..add(2356)
+    ..add(2357)
+    ..add(2358)
+    ..add(2359)
+    ..add(2360)
+    ..add(2361)
+    ..add(2362)
+    ..add(2363)
+    ..add(2364)
+    ..add(2365)
+    ..add(2366)
+    ..add(2367)
+    ..add(2368)
+    ..add(2369)
+    ..add(2370)
+    ..add(2371)
+    ..add(2372)
+    ..add(2373)
+    ..add(2374)
+    ..add(2375)
+    ..add(2376)
+    ..add(2377)
+    ..add(2378)
+    ..add(2379)
+    ..add(2380)
+    ..add(2381)
+    ..add(2382)
+    ..add(2383)
+    ..add(2384)
+    ..add(2385)
+    ..add(2386)
+    ..add(2387)
+    ..add(2388)
+    ..add(2389)
+    ..add(2390)
+    ..add(2391)
+    ..add(2392)
+    ..add(2393)
+    ..add(2394)
+    ..add(2395)
+    ..add(2396)
+    ..add(2397)
+    ..add(2398)
+    ..add(2399)
+    ..add(2400)
+    ..add(2401)
+    ..add(2402)
+    ..add(2403)
+    ..add(2404)
+    ..add(2405)
+    ..add(2406)
+    ..add(2407)
+    ..add(2408)
+    ..add(2409)
+    ..add(2410)
+    ..add(2411)
+    ..add(2412)
+    ..add(2413)
+    ..add(2414)
+    ..add(2415)
+    ..add(2416)
+    ..add(2417)
+    ..add(2418)
+    ..add(2419)
+    ..add(2420)
+    ..add(2421)
+    ..add(2422)
+    ..add(2423)
+    ..add(2424)
+    ..add(2425)
+    ..add(2426)
+    ..add(2427)
+    ..add(2428)
+    ..add(2429)
+    ..add(2430)
+    ..add(2431)
+    ..add(2432)
+    ..add(2433)
+    ..add(2434)
+    ..add(2435)
+    ..add(2436)
+    ..add(2437)
+    ..add(2438)
+    ..add(2439)
+    ..add(2440)
+    ..add(2441)
+    ..add(2442)
+    ..add(2443)
+    ..add(2444)
+    ..add(2445)
+    ..add(2446)
+    ..add(2447)
+    ..add(2448)
+    ..add(2449)
+    ..add(2450)
+    ..add(2451)
+    ..add(2452)
+    ..add(2453)
+    ..add(2454)
+    ..add(2455)
+    ..add(2456)
+    ..add(2457)
+    ..add(2458)
+    ..add(2459)
+    ..add(2460)
+    ..add(2461)
+    ..add(2462)
+    ..add(2463)
+    ..add(2464)
+    ..add(2465)
+    ..add(2466)
+    ..add(2467)
+    ..add(2468)
+    ..add(2469)
+    ..add(2470)
+    ..add(2471)
+    ..add(2472)
+    ..add(2473)
+    ..add(2474)
+    ..add(2475)
+    ..add(2476)
+    ..add(2477)
+    ..add(2478)
+    ..add(2479)
+    ..add(2480)
+    ..add(2481)
+    ..add(2482)
+    ..add(2483)
+    ..add(2484)
+    ..add(2485)
+    ..add(2486)
+    ..add(2487)
+    ..add(2488)
+    ..add(2489)
+    ..add(2490)
+    ..add(2491)
+    ..add(2492)
+    ..add(2493)
+    ..add(2494)
+    ..add(2495)
+    ..add(2496)
+    ..add(2497)
+    ..add(2498)
+    ..add(2499)
+    ..add(2500)
+    ..add(2501)
+    ..add(2502)
+    ..add(2503)
+    ..add(2504)
+    ..add(2505)
+    ..add(2506)
+    ..add(2507)
+    ..add(2508)
+    ..add(2509)
+    ..add(2510)
+    ..add(2511)
+    ..add(2512)
+    ..add(2513)
+    ..add(2514)
+    ..add(2515)
+    ..add(2516)
+    ..add(2517)
+    ..add(2518)
+    ..add(2519)
+    ..add(2520)
+    ..add(2521)
+    ..add(2522)
+    ..add(2523)
+    ..add(2524)
+    ..add(2525)
+    ..add(2526)
+    ..add(2527)
+    ..add(2528)
+    ..add(2529)
+    ..add(2530)
+    ..add(2531)
+    ..add(2532)
+    ..add(2533)
+    ..add(2534)
+    ..add(2535)
+    ..add(2536)
+    ..add(2537)
+    ..add(2538)
+    ..add(2539)
+    ..add(2540)
+    ..add(2541)
+    ..add(2542)
+    ..add(2543)
+    ..add(2544)
+    ..add(2545)
+    ..add(2546)
+    ..add(2547)
+    ..add(2548)
+    ..add(2549)
+    ..add(2550)
+    ..add(2551)
+    ..add(2552)
+    ..add(2553)
+    ..add(2554)
+    ..add(2555)
+    ..add(2556)
+    ..add(2557)
+    ..add(2558)
+    ..add(2559)
+    ..add(2560)
+    ..add(2561)
+    ..add(2562)
+    ..add(2563)
+    ..add(2564)
+    ..add(2565)
+    ..add(2566)
+    ..add(2567)
+    ..add(2568)
+    ..add(2569)
+    ..add(2570)
+    ..add(2571)
+    ..add(2572)
+    ..add(2573)
+    ..add(2574)
+    ..add(2575)
+    ..add(2576)
+    ..add(2577)
+    ..add(2578)
+    ..add(2579)
+    ..add(2580)
+    ..add(2581)
+    ..add(2582)
+    ..add(2583)
+    ..add(2584)
+    ..add(2585)
+    ..add(2586)
+    ..add(2587)
+    ..add(2588)
+    ..add(2589)
+    ..add(2590)
+    ..add(2591)
+    ..add(2592)
+    ..add(2593)
+    ..add(2594)
+    ..add(2595)
+    ..add(2596)
+    ..add(2597)
+    ..add(2598)
+    ..add(2599)
+    ..add(2600)
+    ..add(2601)
+    ..add(2602)
+    ..add(2603)
+    ..add(2604)
+    ..add(2605)
+    ..add(2606)
+    ..add(2607)
+    ..add(2608)
+    ..add(2609)
+    ..add(2610)
+    ..add(2611)
+    ..add(2612)
+    ..add(2613)
+    ..add(2614)
+    ..add(2615)
+    ..add(2616)
+    ..add(2617)
+    ..add(2618)
+    ..add(2619)
+    ..add(2620)
+    ..add(2621)
+    ..add(2622)
+    ..add(2623)
+    ..add(2624)
+    ..add(2625)
+    ..add(2626)
+    ..add(2627)
+    ..add(2628)
+    ..add(2629)
+    ..add(2630)
+    ..add(2631)
+    ..add(2632)
+    ..add(2633)
+    ..add(2634)
+    ..add(2635)
+    ..add(2636)
+    ..add(2637)
+    ..add(2638)
+    ..add(2639)
+    ..add(2640)
+    ..add(2641)
+    ..add(2642)
+    ..add(2643)
+    ..add(2644)
+    ..add(2645)
+    ..add(2646)
+    ..add(2647)
+    ..add(2648)
+    ..add(2649)
+    ..add(2650)
+    ..add(2651)
+    ..add(2652)
+    ..add(2653)
+    ..add(2654)
+    ..add(2655)
+    ..add(2656)
+    ..add(2657)
+    ..add(2658)
+    ..add(2659)
+    ..add(2660)
+    ..add(2661)
+    ..add(2662)
+    ..add(2663)
+    ..add(2664)
+    ..add(2665)
+    ..add(2666)
+    ..add(2667)
+    ..add(2668)
+    ..add(2669)
+    ..add(2670)
+    ..add(2671)
+    ..add(2672)
+    ..add(2673)
+    ..add(2674)
+    ..add(2675)
+    ..add(2676)
+    ..add(2677)
+    ..add(2678)
+    ..add(2679)
+    ..add(2680)
+    ..add(2681)
+    ..add(2682)
+    ..add(2683)
+    ..add(2684)
+    ..add(2685)
+    ..add(2686)
+    ..add(2687)
+    ..add(2688)
+    ..add(2689)
+    ..add(2690)
+    ..add(2691)
+    ..add(2692)
+    ..add(2693)
+    ..add(2694)
+    ..add(2695)
+    ..add(2696)
+    ..add(2697)
+    ..add(2698)
+    ..add(2699)
+    ..add(2700)
+    ..add(2701)
+    ..add(2702)
+    ..add(2703)
+    ..add(2704)
+    ..add(2705)
+    ..add(2706)
+    ..add(2707)
+    ..add(2708)
+    ..add(2709)
+    ..add(2710)
+    ..add(2711)
+    ..add(2712)
+    ..add(2713)
+    ..add(2714)
+    ..add(2715)
+    ..add(2716)
+    ..add(2717)
+    ..add(2718)
+    ..add(2719)
+    ..add(2720)
+    ..add(2721)
+    ..add(2722)
+    ..add(2723)
+    ..add(2724)
+    ..add(2725)
+    ..add(2726)
+    ..add(2727)
+    ..add(2728)
+    ..add(2729)
+    ..add(2730)
+    ..add(2731)
+    ..add(2732)
+    ..add(2733)
+    ..add(2734)
+    ..add(2735)
+    ..add(2736)
+    ..add(2737)
+    ..add(2738)
+    ..add(2739)
+    ..add(2740)
+    ..add(2741)
+    ..add(2742)
+    ..add(2743)
+    ..add(2744)
+    ..add(2745)
+    ..add(2746)
+    ..add(2747)
+    ..add(2748)
+    ..add(2749)
+    ..add(2750)
+    ..add(2751)
+    ..add(2752)
+    ..add(2753)
+    ..add(2754)
+    ..add(2755)
+    ..add(2756)
+    ..add(2757)
+    ..add(2758)
+    ..add(2759)
+    ..add(2760)
+    ..add(2761)
+    ..add(2762)
+    ..add(2763)
+    ..add(2764)
+    ..add(2765)
+    ..add(2766)
+    ..add(2767)
+    ..add(2768)
+    ..add(2769)
+    ..add(2770)
+    ..add(2771)
+    ..add(2772)
+    ..add(2773)
+    ..add(2774)
+    ..add(2775)
+    ..add(2776)
+    ..add(2777)
+    ..add(2778)
+    ..add(2779)
+    ..add(2780)
+    ..add(2781)
+    ..add(2782)
+    ..add(2783)
+    ..add(2784)
+    ..add(2785)
+    ..add(2786)
+    ..add(2787)
+    ..add(2788)
+    ..add(2789)
+    ..add(2790)
+    ..add(2791)
+    ..add(2792)
+    ..add(2793)
+    ..add(2794)
+    ..add(2795)
+    ..add(2796)
+    ..add(2797)
+    ..add(2798)
+    ..add(2799)
+    ..add(2800)
+    ..add(2801)
+    ..add(2802)
+    ..add(2803)
+    ..add(2804)
+    ..add(2805)
+    ..add(2806)
+    ..add(2807)
+    ..add(2808)
+    ..add(2809)
+    ..add(2810)
+    ..add(2811)
+    ..add(2812)
+    ..add(2813)
+    ..add(2814)
+    ..add(2815)
+    ..add(2816)
+    ..add(2817)
+    ..add(2818)
+    ..add(2819)
+    ..add(2820)
+    ..add(2821)
+    ..add(2822)
+    ..add(2823)
+    ..add(2824)
+    ..add(2825)
+    ..add(2826)
+    ..add(2827)
+    ..add(2828)
+    ..add(2829)
+    ..add(2830)
+    ..add(2831)
+    ..add(2832)
+    ..add(2833)
+    ..add(2834)
+    ..add(2835)
+    ..add(2836)
+    ..add(2837)
+    ..add(2838)
+    ..add(2839)
+    ..add(2840)
+    ..add(2841)
+    ..add(2842)
+    ..add(2843)
+    ..add(2844)
+    ..add(2845)
+    ..add(2846)
+    ..add(2847)
+    ..add(2848)
+    ..add(2849)
+    ..add(2850)
+    ..add(2851)
+    ..add(2852)
+    ..add(2853)
+    ..add(2854)
+    ..add(2855)
+    ..add(2856)
+    ..add(2857)
+    ..add(2858)
+    ..add(2859)
+    ..add(2860)
+    ..add(2861)
+    ..add(2862)
+    ..add(2863)
+    ..add(2864)
+    ..add(2865)
+    ..add(2866)
+    ..add(2867)
+    ..add(2868)
+    ..add(2869)
+    ..add(2870)
+    ..add(2871)
+    ..add(2872)
+    ..add(2873)
+    ..add(2874)
+    ..add(2875)
+    ..add(2876)
+    ..add(2877)
+    ..add(2878)
+    ..add(2879)
+    ..add(2880)
+    ..add(2881)
+    ..add(2882)
+    ..add(2883)
+    ..add(2884)
+    ..add(2885)
+    ..add(2886)
+    ..add(2887)
+    ..add(2888)
+    ..add(2889)
+    ..add(2890)
+    ..add(2891)
+    ..add(2892)
+    ..add(2893)
+    ..add(2894)
+    ..add(2895)
+    ..add(2896)
+    ..add(2897)
+    ..add(2898)
+    ..add(2899)
+    ..add(2900)
+    ..add(2901)
+    ..add(2902)
+    ..add(2903)
+    ..add(2904)
+    ..add(2905)
+    ..add(2906)
+    ..add(2907)
+    ..add(2908)
+    ..add(2909)
+    ..add(2910)
+    ..add(2911)
+    ..add(2912)
+    ..add(2913)
+    ..add(2914)
+    ..add(2915)
+    ..add(2916)
+    ..add(2917)
+    ..add(2918)
+    ..add(2919)
+    ..add(2920)
+    ..add(2921)
+    ..add(2922)
+    ..add(2923)
+    ..add(2924)
+    ..add(2925)
+    ..add(2926)
+    ..add(2927)
+    ..add(2928)
+    ..add(2929)
+    ..add(2930)
+    ..add(2931)
+    ..add(2932)
+    ..add(2933)
+    ..add(2934)
+    ..add(2935)
+    ..add(2936)
+    ..add(2937)
+    ..add(2938)
+    ..add(2939)
+    ..add(2940)
+    ..add(2941)
+    ..add(2942)
+    ..add(2943)
+    ..add(2944)
+    ..add(2945)
+    ..add(2946)
+    ..add(2947)
+    ..add(2948)
+    ..add(2949)
+    ..add(2950)
+    ..add(2951)
+    ..add(2952)
+    ..add(2953)
+    ..add(2954)
+    ..add(2955)
+    ..add(2956)
+    ..add(2957)
+    ..add(2958)
+    ..add(2959)
+    ..add(2960)
+    ..add(2961)
+    ..add(2962)
+    ..add(2963)
+    ..add(2964)
+    ..add(2965)
+    ..add(2966)
+    ..add(2967)
+    ..add(2968)
+    ..add(2969)
+    ..add(2970)
+    ..add(2971)
+    ..add(2972)
+    ..add(2973)
+    ..add(2974)
+    ..add(2975)
+    ..add(2976)
+    ..add(2977)
+    ..add(2978)
+    ..add(2979)
+    ..add(2980)
+    ..add(2981)
+    ..add(2982)
+    ..add(2983)
+    ..add(2984)
+    ..add(2985)
+    ..add(2986)
+    ..add(2987)
+    ..add(2988)
+    ..add(2989)
+    ..add(2990)
+    ..add(2991)
+    ..add(2992)
+    ..add(2993)
+    ..add(2994)
+    ..add(2995)
+    ..add(2996)
+    ..add(2997)
+    ..add(2998)
+    ..add(2999)
+    ..add(3000)
+    ..add(3001)
+    ..add(3002)
+    ..add(3003)
+    ..add(3004)
+    ..add(3005)
+    ..add(3006)
+    ..add(3007)
+    ..add(3008)
+    ..add(3009)
+    ..add(3010)
+    ..add(3011)
+    ..add(3012)
+    ..add(3013)
+    ..add(3014)
+    ..add(3015)
+    ..add(3016)
+    ..add(3017)
+    ..add(3018)
+    ..add(3019)
+    ..add(3020)
+    ..add(3021)
+    ..add(3022)
+    ..add(3023)
+    ..add(3024)
+    ..add(3025)
+    ..add(3026)
+    ..add(3027)
+    ..add(3028)
+    ..add(3029)
+    ..add(3030)
+    ..add(3031)
+    ..add(3032)
+    ..add(3033)
+    ..add(3034)
+    ..add(3035)
+    ..add(3036)
+    ..add(3037)
+    ..add(3038)
+    ..add(3039)
+    ..add(3040)
+    ..add(3041)
+    ..add(3042)
+    ..add(3043)
+    ..add(3044)
+    ..add(3045)
+    ..add(3046)
+    ..add(3047)
+    ..add(3048)
+    ..add(3049)
+    ..add(3050)
+    ..add(3051)
+    ..add(3052)
+    ..add(3053)
+    ..add(3054)
+    ..add(3055)
+    ..add(3056)
+    ..add(3057)
+    ..add(3058)
+    ..add(3059)
+    ..add(3060)
+    ..add(3061)
+    ..add(3062)
+    ..add(3063)
+    ..add(3064)
+    ..add(3065)
+    ..add(3066)
+    ..add(3067)
+    ..add(3068)
+    ..add(3069)
+    ..add(3070)
+    ..add(3071)
+    ..add(3072)
+    ..add(3073)
+    ..add(3074)
+    ..add(3075)
+    ..add(3076)
+    ..add(3077)
+    ..add(3078)
+    ..add(3079)
+    ..add(3080)
+    ..add(3081)
+    ..add(3082)
+    ..add(3083)
+    ..add(3084)
+    ..add(3085)
+    ..add(3086)
+    ..add(3087)
+    ..add(3088)
+    ..add(3089)
+    ..add(3090)
+    ..add(3091)
+    ..add(3092)
+    ..add(3093)
+    ..add(3094)
+    ..add(3095)
+    ..add(3096)
+    ..add(3097)
+    ..add(3098)
+    ..add(3099)
+    ..add(3100)
+    ..add(3101)
+    ..add(3102)
+    ..add(3103)
+    ..add(3104)
+    ..add(3105)
+    ..add(3106)
+    ..add(3107)
+    ..add(3108)
+    ..add(3109)
+    ..add(3110)
+    ..add(3111)
+    ..add(3112)
+    ..add(3113)
+    ..add(3114)
+    ..add(3115)
+    ..add(3116)
+    ..add(3117)
+    ..add(3118)
+    ..add(3119)
+    ..add(3120)
+    ..add(3121)
+    ..add(3122)
+    ..add(3123)
+    ..add(3124)
+    ..add(3125)
+    ..add(3126)
+    ..add(3127)
+    ..add(3128)
+    ..add(3129)
+    ..add(3130)
+    ..add(3131)
+    ..add(3132)
+    ..add(3133)
+    ..add(3134)
+    ..add(3135)
+    ..add(3136)
+    ..add(3137)
+    ..add(3138)
+    ..add(3139)
+    ..add(3140)
+    ..add(3141)
+    ..add(3142)
+    ..add(3143)
+    ..add(3144)
+    ..add(3145)
+    ..add(3146)
+    ..add(3147)
+    ..add(3148)
+    ..add(3149)
+    ..add(3150)
+    ..add(3151)
+    ..add(3152)
+    ..add(3153)
+    ..add(3154)
+    ..add(3155)
+    ..add(3156)
+    ..add(3157)
+    ..add(3158)
+    ..add(3159)
+    ..add(3160)
+    ..add(3161)
+    ..add(3162)
+    ..add(3163)
+    ..add(3164)
+    ..add(3165)
+    ..add(3166)
+    ..add(3167)
+    ..add(3168)
+    ..add(3169)
+    ..add(3170)
+    ..add(3171)
+    ..add(3172)
+    ..add(3173)
+    ..add(3174)
+    ..add(3175)
+    ..add(3176)
+    ..add(3177)
+    ..add(3178)
+    ..add(3179)
+    ..add(3180)
+    ..add(3181)
+    ..add(3182)
+    ..add(3183)
+    ..add(3184)
+    ..add(3185)
+    ..add(3186)
+    ..add(3187)
+    ..add(3188)
+    ..add(3189)
+    ..add(3190)
+    ..add(3191)
+    ..add(3192)
+    ..add(3193)
+    ..add(3194)
+    ..add(3195)
+    ..add(3196)
+    ..add(3197)
+    ..add(3198)
+    ..add(3199)
+    ..add(3200)
+    ..add(3201)
+    ..add(3202)
+    ..add(3203)
+    ..add(3204)
+    ..add(3205)
+    ..add(3206)
+    ..add(3207)
+    ..add(3208)
+    ..add(3209)
+    ..add(3210)
+    ..add(3211)
+    ..add(3212)
+    ..add(3213)
+    ..add(3214)
+    ..add(3215)
+    ..add(3216)
+    ..add(3217)
+    ..add(3218)
+    ..add(3219)
+    ..add(3220)
+    ..add(3221)
+    ..add(3222)
+    ..add(3223)
+    ..add(3224)
+    ..add(3225)
+    ..add(3226)
+    ..add(3227)
+    ..add(3228)
+    ..add(3229)
+    ..add(3230)
+    ..add(3231)
+    ..add(3232)
+    ..add(3233)
+    ..add(3234)
+    ..add(3235)
+    ..add(3236)
+    ..add(3237)
+    ..add(3238)
+    ..add(3239)
+    ..add(3240)
+    ..add(3241)
+    ..add(3242)
+    ..add(3243)
+    ..add(3244)
+    ..add(3245)
+    ..add(3246)
+    ..add(3247)
+    ..add(3248)
+    ..add(3249)
+    ..add(3250)
+    ..add(3251)
+    ..add(3252)
+    ..add(3253)
+    ..add(3254)
+    ..add(3255)
+    ..add(3256)
+    ..add(3257)
+    ..add(3258)
+    ..add(3259)
+    ..add(3260)
+    ..add(3261)
+    ..add(3262)
+    ..add(3263)
+    ..add(3264)
+    ..add(3265)
+    ..add(3266)
+    ..add(3267)
+    ..add(3268)
+    ..add(3269)
+    ..add(3270)
+    ..add(3271)
+    ..add(3272)
+    ..add(3273)
+    ..add(3274)
+    ..add(3275)
+    ..add(3276)
+    ..add(3277)
+    ..add(3278)
+    ..add(3279)
+    ..add(3280)
+    ..add(3281)
+    ..add(3282)
+    ..add(3283)
+    ..add(3284)
+    ..add(3285)
+    ..add(3286)
+    ..add(3287)
+    ..add(3288)
+    ..add(3289)
+    ..add(3290)
+    ..add(3291)
+    ..add(3292)
+    ..add(3293)
+    ..add(3294)
+    ..add(3295)
+    ..add(3296)
+    ..add(3297)
+    ..add(3298)
+    ..add(3299)
+    ..add(3300)
+    ..add(3301)
+    ..add(3302)
+    ..add(3303)
+    ..add(3304)
+    ..add(3305)
+    ..add(3306)
+    ..add(3307)
+    ..add(3308)
+    ..add(3309)
+    ..add(3310)
+    ..add(3311)
+    ..add(3312)
+    ..add(3313)
+    ..add(3314)
+    ..add(3315)
+    ..add(3316)
+    ..add(3317)
+    ..add(3318)
+    ..add(3319)
+    ..add(3320)
+    ..add(3321)
+    ..add(3322)
+    ..add(3323)
+    ..add(3324)
+    ..add(3325)
+    ..add(3326)
+    ..add(3327)
+    ..add(3328)
+    ..add(3329)
+    ..add(3330)
+    ..add(3331)
+    ..add(3332)
+    ..add(3333)
+    ..add(3334)
+    ..add(3335)
+    ..add(3336)
+    ..add(3337)
+    ..add(3338)
+    ..add(3339)
+    ..add(3340)
+    ..add(3341)
+    ..add(3342)
+    ..add(3343)
+    ..add(3344)
+    ..add(3345)
+    ..add(3346)
+    ..add(3347)
+    ..add(3348)
+    ..add(3349)
+    ..add(3350)
+    ..add(3351)
+    ..add(3352)
+    ..add(3353)
+    ..add(3354)
+    ..add(3355)
+    ..add(3356)
+    ..add(3357)
+    ..add(3358)
+    ..add(3359)
+    ..add(3360)
+    ..add(3361)
+    ..add(3362)
+    ..add(3363)
+    ..add(3364)
+    ..add(3365)
+    ..add(3366)
+    ..add(3367)
+    ..add(3368)
+    ..add(3369)
+    ..add(3370)
+    ..add(3371)
+    ..add(3372)
+    ..add(3373)
+    ..add(3374)
+    ..add(3375)
+    ..add(3376)
+    ..add(3377)
+    ..add(3378)
+    ..add(3379)
+    ..add(3380)
+    ..add(3381)
+    ..add(3382)
+    ..add(3383)
+    ..add(3384)
+    ..add(3385)
+    ..add(3386)
+    ..add(3387)
+    ..add(3388)
+    ..add(3389)
+    ..add(3390)
+    ..add(3391)
+    ..add(3392)
+    ..add(3393)
+    ..add(3394)
+    ..add(3395)
+    ..add(3396)
+    ..add(3397)
+    ..add(3398)
+    ..add(3399)
+    ..add(3400)
+    ..add(3401)
+    ..add(3402)
+    ..add(3403)
+    ..add(3404)
+    ..add(3405)
+    ..add(3406)
+    ..add(3407)
+    ..add(3408)
+    ..add(3409)
+    ..add(3410)
+    ..add(3411)
+    ..add(3412)
+    ..add(3413)
+    ..add(3414)
+    ..add(3415)
+    ..add(3416)
+    ..add(3417)
+    ..add(3418)
+    ..add(3419)
+    ..add(3420)
+    ..add(3421)
+    ..add(3422)
+    ..add(3423)
+    ..add(3424)
+    ..add(3425)
+    ..add(3426)
+    ..add(3427)
+    ..add(3428)
+    ..add(3429)
+    ..add(3430)
+    ..add(3431)
+    ..add(3432)
+    ..add(3433)
+    ..add(3434)
+    ..add(3435)
+    ..add(3436)
+    ..add(3437)
+    ..add(3438)
+    ..add(3439)
+    ..add(3440)
+    ..add(3441)
+    ..add(3442)
+    ..add(3443)
+    ..add(3444)
+    ..add(3445)
+    ..add(3446)
+    ..add(3447)
+    ..add(3448)
+    ..add(3449)
+    ..add(3450)
+    ..add(3451)
+    ..add(3452)
+    ..add(3453)
+    ..add(3454)
+    ..add(3455)
+    ..add(3456)
+    ..add(3457)
+    ..add(3458)
+    ..add(3459)
+    ..add(3460)
+    ..add(3461)
+    ..add(3462)
+    ..add(3463)
+    ..add(3464)
+    ..add(3465)
+    ..add(3466)
+    ..add(3467)
+    ..add(3468)
+    ..add(3469)
+    ..add(3470)
+    ..add(3471)
+    ..add(3472)
+    ..add(3473)
+    ..add(3474)
+    ..add(3475)
+    ..add(3476)
+    ..add(3477)
+    ..add(3478)
+    ..add(3479)
+    ..add(3480)
+    ..add(3481)
+    ..add(3482)
+    ..add(3483)
+    ..add(3484)
+    ..add(3485)
+    ..add(3486)
+    ..add(3487)
+    ..add(3488)
+    ..add(3489)
+    ..add(3490)
+    ..add(3491)
+    ..add(3492)
+    ..add(3493)
+    ..add(3494)
+    ..add(3495)
+    ..add(3496)
+    ..add(3497)
+    ..add(3498)
+    ..add(3499)
+    ..add(3500)
+    ..add(3501)
+    ..add(3502)
+    ..add(3503)
+    ..add(3504)
+    ..add(3505)
+    ..add(3506)
+    ..add(3507)
+    ..add(3508)
+    ..add(3509)
+    ..add(3510)
+    ..add(3511)
+    ..add(3512)
+    ..add(3513)
+    ..add(3514)
+    ..add(3515)
+    ..add(3516)
+    ..add(3517)
+    ..add(3518)
+    ..add(3519)
+    ..add(3520)
+    ..add(3521)
+    ..add(3522)
+    ..add(3523)
+    ..add(3524)
+    ..add(3525)
+    ..add(3526)
+    ..add(3527)
+    ..add(3528)
+    ..add(3529)
+    ..add(3530)
+    ..add(3531)
+    ..add(3532)
+    ..add(3533)
+    ..add(3534)
+    ..add(3535)
+    ..add(3536)
+    ..add(3537)
+    ..add(3538)
+    ..add(3539)
+    ..add(3540)
+    ..add(3541)
+    ..add(3542)
+    ..add(3543)
+    ..add(3544)
+    ..add(3545)
+    ..add(3546)
+    ..add(3547)
+    ..add(3548)
+    ..add(3549)
+    ..add(3550)
+    ..add(3551)
+    ..add(3552)
+    ..add(3553)
+    ..add(3554)
+    ..add(3555)
+    ..add(3556)
+    ..add(3557)
+    ..add(3558)
+    ..add(3559)
+    ..add(3560)
+    ..add(3561)
+    ..add(3562)
+    ..add(3563)
+    ..add(3564)
+    ..add(3565)
+    ..add(3566)
+    ..add(3567)
+    ..add(3568)
+    ..add(3569)
+    ..add(3570)
+    ..add(3571)
+    ..add(3572)
+    ..add(3573)
+    ..add(3574)
+    ..add(3575)
+    ..add(3576)
+    ..add(3577)
+    ..add(3578)
+    ..add(3579)
+    ..add(3580)
+    ..add(3581)
+    ..add(3582)
+    ..add(3583)
+    ..add(3584)
+    ..add(3585)
+    ..add(3586)
+    ..add(3587)
+    ..add(3588)
+    ..add(3589)
+    ..add(3590)
+    ..add(3591)
+    ..add(3592)
+    ..add(3593)
+    ..add(3594)
+    ..add(3595)
+    ..add(3596)
+    ..add(3597)
+    ..add(3598)
+    ..add(3599)
+    ..add(3600)
+    ..add(3601)
+    ..add(3602)
+    ..add(3603)
+    ..add(3604)
+    ..add(3605)
+    ..add(3606)
+    ..add(3607)
+    ..add(3608)
+    ..add(3609)
+    ..add(3610)
+    ..add(3611)
+    ..add(3612)
+    ..add(3613)
+    ..add(3614)
+    ..add(3615)
+    ..add(3616)
+    ..add(3617)
+    ..add(3618)
+    ..add(3619)
+    ..add(3620)
+    ..add(3621)
+    ..add(3622)
+    ..add(3623)
+    ..add(3624)
+    ..add(3625)
+    ..add(3626)
+    ..add(3627)
+    ..add(3628)
+    ..add(3629)
+    ..add(3630)
+    ..add(3631)
+    ..add(3632)
+    ..add(3633)
+    ..add(3634)
+    ..add(3635)
+    ..add(3636)
+    ..add(3637)
+    ..add(3638)
+    ..add(3639)
+    ..add(3640)
+    ..add(3641)
+    ..add(3642)
+    ..add(3643)
+    ..add(3644)
+    ..add(3645)
+    ..add(3646)
+    ..add(3647)
+    ..add(3648)
+    ..add(3649)
+    ..add(3650)
+    ..add(3651)
+    ..add(3652)
+    ..add(3653)
+    ..add(3654)
+    ..add(3655)
+    ..add(3656)
+    ..add(3657)
+    ..add(3658)
+    ..add(3659)
+    ..add(3660)
+    ..add(3661)
+    ..add(3662)
+    ..add(3663)
+    ..add(3664)
+    ..add(3665)
+    ..add(3666)
+    ..add(3667)
+    ..add(3668)
+    ..add(3669)
+    ..add(3670)
+    ..add(3671)
+    ..add(3672)
+    ..add(3673)
+    ..add(3674)
+    ..add(3675)
+    ..add(3676)
+    ..add(3677)
+    ..add(3678)
+    ..add(3679)
+    ..add(3680)
+    ..add(3681)
+    ..add(3682)
+    ..add(3683)
+    ..add(3684)
+    ..add(3685)
+    ..add(3686)
+    ..add(3687)
+    ..add(3688)
+    ..add(3689)
+    ..add(3690)
+    ..add(3691)
+    ..add(3692)
+    ..add(3693)
+    ..add(3694)
+    ..add(3695)
+    ..add(3696)
+    ..add(3697)
+    ..add(3698)
+    ..add(3699)
+    ..add(3700)
+    ..add(3701)
+    ..add(3702)
+    ..add(3703)
+    ..add(3704)
+    ..add(3705)
+    ..add(3706)
+    ..add(3707)
+    ..add(3708)
+    ..add(3709)
+    ..add(3710)
+    ..add(3711)
+    ..add(3712)
+    ..add(3713)
+    ..add(3714)
+    ..add(3715)
+    ..add(3716)
+    ..add(3717)
+    ..add(3718)
+    ..add(3719)
+    ..add(3720)
+    ..add(3721)
+    ..add(3722)
+    ..add(3723)
+    ..add(3724)
+    ..add(3725)
+    ..add(3726)
+    ..add(3727)
+    ..add(3728)
+    ..add(3729)
+    ..add(3730)
+    ..add(3731)
+    ..add(3732)
+    ..add(3733)
+    ..add(3734)
+    ..add(3735)
+    ..add(3736)
+    ..add(3737)
+    ..add(3738)
+    ..add(3739)
+    ..add(3740)
+    ..add(3741)
+    ..add(3742)
+    ..add(3743)
+    ..add(3744)
+    ..add(3745)
+    ..add(3746)
+    ..add(3747)
+    ..add(3748)
+    ..add(3749)
+    ..add(3750)
+    ..add(3751)
+    ..add(3752)
+    ..add(3753)
+    ..add(3754)
+    ..add(3755)
+    ..add(3756)
+    ..add(3757)
+    ..add(3758)
+    ..add(3759)
+    ..add(3760)
+    ..add(3761)
+    ..add(3762)
+    ..add(3763)
+    ..add(3764)
+    ..add(3765)
+    ..add(3766)
+    ..add(3767)
+    ..add(3768)
+    ..add(3769)
+    ..add(3770)
+    ..add(3771)
+    ..add(3772)
+    ..add(3773)
+    ..add(3774)
+    ..add(3775)
+    ..add(3776)
+    ..add(3777)
+    ..add(3778)
+    ..add(3779)
+    ..add(3780)
+    ..add(3781)
+    ..add(3782)
+    ..add(3783)
+    ..add(3784)
+    ..add(3785)
+    ..add(3786)
+    ..add(3787)
+    ..add(3788)
+    ..add(3789)
+    ..add(3790)
+    ..add(3791)
+    ..add(3792)
+    ..add(3793)
+    ..add(3794)
+    ..add(3795)
+    ..add(3796)
+    ..add(3797)
+    ..add(3798)
+    ..add(3799)
+    ..add(3800)
+    ..add(3801)
+    ..add(3802)
+    ..add(3803)
+    ..add(3804)
+    ..add(3805)
+    ..add(3806)
+    ..add(3807)
+    ..add(3808)
+    ..add(3809)
+    ..add(3810)
+    ..add(3811)
+    ..add(3812)
+    ..add(3813)
+    ..add(3814)
+    ..add(3815)
+    ..add(3816)
+    ..add(3817)
+    ..add(3818)
+    ..add(3819)
+    ..add(3820)
+    ..add(3821)
+    ..add(3822)
+    ..add(3823)
+    ..add(3824)
+    ..add(3825)
+    ..add(3826)
+    ..add(3827)
+    ..add(3828)
+    ..add(3829)
+    ..add(3830)
+    ..add(3831)
+    ..add(3832)
+    ..add(3833)
+    ..add(3834)
+    ..add(3835)
+    ..add(3836)
+    ..add(3837)
+    ..add(3838)
+    ..add(3839)
+    ..add(3840)
+    ..add(3841)
+    ..add(3842)
+    ..add(3843)
+    ..add(3844)
+    ..add(3845)
+    ..add(3846)
+    ..add(3847)
+    ..add(3848)
+    ..add(3849)
+    ..add(3850)
+    ..add(3851)
+    ..add(3852)
+    ..add(3853)
+    ..add(3854)
+    ..add(3855)
+    ..add(3856)
+    ..add(3857)
+    ..add(3858)
+    ..add(3859)
+    ..add(3860)
+    ..add(3861)
+    ..add(3862)
+    ..add(3863)
+    ..add(3864)
+    ..add(3865)
+    ..add(3866)
+    ..add(3867)
+    ..add(3868)
+    ..add(3869)
+    ..add(3870)
+    ..add(3871)
+    ..add(3872)
+    ..add(3873)
+    ..add(3874)
+    ..add(3875)
+    ..add(3876)
+    ..add(3877)
+    ..add(3878)
+    ..add(3879)
+    ..add(3880)
+    ..add(3881)
+    ..add(3882)
+    ..add(3883)
+    ..add(3884)
+    ..add(3885)
+    ..add(3886)
+    ..add(3887)
+    ..add(3888)
+    ..add(3889)
+    ..add(3890)
+    ..add(3891)
+    ..add(3892)
+    ..add(3893)
+    ..add(3894)
+    ..add(3895)
+    ..add(3896)
+    ..add(3897)
+    ..add(3898)
+    ..add(3899)
+    ..add(3900)
+    ..add(3901)
+    ..add(3902)
+    ..add(3903)
+    ..add(3904)
+    ..add(3905)
+    ..add(3906)
+    ..add(3907)
+    ..add(3908)
+    ..add(3909)
+    ..add(3910)
+    ..add(3911)
+    ..add(3912)
+    ..add(3913)
+    ..add(3914)
+    ..add(3915)
+    ..add(3916)
+    ..add(3917)
+    ..add(3918)
+    ..add(3919)
+    ..add(3920)
+    ..add(3921)
+    ..add(3922)
+    ..add(3923)
+    ..add(3924)
+    ..add(3925)
+    ..add(3926)
+    ..add(3927)
+    ..add(3928)
+    ..add(3929)
+    ..add(3930)
+    ..add(3931)
+    ..add(3932)
+    ..add(3933)
+    ..add(3934)
+    ..add(3935)
+    ..add(3936)
+    ..add(3937)
+    ..add(3938)
+    ..add(3939)
+    ..add(3940)
+    ..add(3941)
+    ..add(3942)
+    ..add(3943)
+    ..add(3944)
+    ..add(3945)
+    ..add(3946)
+    ..add(3947)
+    ..add(3948)
+    ..add(3949)
+    ..add(3950)
+    ..add(3951)
+    ..add(3952)
+    ..add(3953)
+    ..add(3954)
+    ..add(3955)
+    ..add(3956)
+    ..add(3957)
+    ..add(3958)
+    ..add(3959)
+    ..add(3960)
+    ..add(3961)
+    ..add(3962)
+    ..add(3963)
+    ..add(3964)
+    ..add(3965)
+    ..add(3966)
+    ..add(3967)
+    ..add(3968)
+    ..add(3969)
+    ..add(3970)
+    ..add(3971)
+    ..add(3972)
+    ..add(3973)
+    ..add(3974)
+    ..add(3975)
+    ..add(3976)
+    ..add(3977)
+    ..add(3978)
+    ..add(3979)
+    ..add(3980)
+    ..add(3981)
+    ..add(3982)
+    ..add(3983)
+    ..add(3984)
+    ..add(3985)
+    ..add(3986)
+    ..add(3987)
+    ..add(3988)
+    ..add(3989)
+    ..add(3990)
+    ..add(3991)
+    ..add(3992)
+    ..add(3993)
+    ..add(3994)
+    ..add(3995)
+    ..add(3996)
+    ..add(3997)
+    ..add(3998)
+    ..add(3999)
+    ..add(4000)
+    ..add(4001)
+    ..add(4002)
+    ..add(4003)
+    ..add(4004)
+    ..add(4005)
+    ..add(4006)
+    ..add(4007)
+    ..add(4008)
+    ..add(4009)
+    ..add(4010)
+    ..add(4011)
+    ..add(4012)
+    ..add(4013)
+    ..add(4014)
+    ..add(4015)
+    ..add(4016)
+    ..add(4017)
+    ..add(4018)
+    ..add(4019)
+    ..add(4020)
+    ..add(4021)
+    ..add(4022)
+    ..add(4023)
+    ..add(4024)
+    ..add(4025)
+    ..add(4026)
+    ..add(4027)
+    ..add(4028)
+    ..add(4029)
+    ..add(4030)
+    ..add(4031)
+    ..add(4032)
+    ..add(4033)
+    ..add(4034)
+    ..add(4035)
+    ..add(4036)
+    ..add(4037)
+    ..add(4038)
+    ..add(4039)
+    ..add(4040)
+    ..add(4041)
+    ..add(4042)
+    ..add(4043)
+    ..add(4044)
+    ..add(4045)
+    ..add(4046)
+    ..add(4047)
+    ..add(4048)
+    ..add(4049)
+    ..add(4050)
+    ..add(4051)
+    ..add(4052)
+    ..add(4053)
+    ..add(4054)
+    ..add(4055)
+    ..add(4056)
+    ..add(4057)
+    ..add(4058)
+    ..add(4059)
+    ..add(4060)
+    ..add(4061)
+    ..add(4062)
+    ..add(4063)
+    ..add(4064)
+    ..add(4065)
+    ..add(4066)
+    ..add(4067)
+    ..add(4068)
+    ..add(4069)
+    ..add(4070)
+    ..add(4071)
+    ..add(4072)
+    ..add(4073)
+    ..add(4074)
+    ..add(4075)
+    ..add(4076)
+    ..add(4077)
+    ..add(4078)
+    ..add(4079)
+    ..add(4080)
+    ..add(4081)
+    ..add(4082)
+    ..add(4083)
+    ..add(4084)
+    ..add(4085)
+    ..add(4086)
+    ..add(4087)
+    ..add(4088)
+    ..add(4089)
+    ..add(4090)
+    ..add(4091)
+    ..add(4092)
+    ..add(4093)
+    ..add(4094)
+    ..add(4095)
+    ..add(4096)
+    ..add(4097)
+    ..add(4098)
+    ..add(4099)
+    ..add(4100)
+    ..add(4101)
+    ..add(4102)
+    ..add(4103)
+    ..add(4104)
+    ..add(4105)
+    ..add(4106)
+    ..add(4107)
+    ..add(4108)
+    ..add(4109)
+    ..add(4110)
+    ..add(4111)
+    ..add(4112)
+    ..add(4113)
+    ..add(4114)
+    ..add(4115)
+    ..add(4116)
+    ..add(4117)
+    ..add(4118)
+    ..add(4119)
+    ..add(4120)
+    ..add(4121)
+    ..add(4122)
+    ..add(4123)
+    ..add(4124)
+    ..add(4125)
+    ..add(4126)
+    ..add(4127)
+    ..add(4128)
+    ..add(4129)
+    ..add(4130)
+    ..add(4131)
+    ..add(4132)
+    ..add(4133)
+    ..add(4134)
+    ..add(4135)
+    ..add(4136)
+    ..add(4137)
+    ..add(4138)
+    ..add(4139)
+    ..add(4140)
+    ..add(4141)
+    ..add(4142)
+    ..add(4143)
+    ..add(4144)
+    ..add(4145)
+    ..add(4146)
+    ..add(4147)
+    ..add(4148)
+    ..add(4149)
+    ..add(4150)
+    ..add(4151)
+    ..add(4152)
+    ..add(4153)
+    ..add(4154)
+    ..add(4155)
+    ..add(4156)
+    ..add(4157)
+    ..add(4158)
+    ..add(4159)
+    ..add(4160)
+    ..add(4161)
+    ..add(4162)
+    ..add(4163)
+    ..add(4164)
+    ..add(4165)
+    ..add(4166)
+    ..add(4167)
+    ..add(4168)
+    ..add(4169)
+    ..add(4170)
+    ..add(4171)
+    ..add(4172)
+    ..add(4173)
+    ..add(4174)
+    ..add(4175)
+    ..add(4176)
+    ..add(4177)
+    ..add(4178)
+    ..add(4179)
+    ..add(4180)
+    ..add(4181)
+    ..add(4182)
+    ..add(4183)
+    ..add(4184)
+    ..add(4185)
+    ..add(4186)
+    ..add(4187)
+    ..add(4188)
+    ..add(4189)
+    ..add(4190)
+    ..add(4191)
+    ..add(4192)
+    ..add(4193)
+    ..add(4194)
+    ..add(4195)
+    ..add(4196)
+    ..add(4197)
+    ..add(4198)
+    ..add(4199)
+    ..add(4200)
+    ..add(4201)
+    ..add(4202)
+    ..add(4203)
+    ..add(4204)
+    ..add(4205)
+    ..add(4206)
+    ..add(4207)
+    ..add(4208)
+    ..add(4209)
+    ..add(4210)
+    ..add(4211)
+    ..add(4212)
+    ..add(4213)
+    ..add(4214)
+    ..add(4215)
+    ..add(4216)
+    ..add(4217)
+    ..add(4218)
+    ..add(4219)
+    ..add(4220)
+    ..add(4221)
+    ..add(4222)
+    ..add(4223)
+    ..add(4224)
+    ..add(4225)
+    ..add(4226)
+    ..add(4227)
+    ..add(4228)
+    ..add(4229)
+    ..add(4230)
+    ..add(4231)
+    ..add(4232)
+    ..add(4233)
+    ..add(4234)
+    ..add(4235)
+    ..add(4236)
+    ..add(4237)
+    ..add(4238)
+    ..add(4239)
+    ..add(4240)
+    ..add(4241)
+    ..add(4242)
+    ..add(4243)
+    ..add(4244)
+    ..add(4245)
+    ..add(4246)
+    ..add(4247)
+    ..add(4248)
+    ..add(4249)
+    ..add(4250)
+    ..add(4251)
+    ..add(4252)
+    ..add(4253)
+    ..add(4254)
+    ..add(4255)
+    ..add(4256)
+    ..add(4257)
+    ..add(4258)
+    ..add(4259)
+    ..add(4260)
+    ..add(4261)
+    ..add(4262)
+    ..add(4263)
+    ..add(4264)
+    ..add(4265)
+    ..add(4266)
+    ..add(4267)
+    ..add(4268)
+    ..add(4269)
+    ..add(4270)
+    ..add(4271)
+    ..add(4272)
+    ..add(4273)
+    ..add(4274)
+    ..add(4275)
+    ..add(4276)
+    ..add(4277)
+    ..add(4278)
+    ..add(4279)
+    ..add(4280)
+    ..add(4281)
+    ..add(4282)
+    ..add(4283)
+    ..add(4284)
+    ..add(4285)
+    ..add(4286)
+    ..add(4287)
+    ..add(4288)
+    ..add(4289)
+    ..add(4290)
+    ..add(4291)
+    ..add(4292)
+    ..add(4293)
+    ..add(4294)
+    ..add(4295)
+    ..add(4296)
+    ..add(4297)
+    ..add(4298)
+    ..add(4299)
+    ..add(4300)
+    ..add(4301)
+    ..add(4302)
+    ..add(4303)
+    ..add(4304)
+    ..add(4305)
+    ..add(4306)
+    ..add(4307)
+    ..add(4308)
+    ..add(4309)
+    ..add(4310)
+    ..add(4311)
+    ..add(4312)
+    ..add(4313)
+    ..add(4314)
+    ..add(4315)
+    ..add(4316)
+    ..add(4317)
+    ..add(4318)
+    ..add(4319)
+    ..add(4320)
+    ..add(4321)
+    ..add(4322)
+    ..add(4323)
+    ..add(4324)
+    ..add(4325)
+    ..add(4326)
+    ..add(4327)
+    ..add(4328)
+    ..add(4329)
+    ..add(4330)
+    ..add(4331)
+    ..add(4332)
+    ..add(4333)
+    ..add(4334)
+    ..add(4335)
+    ..add(4336)
+    ..add(4337)
+    ..add(4338)
+    ..add(4339)
+    ..add(4340)
+    ..add(4341)
+    ..add(4342)
+    ..add(4343)
+    ..add(4344)
+    ..add(4345)
+    ..add(4346)
+    ..add(4347)
+    ..add(4348)
+    ..add(4349)
+    ..add(4350)
+    ..add(4351)
+    ..add(4352)
+    ..add(4353)
+    ..add(4354)
+    ..add(4355)
+    ..add(4356)
+    ..add(4357)
+    ..add(4358)
+    ..add(4359)
+    ..add(4360)
+    ..add(4361)
+    ..add(4362)
+    ..add(4363)
+    ..add(4364)
+    ..add(4365)
+    ..add(4366)
+    ..add(4367)
+    ..add(4368)
+    ..add(4369)
+    ..add(4370)
+    ..add(4371)
+    ..add(4372)
+    ..add(4373)
+    ..add(4374)
+    ..add(4375)
+    ..add(4376)
+    ..add(4377)
+    ..add(4378)
+    ..add(4379)
+    ..add(4380)
+    ..add(4381)
+    ..add(4382)
+    ..add(4383)
+    ..add(4384)
+    ..add(4385)
+    ..add(4386)
+    ..add(4387)
+    ..add(4388)
+    ..add(4389)
+    ..add(4390)
+    ..add(4391)
+    ..add(4392)
+    ..add(4393)
+    ..add(4394)
+    ..add(4395)
+    ..add(4396)
+    ..add(4397)
+    ..add(4398)
+    ..add(4399)
+    ..add(4400)
+    ..add(4401)
+    ..add(4402)
+    ..add(4403)
+    ..add(4404)
+    ..add(4405)
+    ..add(4406)
+    ..add(4407)
+    ..add(4408)
+    ..add(4409)
+    ..add(4410)
+    ..add(4411)
+    ..add(4412)
+    ..add(4413)
+    ..add(4414)
+    ..add(4415)
+    ..add(4416)
+    ..add(4417)
+    ..add(4418)
+    ..add(4419)
+    ..add(4420)
+    ..add(4421)
+    ..add(4422)
+    ..add(4423)
+    ..add(4424)
+    ..add(4425)
+    ..add(4426)
+    ..add(4427)
+    ..add(4428)
+    ..add(4429)
+    ..add(4430)
+    ..add(4431)
+    ..add(4432)
+    ..add(4433)
+    ..add(4434)
+    ..add(4435)
+    ..add(4436)
+    ..add(4437)
+    ..add(4438)
+    ..add(4439)
+    ..add(4440)
+    ..add(4441)
+    ..add(4442)
+    ..add(4443)
+    ..add(4444)
+    ..add(4445)
+    ..add(4446)
+    ..add(4447)
+    ..add(4448)
+    ..add(4449)
+    ..add(4450)
+    ..add(4451)
+    ..add(4452)
+    ..add(4453)
+    ..add(4454)
+    ..add(4455)
+    ..add(4456)
+    ..add(4457)
+    ..add(4458)
+    ..add(4459)
+    ..add(4460)
+    ..add(4461)
+    ..add(4462)
+    ..add(4463)
+    ..add(4464)
+    ..add(4465)
+    ..add(4466)
+    ..add(4467)
+    ..add(4468)
+    ..add(4469)
+    ..add(4470)
+    ..add(4471)
+    ..add(4472)
+    ..add(4473)
+    ..add(4474)
+    ..add(4475)
+    ..add(4476)
+    ..add(4477)
+    ..add(4478)
+    ..add(4479)
+    ..add(4480)
+    ..add(4481)
+    ..add(4482)
+    ..add(4483)
+    ..add(4484)
+    ..add(4485)
+    ..add(4486)
+    ..add(4487)
+    ..add(4488)
+    ..add(4489)
+    ..add(4490)
+    ..add(4491)
+    ..add(4492)
+    ..add(4493)
+    ..add(4494)
+    ..add(4495)
+    ..add(4496)
+    ..add(4497)
+    ..add(4498)
+    ..add(4499)
+    ..add(4500)
+    ..add(4501)
+    ..add(4502)
+    ..add(4503)
+    ..add(4504)
+    ..add(4505)
+    ..add(4506)
+    ..add(4507)
+    ..add(4508)
+    ..add(4509)
+    ..add(4510)
+    ..add(4511)
+    ..add(4512)
+    ..add(4513)
+    ..add(4514)
+    ..add(4515)
+    ..add(4516)
+    ..add(4517)
+    ..add(4518)
+    ..add(4519)
+    ..add(4520)
+    ..add(4521)
+    ..add(4522)
+    ..add(4523)
+    ..add(4524)
+    ..add(4525)
+    ..add(4526)
+    ..add(4527)
+    ..add(4528)
+    ..add(4529)
+    ..add(4530)
+    ..add(4531)
+    ..add(4532)
+    ..add(4533)
+    ..add(4534)
+    ..add(4535)
+    ..add(4536)
+    ..add(4537)
+    ..add(4538)
+    ..add(4539)
+    ..add(4540)
+    ..add(4541)
+    ..add(4542)
+    ..add(4543)
+    ..add(4544)
+    ..add(4545)
+    ..add(4546)
+    ..add(4547)
+    ..add(4548)
+    ..add(4549)
+    ..add(4550)
+    ..add(4551)
+    ..add(4552)
+    ..add(4553)
+    ..add(4554)
+    ..add(4555)
+    ..add(4556)
+    ..add(4557)
+    ..add(4558)
+    ..add(4559)
+    ..add(4560)
+    ..add(4561)
+    ..add(4562)
+    ..add(4563)
+    ..add(4564)
+    ..add(4565)
+    ..add(4566)
+    ..add(4567)
+    ..add(4568)
+    ..add(4569)
+    ..add(4570)
+    ..add(4571)
+    ..add(4572)
+    ..add(4573)
+    ..add(4574)
+    ..add(4575)
+    ..add(4576)
+    ..add(4577)
+    ..add(4578)
+    ..add(4579)
+    ..add(4580)
+    ..add(4581)
+    ..add(4582)
+    ..add(4583)
+    ..add(4584)
+    ..add(4585)
+    ..add(4586)
+    ..add(4587)
+    ..add(4588)
+    ..add(4589)
+    ..add(4590)
+    ..add(4591)
+    ..add(4592)
+    ..add(4593)
+    ..add(4594)
+    ..add(4595)
+    ..add(4596)
+    ..add(4597)
+    ..add(4598)
+    ..add(4599)
+    ..add(4600)
+    ..add(4601)
+    ..add(4602)
+    ..add(4603)
+    ..add(4604)
+    ..add(4605)
+    ..add(4606)
+    ..add(4607)
+    ..add(4608)
+    ..add(4609)
+    ..add(4610)
+    ..add(4611)
+    ..add(4612)
+    ..add(4613)
+    ..add(4614)
+    ..add(4615)
+    ..add(4616)
+    ..add(4617)
+    ..add(4618)
+    ..add(4619)
+    ..add(4620)
+    ..add(4621)
+    ..add(4622)
+    ..add(4623)
+    ..add(4624)
+    ..add(4625)
+    ..add(4626)
+    ..add(4627)
+    ..add(4628)
+    ..add(4629)
+    ..add(4630)
+    ..add(4631)
+    ..add(4632)
+    ..add(4633)
+    ..add(4634)
+    ..add(4635)
+    ..add(4636)
+    ..add(4637)
+    ..add(4638)
+    ..add(4639)
+    ..add(4640)
+    ..add(4641)
+    ..add(4642)
+    ..add(4643)
+    ..add(4644)
+    ..add(4645)
+    ..add(4646)
+    ..add(4647)
+    ..add(4648)
+    ..add(4649)
+    ..add(4650)
+    ..add(4651)
+    ..add(4652)
+    ..add(4653)
+    ..add(4654)
+    ..add(4655)
+    ..add(4656)
+    ..add(4657)
+    ..add(4658)
+    ..add(4659)
+    ..add(4660)
+    ..add(4661)
+    ..add(4662)
+    ..add(4663)
+    ..add(4664)
+    ..add(4665)
+    ..add(4666)
+    ..add(4667)
+    ..add(4668)
+    ..add(4669)
+    ..add(4670)
+    ..add(4671)
+    ..add(4672)
+    ..add(4673)
+    ..add(4674)
+    ..add(4675)
+    ..add(4676)
+    ..add(4677)
+    ..add(4678)
+    ..add(4679)
+    ..add(4680)
+    ..add(4681)
+    ..add(4682)
+    ..add(4683)
+    ..add(4684)
+    ..add(4685)
+    ..add(4686)
+    ..add(4687)
+    ..add(4688)
+    ..add(4689)
+    ..add(4690)
+    ..add(4691)
+    ..add(4692)
+    ..add(4693)
+    ..add(4694)
+    ..add(4695)
+    ..add(4696)
+    ..add(4697)
+    ..add(4698)
+    ..add(4699)
+    ..add(4700)
+    ..add(4701)
+    ..add(4702)
+    ..add(4703)
+    ..add(4704)
+    ..add(4705)
+    ..add(4706)
+    ..add(4707)
+    ..add(4708)
+    ..add(4709)
+    ..add(4710)
+    ..add(4711)
+    ..add(4712)
+    ..add(4713)
+    ..add(4714)
+    ..add(4715)
+    ..add(4716)
+    ..add(4717)
+    ..add(4718)
+    ..add(4719)
+    ..add(4720)
+    ..add(4721)
+    ..add(4722)
+    ..add(4723)
+    ..add(4724)
+    ..add(4725)
+    ..add(4726)
+    ..add(4727)
+    ..add(4728)
+    ..add(4729)
+    ..add(4730)
+    ..add(4731)
+    ..add(4732)
+    ..add(4733)
+    ..add(4734)
+    ..add(4735)
+    ..add(4736)
+    ..add(4737)
+    ..add(4738)
+    ..add(4739)
+    ..add(4740)
+    ..add(4741)
+    ..add(4742)
+    ..add(4743)
+    ..add(4744)
+    ..add(4745)
+    ..add(4746)
+    ..add(4747)
+    ..add(4748)
+    ..add(4749)
+    ..add(4750)
+    ..add(4751)
+    ..add(4752)
+    ..add(4753)
+    ..add(4754)
+    ..add(4755)
+    ..add(4756)
+    ..add(4757)
+    ..add(4758)
+    ..add(4759)
+    ..add(4760)
+    ..add(4761)
+    ..add(4762)
+    ..add(4763)
+    ..add(4764)
+    ..add(4765)
+    ..add(4766)
+    ..add(4767)
+    ..add(4768)
+    ..add(4769)
+    ..add(4770)
+    ..add(4771)
+    ..add(4772)
+    ..add(4773)
+    ..add(4774)
+    ..add(4775)
+    ..add(4776)
+    ..add(4777)
+    ..add(4778)
+    ..add(4779)
+    ..add(4780)
+    ..add(4781)
+    ..add(4782)
+    ..add(4783)
+    ..add(4784)
+    ..add(4785)
+    ..add(4786)
+    ..add(4787)
+    ..add(4788)
+    ..add(4789)
+    ..add(4790)
+    ..add(4791)
+    ..add(4792)
+    ..add(4793)
+    ..add(4794)
+    ..add(4795)
+    ..add(4796)
+    ..add(4797)
+    ..add(4798)
+    ..add(4799)
+    ..add(4800)
+    ..add(4801)
+    ..add(4802)
+    ..add(4803)
+    ..add(4804)
+    ..add(4805)
+    ..add(4806)
+    ..add(4807)
+    ..add(4808)
+    ..add(4809)
+    ..add(4810)
+    ..add(4811)
+    ..add(4812)
+    ..add(4813)
+    ..add(4814)
+    ..add(4815)
+    ..add(4816)
+    ..add(4817)
+    ..add(4818)
+    ..add(4819)
+    ..add(4820)
+    ..add(4821)
+    ..add(4822)
+    ..add(4823)
+    ..add(4824)
+    ..add(4825)
+    ..add(4826)
+    ..add(4827)
+    ..add(4828)
+    ..add(4829)
+    ..add(4830)
+    ..add(4831)
+    ..add(4832)
+    ..add(4833)
+    ..add(4834)
+    ..add(4835)
+    ..add(4836)
+    ..add(4837)
+    ..add(4838)
+    ..add(4839)
+    ..add(4840)
+    ..add(4841)
+    ..add(4842)
+    ..add(4843)
+    ..add(4844)
+    ..add(4845)
+    ..add(4846)
+    ..add(4847)
+    ..add(4848)
+    ..add(4849)
+    ..add(4850)
+    ..add(4851)
+    ..add(4852)
+    ..add(4853)
+    ..add(4854)
+    ..add(4855)
+    ..add(4856)
+    ..add(4857)
+    ..add(4858)
+    ..add(4859)
+    ..add(4860)
+    ..add(4861)
+    ..add(4862)
+    ..add(4863)
+    ..add(4864)
+    ..add(4865)
+    ..add(4866)
+    ..add(4867)
+    ..add(4868)
+    ..add(4869)
+    ..add(4870)
+    ..add(4871)
+    ..add(4872)
+    ..add(4873)
+    ..add(4874)
+    ..add(4875)
+    ..add(4876)
+    ..add(4877)
+    ..add(4878)
+    ..add(4879)
+    ..add(4880)
+    ..add(4881)
+    ..add(4882)
+    ..add(4883)
+    ..add(4884)
+    ..add(4885)
+    ..add(4886)
+    ..add(4887)
+    ..add(4888)
+    ..add(4889)
+    ..add(4890)
+    ..add(4891)
+    ..add(4892)
+    ..add(4893)
+    ..add(4894)
+    ..add(4895)
+    ..add(4896)
+    ..add(4897)
+    ..add(4898)
+    ..add(4899)
+    ..add(4900)
+    ..add(4901)
+    ..add(4902)
+    ..add(4903)
+    ..add(4904)
+    ..add(4905)
+    ..add(4906)
+    ..add(4907)
+    ..add(4908)
+    ..add(4909)
+    ..add(4910)
+    ..add(4911)
+    ..add(4912)
+    ..add(4913)
+    ..add(4914)
+    ..add(4915)
+    ..add(4916)
+    ..add(4917)
+    ..add(4918)
+    ..add(4919)
+    ..add(4920)
+    ..add(4921)
+    ..add(4922)
+    ..add(4923)
+    ..add(4924)
+    ..add(4925)
+    ..add(4926)
+    ..add(4927)
+    ..add(4928)
+    ..add(4929)
+    ..add(4930)
+    ..add(4931)
+    ..add(4932)
+    ..add(4933)
+    ..add(4934)
+    ..add(4935)
+    ..add(4936)
+    ..add(4937)
+    ..add(4938)
+    ..add(4939)
+    ..add(4940)
+    ..add(4941)
+    ..add(4942)
+    ..add(4943)
+    ..add(4944)
+    ..add(4945)
+    ..add(4946)
+    ..add(4947)
+    ..add(4948)
+    ..add(4949)
+    ..add(4950)
+    ..add(4951)
+    ..add(4952)
+    ..add(4953)
+    ..add(4954)
+    ..add(4955)
+    ..add(4956)
+    ..add(4957)
+    ..add(4958)
+    ..add(4959)
+    ..add(4960)
+    ..add(4961)
+    ..add(4962)
+    ..add(4963)
+    ..add(4964)
+    ..add(4965)
+    ..add(4966)
+    ..add(4967)
+    ..add(4968)
+    ..add(4969)
+    ..add(4970)
+    ..add(4971)
+    ..add(4972)
+    ..add(4973)
+    ..add(4974)
+    ..add(4975)
+    ..add(4976)
+    ..add(4977)
+    ..add(4978)
+    ..add(4979)
+    ..add(4980)
+    ..add(4981)
+    ..add(4982)
+    ..add(4983)
+    ..add(4984)
+    ..add(4985)
+    ..add(4986)
+    ..add(4987)
+    ..add(4988)
+    ..add(4989)
+    ..add(4990)
+    ..add(4991)
+    ..add(4992)
+    ..add(4993)
+    ..add(4994)
+    ..add(4995)
+    ..add(4996)
+    ..add(4997)
+    ..add(4998)
+    ..add(4999)
+    ..add(5000)
+    ..add(5001)
+    ..add(5002)
+    ..add(5003)
+    ..add(5004)
+    ..add(5005)
+    ..add(5006)
+    ..add(5007)
+    ..add(5008)
+    ..add(5009)
+    ..add(5010)
+    ..add(5011)
+    ..add(5012)
+    ..add(5013)
+    ..add(5014)
+    ..add(5015)
+    ..add(5016)
+    ..add(5017)
+    ..add(5018)
+    ..add(5019)
+    ..add(5020)
+    ..add(5021)
+    ..add(5022)
+    ..add(5023)
+    ..add(5024)
+    ..add(5025)
+    ..add(5026)
+    ..add(5027)
+    ..add(5028)
+    ..add(5029)
+    ..add(5030)
+    ..add(5031)
+    ..add(5032)
+    ..add(5033)
+    ..add(5034)
+    ..add(5035)
+    ..add(5036)
+    ..add(5037)
+    ..add(5038)
+    ..add(5039)
+    ..add(5040)
+    ..add(5041)
+    ..add(5042)
+    ..add(5043)
+    ..add(5044)
+    ..add(5045)
+    ..add(5046)
+    ..add(5047)
+    ..add(5048)
+    ..add(5049)
+    ..add(5050)
+    ..add(5051)
+    ..add(5052)
+    ..add(5053)
+    ..add(5054)
+    ..add(5055)
+    ..add(5056)
+    ..add(5057)
+    ..add(5058)
+    ..add(5059)
+    ..add(5060)
+    ..add(5061)
+    ..add(5062)
+    ..add(5063)
+    ..add(5064)
+    ..add(5065)
+    ..add(5066)
+    ..add(5067)
+    ..add(5068)
+    ..add(5069)
+    ..add(5070)
+    ..add(5071)
+    ..add(5072)
+    ..add(5073)
+    ..add(5074)
+    ..add(5075)
+    ..add(5076)
+    ..add(5077)
+    ..add(5078)
+    ..add(5079)
+    ..add(5080)
+    ..add(5081)
+    ..add(5082)
+    ..add(5083)
+    ..add(5084)
+    ..add(5085)
+    ..add(5086)
+    ..add(5087)
+    ..add(5088)
+    ..add(5089)
+    ..add(5090)
+    ..add(5091)
+    ..add(5092)
+    ..add(5093)
+    ..add(5094)
+    ..add(5095)
+    ..add(5096)
+    ..add(5097)
+    ..add(5098)
+    ..add(5099)
+    ..add(5100)
+    ..add(5101)
+    ..add(5102)
+    ..add(5103)
+    ..add(5104)
+    ..add(5105)
+    ..add(5106)
+    ..add(5107)
+    ..add(5108)
+    ..add(5109)
+    ..add(5110)
+    ..add(5111)
+    ..add(5112)
+    ..add(5113)
+    ..add(5114)
+    ..add(5115)
+    ..add(5116)
+    ..add(5117)
+    ..add(5118)
+    ..add(5119)
+    ..add(5120)
+    ..add(5121)
+    ..add(5122)
+    ..add(5123)
+    ..add(5124)
+    ..add(5125)
+    ..add(5126)
+    ..add(5127)
+    ..add(5128)
+    ..add(5129)
+    ..add(5130)
+    ..add(5131)
+    ..add(5132)
+    ..add(5133)
+    ..add(5134)
+    ..add(5135)
+    ..add(5136)
+    ..add(5137)
+    ..add(5138)
+    ..add(5139)
+    ..add(5140)
+    ..add(5141)
+    ..add(5142)
+    ..add(5143)
+    ..add(5144)
+    ..add(5145)
+    ..add(5146)
+    ..add(5147)
+    ..add(5148)
+    ..add(5149)
+    ..add(5150)
+    ..add(5151)
+    ..add(5152)
+    ..add(5153)
+    ..add(5154)
+    ..add(5155)
+    ..add(5156)
+    ..add(5157)
+    ..add(5158)
+    ..add(5159)
+    ..add(5160)
+    ..add(5161)
+    ..add(5162)
+    ..add(5163)
+    ..add(5164)
+    ..add(5165)
+    ..add(5166)
+    ..add(5167)
+    ..add(5168)
+    ..add(5169)
+    ..add(5170)
+    ..add(5171)
+    ..add(5172)
+    ..add(5173)
+    ..add(5174)
+    ..add(5175)
+    ..add(5176)
+    ..add(5177)
+    ..add(5178)
+    ..add(5179)
+    ..add(5180)
+    ..add(5181)
+    ..add(5182)
+    ..add(5183)
+    ..add(5184)
+    ..add(5185)
+    ..add(5186)
+    ..add(5187)
+    ..add(5188)
+    ..add(5189)
+    ..add(5190)
+    ..add(5191)
+    ..add(5192)
+    ..add(5193)
+    ..add(5194)
+    ..add(5195)
+    ..add(5196)
+    ..add(5197)
+    ..add(5198)
+    ..add(5199)
+    ..add(5200)
+    ..add(5201)
+    ..add(5202)
+    ..add(5203)
+    ..add(5204)
+    ..add(5205)
+    ..add(5206)
+    ..add(5207)
+    ..add(5208)
+    ..add(5209)
+    ..add(5210)
+    ..add(5211)
+    ..add(5212)
+    ..add(5213)
+    ..add(5214)
+    ..add(5215)
+    ..add(5216)
+    ..add(5217)
+    ..add(5218)
+    ..add(5219)
+    ..add(5220)
+    ..add(5221)
+    ..add(5222)
+    ..add(5223)
+    ..add(5224)
+    ..add(5225)
+    ..add(5226)
+    ..add(5227)
+    ..add(5228)
+    ..add(5229)
+    ..add(5230)
+    ..add(5231)
+    ..add(5232)
+    ..add(5233)
+    ..add(5234)
+    ..add(5235)
+    ..add(5236)
+    ..add(5237)
+    ..add(5238)
+    ..add(5239)
+    ..add(5240)
+    ..add(5241)
+    ..add(5242)
+    ..add(5243)
+    ..add(5244)
+    ..add(5245)
+    ..add(5246)
+    ..add(5247)
+    ..add(5248)
+    ..add(5249)
+    ..add(5250)
+    ..add(5251)
+    ..add(5252)
+    ..add(5253)
+    ..add(5254)
+    ..add(5255)
+    ..add(5256)
+    ..add(5257)
+    ..add(5258)
+    ..add(5259)
+    ..add(5260)
+    ..add(5261)
+    ..add(5262)
+    ..add(5263)
+    ..add(5264)
+    ..add(5265)
+    ..add(5266)
+    ..add(5267)
+    ..add(5268)
+    ..add(5269)
+    ..add(5270)
+    ..add(5271)
+    ..add(5272)
+    ..add(5273)
+    ..add(5274)
+    ..add(5275)
+    ..add(5276)
+    ..add(5277)
+    ..add(5278)
+    ..add(5279)
+    ..add(5280)
+    ..add(5281)
+    ..add(5282)
+    ..add(5283)
+    ..add(5284)
+    ..add(5285)
+    ..add(5286)
+    ..add(5287)
+    ..add(5288)
+    ..add(5289)
+    ..add(5290)
+    ..add(5291)
+    ..add(5292)
+    ..add(5293)
+    ..add(5294)
+    ..add(5295)
+    ..add(5296)
+    ..add(5297)
+    ..add(5298)
+    ..add(5299)
+    ..add(5300)
+    ..add(5301)
+    ..add(5302)
+    ..add(5303)
+    ..add(5304)
+    ..add(5305)
+    ..add(5306)
+    ..add(5307)
+    ..add(5308)
+    ..add(5309)
+    ..add(5310)
+    ..add(5311)
+    ..add(5312)
+    ..add(5313)
+    ..add(5314)
+    ..add(5315)
+    ..add(5316)
+    ..add(5317)
+    ..add(5318)
+    ..add(5319)
+    ..add(5320)
+    ..add(5321)
+    ..add(5322)
+    ..add(5323)
+    ..add(5324)
+    ..add(5325)
+    ..add(5326)
+    ..add(5327)
+    ..add(5328)
+    ..add(5329)
+    ..add(5330)
+    ..add(5331)
+    ..add(5332)
+    ..add(5333)
+    ..add(5334)
+    ..add(5335)
+    ..add(5336)
+    ..add(5337)
+    ..add(5338)
+    ..add(5339)
+    ..add(5340)
+    ..add(5341)
+    ..add(5342)
+    ..add(5343)
+    ..add(5344)
+    ..add(5345)
+    ..add(5346)
+    ..add(5347)
+    ..add(5348)
+    ..add(5349)
+    ..add(5350)
+    ..add(5351)
+    ..add(5352)
+    ..add(5353)
+    ..add(5354)
+    ..add(5355)
+    ..add(5356)
+    ..add(5357)
+    ..add(5358)
+    ..add(5359)
+    ..add(5360)
+    ..add(5361)
+    ..add(5362)
+    ..add(5363)
+    ..add(5364)
+    ..add(5365)
+    ..add(5366)
+    ..add(5367)
+    ..add(5368)
+    ..add(5369)
+    ..add(5370)
+    ..add(5371)
+    ..add(5372)
+    ..add(5373)
+    ..add(5374)
+    ..add(5375)
+    ..add(5376)
+    ..add(5377)
+    ..add(5378)
+    ..add(5379)
+    ..add(5380)
+    ..add(5381)
+    ..add(5382)
+    ..add(5383)
+    ..add(5384)
+    ..add(5385)
+    ..add(5386)
+    ..add(5387)
+    ..add(5388)
+    ..add(5389)
+    ..add(5390)
+    ..add(5391)
+    ..add(5392)
+    ..add(5393)
+    ..add(5394)
+    ..add(5395)
+    ..add(5396)
+    ..add(5397)
+    ..add(5398)
+    ..add(5399)
+    ..add(5400)
+    ..add(5401)
+    ..add(5402)
+    ..add(5403)
+    ..add(5404)
+    ..add(5405)
+    ..add(5406)
+    ..add(5407)
+    ..add(5408)
+    ..add(5409)
+    ..add(5410)
+    ..add(5411)
+    ..add(5412)
+    ..add(5413)
+    ..add(5414)
+    ..add(5415)
+    ..add(5416)
+    ..add(5417)
+    ..add(5418)
+    ..add(5419)
+    ..add(5420)
+    ..add(5421)
+    ..add(5422)
+    ..add(5423)
+    ..add(5424)
+    ..add(5425)
+    ..add(5426)
+    ..add(5427)
+    ..add(5428)
+    ..add(5429)
+    ..add(5430)
+    ..add(5431)
+    ..add(5432)
+    ..add(5433)
+    ..add(5434)
+    ..add(5435)
+    ..add(5436)
+    ..add(5437)
+    ..add(5438)
+    ..add(5439)
+    ..add(5440)
+    ..add(5441)
+    ..add(5442)
+    ..add(5443)
+    ..add(5444)
+    ..add(5445)
+    ..add(5446)
+    ..add(5447)
+    ..add(5448)
+    ..add(5449)
+    ..add(5450)
+    ..add(5451)
+    ..add(5452)
+    ..add(5453)
+    ..add(5454)
+    ..add(5455)
+    ..add(5456)
+    ..add(5457)
+    ..add(5458)
+    ..add(5459)
+    ..add(5460)
+    ..add(5461)
+    ..add(5462)
+    ..add(5463)
+    ..add(5464)
+    ..add(5465)
+    ..add(5466)
+    ..add(5467)
+    ..add(5468)
+    ..add(5469)
+    ..add(5470)
+    ..add(5471)
+    ..add(5472)
+    ..add(5473)
+    ..add(5474)
+    ..add(5475)
+    ..add(5476)
+    ..add(5477)
+    ..add(5478)
+    ..add(5479)
+    ..add(5480)
+    ..add(5481)
+    ..add(5482)
+    ..add(5483)
+    ..add(5484)
+    ..add(5485)
+    ..add(5486)
+    ..add(5487)
+    ..add(5488)
+    ..add(5489)
+    ..add(5490)
+    ..add(5491)
+    ..add(5492)
+    ..add(5493)
+    ..add(5494)
+    ..add(5495)
+    ..add(5496)
+    ..add(5497)
+    ..add(5498)
+    ..add(5499)
+    ..add(5500)
+    ..add(5501)
+    ..add(5502)
+    ..add(5503)
+    ..add(5504)
+    ..add(5505)
+    ..add(5506)
+    ..add(5507)
+    ..add(5508)
+    ..add(5509)
+    ..add(5510)
+    ..add(5511)
+    ..add(5512)
+    ..add(5513)
+    ..add(5514)
+    ..add(5515)
+    ..add(5516)
+    ..add(5517)
+    ..add(5518)
+    ..add(5519)
+    ..add(5520)
+    ..add(5521)
+    ..add(5522)
+    ..add(5523)
+    ..add(5524)
+    ..add(5525)
+    ..add(5526)
+    ..add(5527)
+    ..add(5528)
+    ..add(5529)
+    ..add(5530)
+    ..add(5531)
+    ..add(5532)
+    ..add(5533)
+    ..add(5534)
+    ..add(5535)
+    ..add(5536)
+    ..add(5537)
+    ..add(5538)
+    ..add(5539)
+    ..add(5540)
+    ..add(5541)
+    ..add(5542)
+    ..add(5543)
+    ..add(5544)
+    ..add(5545)
+    ..add(5546)
+    ..add(5547)
+    ..add(5548)
+    ..add(5549)
+    ..add(5550)
+    ..add(5551)
+    ..add(5552)
+    ..add(5553)
+    ..add(5554)
+    ..add(5555)
+    ..add(5556)
+    ..add(5557)
+    ..add(5558)
+    ..add(5559)
+    ..add(5560)
+    ..add(5561)
+    ..add(5562)
+    ..add(5563)
+    ..add(5564)
+    ..add(5565)
+    ..add(5566)
+    ..add(5567)
+    ..add(5568)
+    ..add(5569)
+    ..add(5570)
+    ..add(5571)
+    ..add(5572)
+    ..add(5573)
+    ..add(5574)
+    ..add(5575)
+    ..add(5576)
+    ..add(5577)
+    ..add(5578)
+    ..add(5579)
+    ..add(5580)
+    ..add(5581)
+    ..add(5582)
+    ..add(5583)
+    ..add(5584)
+    ..add(5585)
+    ..add(5586)
+    ..add(5587)
+    ..add(5588)
+    ..add(5589)
+    ..add(5590)
+    ..add(5591)
+    ..add(5592)
+    ..add(5593)
+    ..add(5594)
+    ..add(5595)
+    ..add(5596)
+    ..add(5597)
+    ..add(5598)
+    ..add(5599)
+    ..add(5600)
+    ..add(5601)
+    ..add(5602)
+    ..add(5603)
+    ..add(5604)
+    ..add(5605)
+    ..add(5606)
+    ..add(5607)
+    ..add(5608)
+    ..add(5609)
+    ..add(5610)
+    ..add(5611)
+    ..add(5612)
+    ..add(5613)
+    ..add(5614)
+    ..add(5615)
+    ..add(5616)
+    ..add(5617)
+    ..add(5618)
+    ..add(5619)
+    ..add(5620)
+    ..add(5621)
+    ..add(5622)
+    ..add(5623)
+    ..add(5624)
+    ..add(5625)
+    ..add(5626)
+    ..add(5627)
+    ..add(5628)
+    ..add(5629)
+    ..add(5630)
+    ..add(5631)
+    ..add(5632)
+    ..add(5633)
+    ..add(5634)
+    ..add(5635)
+    ..add(5636)
+    ..add(5637)
+    ..add(5638)
+    ..add(5639)
+    ..add(5640)
+    ..add(5641)
+    ..add(5642)
+    ..add(5643)
+    ..add(5644)
+    ..add(5645)
+    ..add(5646)
+    ..add(5647)
+    ..add(5648)
+    ..add(5649)
+    ..add(5650)
+    ..add(5651)
+    ..add(5652)
+    ..add(5653)
+    ..add(5654)
+    ..add(5655)
+    ..add(5656)
+    ..add(5657)
+    ..add(5658)
+    ..add(5659)
+    ..add(5660)
+    ..add(5661)
+    ..add(5662)
+    ..add(5663)
+    ..add(5664)
+    ..add(5665)
+    ..add(5666)
+    ..add(5667)
+    ..add(5668)
+    ..add(5669)
+    ..add(5670)
+    ..add(5671)
+    ..add(5672)
+    ..add(5673)
+    ..add(5674)
+    ..add(5675)
+    ..add(5676)
+    ..add(5677)
+    ..add(5678)
+    ..add(5679)
+    ..add(5680)
+    ..add(5681)
+    ..add(5682)
+    ..add(5683)
+    ..add(5684)
+    ..add(5685)
+    ..add(5686)
+    ..add(5687)
+    ..add(5688)
+    ..add(5689)
+    ..add(5690)
+    ..add(5691)
+    ..add(5692)
+    ..add(5693)
+    ..add(5694)
+    ..add(5695)
+    ..add(5696)
+    ..add(5697)
+    ..add(5698)
+    ..add(5699)
+    ..add(5700)
+    ..add(5701)
+    ..add(5702)
+    ..add(5703)
+    ..add(5704)
+    ..add(5705)
+    ..add(5706)
+    ..add(5707)
+    ..add(5708)
+    ..add(5709)
+    ..add(5710)
+    ..add(5711)
+    ..add(5712)
+    ..add(5713)
+    ..add(5714)
+    ..add(5715)
+    ..add(5716)
+    ..add(5717)
+    ..add(5718)
+    ..add(5719)
+    ..add(5720)
+    ..add(5721)
+    ..add(5722)
+    ..add(5723)
+    ..add(5724)
+    ..add(5725)
+    ..add(5726)
+    ..add(5727)
+    ..add(5728)
+    ..add(5729)
+    ..add(5730)
+    ..add(5731)
+    ..add(5732)
+    ..add(5733)
+    ..add(5734)
+    ..add(5735)
+    ..add(5736)
+    ..add(5737)
+    ..add(5738)
+    ..add(5739)
+    ..add(5740)
+    ..add(5741)
+    ..add(5742)
+    ..add(5743)
+    ..add(5744)
+    ..add(5745)
+    ..add(5746)
+    ..add(5747)
+    ..add(5748)
+    ..add(5749)
+    ..add(5750)
+    ..add(5751)
+    ..add(5752)
+    ..add(5753)
+    ..add(5754)
+    ..add(5755)
+    ..add(5756)
+    ..add(5757)
+    ..add(5758)
+    ..add(5759)
+    ..add(5760)
+    ..add(5761)
+    ..add(5762)
+    ..add(5763)
+    ..add(5764)
+    ..add(5765)
+    ..add(5766)
+    ..add(5767)
+    ..add(5768)
+    ..add(5769)
+    ..add(5770)
+    ..add(5771)
+    ..add(5772)
+    ..add(5773)
+    ..add(5774)
+    ..add(5775)
+    ..add(5776)
+    ..add(5777)
+    ..add(5778)
+    ..add(5779)
+    ..add(5780)
+    ..add(5781)
+    ..add(5782)
+    ..add(5783)
+    ..add(5784)
+    ..add(5785)
+    ..add(5786)
+    ..add(5787)
+    ..add(5788)
+    ..add(5789)
+    ..add(5790)
+    ..add(5791)
+    ..add(5792)
+    ..add(5793)
+    ..add(5794)
+    ..add(5795)
+    ..add(5796)
+    ..add(5797)
+    ..add(5798)
+    ..add(5799)
+    ..add(5800)
+    ..add(5801)
+    ..add(5802)
+    ..add(5803)
+    ..add(5804)
+    ..add(5805)
+    ..add(5806)
+    ..add(5807)
+    ..add(5808)
+    ..add(5809)
+    ..add(5810)
+    ..add(5811)
+    ..add(5812)
+    ..add(5813)
+    ..add(5814)
+    ..add(5815)
+    ..add(5816)
+    ..add(5817)
+    ..add(5818)
+    ..add(5819)
+    ..add(5820)
+    ..add(5821)
+    ..add(5822)
+    ..add(5823)
+    ..add(5824)
+    ..add(5825)
+    ..add(5826)
+    ..add(5827)
+    ..add(5828)
+    ..add(5829)
+    ..add(5830)
+    ..add(5831)
+    ..add(5832)
+    ..add(5833)
+    ..add(5834)
+    ..add(5835)
+    ..add(5836)
+    ..add(5837)
+    ..add(5838)
+    ..add(5839)
+    ..add(5840)
+    ..add(5841)
+    ..add(5842)
+    ..add(5843)
+    ..add(5844)
+    ..add(5845)
+    ..add(5846)
+    ..add(5847)
+    ..add(5848)
+    ..add(5849)
+    ..add(5850)
+    ..add(5851)
+    ..add(5852)
+    ..add(5853)
+    ..add(5854)
+    ..add(5855)
+    ..add(5856)
+    ..add(5857)
+    ..add(5858)
+    ..add(5859)
+    ..add(5860)
+    ..add(5861)
+    ..add(5862)
+    ..add(5863)
+    ..add(5864)
+    ..add(5865)
+    ..add(5866)
+    ..add(5867)
+    ..add(5868)
+    ..add(5869)
+    ..add(5870)
+    ..add(5871)
+    ..add(5872)
+    ..add(5873)
+    ..add(5874)
+    ..add(5875)
+    ..add(5876)
+    ..add(5877)
+    ..add(5878)
+    ..add(5879)
+    ..add(5880)
+    ..add(5881)
+    ..add(5882)
+    ..add(5883)
+    ..add(5884)
+    ..add(5885)
+    ..add(5886)
+    ..add(5887)
+    ..add(5888)
+    ..add(5889)
+    ..add(5890)
+    ..add(5891)
+    ..add(5892)
+    ..add(5893)
+    ..add(5894)
+    ..add(5895)
+    ..add(5896)
+    ..add(5897)
+    ..add(5898)
+    ..add(5899)
+    ..add(5900)
+    ..add(5901)
+    ..add(5902)
+    ..add(5903)
+    ..add(5904)
+    ..add(5905)
+    ..add(5906)
+    ..add(5907)
+    ..add(5908)
+    ..add(5909)
+    ..add(5910)
+    ..add(5911)
+    ..add(5912)
+    ..add(5913)
+    ..add(5914)
+    ..add(5915)
+    ..add(5916)
+    ..add(5917)
+    ..add(5918)
+    ..add(5919)
+    ..add(5920)
+    ..add(5921)
+    ..add(5922)
+    ..add(5923)
+    ..add(5924)
+    ..add(5925)
+    ..add(5926)
+    ..add(5927)
+    ..add(5928)
+    ..add(5929)
+    ..add(5930)
+    ..add(5931)
+    ..add(5932)
+    ..add(5933)
+    ..add(5934)
+    ..add(5935)
+    ..add(5936)
+    ..add(5937)
+    ..add(5938)
+    ..add(5939)
+    ..add(5940)
+    ..add(5941)
+    ..add(5942)
+    ..add(5943)
+    ..add(5944)
+    ..add(5945)
+    ..add(5946)
+    ..add(5947)
+    ..add(5948)
+    ..add(5949)
+    ..add(5950)
+    ..add(5951)
+    ..add(5952)
+    ..add(5953)
+    ..add(5954)
+    ..add(5955)
+    ..add(5956)
+    ..add(5957)
+    ..add(5958)
+    ..add(5959)
+    ..add(5960)
+    ..add(5961)
+    ..add(5962)
+    ..add(5963)
+    ..add(5964)
+    ..add(5965)
+    ..add(5966)
+    ..add(5967)
+    ..add(5968)
+    ..add(5969)
+    ..add(5970)
+    ..add(5971)
+    ..add(5972)
+    ..add(5973)
+    ..add(5974)
+    ..add(5975)
+    ..add(5976)
+    ..add(5977)
+    ..add(5978)
+    ..add(5979)
+    ..add(5980)
+    ..add(5981)
+    ..add(5982)
+    ..add(5983)
+    ..add(5984)
+    ..add(5985)
+    ..add(5986)
+    ..add(5987)
+    ..add(5988)
+    ..add(5989)
+    ..add(5990)
+    ..add(5991)
+    ..add(5992)
+    ..add(5993)
+    ..add(5994)
+    ..add(5995)
+    ..add(5996)
+    ..add(5997)
+    ..add(5998)
+    ..add(5999)
+    ..add(6000)
+    ..add(6001)
+    ..add(6002)
+    ..add(6003)
+    ..add(6004)
+    ..add(6005)
+    ..add(6006)
+    ..add(6007)
+    ..add(6008)
+    ..add(6009)
+    ..add(6010)
+    ..add(6011)
+    ..add(6012)
+    ..add(6013)
+    ..add(6014)
+    ..add(6015)
+    ..add(6016)
+    ..add(6017)
+    ..add(6018)
+    ..add(6019)
+    ..add(6020)
+    ..add(6021)
+    ..add(6022)
+    ..add(6023)
+    ..add(6024)
+    ..add(6025)
+    ..add(6026)
+    ..add(6027)
+    ..add(6028)
+    ..add(6029)
+    ..add(6030)
+    ..add(6031)
+    ..add(6032)
+    ..add(6033)
+    ..add(6034)
+    ..add(6035)
+    ..add(6036)
+    ..add(6037)
+    ..add(6038)
+    ..add(6039)
+    ..add(6040)
+    ..add(6041)
+    ..add(6042)
+    ..add(6043)
+    ..add(6044)
+    ..add(6045)
+    ..add(6046)
+    ..add(6047)
+    ..add(6048)
+    ..add(6049)
+    ..add(6050)
+    ..add(6051)
+    ..add(6052)
+    ..add(6053)
+    ..add(6054)
+    ..add(6055)
+    ..add(6056)
+    ..add(6057)
+    ..add(6058)
+    ..add(6059)
+    ..add(6060)
+    ..add(6061)
+    ..add(6062)
+    ..add(6063)
+    ..add(6064)
+    ..add(6065)
+    ..add(6066)
+    ..add(6067)
+    ..add(6068)
+    ..add(6069)
+    ..add(6070)
+    ..add(6071)
+    ..add(6072)
+    ..add(6073)
+    ..add(6074)
+    ..add(6075)
+    ..add(6076)
+    ..add(6077)
+    ..add(6078)
+    ..add(6079)
+    ..add(6080)
+    ..add(6081)
+    ..add(6082)
+    ..add(6083)
+    ..add(6084)
+    ..add(6085)
+    ..add(6086)
+    ..add(6087)
+    ..add(6088)
+    ..add(6089)
+    ..add(6090)
+    ..add(6091)
+    ..add(6092)
+    ..add(6093)
+    ..add(6094)
+    ..add(6095)
+    ..add(6096)
+    ..add(6097)
+    ..add(6098)
+    ..add(6099)
+    ..add(6100)
+    ..add(6101)
+    ..add(6102)
+    ..add(6103)
+    ..add(6104)
+    ..add(6105)
+    ..add(6106)
+    ..add(6107)
+    ..add(6108)
+    ..add(6109)
+    ..add(6110)
+    ..add(6111)
+    ..add(6112)
+    ..add(6113)
+    ..add(6114)
+    ..add(6115)
+    ..add(6116)
+    ..add(6117)
+    ..add(6118)
+    ..add(6119)
+    ..add(6120)
+    ..add(6121)
+    ..add(6122)
+    ..add(6123)
+    ..add(6124)
+    ..add(6125)
+    ..add(6126)
+    ..add(6127)
+    ..add(6128)
+    ..add(6129)
+    ..add(6130)
+    ..add(6131)
+    ..add(6132)
+    ..add(6133)
+    ..add(6134)
+    ..add(6135)
+    ..add(6136)
+    ..add(6137)
+    ..add(6138)
+    ..add(6139)
+    ..add(6140)
+    ..add(6141)
+    ..add(6142)
+    ..add(6143)
+    ..add(6144)
+    ..add(6145)
+    ..add(6146)
+    ..add(6147)
+    ..add(6148)
+    ..add(6149)
+    ..add(6150)
+    ..add(6151)
+    ..add(6152)
+    ..add(6153)
+    ..add(6154)
+    ..add(6155)
+    ..add(6156)
+    ..add(6157)
+    ..add(6158)
+    ..add(6159)
+    ..add(6160)
+    ..add(6161)
+    ..add(6162)
+    ..add(6163)
+    ..add(6164)
+    ..add(6165)
+    ..add(6166)
+    ..add(6167)
+    ..add(6168)
+    ..add(6169)
+    ..add(6170)
+    ..add(6171)
+    ..add(6172)
+    ..add(6173)
+    ..add(6174)
+    ..add(6175)
+    ..add(6176)
+    ..add(6177)
+    ..add(6178)
+    ..add(6179)
+    ..add(6180)
+    ..add(6181)
+    ..add(6182)
+    ..add(6183)
+    ..add(6184)
+    ..add(6185)
+    ..add(6186)
+    ..add(6187)
+    ..add(6188)
+    ..add(6189)
+    ..add(6190)
+    ..add(6191)
+    ..add(6192)
+    ..add(6193)
+    ..add(6194)
+    ..add(6195)
+    ..add(6196)
+    ..add(6197)
+    ..add(6198)
+    ..add(6199)
+    ..add(6200)
+    ..add(6201)
+    ..add(6202)
+    ..add(6203)
+    ..add(6204)
+    ..add(6205)
+    ..add(6206)
+    ..add(6207)
+    ..add(6208)
+    ..add(6209)
+    ..add(6210)
+    ..add(6211)
+    ..add(6212)
+    ..add(6213)
+    ..add(6214)
+    ..add(6215)
+    ..add(6216)
+    ..add(6217)
+    ..add(6218)
+    ..add(6219)
+    ..add(6220)
+    ..add(6221)
+    ..add(6222)
+    ..add(6223)
+    ..add(6224)
+    ..add(6225)
+    ..add(6226)
+    ..add(6227)
+    ..add(6228)
+    ..add(6229)
+    ..add(6230)
+    ..add(6231)
+    ..add(6232)
+    ..add(6233)
+    ..add(6234)
+    ..add(6235)
+    ..add(6236)
+    ..add(6237)
+    ..add(6238)
+    ..add(6239)
+    ..add(6240)
+    ..add(6241)
+    ..add(6242)
+    ..add(6243)
+    ..add(6244)
+    ..add(6245)
+    ..add(6246)
+    ..add(6247)
+    ..add(6248)
+    ..add(6249)
+    ..add(6250)
+    ..add(6251)
+    ..add(6252)
+    ..add(6253)
+    ..add(6254)
+    ..add(6255)
+    ..add(6256)
+    ..add(6257)
+    ..add(6258)
+    ..add(6259)
+    ..add(6260)
+    ..add(6261)
+    ..add(6262)
+    ..add(6263)
+    ..add(6264)
+    ..add(6265)
+    ..add(6266)
+    ..add(6267)
+    ..add(6268)
+    ..add(6269)
+    ..add(6270)
+    ..add(6271)
+    ..add(6272)
+    ..add(6273)
+    ..add(6274)
+    ..add(6275)
+    ..add(6276)
+    ..add(6277)
+    ..add(6278)
+    ..add(6279)
+    ..add(6280)
+    ..add(6281)
+    ..add(6282)
+    ..add(6283)
+    ..add(6284)
+    ..add(6285)
+    ..add(6286)
+    ..add(6287)
+    ..add(6288)
+    ..add(6289)
+    ..add(6290)
+    ..add(6291)
+    ..add(6292)
+    ..add(6293)
+    ..add(6294)
+    ..add(6295)
+    ..add(6296)
+    ..add(6297)
+    ..add(6298)
+    ..add(6299)
+    ..add(6300)
+    ..add(6301)
+    ..add(6302)
+    ..add(6303)
+    ..add(6304)
+    ..add(6305)
+    ..add(6306)
+    ..add(6307)
+    ..add(6308)
+    ..add(6309)
+    ..add(6310)
+    ..add(6311)
+    ..add(6312)
+    ..add(6313)
+    ..add(6314)
+    ..add(6315)
+    ..add(6316)
+    ..add(6317)
+    ..add(6318)
+    ..add(6319)
+    ..add(6320)
+    ..add(6321)
+    ..add(6322)
+    ..add(6323)
+    ..add(6324)
+    ..add(6325)
+    ..add(6326)
+    ..add(6327)
+    ..add(6328)
+    ..add(6329)
+    ..add(6330)
+    ..add(6331)
+    ..add(6332)
+    ..add(6333)
+    ..add(6334)
+    ..add(6335)
+    ..add(6336)
+    ..add(6337)
+    ..add(6338)
+    ..add(6339)
+    ..add(6340)
+    ..add(6341)
+    ..add(6342)
+    ..add(6343)
+    ..add(6344)
+    ..add(6345)
+    ..add(6346)
+    ..add(6347)
+    ..add(6348)
+    ..add(6349)
+    ..add(6350)
+    ..add(6351)
+    ..add(6352)
+    ..add(6353)
+    ..add(6354)
+    ..add(6355)
+    ..add(6356)
+    ..add(6357)
+    ..add(6358)
+    ..add(6359)
+    ..add(6360)
+    ..add(6361)
+    ..add(6362)
+    ..add(6363)
+    ..add(6364)
+    ..add(6365)
+    ..add(6366)
+    ..add(6367)
+    ..add(6368)
+    ..add(6369)
+    ..add(6370)
+    ..add(6371)
+    ..add(6372)
+    ..add(6373)
+    ..add(6374)
+    ..add(6375)
+    ..add(6376)
+    ..add(6377)
+    ..add(6378)
+    ..add(6379)
+    ..add(6380)
+    ..add(6381)
+    ..add(6382)
+    ..add(6383)
+    ..add(6384)
+    ..add(6385)
+    ..add(6386)
+    ..add(6387)
+    ..add(6388)
+    ..add(6389)
+    ..add(6390)
+    ..add(6391)
+    ..add(6392)
+    ..add(6393)
+    ..add(6394)
+    ..add(6395)
+    ..add(6396)
+    ..add(6397)
+    ..add(6398)
+    ..add(6399)
+    ..add(6400)
+    ..add(6401)
+    ..add(6402)
+    ..add(6403)
+    ..add(6404)
+    ..add(6405)
+    ..add(6406)
+    ..add(6407)
+    ..add(6408)
+    ..add(6409)
+    ..add(6410)
+    ..add(6411)
+    ..add(6412)
+    ..add(6413)
+    ..add(6414)
+    ..add(6415)
+    ..add(6416)
+    ..add(6417)
+    ..add(6418)
+    ..add(6419)
+    ..add(6420)
+    ..add(6421)
+    ..add(6422)
+    ..add(6423)
+    ..add(6424)
+    ..add(6425)
+    ..add(6426)
+    ..add(6427)
+    ..add(6428)
+    ..add(6429)
+    ..add(6430)
+    ..add(6431)
+    ..add(6432)
+    ..add(6433)
+    ..add(6434)
+    ..add(6435)
+    ..add(6436)
+    ..add(6437)
+    ..add(6438)
+    ..add(6439)
+    ..add(6440)
+    ..add(6441)
+    ..add(6442)
+    ..add(6443)
+    ..add(6444)
+    ..add(6445)
+    ..add(6446)
+    ..add(6447)
+    ..add(6448)
+    ..add(6449)
+    ..add(6450)
+    ..add(6451)
+    ..add(6452)
+    ..add(6453)
+    ..add(6454)
+    ..add(6455)
+    ..add(6456)
+    ..add(6457)
+    ..add(6458)
+    ..add(6459)
+    ..add(6460)
+    ..add(6461)
+    ..add(6462)
+    ..add(6463)
+    ..add(6464)
+    ..add(6465)
+    ..add(6466)
+    ..add(6467)
+    ..add(6468)
+    ..add(6469)
+    ..add(6470)
+    ..add(6471)
+    ..add(6472)
+    ..add(6473)
+    ..add(6474)
+    ..add(6475)
+    ..add(6476)
+    ..add(6477)
+    ..add(6478)
+    ..add(6479)
+    ..add(6480)
+    ..add(6481)
+    ..add(6482)
+    ..add(6483)
+    ..add(6484)
+    ..add(6485)
+    ..add(6486)
+    ..add(6487)
+    ..add(6488)
+    ..add(6489)
+    ..add(6490)
+    ..add(6491)
+    ..add(6492)
+    ..add(6493)
+    ..add(6494)
+    ..add(6495)
+    ..add(6496)
+    ..add(6497)
+    ..add(6498)
+    ..add(6499)
+    ..add(6500)
+    ..add(6501)
+    ..add(6502)
+    ..add(6503)
+    ..add(6504)
+    ..add(6505)
+    ..add(6506)
+    ..add(6507)
+    ..add(6508)
+    ..add(6509)
+    ..add(6510)
+    ..add(6511)
+    ..add(6512)
+    ..add(6513)
+    ..add(6514)
+    ..add(6515)
+    ..add(6516)
+    ..add(6517)
+    ..add(6518)
+    ..add(6519)
+    ..add(6520)
+    ..add(6521)
+    ..add(6522)
+    ..add(6523)
+    ..add(6524)
+    ..add(6525)
+    ..add(6526)
+    ..add(6527)
+    ..add(6528)
+    ..add(6529)
+    ..add(6530)
+    ..add(6531)
+    ..add(6532)
+    ..add(6533)
+    ..add(6534)
+    ..add(6535)
+    ..add(6536)
+    ..add(6537)
+    ..add(6538)
+    ..add(6539)
+    ..add(6540)
+    ..add(6541)
+    ..add(6542)
+    ..add(6543)
+    ..add(6544)
+    ..add(6545)
+    ..add(6546)
+    ..add(6547)
+    ..add(6548)
+    ..add(6549)
+    ..add(6550)
+    ..add(6551)
+    ..add(6552)
+    ..add(6553)
+    ..add(6554)
+    ..add(6555)
+    ..add(6556)
+    ..add(6557)
+    ..add(6558)
+    ..add(6559)
+    ..add(6560)
+    ..add(6561)
+    ..add(6562)
+    ..add(6563)
+    ..add(6564)
+    ..add(6565)
+    ..add(6566)
+    ..add(6567)
+    ..add(6568)
+    ..add(6569)
+    ..add(6570)
+    ..add(6571)
+    ..add(6572)
+    ..add(6573)
+    ..add(6574)
+    ..add(6575)
+    ..add(6576)
+    ..add(6577)
+    ..add(6578)
+    ..add(6579)
+    ..add(6580)
+    ..add(6581)
+    ..add(6582)
+    ..add(6583)
+    ..add(6584)
+    ..add(6585)
+    ..add(6586)
+    ..add(6587)
+    ..add(6588)
+    ..add(6589)
+    ..add(6590)
+    ..add(6591)
+    ..add(6592)
+    ..add(6593)
+    ..add(6594)
+    ..add(6595)
+    ..add(6596)
+    ..add(6597)
+    ..add(6598)
+    ..add(6599)
+    ..add(6600)
+    ..add(6601)
+    ..add(6602)
+    ..add(6603)
+    ..add(6604)
+    ..add(6605)
+    ..add(6606)
+    ..add(6607)
+    ..add(6608)
+    ..add(6609)
+    ..add(6610)
+    ..add(6611)
+    ..add(6612)
+    ..add(6613)
+    ..add(6614)
+    ..add(6615)
+    ..add(6616)
+    ..add(6617)
+    ..add(6618)
+    ..add(6619)
+    ..add(6620)
+    ..add(6621)
+    ..add(6622)
+    ..add(6623)
+    ..add(6624)
+    ..add(6625)
+    ..add(6626)
+    ..add(6627)
+    ..add(6628)
+    ..add(6629)
+    ..add(6630)
+    ..add(6631)
+    ..add(6632)
+    ..add(6633)
+    ..add(6634)
+    ..add(6635)
+    ..add(6636)
+    ..add(6637)
+    ..add(6638)
+    ..add(6639)
+    ..add(6640)
+    ..add(6641)
+    ..add(6642)
+    ..add(6643)
+    ..add(6644)
+    ..add(6645)
+    ..add(6646)
+    ..add(6647)
+    ..add(6648)
+    ..add(6649)
+    ..add(6650)
+    ..add(6651)
+    ..add(6652)
+    ..add(6653)
+    ..add(6654)
+    ..add(6655)
+    ..add(6656)
+    ..add(6657)
+    ..add(6658)
+    ..add(6659)
+    ..add(6660)
+    ..add(6661)
+    ..add(6662)
+    ..add(6663)
+    ..add(6664)
+    ..add(6665)
+    ..add(6666)
+    ..add(6667)
+    ..add(6668)
+    ..add(6669)
+    ..add(6670)
+    ..add(6671)
+    ..add(6672)
+    ..add(6673)
+    ..add(6674)
+    ..add(6675)
+    ..add(6676)
+    ..add(6677)
+    ..add(6678)
+    ..add(6679)
+    ..add(6680)
+    ..add(6681)
+    ..add(6682)
+    ..add(6683)
+    ..add(6684)
+    ..add(6685)
+    ..add(6686)
+    ..add(6687)
+    ..add(6688)
+    ..add(6689)
+    ..add(6690)
+    ..add(6691)
+    ..add(6692)
+    ..add(6693)
+    ..add(6694)
+    ..add(6695)
+    ..add(6696)
+    ..add(6697)
+    ..add(6698)
+    ..add(6699)
+    ..add(6700)
+    ..add(6701)
+    ..add(6702)
+    ..add(6703)
+    ..add(6704)
+    ..add(6705)
+    ..add(6706)
+    ..add(6707)
+    ..add(6708)
+    ..add(6709)
+    ..add(6710)
+    ..add(6711)
+    ..add(6712)
+    ..add(6713)
+    ..add(6714)
+    ..add(6715)
+    ..add(6716)
+    ..add(6717)
+    ..add(6718)
+    ..add(6719)
+    ..add(6720)
+    ..add(6721)
+    ..add(6722)
+    ..add(6723)
+    ..add(6724)
+    ..add(6725)
+    ..add(6726)
+    ..add(6727)
+    ..add(6728)
+    ..add(6729)
+    ..add(6730)
+    ..add(6731)
+    ..add(6732)
+    ..add(6733)
+    ..add(6734)
+    ..add(6735)
+    ..add(6736)
+    ..add(6737)
+    ..add(6738)
+    ..add(6739)
+    ..add(6740)
+    ..add(6741)
+    ..add(6742)
+    ..add(6743)
+    ..add(6744)
+    ..add(6745)
+    ..add(6746)
+    ..add(6747)
+    ..add(6748)
+    ..add(6749)
+    ..add(6750)
+    ..add(6751)
+    ..add(6752)
+    ..add(6753)
+    ..add(6754)
+    ..add(6755)
+    ..add(6756)
+    ..add(6757)
+    ..add(6758)
+    ..add(6759)
+    ..add(6760)
+    ..add(6761)
+    ..add(6762)
+    ..add(6763)
+    ..add(6764)
+    ..add(6765)
+    ..add(6766)
+    ..add(6767)
+    ..add(6768)
+    ..add(6769)
+    ..add(6770)
+    ..add(6771)
+    ..add(6772)
+    ..add(6773)
+    ..add(6774)
+    ..add(6775)
+    ..add(6776)
+    ..add(6777)
+    ..add(6778)
+    ..add(6779)
+    ..add(6780)
+    ..add(6781)
+    ..add(6782)
+    ..add(6783)
+    ..add(6784)
+    ..add(6785)
+    ..add(6786)
+    ..add(6787)
+    ..add(6788)
+    ..add(6789)
+    ..add(6790)
+    ..add(6791)
+    ..add(6792)
+    ..add(6793)
+    ..add(6794)
+    ..add(6795)
+    ..add(6796)
+    ..add(6797)
+    ..add(6798)
+    ..add(6799)
+    ..add(6800)
+    ..add(6801)
+    ..add(6802)
+    ..add(6803)
+    ..add(6804)
+    ..add(6805)
+    ..add(6806)
+    ..add(6807)
+    ..add(6808)
+    ..add(6809)
+    ..add(6810)
+    ..add(6811)
+    ..add(6812)
+    ..add(6813)
+    ..add(6814)
+    ..add(6815)
+    ..add(6816)
+    ..add(6817)
+    ..add(6818)
+    ..add(6819)
+    ..add(6820)
+    ..add(6821)
+    ..add(6822)
+    ..add(6823)
+    ..add(6824)
+    ..add(6825)
+    ..add(6826)
+    ..add(6827)
+    ..add(6828)
+    ..add(6829)
+    ..add(6830)
+    ..add(6831)
+    ..add(6832)
+    ..add(6833)
+    ..add(6834)
+    ..add(6835)
+    ..add(6836)
+    ..add(6837)
+    ..add(6838)
+    ..add(6839)
+    ..add(6840)
+    ..add(6841)
+    ..add(6842)
+    ..add(6843)
+    ..add(6844)
+    ..add(6845)
+    ..add(6846)
+    ..add(6847)
+    ..add(6848)
+    ..add(6849)
+    ..add(6850)
+    ..add(6851)
+    ..add(6852)
+    ..add(6853)
+    ..add(6854)
+    ..add(6855)
+    ..add(6856)
+    ..add(6857)
+    ..add(6858)
+    ..add(6859)
+    ..add(6860)
+    ..add(6861)
+    ..add(6862)
+    ..add(6863)
+    ..add(6864)
+    ..add(6865)
+    ..add(6866)
+    ..add(6867)
+    ..add(6868)
+    ..add(6869)
+    ..add(6870)
+    ..add(6871)
+    ..add(6872)
+    ..add(6873)
+    ..add(6874)
+    ..add(6875)
+    ..add(6876)
+    ..add(6877)
+    ..add(6878)
+    ..add(6879)
+    ..add(6880)
+    ..add(6881)
+    ..add(6882)
+    ..add(6883)
+    ..add(6884)
+    ..add(6885)
+    ..add(6886)
+    ..add(6887)
+    ..add(6888)
+    ..add(6889)
+    ..add(6890)
+    ..add(6891)
+    ..add(6892)
+    ..add(6893)
+    ..add(6894)
+    ..add(6895)
+    ..add(6896)
+    ..add(6897)
+    ..add(6898)
+    ..add(6899)
+    ..add(6900)
+    ..add(6901)
+    ..add(6902)
+    ..add(6903)
+    ..add(6904)
+    ..add(6905)
+    ..add(6906)
+    ..add(6907)
+    ..add(6908)
+    ..add(6909)
+    ..add(6910)
+    ..add(6911)
+    ..add(6912)
+    ..add(6913)
+    ..add(6914)
+    ..add(6915)
+    ..add(6916)
+    ..add(6917)
+    ..add(6918)
+    ..add(6919)
+    ..add(6920)
+    ..add(6921)
+    ..add(6922)
+    ..add(6923)
+    ..add(6924)
+    ..add(6925)
+    ..add(6926)
+    ..add(6927)
+    ..add(6928)
+    ..add(6929)
+    ..add(6930)
+    ..add(6931)
+    ..add(6932)
+    ..add(6933)
+    ..add(6934)
+    ..add(6935)
+    ..add(6936)
+    ..add(6937)
+    ..add(6938)
+    ..add(6939)
+    ..add(6940)
+    ..add(6941)
+    ..add(6942)
+    ..add(6943)
+    ..add(6944)
+    ..add(6945)
+    ..add(6946)
+    ..add(6947)
+    ..add(6948)
+    ..add(6949)
+    ..add(6950)
+    ..add(6951)
+    ..add(6952)
+    ..add(6953)
+    ..add(6954)
+    ..add(6955)
+    ..add(6956)
+    ..add(6957)
+    ..add(6958)
+    ..add(6959)
+    ..add(6960)
+    ..add(6961)
+    ..add(6962)
+    ..add(6963)
+    ..add(6964)
+    ..add(6965)
+    ..add(6966)
+    ..add(6967)
+    ..add(6968)
+    ..add(6969)
+    ..add(6970)
+    ..add(6971)
+    ..add(6972)
+    ..add(6973)
+    ..add(6974)
+    ..add(6975)
+    ..add(6976)
+    ..add(6977)
+    ..add(6978)
+    ..add(6979)
+    ..add(6980)
+    ..add(6981)
+    ..add(6982)
+    ..add(6983)
+    ..add(6984)
+    ..add(6985)
+    ..add(6986)
+    ..add(6987)
+    ..add(6988)
+    ..add(6989)
+    ..add(6990)
+    ..add(6991)
+    ..add(6992)
+    ..add(6993)
+    ..add(6994)
+    ..add(6995)
+    ..add(6996)
+    ..add(6997)
+    ..add(6998)
+    ..add(6999)
+    ..add(7000)
+    ..add(7001)
+    ..add(7002)
+    ..add(7003)
+    ..add(7004)
+    ..add(7005)
+    ..add(7006)
+    ..add(7007)
+    ..add(7008)
+    ..add(7009)
+    ..add(7010)
+    ..add(7011)
+    ..add(7012)
+    ..add(7013)
+    ..add(7014)
+    ..add(7015)
+    ..add(7016)
+    ..add(7017)
+    ..add(7018)
+    ..add(7019)
+    ..add(7020)
+    ..add(7021)
+    ..add(7022)
+    ..add(7023)
+    ..add(7024)
+    ..add(7025)
+    ..add(7026)
+    ..add(7027)
+    ..add(7028)
+    ..add(7029)
+    ..add(7030)
+    ..add(7031)
+    ..add(7032)
+    ..add(7033)
+    ..add(7034)
+    ..add(7035)
+    ..add(7036)
+    ..add(7037)
+    ..add(7038)
+    ..add(7039)
+    ..add(7040)
+    ..add(7041)
+    ..add(7042)
+    ..add(7043)
+    ..add(7044)
+    ..add(7045)
+    ..add(7046)
+    ..add(7047)
+    ..add(7048)
+    ..add(7049)
+    ..add(7050)
+    ..add(7051)
+    ..add(7052)
+    ..add(7053)
+    ..add(7054)
+    ..add(7055)
+    ..add(7056)
+    ..add(7057)
+    ..add(7058)
+    ..add(7059)
+    ..add(7060)
+    ..add(7061)
+    ..add(7062)
+    ..add(7063)
+    ..add(7064)
+    ..add(7065)
+    ..add(7066)
+    ..add(7067)
+    ..add(7068)
+    ..add(7069)
+    ..add(7070)
+    ..add(7071)
+    ..add(7072)
+    ..add(7073)
+    ..add(7074)
+    ..add(7075)
+    ..add(7076)
+    ..add(7077)
+    ..add(7078)
+    ..add(7079)
+    ..add(7080)
+    ..add(7081)
+    ..add(7082)
+    ..add(7083)
+    ..add(7084)
+    ..add(7085)
+    ..add(7086)
+    ..add(7087)
+    ..add(7088)
+    ..add(7089)
+    ..add(7090)
+    ..add(7091)
+    ..add(7092)
+    ..add(7093)
+    ..add(7094)
+    ..add(7095)
+    ..add(7096)
+    ..add(7097)
+    ..add(7098)
+    ..add(7099)
+    ..add(7100)
+    ..add(7101)
+    ..add(7102)
+    ..add(7103)
+    ..add(7104)
+    ..add(7105)
+    ..add(7106)
+    ..add(7107)
+    ..add(7108)
+    ..add(7109)
+    ..add(7110)
+    ..add(7111)
+    ..add(7112)
+    ..add(7113)
+    ..add(7114)
+    ..add(7115)
+    ..add(7116)
+    ..add(7117)
+    ..add(7118)
+    ..add(7119)
+    ..add(7120)
+    ..add(7121)
+    ..add(7122)
+    ..add(7123)
+    ..add(7124)
+    ..add(7125)
+    ..add(7126)
+    ..add(7127)
+    ..add(7128)
+    ..add(7129)
+    ..add(7130)
+    ..add(7131)
+    ..add(7132)
+    ..add(7133)
+    ..add(7134)
+    ..add(7135)
+    ..add(7136)
+    ..add(7137)
+    ..add(7138)
+    ..add(7139)
+    ..add(7140)
+    ..add(7141)
+    ..add(7142)
+    ..add(7143)
+    ..add(7144)
+    ..add(7145)
+    ..add(7146)
+    ..add(7147)
+    ..add(7148)
+    ..add(7149)
+    ..add(7150)
+    ..add(7151)
+    ..add(7152)
+    ..add(7153)
+    ..add(7154)
+    ..add(7155)
+    ..add(7156)
+    ..add(7157)
+    ..add(7158)
+    ..add(7159)
+    ..add(7160)
+    ..add(7161)
+    ..add(7162)
+    ..add(7163)
+    ..add(7164)
+    ..add(7165)
+    ..add(7166)
+    ..add(7167)
+    ..add(7168)
+    ..add(7169)
+    ..add(7170)
+    ..add(7171)
+    ..add(7172)
+    ..add(7173)
+    ..add(7174)
+    ..add(7175)
+    ..add(7176)
+    ..add(7177)
+    ..add(7178)
+    ..add(7179)
+    ..add(7180)
+    ..add(7181)
+    ..add(7182)
+    ..add(7183)
+    ..add(7184)
+    ..add(7185)
+    ..add(7186)
+    ..add(7187)
+    ..add(7188)
+    ..add(7189)
+    ..add(7190)
+    ..add(7191)
+    ..add(7192)
+    ..add(7193)
+    ..add(7194)
+    ..add(7195)
+    ..add(7196)
+    ..add(7197)
+    ..add(7198)
+    ..add(7199)
+    ..add(7200)
+    ..add(7201)
+    ..add(7202)
+    ..add(7203)
+    ..add(7204)
+    ..add(7205)
+    ..add(7206)
+    ..add(7207)
+    ..add(7208)
+    ..add(7209)
+    ..add(7210)
+    ..add(7211)
+    ..add(7212)
+    ..add(7213)
+    ..add(7214)
+    ..add(7215)
+    ..add(7216)
+    ..add(7217)
+    ..add(7218)
+    ..add(7219)
+    ..add(7220)
+    ..add(7221)
+    ..add(7222)
+    ..add(7223)
+    ..add(7224)
+    ..add(7225)
+    ..add(7226)
+    ..add(7227)
+    ..add(7228)
+    ..add(7229)
+    ..add(7230)
+    ..add(7231)
+    ..add(7232)
+    ..add(7233)
+    ..add(7234)
+    ..add(7235)
+    ..add(7236)
+    ..add(7237)
+    ..add(7238)
+    ..add(7239)
+    ..add(7240)
+    ..add(7241)
+    ..add(7242)
+    ..add(7243)
+    ..add(7244)
+    ..add(7245)
+    ..add(7246)
+    ..add(7247)
+    ..add(7248)
+    ..add(7249)
+    ..add(7250)
+    ..add(7251)
+    ..add(7252)
+    ..add(7253)
+    ..add(7254)
+    ..add(7255)
+    ..add(7256)
+    ..add(7257)
+    ..add(7258)
+    ..add(7259)
+    ..add(7260)
+    ..add(7261)
+    ..add(7262)
+    ..add(7263)
+    ..add(7264)
+    ..add(7265)
+    ..add(7266)
+    ..add(7267)
+    ..add(7268)
+    ..add(7269)
+    ..add(7270)
+    ..add(7271)
+    ..add(7272)
+    ..add(7273)
+    ..add(7274)
+    ..add(7275)
+    ..add(7276)
+    ..add(7277)
+    ..add(7278)
+    ..add(7279)
+    ..add(7280)
+    ..add(7281)
+    ..add(7282)
+    ..add(7283)
+    ..add(7284)
+    ..add(7285)
+    ..add(7286)
+    ..add(7287)
+    ..add(7288)
+    ..add(7289)
+    ..add(7290)
+    ..add(7291)
+    ..add(7292)
+    ..add(7293)
+    ..add(7294)
+    ..add(7295)
+    ..add(7296)
+    ..add(7297)
+    ..add(7298)
+    ..add(7299)
+    ..add(7300)
+    ..add(7301)
+    ..add(7302)
+    ..add(7303)
+    ..add(7304)
+    ..add(7305)
+    ..add(7306)
+    ..add(7307)
+    ..add(7308)
+    ..add(7309)
+    ..add(7310)
+    ..add(7311)
+    ..add(7312)
+    ..add(7313)
+    ..add(7314)
+    ..add(7315)
+    ..add(7316)
+    ..add(7317)
+    ..add(7318)
+    ..add(7319)
+    ..add(7320)
+    ..add(7321)
+    ..add(7322)
+    ..add(7323)
+    ..add(7324)
+    ..add(7325)
+    ..add(7326)
+    ..add(7327)
+    ..add(7328)
+    ..add(7329)
+    ..add(7330)
+    ..add(7331)
+    ..add(7332)
+    ..add(7333)
+    ..add(7334)
+    ..add(7335)
+    ..add(7336)
+    ..add(7337)
+    ..add(7338)
+    ..add(7339)
+    ..add(7340)
+    ..add(7341)
+    ..add(7342)
+    ..add(7343)
+    ..add(7344)
+    ..add(7345)
+    ..add(7346)
+    ..add(7347)
+    ..add(7348)
+    ..add(7349)
+    ..add(7350)
+    ..add(7351)
+    ..add(7352)
+    ..add(7353)
+    ..add(7354)
+    ..add(7355)
+    ..add(7356)
+    ..add(7357)
+    ..add(7358)
+    ..add(7359)
+    ..add(7360)
+    ..add(7361)
+    ..add(7362)
+    ..add(7363)
+    ..add(7364)
+    ..add(7365)
+    ..add(7366)
+    ..add(7367)
+    ..add(7368)
+    ..add(7369)
+    ..add(7370)
+    ..add(7371)
+    ..add(7372)
+    ..add(7373)
+    ..add(7374)
+    ..add(7375)
+    ..add(7376)
+    ..add(7377)
+    ..add(7378)
+    ..add(7379)
+    ..add(7380)
+    ..add(7381)
+    ..add(7382)
+    ..add(7383)
+    ..add(7384)
+    ..add(7385)
+    ..add(7386)
+    ..add(7387)
+    ..add(7388)
+    ..add(7389)
+    ..add(7390)
+    ..add(7391)
+    ..add(7392)
+    ..add(7393)
+    ..add(7394)
+    ..add(7395)
+    ..add(7396)
+    ..add(7397)
+    ..add(7398)
+    ..add(7399)
+    ..add(7400)
+    ..add(7401)
+    ..add(7402)
+    ..add(7403)
+    ..add(7404)
+    ..add(7405)
+    ..add(7406)
+    ..add(7407)
+    ..add(7408)
+    ..add(7409)
+    ..add(7410)
+    ..add(7411)
+    ..add(7412)
+    ..add(7413)
+    ..add(7414)
+    ..add(7415)
+    ..add(7416)
+    ..add(7417)
+    ..add(7418)
+    ..add(7419)
+    ..add(7420)
+    ..add(7421)
+    ..add(7422)
+    ..add(7423)
+    ..add(7424)
+    ..add(7425)
+    ..add(7426)
+    ..add(7427)
+    ..add(7428)
+    ..add(7429)
+    ..add(7430)
+    ..add(7431)
+    ..add(7432)
+    ..add(7433)
+    ..add(7434)
+    ..add(7435)
+    ..add(7436)
+    ..add(7437)
+    ..add(7438)
+    ..add(7439)
+    ..add(7440)
+    ..add(7441)
+    ..add(7442)
+    ..add(7443)
+    ..add(7444)
+    ..add(7445)
+    ..add(7446)
+    ..add(7447)
+    ..add(7448)
+    ..add(7449)
+    ..add(7450)
+    ..add(7451)
+    ..add(7452)
+    ..add(7453)
+    ..add(7454)
+    ..add(7455)
+    ..add(7456)
+    ..add(7457)
+    ..add(7458)
+    ..add(7459)
+    ..add(7460)
+    ..add(7461)
+    ..add(7462)
+    ..add(7463)
+    ..add(7464)
+    ..add(7465)
+    ..add(7466)
+    ..add(7467)
+    ..add(7468)
+    ..add(7469)
+    ..add(7470)
+    ..add(7471)
+    ..add(7472)
+    ..add(7473)
+    ..add(7474)
+    ..add(7475)
+    ..add(7476)
+    ..add(7477)
+    ..add(7478)
+    ..add(7479)
+    ..add(7480)
+    ..add(7481)
+    ..add(7482)
+    ..add(7483)
+    ..add(7484)
+    ..add(7485)
+    ..add(7486)
+    ..add(7487)
+    ..add(7488)
+    ..add(7489)
+    ..add(7490)
+    ..add(7491)
+    ..add(7492)
+    ..add(7493)
+    ..add(7494)
+    ..add(7495)
+    ..add(7496)
+    ..add(7497)
+    ..add(7498)
+    ..add(7499)
+    ..add(7500)
+    ..add(7501)
+    ..add(7502)
+    ..add(7503)
+    ..add(7504)
+    ..add(7505)
+    ..add(7506)
+    ..add(7507)
+    ..add(7508)
+    ..add(7509)
+    ..add(7510)
+    ..add(7511)
+    ..add(7512)
+    ..add(7513)
+    ..add(7514)
+    ..add(7515)
+    ..add(7516)
+    ..add(7517)
+    ..add(7518)
+    ..add(7519)
+    ..add(7520)
+    ..add(7521)
+    ..add(7522)
+    ..add(7523)
+    ..add(7524)
+    ..add(7525)
+    ..add(7526)
+    ..add(7527)
+    ..add(7528)
+    ..add(7529)
+    ..add(7530)
+    ..add(7531)
+    ..add(7532)
+    ..add(7533)
+    ..add(7534)
+    ..add(7535)
+    ..add(7536)
+    ..add(7537)
+    ..add(7538)
+    ..add(7539)
+    ..add(7540)
+    ..add(7541)
+    ..add(7542)
+    ..add(7543)
+    ..add(7544)
+    ..add(7545)
+    ..add(7546)
+    ..add(7547)
+    ..add(7548)
+    ..add(7549)
+    ..add(7550)
+    ..add(7551)
+    ..add(7552)
+    ..add(7553)
+    ..add(7554)
+    ..add(7555)
+    ..add(7556)
+    ..add(7557)
+    ..add(7558)
+    ..add(7559)
+    ..add(7560)
+    ..add(7561)
+    ..add(7562)
+    ..add(7563)
+    ..add(7564)
+    ..add(7565)
+    ..add(7566)
+    ..add(7567)
+    ..add(7568)
+    ..add(7569)
+    ..add(7570)
+    ..add(7571)
+    ..add(7572)
+    ..add(7573)
+    ..add(7574)
+    ..add(7575)
+    ..add(7576)
+    ..add(7577)
+    ..add(7578)
+    ..add(7579)
+    ..add(7580)
+    ..add(7581)
+    ..add(7582)
+    ..add(7583)
+    ..add(7584)
+    ..add(7585)
+    ..add(7586)
+    ..add(7587)
+    ..add(7588)
+    ..add(7589)
+    ..add(7590)
+    ..add(7591)
+    ..add(7592)
+    ..add(7593)
+    ..add(7594)
+    ..add(7595)
+    ..add(7596)
+    ..add(7597)
+    ..add(7598)
+    ..add(7599)
+    ..add(7600)
+    ..add(7601)
+    ..add(7602)
+    ..add(7603)
+    ..add(7604)
+    ..add(7605)
+    ..add(7606)
+    ..add(7607)
+    ..add(7608)
+    ..add(7609)
+    ..add(7610)
+    ..add(7611)
+    ..add(7612)
+    ..add(7613)
+    ..add(7614)
+    ..add(7615)
+    ..add(7616)
+    ..add(7617)
+    ..add(7618)
+    ..add(7619)
+    ..add(7620)
+    ..add(7621)
+    ..add(7622)
+    ..add(7623)
+    ..add(7624)
+    ..add(7625)
+    ..add(7626)
+    ..add(7627)
+    ..add(7628)
+    ..add(7629)
+    ..add(7630)
+    ..add(7631)
+    ..add(7632)
+    ..add(7633)
+    ..add(7634)
+    ..add(7635)
+    ..add(7636)
+    ..add(7637)
+    ..add(7638)
+    ..add(7639)
+    ..add(7640)
+    ..add(7641)
+    ..add(7642)
+    ..add(7643)
+    ..add(7644)
+    ..add(7645)
+    ..add(7646)
+    ..add(7647)
+    ..add(7648)
+    ..add(7649)
+    ..add(7650)
+    ..add(7651)
+    ..add(7652)
+    ..add(7653)
+    ..add(7654)
+    ..add(7655)
+    ..add(7656)
+    ..add(7657)
+    ..add(7658)
+    ..add(7659)
+    ..add(7660)
+    ..add(7661)
+    ..add(7662)
+    ..add(7663)
+    ..add(7664)
+    ..add(7665)
+    ..add(7666)
+    ..add(7667)
+    ..add(7668)
+    ..add(7669)
+    ..add(7670)
+    ..add(7671)
+    ..add(7672)
+    ..add(7673)
+    ..add(7674)
+    ..add(7675)
+    ..add(7676)
+    ..add(7677)
+    ..add(7678)
+    ..add(7679)
+    ..add(7680)
+    ..add(7681)
+    ..add(7682)
+    ..add(7683)
+    ..add(7684)
+    ..add(7685)
+    ..add(7686)
+    ..add(7687)
+    ..add(7688)
+    ..add(7689)
+    ..add(7690)
+    ..add(7691)
+    ..add(7692)
+    ..add(7693)
+    ..add(7694)
+    ..add(7695)
+    ..add(7696)
+    ..add(7697)
+    ..add(7698)
+    ..add(7699)
+    ..add(7700)
+    ..add(7701)
+    ..add(7702)
+    ..add(7703)
+    ..add(7704)
+    ..add(7705)
+    ..add(7706)
+    ..add(7707)
+    ..add(7708)
+    ..add(7709)
+    ..add(7710)
+    ..add(7711)
+    ..add(7712)
+    ..add(7713)
+    ..add(7714)
+    ..add(7715)
+    ..add(7716)
+    ..add(7717)
+    ..add(7718)
+    ..add(7719)
+    ..add(7720)
+    ..add(7721)
+    ..add(7722)
+    ..add(7723)
+    ..add(7724)
+    ..add(7725)
+    ..add(7726)
+    ..add(7727)
+    ..add(7728)
+    ..add(7729)
+    ..add(7730)
+    ..add(7731)
+    ..add(7732)
+    ..add(7733)
+    ..add(7734)
+    ..add(7735)
+    ..add(7736)
+    ..add(7737)
+    ..add(7738)
+    ..add(7739)
+    ..add(7740)
+    ..add(7741)
+    ..add(7742)
+    ..add(7743)
+    ..add(7744)
+    ..add(7745)
+    ..add(7746)
+    ..add(7747)
+    ..add(7748)
+    ..add(7749)
+    ..add(7750)
+    ..add(7751)
+    ..add(7752)
+    ..add(7753)
+    ..add(7754)
+    ..add(7755)
+    ..add(7756)
+    ..add(7757)
+    ..add(7758)
+    ..add(7759)
+    ..add(7760)
+    ..add(7761)
+    ..add(7762)
+    ..add(7763)
+    ..add(7764)
+    ..add(7765)
+    ..add(7766)
+    ..add(7767)
+    ..add(7768)
+    ..add(7769)
+    ..add(7770)
+    ..add(7771)
+    ..add(7772)
+    ..add(7773)
+    ..add(7774)
+    ..add(7775)
+    ..add(7776)
+    ..add(7777)
+    ..add(7778)
+    ..add(7779)
+    ..add(7780)
+    ..add(7781)
+    ..add(7782)
+    ..add(7783)
+    ..add(7784)
+    ..add(7785)
+    ..add(7786)
+    ..add(7787)
+    ..add(7788)
+    ..add(7789)
+    ..add(7790)
+    ..add(7791)
+    ..add(7792)
+    ..add(7793)
+    ..add(7794)
+    ..add(7795)
+    ..add(7796)
+    ..add(7797)
+    ..add(7798)
+    ..add(7799)
+    ..add(7800)
+    ..add(7801)
+    ..add(7802)
+    ..add(7803)
+    ..add(7804)
+    ..add(7805)
+    ..add(7806)
+    ..add(7807)
+    ..add(7808)
+    ..add(7809)
+    ..add(7810)
+    ..add(7811)
+    ..add(7812)
+    ..add(7813)
+    ..add(7814)
+    ..add(7815)
+    ..add(7816)
+    ..add(7817)
+    ..add(7818)
+    ..add(7819)
+    ..add(7820)
+    ..add(7821)
+    ..add(7822)
+    ..add(7823)
+    ..add(7824)
+    ..add(7825)
+    ..add(7826)
+    ..add(7827)
+    ..add(7828)
+    ..add(7829)
+    ..add(7830)
+    ..add(7831)
+    ..add(7832)
+    ..add(7833)
+    ..add(7834)
+    ..add(7835)
+    ..add(7836)
+    ..add(7837)
+    ..add(7838)
+    ..add(7839)
+    ..add(7840)
+    ..add(7841)
+    ..add(7842)
+    ..add(7843)
+    ..add(7844)
+    ..add(7845)
+    ..add(7846)
+    ..add(7847)
+    ..add(7848)
+    ..add(7849)
+    ..add(7850)
+    ..add(7851)
+    ..add(7852)
+    ..add(7853)
+    ..add(7854)
+    ..add(7855)
+    ..add(7856)
+    ..add(7857)
+    ..add(7858)
+    ..add(7859)
+    ..add(7860)
+    ..add(7861)
+    ..add(7862)
+    ..add(7863)
+    ..add(7864)
+    ..add(7865)
+    ..add(7866)
+    ..add(7867)
+    ..add(7868)
+    ..add(7869)
+    ..add(7870)
+    ..add(7871)
+    ..add(7872)
+    ..add(7873)
+    ..add(7874)
+    ..add(7875)
+    ..add(7876)
+    ..add(7877)
+    ..add(7878)
+    ..add(7879)
+    ..add(7880)
+    ..add(7881)
+    ..add(7882)
+    ..add(7883)
+    ..add(7884)
+    ..add(7885)
+    ..add(7886)
+    ..add(7887)
+    ..add(7888)
+    ..add(7889)
+    ..add(7890)
+    ..add(7891)
+    ..add(7892)
+    ..add(7893)
+    ..add(7894)
+    ..add(7895)
+    ..add(7896)
+    ..add(7897)
+    ..add(7898)
+    ..add(7899)
+    ..add(7900)
+    ..add(7901)
+    ..add(7902)
+    ..add(7903)
+    ..add(7904)
+    ..add(7905)
+    ..add(7906)
+    ..add(7907)
+    ..add(7908)
+    ..add(7909)
+    ..add(7910)
+    ..add(7911)
+    ..add(7912)
+    ..add(7913)
+    ..add(7914)
+    ..add(7915)
+    ..add(7916)
+    ..add(7917)
+    ..add(7918)
+    ..add(7919)
+    ..add(7920)
+    ..add(7921)
+    ..add(7922)
+    ..add(7923)
+    ..add(7924)
+    ..add(7925)
+    ..add(7926)
+    ..add(7927)
+    ..add(7928)
+    ..add(7929)
+    ..add(7930)
+    ..add(7931)
+    ..add(7932)
+    ..add(7933)
+    ..add(7934)
+    ..add(7935)
+    ..add(7936)
+    ..add(7937)
+    ..add(7938)
+    ..add(7939)
+    ..add(7940)
+    ..add(7941)
+    ..add(7942)
+    ..add(7943)
+    ..add(7944)
+    ..add(7945)
+    ..add(7946)
+    ..add(7947)
+    ..add(7948)
+    ..add(7949)
+    ..add(7950)
+    ..add(7951)
+    ..add(7952)
+    ..add(7953)
+    ..add(7954)
+    ..add(7955)
+    ..add(7956)
+    ..add(7957)
+    ..add(7958)
+    ..add(7959)
+    ..add(7960)
+    ..add(7961)
+    ..add(7962)
+    ..add(7963)
+    ..add(7964)
+    ..add(7965)
+    ..add(7966)
+    ..add(7967)
+    ..add(7968)
+    ..add(7969)
+    ..add(7970)
+    ..add(7971)
+    ..add(7972)
+    ..add(7973)
+    ..add(7974)
+    ..add(7975)
+    ..add(7976)
+    ..add(7977)
+    ..add(7978)
+    ..add(7979)
+    ..add(7980)
+    ..add(7981)
+    ..add(7982)
+    ..add(7983)
+    ..add(7984)
+    ..add(7985)
+    ..add(7986)
+    ..add(7987)
+    ..add(7988)
+    ..add(7989)
+    ..add(7990)
+    ..add(7991)
+    ..add(7992)
+    ..add(7993)
+    ..add(7994)
+    ..add(7995)
+    ..add(7996)
+    ..add(7997)
+    ..add(7998)
+    ..add(7999)
+    ..add(8000)
+    ..add(8001)
+    ..add(8002)
+    ..add(8003)
+    ..add(8004)
+    ..add(8005)
+    ..add(8006)
+    ..add(8007)
+    ..add(8008)
+    ..add(8009)
+    ..add(8010)
+    ..add(8011)
+    ..add(8012)
+    ..add(8013)
+    ..add(8014)
+    ..add(8015)
+    ..add(8016)
+    ..add(8017)
+    ..add(8018)
+    ..add(8019)
+    ..add(8020)
+    ..add(8021)
+    ..add(8022)
+    ..add(8023)
+    ..add(8024)
+    ..add(8025)
+    ..add(8026)
+    ..add(8027)
+    ..add(8028)
+    ..add(8029)
+    ..add(8030)
+    ..add(8031)
+    ..add(8032)
+    ..add(8033)
+    ..add(8034)
+    ..add(8035)
+    ..add(8036)
+    ..add(8037)
+    ..add(8038)
+    ..add(8039)
+    ..add(8040)
+    ..add(8041)
+    ..add(8042)
+    ..add(8043)
+    ..add(8044)
+    ..add(8045)
+    ..add(8046)
+    ..add(8047)
+    ..add(8048)
+    ..add(8049)
+    ..add(8050)
+    ..add(8051)
+    ..add(8052)
+    ..add(8053)
+    ..add(8054)
+    ..add(8055)
+    ..add(8056)
+    ..add(8057)
+    ..add(8058)
+    ..add(8059)
+    ..add(8060)
+    ..add(8061)
+    ..add(8062)
+    ..add(8063)
+    ..add(8064)
+    ..add(8065)
+    ..add(8066)
+    ..add(8067)
+    ..add(8068)
+    ..add(8069)
+    ..add(8070)
+    ..add(8071)
+    ..add(8072)
+    ..add(8073)
+    ..add(8074)
+    ..add(8075)
+    ..add(8076)
+    ..add(8077)
+    ..add(8078)
+    ..add(8079)
+    ..add(8080)
+    ..add(8081)
+    ..add(8082)
+    ..add(8083)
+    ..add(8084)
+    ..add(8085)
+    ..add(8086)
+    ..add(8087)
+    ..add(8088)
+    ..add(8089)
+    ..add(8090)
+    ..add(8091)
+    ..add(8092)
+    ..add(8093)
+    ..add(8094)
+    ..add(8095)
+    ..add(8096)
+    ..add(8097)
+    ..add(8098)
+    ..add(8099)
+    ..add(8100)
+    ..add(8101)
+    ..add(8102)
+    ..add(8103)
+    ..add(8104)
+    ..add(8105)
+    ..add(8106)
+    ..add(8107)
+    ..add(8108)
+    ..add(8109)
+    ..add(8110)
+    ..add(8111)
+    ..add(8112)
+    ..add(8113)
+    ..add(8114)
+    ..add(8115)
+    ..add(8116)
+    ..add(8117)
+    ..add(8118)
+    ..add(8119)
+    ..add(8120)
+    ..add(8121)
+    ..add(8122)
+    ..add(8123)
+    ..add(8124)
+    ..add(8125)
+    ..add(8126)
+    ..add(8127)
+    ..add(8128)
+    ..add(8129)
+    ..add(8130)
+    ..add(8131)
+    ..add(8132)
+    ..add(8133)
+    ..add(8134)
+    ..add(8135)
+    ..add(8136)
+    ..add(8137)
+    ..add(8138)
+    ..add(8139)
+    ..add(8140)
+    ..add(8141)
+    ..add(8142)
+    ..add(8143)
+    ..add(8144)
+    ..add(8145)
+    ..add(8146)
+    ..add(8147)
+    ..add(8148)
+    ..add(8149)
+    ..add(8150)
+    ..add(8151)
+    ..add(8152)
+    ..add(8153)
+    ..add(8154)
+    ..add(8155)
+    ..add(8156)
+    ..add(8157)
+    ..add(8158)
+    ..add(8159)
+    ..add(8160)
+    ..add(8161)
+    ..add(8162)
+    ..add(8163)
+    ..add(8164)
+    ..add(8165)
+    ..add(8166)
+    ..add(8167)
+    ..add(8168)
+    ..add(8169)
+    ..add(8170)
+    ..add(8171)
+    ..add(8172)
+    ..add(8173)
+    ..add(8174)
+    ..add(8175)
+    ..add(8176)
+    ..add(8177)
+    ..add(8178)
+    ..add(8179)
+    ..add(8180)
+    ..add(8181)
+    ..add(8182)
+    ..add(8183)
+    ..add(8184)
+    ..add(8185)
+    ..add(8186)
+    ..add(8187)
+    ..add(8188)
+    ..add(8189)
+    ..add(8190)
+    ..add(8191)
+    ..add(8192)
+    ..add(8193)
+    ..add(8194)
+    ..add(8195)
+    ..add(8196)
+    ..add(8197)
+    ..add(8198)
+    ..add(8199)
+    ..add(8200)
+    ..add(8201)
+    ..add(8202)
+    ..add(8203)
+    ..add(8204)
+    ..add(8205)
+    ..add(8206)
+    ..add(8207)
+    ..add(8208)
+    ..add(8209)
+    ..add(8210)
+    ..add(8211)
+    ..add(8212)
+    ..add(8213)
+    ..add(8214)
+    ..add(8215)
+    ..add(8216)
+    ..add(8217)
+    ..add(8218)
+    ..add(8219)
+    ..add(8220)
+    ..add(8221)
+    ..add(8222)
+    ..add(8223)
+    ..add(8224)
+    ..add(8225)
+    ..add(8226)
+    ..add(8227)
+    ..add(8228)
+    ..add(8229)
+    ..add(8230)
+    ..add(8231)
+    ..add(8232)
+    ..add(8233)
+    ..add(8234)
+    ..add(8235)
+    ..add(8236)
+    ..add(8237)
+    ..add(8238)
+    ..add(8239)
+    ..add(8240)
+    ..add(8241)
+    ..add(8242)
+    ..add(8243)
+    ..add(8244)
+    ..add(8245)
+    ..add(8246)
+    ..add(8247)
+    ..add(8248)
+    ..add(8249)
+    ..add(8250)
+    ..add(8251)
+    ..add(8252)
+    ..add(8253)
+    ..add(8254)
+    ..add(8255)
+    ..add(8256)
+    ..add(8257)
+    ..add(8258)
+    ..add(8259)
+    ..add(8260)
+    ..add(8261)
+    ..add(8262)
+    ..add(8263)
+    ..add(8264)
+    ..add(8265)
+    ..add(8266)
+    ..add(8267)
+    ..add(8268)
+    ..add(8269)
+    ..add(8270)
+    ..add(8271)
+    ..add(8272)
+    ..add(8273)
+    ..add(8274)
+    ..add(8275)
+    ..add(8276)
+    ..add(8277)
+    ..add(8278)
+    ..add(8279)
+    ..add(8280)
+    ..add(8281)
+    ..add(8282)
+    ..add(8283)
+    ..add(8284)
+    ..add(8285)
+    ..add(8286)
+    ..add(8287)
+    ..add(8288)
+    ..add(8289)
+    ..add(8290)
+    ..add(8291)
+    ..add(8292)
+    ..add(8293)
+    ..add(8294)
+    ..add(8295)
+    ..add(8296)
+    ..add(8297)
+    ..add(8298)
+    ..add(8299)
+    ..add(8300)
+    ..add(8301)
+    ..add(8302)
+    ..add(8303)
+    ..add(8304)
+    ..add(8305)
+    ..add(8306)
+    ..add(8307)
+    ..add(8308)
+    ..add(8309)
+    ..add(8310)
+    ..add(8311)
+    ..add(8312)
+    ..add(8313)
+    ..add(8314)
+    ..add(8315)
+    ..add(8316)
+    ..add(8317)
+    ..add(8318)
+    ..add(8319)
+    ..add(8320)
+    ..add(8321)
+    ..add(8322)
+    ..add(8323)
+    ..add(8324)
+    ..add(8325)
+    ..add(8326)
+    ..add(8327)
+    ..add(8328)
+    ..add(8329)
+    ..add(8330)
+    ..add(8331)
+    ..add(8332)
+    ..add(8333)
+    ..add(8334)
+    ..add(8335)
+    ..add(8336)
+    ..add(8337)
+    ..add(8338)
+    ..add(8339)
+    ..add(8340)
+    ..add(8341)
+    ..add(8342)
+    ..add(8343)
+    ..add(8344)
+    ..add(8345)
+    ..add(8346)
+    ..add(8347)
+    ..add(8348)
+    ..add(8349)
+    ..add(8350)
+    ..add(8351)
+    ..add(8352)
+    ..add(8353)
+    ..add(8354)
+    ..add(8355)
+    ..add(8356)
+    ..add(8357)
+    ..add(8358)
+    ..add(8359)
+    ..add(8360)
+    ..add(8361)
+    ..add(8362)
+    ..add(8363)
+    ..add(8364)
+    ..add(8365)
+    ..add(8366)
+    ..add(8367)
+    ..add(8368)
+    ..add(8369)
+    ..add(8370)
+    ..add(8371)
+    ..add(8372)
+    ..add(8373)
+    ..add(8374)
+    ..add(8375)
+    ..add(8376)
+    ..add(8377)
+    ..add(8378)
+    ..add(8379)
+    ..add(8380)
+    ..add(8381)
+    ..add(8382)
+    ..add(8383)
+    ..add(8384)
+    ..add(8385)
+    ..add(8386)
+    ..add(8387)
+    ..add(8388)
+    ..add(8389)
+    ..add(8390)
+    ..add(8391)
+    ..add(8392)
+    ..add(8393)
+    ..add(8394)
+    ..add(8395)
+    ..add(8396)
+    ..add(8397)
+    ..add(8398)
+    ..add(8399)
+    ..add(8400)
+    ..add(8401)
+    ..add(8402)
+    ..add(8403)
+    ..add(8404)
+    ..add(8405)
+    ..add(8406)
+    ..add(8407)
+    ..add(8408)
+    ..add(8409)
+    ..add(8410)
+    ..add(8411)
+    ..add(8412)
+    ..add(8413)
+    ..add(8414)
+    ..add(8415)
+    ..add(8416)
+    ..add(8417)
+    ..add(8418)
+    ..add(8419)
+    ..add(8420)
+    ..add(8421)
+    ..add(8422)
+    ..add(8423)
+    ..add(8424)
+    ..add(8425)
+    ..add(8426)
+    ..add(8427)
+    ..add(8428)
+    ..add(8429)
+    ..add(8430)
+    ..add(8431)
+    ..add(8432)
+    ..add(8433)
+    ..add(8434)
+    ..add(8435)
+    ..add(8436)
+    ..add(8437)
+    ..add(8438)
+    ..add(8439)
+    ..add(8440)
+    ..add(8441)
+    ..add(8442)
+    ..add(8443)
+    ..add(8444)
+    ..add(8445)
+    ..add(8446)
+    ..add(8447)
+    ..add(8448)
+    ..add(8449)
+    ..add(8450)
+    ..add(8451)
+    ..add(8452)
+    ..add(8453)
+    ..add(8454)
+    ..add(8455)
+    ..add(8456)
+    ..add(8457)
+    ..add(8458)
+    ..add(8459)
+    ..add(8460)
+    ..add(8461)
+    ..add(8462)
+    ..add(8463)
+    ..add(8464)
+    ..add(8465)
+    ..add(8466)
+    ..add(8467)
+    ..add(8468)
+    ..add(8469)
+    ..add(8470)
+    ..add(8471)
+    ..add(8472)
+    ..add(8473)
+    ..add(8474)
+    ..add(8475)
+    ..add(8476)
+    ..add(8477)
+    ..add(8478)
+    ..add(8479)
+    ..add(8480)
+    ..add(8481)
+    ..add(8482)
+    ..add(8483)
+    ..add(8484)
+    ..add(8485)
+    ..add(8486)
+    ..add(8487)
+    ..add(8488)
+    ..add(8489)
+    ..add(8490)
+    ..add(8491)
+    ..add(8492)
+    ..add(8493)
+    ..add(8494)
+    ..add(8495)
+    ..add(8496)
+    ..add(8497)
+    ..add(8498)
+    ..add(8499)
+    ..add(8500)
+    ..add(8501)
+    ..add(8502)
+    ..add(8503)
+    ..add(8504)
+    ..add(8505)
+    ..add(8506)
+    ..add(8507)
+    ..add(8508)
+    ..add(8509)
+    ..add(8510)
+    ..add(8511)
+    ..add(8512)
+    ..add(8513)
+    ..add(8514)
+    ..add(8515)
+    ..add(8516)
+    ..add(8517)
+    ..add(8518)
+    ..add(8519)
+    ..add(8520)
+    ..add(8521)
+    ..add(8522)
+    ..add(8523)
+    ..add(8524)
+    ..add(8525)
+    ..add(8526)
+    ..add(8527)
+    ..add(8528)
+    ..add(8529)
+    ..add(8530)
+    ..add(8531)
+    ..add(8532)
+    ..add(8533)
+    ..add(8534)
+    ..add(8535)
+    ..add(8536)
+    ..add(8537)
+    ..add(8538)
+    ..add(8539)
+    ..add(8540)
+    ..add(8541)
+    ..add(8542)
+    ..add(8543)
+    ..add(8544)
+    ..add(8545)
+    ..add(8546)
+    ..add(8547)
+    ..add(8548)
+    ..add(8549)
+    ..add(8550)
+    ..add(8551)
+    ..add(8552)
+    ..add(8553)
+    ..add(8554)
+    ..add(8555)
+    ..add(8556)
+    ..add(8557)
+    ..add(8558)
+    ..add(8559)
+    ..add(8560)
+    ..add(8561)
+    ..add(8562)
+    ..add(8563)
+    ..add(8564)
+    ..add(8565)
+    ..add(8566)
+    ..add(8567)
+    ..add(8568)
+    ..add(8569)
+    ..add(8570)
+    ..add(8571)
+    ..add(8572)
+    ..add(8573)
+    ..add(8574)
+    ..add(8575)
+    ..add(8576)
+    ..add(8577)
+    ..add(8578)
+    ..add(8579)
+    ..add(8580)
+    ..add(8581)
+    ..add(8582)
+    ..add(8583)
+    ..add(8584)
+    ..add(8585)
+    ..add(8586)
+    ..add(8587)
+    ..add(8588)
+    ..add(8589)
+    ..add(8590)
+    ..add(8591)
+    ..add(8592)
+    ..add(8593)
+    ..add(8594)
+    ..add(8595)
+    ..add(8596)
+    ..add(8597)
+    ..add(8598)
+    ..add(8599)
+    ..add(8600)
+    ..add(8601)
+    ..add(8602)
+    ..add(8603)
+    ..add(8604)
+    ..add(8605)
+    ..add(8606)
+    ..add(8607)
+    ..add(8608)
+    ..add(8609)
+    ..add(8610)
+    ..add(8611)
+    ..add(8612)
+    ..add(8613)
+    ..add(8614)
+    ..add(8615)
+    ..add(8616)
+    ..add(8617)
+    ..add(8618)
+    ..add(8619)
+    ..add(8620)
+    ..add(8621)
+    ..add(8622)
+    ..add(8623)
+    ..add(8624)
+    ..add(8625)
+    ..add(8626)
+    ..add(8627)
+    ..add(8628)
+    ..add(8629)
+    ..add(8630)
+    ..add(8631)
+    ..add(8632)
+    ..add(8633)
+    ..add(8634)
+    ..add(8635)
+    ..add(8636)
+    ..add(8637)
+    ..add(8638)
+    ..add(8639)
+    ..add(8640)
+    ..add(8641)
+    ..add(8642)
+    ..add(8643)
+    ..add(8644)
+    ..add(8645)
+    ..add(8646)
+    ..add(8647)
+    ..add(8648)
+    ..add(8649)
+    ..add(8650)
+    ..add(8651)
+    ..add(8652)
+    ..add(8653)
+    ..add(8654)
+    ..add(8655)
+    ..add(8656)
+    ..add(8657)
+    ..add(8658)
+    ..add(8659)
+    ..add(8660)
+    ..add(8661)
+    ..add(8662)
+    ..add(8663)
+    ..add(8664)
+    ..add(8665)
+    ..add(8666)
+    ..add(8667)
+    ..add(8668)
+    ..add(8669)
+    ..add(8670)
+    ..add(8671)
+    ..add(8672)
+    ..add(8673)
+    ..add(8674)
+    ..add(8675)
+    ..add(8676)
+    ..add(8677)
+    ..add(8678)
+    ..add(8679)
+    ..add(8680)
+    ..add(8681)
+    ..add(8682)
+    ..add(8683)
+    ..add(8684)
+    ..add(8685)
+    ..add(8686)
+    ..add(8687)
+    ..add(8688)
+    ..add(8689)
+    ..add(8690)
+    ..add(8691)
+    ..add(8692)
+    ..add(8693)
+    ..add(8694)
+    ..add(8695)
+    ..add(8696)
+    ..add(8697)
+    ..add(8698)
+    ..add(8699)
+    ..add(8700)
+    ..add(8701)
+    ..add(8702)
+    ..add(8703)
+    ..add(8704)
+    ..add(8705)
+    ..add(8706)
+    ..add(8707)
+    ..add(8708)
+    ..add(8709)
+    ..add(8710)
+    ..add(8711)
+    ..add(8712)
+    ..add(8713)
+    ..add(8714)
+    ..add(8715)
+    ..add(8716)
+    ..add(8717)
+    ..add(8718)
+    ..add(8719)
+    ..add(8720)
+    ..add(8721)
+    ..add(8722)
+    ..add(8723)
+    ..add(8724)
+    ..add(8725)
+    ..add(8726)
+    ..add(8727)
+    ..add(8728)
+    ..add(8729)
+    ..add(8730)
+    ..add(8731)
+    ..add(8732)
+    ..add(8733)
+    ..add(8734)
+    ..add(8735)
+    ..add(8736)
+    ..add(8737)
+    ..add(8738)
+    ..add(8739)
+    ..add(8740)
+    ..add(8741)
+    ..add(8742)
+    ..add(8743)
+    ..add(8744)
+    ..add(8745)
+    ..add(8746)
+    ..add(8747)
+    ..add(8748)
+    ..add(8749)
+    ..add(8750)
+    ..add(8751)
+    ..add(8752)
+    ..add(8753)
+    ..add(8754)
+    ..add(8755)
+    ..add(8756)
+    ..add(8757)
+    ..add(8758)
+    ..add(8759)
+    ..add(8760)
+    ..add(8761)
+    ..add(8762)
+    ..add(8763)
+    ..add(8764)
+    ..add(8765)
+    ..add(8766)
+    ..add(8767)
+    ..add(8768)
+    ..add(8769)
+    ..add(8770)
+    ..add(8771)
+    ..add(8772)
+    ..add(8773)
+    ..add(8774)
+    ..add(8775)
+    ..add(8776)
+    ..add(8777)
+    ..add(8778)
+    ..add(8779)
+    ..add(8780)
+    ..add(8781)
+    ..add(8782)
+    ..add(8783)
+    ..add(8784)
+    ..add(8785)
+    ..add(8786)
+    ..add(8787)
+    ..add(8788)
+    ..add(8789)
+    ..add(8790)
+    ..add(8791)
+    ..add(8792)
+    ..add(8793)
+    ..add(8794)
+    ..add(8795)
+    ..add(8796)
+    ..add(8797)
+    ..add(8798)
+    ..add(8799)
+    ..add(8800)
+    ..add(8801)
+    ..add(8802)
+    ..add(8803)
+    ..add(8804)
+    ..add(8805)
+    ..add(8806)
+    ..add(8807)
+    ..add(8808)
+    ..add(8809)
+    ..add(8810)
+    ..add(8811)
+    ..add(8812)
+    ..add(8813)
+    ..add(8814)
+    ..add(8815)
+    ..add(8816)
+    ..add(8817)
+    ..add(8818)
+    ..add(8819)
+    ..add(8820)
+    ..add(8821)
+    ..add(8822)
+    ..add(8823)
+    ..add(8824)
+    ..add(8825)
+    ..add(8826)
+    ..add(8827)
+    ..add(8828)
+    ..add(8829)
+    ..add(8830)
+    ..add(8831)
+    ..add(8832)
+    ..add(8833)
+    ..add(8834)
+    ..add(8835)
+    ..add(8836)
+    ..add(8837)
+    ..add(8838)
+    ..add(8839)
+    ..add(8840)
+    ..add(8841)
+    ..add(8842)
+    ..add(8843)
+    ..add(8844)
+    ..add(8845)
+    ..add(8846)
+    ..add(8847)
+    ..add(8848)
+    ..add(8849)
+    ..add(8850)
+    ..add(8851)
+    ..add(8852)
+    ..add(8853)
+    ..add(8854)
+    ..add(8855)
+    ..add(8856)
+    ..add(8857)
+    ..add(8858)
+    ..add(8859)
+    ..add(8860)
+    ..add(8861)
+    ..add(8862)
+    ..add(8863)
+    ..add(8864)
+    ..add(8865)
+    ..add(8866)
+    ..add(8867)
+    ..add(8868)
+    ..add(8869)
+    ..add(8870)
+    ..add(8871)
+    ..add(8872)
+    ..add(8873)
+    ..add(8874)
+    ..add(8875)
+    ..add(8876)
+    ..add(8877)
+    ..add(8878)
+    ..add(8879)
+    ..add(8880)
+    ..add(8881)
+    ..add(8882)
+    ..add(8883)
+    ..add(8884)
+    ..add(8885)
+    ..add(8886)
+    ..add(8887)
+    ..add(8888)
+    ..add(8889)
+    ..add(8890)
+    ..add(8891)
+    ..add(8892)
+    ..add(8893)
+    ..add(8894)
+    ..add(8895)
+    ..add(8896)
+    ..add(8897)
+    ..add(8898)
+    ..add(8899)
+    ..add(8900)
+    ..add(8901)
+    ..add(8902)
+    ..add(8903)
+    ..add(8904)
+    ..add(8905)
+    ..add(8906)
+    ..add(8907)
+    ..add(8908)
+    ..add(8909)
+    ..add(8910)
+    ..add(8911)
+    ..add(8912)
+    ..add(8913)
+    ..add(8914)
+    ..add(8915)
+    ..add(8916)
+    ..add(8917)
+    ..add(8918)
+    ..add(8919)
+    ..add(8920)
+    ..add(8921)
+    ..add(8922)
+    ..add(8923)
+    ..add(8924)
+    ..add(8925)
+    ..add(8926)
+    ..add(8927)
+    ..add(8928)
+    ..add(8929)
+    ..add(8930)
+    ..add(8931)
+    ..add(8932)
+    ..add(8933)
+    ..add(8934)
+    ..add(8935)
+    ..add(8936)
+    ..add(8937)
+    ..add(8938)
+    ..add(8939)
+    ..add(8940)
+    ..add(8941)
+    ..add(8942)
+    ..add(8943)
+    ..add(8944)
+    ..add(8945)
+    ..add(8946)
+    ..add(8947)
+    ..add(8948)
+    ..add(8949)
+    ..add(8950)
+    ..add(8951)
+    ..add(8952)
+    ..add(8953)
+    ..add(8954)
+    ..add(8955)
+    ..add(8956)
+    ..add(8957)
+    ..add(8958)
+    ..add(8959)
+    ..add(8960)
+    ..add(8961)
+    ..add(8962)
+    ..add(8963)
+    ..add(8964)
+    ..add(8965)
+    ..add(8966)
+    ..add(8967)
+    ..add(8968)
+    ..add(8969)
+    ..add(8970)
+    ..add(8971)
+    ..add(8972)
+    ..add(8973)
+    ..add(8974)
+    ..add(8975)
+    ..add(8976)
+    ..add(8977)
+    ..add(8978)
+    ..add(8979)
+    ..add(8980)
+    ..add(8981)
+    ..add(8982)
+    ..add(8983)
+    ..add(8984)
+    ..add(8985)
+    ..add(8986)
+    ..add(8987)
+    ..add(8988)
+    ..add(8989)
+    ..add(8990)
+    ..add(8991)
+    ..add(8992)
+    ..add(8993)
+    ..add(8994)
+    ..add(8995)
+    ..add(8996)
+    ..add(8997)
+    ..add(8998)
+    ..add(8999)
+    ..add(9000)
+    ..add(9001)
+    ..add(9002)
+    ..add(9003)
+    ..add(9004)
+    ..add(9005)
+    ..add(9006)
+    ..add(9007)
+    ..add(9008)
+    ..add(9009)
+    ..add(9010)
+    ..add(9011)
+    ..add(9012)
+    ..add(9013)
+    ..add(9014)
+    ..add(9015)
+    ..add(9016)
+    ..add(9017)
+    ..add(9018)
+    ..add(9019)
+    ..add(9020)
+    ..add(9021)
+    ..add(9022)
+    ..add(9023)
+    ..add(9024)
+    ..add(9025)
+    ..add(9026)
+    ..add(9027)
+    ..add(9028)
+    ..add(9029)
+    ..add(9030)
+    ..add(9031)
+    ..add(9032)
+    ..add(9033)
+    ..add(9034)
+    ..add(9035)
+    ..add(9036)
+    ..add(9037)
+    ..add(9038)
+    ..add(9039)
+    ..add(9040)
+    ..add(9041)
+    ..add(9042)
+    ..add(9043)
+    ..add(9044)
+    ..add(9045)
+    ..add(9046)
+    ..add(9047)
+    ..add(9048)
+    ..add(9049)
+    ..add(9050)
+    ..add(9051)
+    ..add(9052)
+    ..add(9053)
+    ..add(9054)
+    ..add(9055)
+    ..add(9056)
+    ..add(9057)
+    ..add(9058)
+    ..add(9059)
+    ..add(9060)
+    ..add(9061)
+    ..add(9062)
+    ..add(9063)
+    ..add(9064)
+    ..add(9065)
+    ..add(9066)
+    ..add(9067)
+    ..add(9068)
+    ..add(9069)
+    ..add(9070)
+    ..add(9071)
+    ..add(9072)
+    ..add(9073)
+    ..add(9074)
+    ..add(9075)
+    ..add(9076)
+    ..add(9077)
+    ..add(9078)
+    ..add(9079)
+    ..add(9080)
+    ..add(9081)
+    ..add(9082)
+    ..add(9083)
+    ..add(9084)
+    ..add(9085)
+    ..add(9086)
+    ..add(9087)
+    ..add(9088)
+    ..add(9089)
+    ..add(9090)
+    ..add(9091)
+    ..add(9092)
+    ..add(9093)
+    ..add(9094)
+    ..add(9095)
+    ..add(9096)
+    ..add(9097)
+    ..add(9098)
+    ..add(9099)
+    ..add(9100)
+    ..add(9101)
+    ..add(9102)
+    ..add(9103)
+    ..add(9104)
+    ..add(9105)
+    ..add(9106)
+    ..add(9107)
+    ..add(9108)
+    ..add(9109)
+    ..add(9110)
+    ..add(9111)
+    ..add(9112)
+    ..add(9113)
+    ..add(9114)
+    ..add(9115)
+    ..add(9116)
+    ..add(9117)
+    ..add(9118)
+    ..add(9119)
+    ..add(9120)
+    ..add(9121)
+    ..add(9122)
+    ..add(9123)
+    ..add(9124)
+    ..add(9125)
+    ..add(9126)
+    ..add(9127)
+    ..add(9128)
+    ..add(9129)
+    ..add(9130)
+    ..add(9131)
+    ..add(9132)
+    ..add(9133)
+    ..add(9134)
+    ..add(9135)
+    ..add(9136)
+    ..add(9137)
+    ..add(9138)
+    ..add(9139)
+    ..add(9140)
+    ..add(9141)
+    ..add(9142)
+    ..add(9143)
+    ..add(9144)
+    ..add(9145)
+    ..add(9146)
+    ..add(9147)
+    ..add(9148)
+    ..add(9149)
+    ..add(9150)
+    ..add(9151)
+    ..add(9152)
+    ..add(9153)
+    ..add(9154)
+    ..add(9155)
+    ..add(9156)
+    ..add(9157)
+    ..add(9158)
+    ..add(9159)
+    ..add(9160)
+    ..add(9161)
+    ..add(9162)
+    ..add(9163)
+    ..add(9164)
+    ..add(9165)
+    ..add(9166)
+    ..add(9167)
+    ..add(9168)
+    ..add(9169)
+    ..add(9170)
+    ..add(9171)
+    ..add(9172)
+    ..add(9173)
+    ..add(9174)
+    ..add(9175)
+    ..add(9176)
+    ..add(9177)
+    ..add(9178)
+    ..add(9179)
+    ..add(9180)
+    ..add(9181)
+    ..add(9182)
+    ..add(9183)
+    ..add(9184)
+    ..add(9185)
+    ..add(9186)
+    ..add(9187)
+    ..add(9188)
+    ..add(9189)
+    ..add(9190)
+    ..add(9191)
+    ..add(9192)
+    ..add(9193)
+    ..add(9194)
+    ..add(9195)
+    ..add(9196)
+    ..add(9197)
+    ..add(9198)
+    ..add(9199)
+    ..add(9200)
+    ..add(9201)
+    ..add(9202)
+    ..add(9203)
+    ..add(9204)
+    ..add(9205)
+    ..add(9206)
+    ..add(9207)
+    ..add(9208)
+    ..add(9209)
+    ..add(9210)
+    ..add(9211)
+    ..add(9212)
+    ..add(9213)
+    ..add(9214)
+    ..add(9215)
+    ..add(9216)
+    ..add(9217)
+    ..add(9218)
+    ..add(9219)
+    ..add(9220)
+    ..add(9221)
+    ..add(9222)
+    ..add(9223)
+    ..add(9224)
+    ..add(9225)
+    ..add(9226)
+    ..add(9227)
+    ..add(9228)
+    ..add(9229)
+    ..add(9230)
+    ..add(9231)
+    ..add(9232)
+    ..add(9233)
+    ..add(9234)
+    ..add(9235)
+    ..add(9236)
+    ..add(9237)
+    ..add(9238)
+    ..add(9239)
+    ..add(9240)
+    ..add(9241)
+    ..add(9242)
+    ..add(9243)
+    ..add(9244)
+    ..add(9245)
+    ..add(9246)
+    ..add(9247)
+    ..add(9248)
+    ..add(9249)
+    ..add(9250)
+    ..add(9251)
+    ..add(9252)
+    ..add(9253)
+    ..add(9254)
+    ..add(9255)
+    ..add(9256)
+    ..add(9257)
+    ..add(9258)
+    ..add(9259)
+    ..add(9260)
+    ..add(9261)
+    ..add(9262)
+    ..add(9263)
+    ..add(9264)
+    ..add(9265)
+    ..add(9266)
+    ..add(9267)
+    ..add(9268)
+    ..add(9269)
+    ..add(9270)
+    ..add(9271)
+    ..add(9272)
+    ..add(9273)
+    ..add(9274)
+    ..add(9275)
+    ..add(9276)
+    ..add(9277)
+    ..add(9278)
+    ..add(9279)
+    ..add(9280)
+    ..add(9281)
+    ..add(9282)
+    ..add(9283)
+    ..add(9284)
+    ..add(9285)
+    ..add(9286)
+    ..add(9287)
+    ..add(9288)
+    ..add(9289)
+    ..add(9290)
+    ..add(9291)
+    ..add(9292)
+    ..add(9293)
+    ..add(9294)
+    ..add(9295)
+    ..add(9296)
+    ..add(9297)
+    ..add(9298)
+    ..add(9299)
+    ..add(9300)
+    ..add(9301)
+    ..add(9302)
+    ..add(9303)
+    ..add(9304)
+    ..add(9305)
+    ..add(9306)
+    ..add(9307)
+    ..add(9308)
+    ..add(9309)
+    ..add(9310)
+    ..add(9311)
+    ..add(9312)
+    ..add(9313)
+    ..add(9314)
+    ..add(9315)
+    ..add(9316)
+    ..add(9317)
+    ..add(9318)
+    ..add(9319)
+    ..add(9320)
+    ..add(9321)
+    ..add(9322)
+    ..add(9323)
+    ..add(9324)
+    ..add(9325)
+    ..add(9326)
+    ..add(9327)
+    ..add(9328)
+    ..add(9329)
+    ..add(9330)
+    ..add(9331)
+    ..add(9332)
+    ..add(9333)
+    ..add(9334)
+    ..add(9335)
+    ..add(9336)
+    ..add(9337)
+    ..add(9338)
+    ..add(9339)
+    ..add(9340)
+    ..add(9341)
+    ..add(9342)
+    ..add(9343)
+    ..add(9344)
+    ..add(9345)
+    ..add(9346)
+    ..add(9347)
+    ..add(9348)
+    ..add(9349)
+    ..add(9350)
+    ..add(9351)
+    ..add(9352)
+    ..add(9353)
+    ..add(9354)
+    ..add(9355)
+    ..add(9356)
+    ..add(9357)
+    ..add(9358)
+    ..add(9359)
+    ..add(9360)
+    ..add(9361)
+    ..add(9362)
+    ..add(9363)
+    ..add(9364)
+    ..add(9365)
+    ..add(9366)
+    ..add(9367)
+    ..add(9368)
+    ..add(9369)
+    ..add(9370)
+    ..add(9371)
+    ..add(9372)
+    ..add(9373)
+    ..add(9374)
+    ..add(9375)
+    ..add(9376)
+    ..add(9377)
+    ..add(9378)
+    ..add(9379)
+    ..add(9380)
+    ..add(9381)
+    ..add(9382)
+    ..add(9383)
+    ..add(9384)
+    ..add(9385)
+    ..add(9386)
+    ..add(9387)
+    ..add(9388)
+    ..add(9389)
+    ..add(9390)
+    ..add(9391)
+    ..add(9392)
+    ..add(9393)
+    ..add(9394)
+    ..add(9395)
+    ..add(9396)
+    ..add(9397)
+    ..add(9398)
+    ..add(9399)
+    ..add(9400)
+    ..add(9401)
+    ..add(9402)
+    ..add(9403)
+    ..add(9404)
+    ..add(9405)
+    ..add(9406)
+    ..add(9407)
+    ..add(9408)
+    ..add(9409)
+    ..add(9410)
+    ..add(9411)
+    ..add(9412)
+    ..add(9413)
+    ..add(9414)
+    ..add(9415)
+    ..add(9416)
+    ..add(9417)
+    ..add(9418)
+    ..add(9419)
+    ..add(9420)
+    ..add(9421)
+    ..add(9422)
+    ..add(9423)
+    ..add(9424)
+    ..add(9425)
+    ..add(9426)
+    ..add(9427)
+    ..add(9428)
+    ..add(9429)
+    ..add(9430)
+    ..add(9431)
+    ..add(9432)
+    ..add(9433)
+    ..add(9434)
+    ..add(9435)
+    ..add(9436)
+    ..add(9437)
+    ..add(9438)
+    ..add(9439)
+    ..add(9440)
+    ..add(9441)
+    ..add(9442)
+    ..add(9443)
+    ..add(9444)
+    ..add(9445)
+    ..add(9446)
+    ..add(9447)
+    ..add(9448)
+    ..add(9449)
+    ..add(9450)
+    ..add(9451)
+    ..add(9452)
+    ..add(9453)
+    ..add(9454)
+    ..add(9455)
+    ..add(9456)
+    ..add(9457)
+    ..add(9458)
+    ..add(9459)
+    ..add(9460)
+    ..add(9461)
+    ..add(9462)
+    ..add(9463)
+    ..add(9464)
+    ..add(9465)
+    ..add(9466)
+    ..add(9467)
+    ..add(9468)
+    ..add(9469)
+    ..add(9470)
+    ..add(9471)
+    ..add(9472)
+    ..add(9473)
+    ..add(9474)
+    ..add(9475)
+    ..add(9476)
+    ..add(9477)
+    ..add(9478)
+    ..add(9479)
+    ..add(9480)
+    ..add(9481)
+    ..add(9482)
+    ..add(9483)
+    ..add(9484)
+    ..add(9485)
+    ..add(9486)
+    ..add(9487)
+    ..add(9488)
+    ..add(9489)
+    ..add(9490)
+    ..add(9491)
+    ..add(9492)
+    ..add(9493)
+    ..add(9494)
+    ..add(9495)
+    ..add(9496)
+    ..add(9497)
+    ..add(9498)
+    ..add(9499)
+    ..add(9500)
+    ..add(9501)
+    ..add(9502)
+    ..add(9503)
+    ..add(9504)
+    ..add(9505)
+    ..add(9506)
+    ..add(9507)
+    ..add(9508)
+    ..add(9509)
+    ..add(9510)
+    ..add(9511)
+    ..add(9512)
+    ..add(9513)
+    ..add(9514)
+    ..add(9515)
+    ..add(9516)
+    ..add(9517)
+    ..add(9518)
+    ..add(9519)
+    ..add(9520)
+    ..add(9521)
+    ..add(9522)
+    ..add(9523)
+    ..add(9524)
+    ..add(9525)
+    ..add(9526)
+    ..add(9527)
+    ..add(9528)
+    ..add(9529)
+    ..add(9530)
+    ..add(9531)
+    ..add(9532)
+    ..add(9533)
+    ..add(9534)
+    ..add(9535)
+    ..add(9536)
+    ..add(9537)
+    ..add(9538)
+    ..add(9539)
+    ..add(9540)
+    ..add(9541)
+    ..add(9542)
+    ..add(9543)
+    ..add(9544)
+    ..add(9545)
+    ..add(9546)
+    ..add(9547)
+    ..add(9548)
+    ..add(9549)
+    ..add(9550)
+    ..add(9551)
+    ..add(9552)
+    ..add(9553)
+    ..add(9554)
+    ..add(9555)
+    ..add(9556)
+    ..add(9557)
+    ..add(9558)
+    ..add(9559)
+    ..add(9560)
+    ..add(9561)
+    ..add(9562)
+    ..add(9563)
+    ..add(9564)
+    ..add(9565)
+    ..add(9566)
+    ..add(9567)
+    ..add(9568)
+    ..add(9569)
+    ..add(9570)
+    ..add(9571)
+    ..add(9572)
+    ..add(9573)
+    ..add(9574)
+    ..add(9575)
+    ..add(9576)
+    ..add(9577)
+    ..add(9578)
+    ..add(9579)
+    ..add(9580)
+    ..add(9581)
+    ..add(9582)
+    ..add(9583)
+    ..add(9584)
+    ..add(9585)
+    ..add(9586)
+    ..add(9587)
+    ..add(9588)
+    ..add(9589)
+    ..add(9590)
+    ..add(9591)
+    ..add(9592)
+    ..add(9593)
+    ..add(9594)
+    ..add(9595)
+    ..add(9596)
+    ..add(9597)
+    ..add(9598)
+    ..add(9599)
+    ..add(9600)
+    ..add(9601)
+    ..add(9602)
+    ..add(9603)
+    ..add(9604)
+    ..add(9605)
+    ..add(9606)
+    ..add(9607)
+    ..add(9608)
+    ..add(9609)
+    ..add(9610)
+    ..add(9611)
+    ..add(9612)
+    ..add(9613)
+    ..add(9614)
+    ..add(9615)
+    ..add(9616)
+    ..add(9617)
+    ..add(9618)
+    ..add(9619)
+    ..add(9620)
+    ..add(9621)
+    ..add(9622)
+    ..add(9623)
+    ..add(9624)
+    ..add(9625)
+    ..add(9626)
+    ..add(9627)
+    ..add(9628)
+    ..add(9629)
+    ..add(9630)
+    ..add(9631)
+    ..add(9632)
+    ..add(9633)
+    ..add(9634)
+    ..add(9635)
+    ..add(9636)
+    ..add(9637)
+    ..add(9638)
+    ..add(9639)
+    ..add(9640)
+    ..add(9641)
+    ..add(9642)
+    ..add(9643)
+    ..add(9644)
+    ..add(9645)
+    ..add(9646)
+    ..add(9647)
+    ..add(9648)
+    ..add(9649)
+    ..add(9650)
+    ..add(9651)
+    ..add(9652)
+    ..add(9653)
+    ..add(9654)
+    ..add(9655)
+    ..add(9656)
+    ..add(9657)
+    ..add(9658)
+    ..add(9659)
+    ..add(9660)
+    ..add(9661)
+    ..add(9662)
+    ..add(9663)
+    ..add(9664)
+    ..add(9665)
+    ..add(9666)
+    ..add(9667)
+    ..add(9668)
+    ..add(9669)
+    ..add(9670)
+    ..add(9671)
+    ..add(9672)
+    ..add(9673)
+    ..add(9674)
+    ..add(9675)
+    ..add(9676)
+    ..add(9677)
+    ..add(9678)
+    ..add(9679)
+    ..add(9680)
+    ..add(9681)
+    ..add(9682)
+    ..add(9683)
+    ..add(9684)
+    ..add(9685)
+    ..add(9686)
+    ..add(9687)
+    ..add(9688)
+    ..add(9689)
+    ..add(9690)
+    ..add(9691)
+    ..add(9692)
+    ..add(9693)
+    ..add(9694)
+    ..add(9695)
+    ..add(9696)
+    ..add(9697)
+    ..add(9698)
+    ..add(9699)
+    ..add(9700)
+    ..add(9701)
+    ..add(9702)
+    ..add(9703)
+    ..add(9704)
+    ..add(9705)
+    ..add(9706)
+    ..add(9707)
+    ..add(9708)
+    ..add(9709)
+    ..add(9710)
+    ..add(9711)
+    ..add(9712)
+    ..add(9713)
+    ..add(9714)
+    ..add(9715)
+    ..add(9716)
+    ..add(9717)
+    ..add(9718)
+    ..add(9719)
+    ..add(9720)
+    ..add(9721)
+    ..add(9722)
+    ..add(9723)
+    ..add(9724)
+    ..add(9725)
+    ..add(9726)
+    ..add(9727)
+    ..add(9728)
+    ..add(9729)
+    ..add(9730)
+    ..add(9731)
+    ..add(9732)
+    ..add(9733)
+    ..add(9734)
+    ..add(9735)
+    ..add(9736)
+    ..add(9737)
+    ..add(9738)
+    ..add(9739)
+    ..add(9740)
+    ..add(9741)
+    ..add(9742)
+    ..add(9743)
+    ..add(9744)
+    ..add(9745)
+    ..add(9746)
+    ..add(9747)
+    ..add(9748)
+    ..add(9749)
+    ..add(9750)
+    ..add(9751)
+    ..add(9752)
+    ..add(9753)
+    ..add(9754)
+    ..add(9755)
+    ..add(9756)
+    ..add(9757)
+    ..add(9758)
+    ..add(9759)
+    ..add(9760)
+    ..add(9761)
+    ..add(9762)
+    ..add(9763)
+    ..add(9764)
+    ..add(9765)
+    ..add(9766)
+    ..add(9767)
+    ..add(9768)
+    ..add(9769)
+    ..add(9770)
+    ..add(9771)
+    ..add(9772)
+    ..add(9773)
+    ..add(9774)
+    ..add(9775)
+    ..add(9776)
+    ..add(9777)
+    ..add(9778)
+    ..add(9779)
+    ..add(9780)
+    ..add(9781)
+    ..add(9782)
+    ..add(9783)
+    ..add(9784)
+    ..add(9785)
+    ..add(9786)
+    ..add(9787)
+    ..add(9788)
+    ..add(9789)
+    ..add(9790)
+    ..add(9791)
+    ..add(9792)
+    ..add(9793)
+    ..add(9794)
+    ..add(9795)
+    ..add(9796)
+    ..add(9797)
+    ..add(9798)
+    ..add(9799)
+    ..add(9800)
+    ..add(9801)
+    ..add(9802)
+    ..add(9803)
+    ..add(9804)
+    ..add(9805)
+    ..add(9806)
+    ..add(9807)
+    ..add(9808)
+    ..add(9809)
+    ..add(9810)
+    ..add(9811)
+    ..add(9812)
+    ..add(9813)
+    ..add(9814)
+    ..add(9815)
+    ..add(9816)
+    ..add(9817)
+    ..add(9818)
+    ..add(9819)
+    ..add(9820)
+    ..add(9821)
+    ..add(9822)
+    ..add(9823)
+    ..add(9824)
+    ..add(9825)
+    ..add(9826)
+    ..add(9827)
+    ..add(9828)
+    ..add(9829)
+    ..add(9830)
+    ..add(9831)
+    ..add(9832)
+    ..add(9833)
+    ..add(9834)
+    ..add(9835)
+    ..add(9836)
+    ..add(9837)
+    ..add(9838)
+    ..add(9839)
+    ..add(9840)
+    ..add(9841)
+    ..add(9842)
+    ..add(9843)
+    ..add(9844)
+    ..add(9845)
+    ..add(9846)
+    ..add(9847)
+    ..add(9848)
+    ..add(9849)
+    ..add(9850)
+    ..add(9851)
+    ..add(9852)
+    ..add(9853)
+    ..add(9854)
+    ..add(9855)
+    ..add(9856)
+    ..add(9857)
+    ..add(9858)
+    ..add(9859)
+    ..add(9860)
+    ..add(9861)
+    ..add(9862)
+    ..add(9863)
+    ..add(9864)
+    ..add(9865)
+    ..add(9866)
+    ..add(9867)
+    ..add(9868)
+    ..add(9869)
+    ..add(9870)
+    ..add(9871)
+    ..add(9872)
+    ..add(9873)
+    ..add(9874)
+    ..add(9875)
+    ..add(9876)
+    ..add(9877)
+    ..add(9878)
+    ..add(9879)
+    ..add(9880)
+    ..add(9881)
+    ..add(9882)
+    ..add(9883)
+    ..add(9884)
+    ..add(9885)
+    ..add(9886)
+    ..add(9887)
+    ..add(9888)
+    ..add(9889)
+    ..add(9890)
+    ..add(9891)
+    ..add(9892)
+    ..add(9893)
+    ..add(9894)
+    ..add(9895)
+    ..add(9896)
+    ..add(9897)
+    ..add(9898)
+    ..add(9899)
+    ..add(9900)
+    ..add(9901)
+    ..add(9902)
+    ..add(9903)
+    ..add(9904)
+    ..add(9905)
+    ..add(9906)
+    ..add(9907)
+    ..add(9908)
+    ..add(9909)
+    ..add(9910)
+    ..add(9911)
+    ..add(9912)
+    ..add(9913)
+    ..add(9914)
+    ..add(9915)
+    ..add(9916)
+    ..add(9917)
+    ..add(9918)
+    ..add(9919)
+    ..add(9920)
+    ..add(9921)
+    ..add(9922)
+    ..add(9923)
+    ..add(9924)
+    ..add(9925)
+    ..add(9926)
+    ..add(9927)
+    ..add(9928)
+    ..add(9929)
+    ..add(9930)
+    ..add(9931)
+    ..add(9932)
+    ..add(9933)
+    ..add(9934)
+    ..add(9935)
+    ..add(9936)
+    ..add(9937)
+    ..add(9938)
+    ..add(9939)
+    ..add(9940)
+    ..add(9941)
+    ..add(9942)
+    ..add(9943)
+    ..add(9944)
+    ..add(9945)
+    ..add(9946)
+    ..add(9947)
+    ..add(9948)
+    ..add(9949)
+    ..add(9950)
+    ..add(9951)
+    ..add(9952)
+    ..add(9953)
+    ..add(9954)
+    ..add(9955)
+    ..add(9956)
+    ..add(9957)
+    ..add(9958)
+    ..add(9959)
+    ..add(9960)
+    ..add(9961)
+    ..add(9962)
+    ..add(9963)
+    ..add(9964)
+    ..add(9965)
+    ..add(9966)
+    ..add(9967)
+    ..add(9968)
+    ..add(9969)
+    ..add(9970)
+    ..add(9971)
+    ..add(9972)
+    ..add(9973)
+    ..add(9974)
+    ..add(9975)
+    ..add(9976)
+    ..add(9977)
+    ..add(9978)
+    ..add(9979)
+    ..add(9980)
+    ..add(9981)
+    ..add(9982)
+    ..add(9983)
+    ..add(9984)
+    ..add(9985)
+    ..add(9986)
+    ..add(9987)
+    ..add(9988)
+    ..add(9989)
+    ..add(9990)
+    ..add(9991)
+    ..add(9992)
+    ..add(9993)
+    ..add(9994)
+    ..add(9995)
+    ..add(9996)
+    ..add(9997)
+    ..add(9998)
+    ..add(9999)
+    ..add(10000)
+    ..add(10001)
+    ..add(10002)
+    ..add(10003)
+    ..add(10004)
+    ..add(10005)
+    ..add(10006)
+    ..add(10007)
+    ..add(10008)
+    ..add(10009)
+    ..add(10010)
+    ..add(10011)
+    ..add(10012)
+    ..add(10013)
+    ..add(10014)
+    ..add(10015)
+    ..add(10016)
+    ..add(10017)
+    ..add(10018)
+    ..add(10019)
+    ..add(10020)
+    ..add(10021)
+    ..add(10022)
+    ..add(10023)
+    ..add(10024)
+    ..add(10025)
+    ..add(10026)
+    ..add(10027)
+    ..add(10028)
+    ..add(10029)
+    ..add(10030)
+    ..add(10031)
+    ..add(10032)
+    ..add(10033)
+    ..add(10034)
+    ..add(10035)
+    ..add(10036)
+    ..add(10037)
+    ..add(10038)
+    ..add(10039)
+    ..add(10040)
+    ..add(10041)
+    ..add(10042)
+    ..add(10043)
+    ..add(10044)
+    ..add(10045)
+    ..add(10046)
+    ..add(10047)
+    ..add(10048)
+    ..add(10049)
+    ..add(10050)
+    ..add(10051)
+    ..add(10052)
+    ..add(10053)
+    ..add(10054)
+    ..add(10055)
+    ..add(10056)
+    ..add(10057)
+    ..add(10058)
+    ..add(10059)
+    ..add(10060)
+    ..add(10061)
+    ..add(10062)
+    ..add(10063)
+    ..add(10064)
+    ..add(10065)
+    ..add(10066)
+    ..add(10067)
+    ..add(10068)
+    ..add(10069)
+    ..add(10070)
+    ..add(10071)
+    ..add(10072)
+    ..add(10073)
+    ..add(10074)
+    ..add(10075)
+    ..add(10076)
+    ..add(10077)
+    ..add(10078)
+    ..add(10079)
+    ..add(10080)
+    ..add(10081)
+    ..add(10082)
+    ..add(10083)
+    ..add(10084)
+    ..add(10085)
+    ..add(10086)
+    ..add(10087)
+    ..add(10088)
+    ..add(10089)
+    ..add(10090)
+    ..add(10091)
+    ..add(10092)
+    ..add(10093)
+    ..add(10094)
+    ..add(10095)
+    ..add(10096)
+    ..add(10097)
+    ..add(10098)
+    ..add(10099)
+    ..add(10100)
+    ..add(10101)
+    ..add(10102)
+    ..add(10103)
+    ..add(10104)
+    ..add(10105)
+    ..add(10106)
+    ..add(10107)
+    ..add(10108)
+    ..add(10109)
+    ..add(10110)
+    ..add(10111)
+    ..add(10112)
+    ..add(10113)
+    ..add(10114)
+    ..add(10115)
+    ..add(10116)
+    ..add(10117)
+    ..add(10118)
+    ..add(10119)
+    ..add(10120)
+    ..add(10121)
+    ..add(10122)
+    ..add(10123)
+    ..add(10124)
+    ..add(10125)
+    ..add(10126)
+    ..add(10127)
+    ..add(10128)
+    ..add(10129)
+    ..add(10130)
+    ..add(10131)
+    ..add(10132)
+    ..add(10133)
+    ..add(10134)
+    ..add(10135)
+    ..add(10136)
+    ..add(10137)
+    ..add(10138)
+    ..add(10139)
+    ..add(10140)
+    ..add(10141)
+    ..add(10142)
+    ..add(10143)
+    ..add(10144)
+    ..add(10145)
+    ..add(10146)
+    ..add(10147)
+    ..add(10148)
+    ..add(10149)
+    ..add(10150)
+    ..add(10151)
+    ..add(10152)
+    ..add(10153)
+    ..add(10154)
+    ..add(10155)
+    ..add(10156)
+    ..add(10157)
+    ..add(10158)
+    ..add(10159)
+    ..add(10160)
+    ..add(10161)
+    ..add(10162)
+    ..add(10163)
+    ..add(10164)
+    ..add(10165)
+    ..add(10166)
+    ..add(10167)
+    ..add(10168)
+    ..add(10169)
+    ..add(10170)
+    ..add(10171)
+    ..add(10172)
+    ..add(10173)
+    ..add(10174)
+    ..add(10175)
+    ..add(10176)
+    ..add(10177)
+    ..add(10178)
+    ..add(10179)
+    ..add(10180)
+    ..add(10181)
+    ..add(10182)
+    ..add(10183)
+    ..add(10184)
+    ..add(10185)
+    ..add(10186)
+    ..add(10187)
+    ..add(10188)
+    ..add(10189)
+    ..add(10190)
+    ..add(10191)
+    ..add(10192)
+    ..add(10193)
+    ..add(10194)
+    ..add(10195)
+    ..add(10196)
+    ..add(10197)
+    ..add(10198)
+    ..add(10199)
+    ..add(10200)
+    ..add(10201)
+    ..add(10202)
+    ..add(10203)
+    ..add(10204)
+    ..add(10205)
+    ..add(10206)
+    ..add(10207)
+    ..add(10208)
+    ..add(10209)
+    ..add(10210)
+    ..add(10211)
+    ..add(10212)
+    ..add(10213)
+    ..add(10214)
+    ..add(10215)
+    ..add(10216)
+    ..add(10217)
+    ..add(10218)
+    ..add(10219)
+    ..add(10220)
+    ..add(10221)
+    ..add(10222)
+    ..add(10223)
+    ..add(10224)
+    ..add(10225)
+    ..add(10226)
+    ..add(10227)
+    ..add(10228)
+    ..add(10229)
+    ..add(10230)
+    ..add(10231)
+    ..add(10232)
+    ..add(10233)
+    ..add(10234)
+    ..add(10235)
+    ..add(10236)
+    ..add(10237)
+    ..add(10238)
+    ..add(10239)
+    ..add(10240)
+    ..add(10241)
+    ..add(10242)
+    ..add(10243)
+    ..add(10244)
+    ..add(10245)
+    ..add(10246)
+    ..add(10247)
+    ..add(10248)
+    ..add(10249)
+    ..add(10250)
+    ..add(10251)
+    ..add(10252)
+    ..add(10253)
+    ..add(10254)
+    ..add(10255)
+    ..add(10256)
+    ..add(10257)
+    ..add(10258)
+    ..add(10259)
+    ..add(10260)
+    ..add(10261)
+    ..add(10262)
+    ..add(10263)
+    ..add(10264)
+    ..add(10265)
+    ..add(10266)
+    ..add(10267)
+    ..add(10268)
+    ..add(10269)
+    ..add(10270)
+    ..add(10271)
+    ..add(10272)
+    ..add(10273)
+    ..add(10274)
+    ..add(10275)
+    ..add(10276)
+    ..add(10277)
+    ..add(10278)
+    ..add(10279)
+    ..add(10280)
+    ..add(10281)
+    ..add(10282)
+    ..add(10283)
+    ..add(10284)
+    ..add(10285)
+    ..add(10286)
+    ..add(10287)
+    ..add(10288)
+    ..add(10289)
+    ..add(10290)
+    ..add(10291)
+    ..add(10292)
+    ..add(10293)
+    ..add(10294)
+    ..add(10295)
+    ..add(10296)
+    ..add(10297)
+    ..add(10298)
+    ..add(10299)
+    ..add(10300)
+    ..add(10301)
+    ..add(10302)
+    ..add(10303)
+    ..add(10304)
+    ..add(10305)
+    ..add(10306)
+    ..add(10307)
+    ..add(10308)
+    ..add(10309)
+    ..add(10310)
+    ..add(10311)
+    ..add(10312)
+    ..add(10313)
+    ..add(10314)
+    ..add(10315)
+    ..add(10316)
+    ..add(10317)
+    ..add(10318)
+    ..add(10319)
+    ..add(10320)
+    ..add(10321)
+    ..add(10322)
+    ..add(10323)
+    ..add(10324)
+    ..add(10325)
+    ..add(10326)
+    ..add(10327)
+    ..add(10328)
+    ..add(10329)
+    ..add(10330)
+    ..add(10331)
+    ..add(10332)
+    ..add(10333)
+    ..add(10334)
+    ..add(10335)
+    ..add(10336)
+    ..add(10337)
+    ..add(10338)
+    ..add(10339)
+    ..add(10340)
+    ..add(10341)
+    ..add(10342)
+    ..add(10343)
+    ..add(10344)
+    ..add(10345)
+    ..add(10346)
+    ..add(10347)
+    ..add(10348)
+    ..add(10349)
+    ..add(10350)
+    ..add(10351)
+    ..add(10352)
+    ..add(10353)
+    ..add(10354)
+    ..add(10355)
+    ..add(10356)
+    ..add(10357)
+    ..add(10358)
+    ..add(10359)
+    ..add(10360)
+    ..add(10361)
+    ..add(10362)
+    ..add(10363)
+    ..add(10364)
+    ..add(10365)
+    ..add(10366)
+    ..add(10367)
+    ..add(10368)
+    ..add(10369)
+    ..add(10370)
+    ..add(10371)
+    ..add(10372)
+    ..add(10373)
+    ..add(10374)
+    ..add(10375)
+    ..add(10376)
+    ..add(10377)
+    ..add(10378)
+    ..add(10379)
+    ..add(10380)
+    ..add(10381)
+    ..add(10382)
+    ..add(10383)
+    ..add(10384)
+    ..add(10385)
+    ..add(10386)
+    ..add(10387)
+    ..add(10388)
+    ..add(10389)
+    ..add(10390)
+    ..add(10391)
+    ..add(10392)
+    ..add(10393)
+    ..add(10394)
+    ..add(10395)
+    ..add(10396)
+    ..add(10397)
+    ..add(10398)
+    ..add(10399)
+    ..add(10400)
+    ..add(10401)
+    ..add(10402)
+    ..add(10403)
+    ..add(10404)
+    ..add(10405)
+    ..add(10406)
+    ..add(10407)
+    ..add(10408)
+    ..add(10409)
+    ..add(10410)
+    ..add(10411)
+    ..add(10412)
+    ..add(10413)
+    ..add(10414)
+    ..add(10415)
+    ..add(10416)
+    ..add(10417)
+    ..add(10418)
+    ..add(10419)
+    ..add(10420)
+    ..add(10421)
+    ..add(10422)
+    ..add(10423)
+    ..add(10424)
+    ..add(10425)
+    ..add(10426)
+    ..add(10427)
+    ..add(10428)
+    ..add(10429)
+    ..add(10430)
+    ..add(10431)
+    ..add(10432)
+    ..add(10433)
+    ..add(10434)
+    ..add(10435)
+    ..add(10436)
+    ..add(10437)
+    ..add(10438)
+    ..add(10439)
+    ..add(10440)
+    ..add(10441)
+    ..add(10442)
+    ..add(10443)
+    ..add(10444)
+    ..add(10445)
+    ..add(10446)
+    ..add(10447)
+    ..add(10448)
+    ..add(10449)
+    ..add(10450)
+    ..add(10451)
+    ..add(10452)
+    ..add(10453)
+    ..add(10454)
+    ..add(10455)
+    ..add(10456)
+    ..add(10457)
+    ..add(10458)
+    ..add(10459)
+    ..add(10460)
+    ..add(10461)
+    ..add(10462)
+    ..add(10463)
+    ..add(10464)
+    ..add(10465)
+    ..add(10466)
+    ..add(10467)
+    ..add(10468)
+    ..add(10469)
+    ..add(10470)
+    ..add(10471)
+    ..add(10472)
+    ..add(10473)
+    ..add(10474)
+    ..add(10475)
+    ..add(10476)
+    ..add(10477)
+    ..add(10478)
+    ..add(10479)
+    ..add(10480)
+    ..add(10481)
+    ..add(10482)
+    ..add(10483)
+    ..add(10484)
+    ..add(10485)
+    ..add(10486)
+    ..add(10487)
+    ..add(10488)
+    ..add(10489)
+    ..add(10490)
+    ..add(10491)
+    ..add(10492)
+    ..add(10493)
+    ..add(10494)
+    ..add(10495)
+    ..add(10496)
+    ..add(10497)
+    ..add(10498)
+    ..add(10499)
+    ..add(10500)
+    ..add(10501)
+    ..add(10502)
+    ..add(10503)
+    ..add(10504)
+    ..add(10505)
+    ..add(10506)
+    ..add(10507)
+    ..add(10508)
+    ..add(10509)
+    ..add(10510)
+    ..add(10511)
+    ..add(10512)
+    ..add(10513)
+    ..add(10514)
+    ..add(10515)
+    ..add(10516)
+    ..add(10517)
+    ..add(10518)
+    ..add(10519)
+    ..add(10520)
+    ..add(10521)
+    ..add(10522)
+    ..add(10523)
+    ..add(10524)
+    ..add(10525)
+    ..add(10526)
+    ..add(10527)
+    ..add(10528)
+    ..add(10529)
+    ..add(10530)
+    ..add(10531)
+    ..add(10532)
+    ..add(10533)
+    ..add(10534)
+    ..add(10535)
+    ..add(10536)
+    ..add(10537)
+    ..add(10538)
+    ..add(10539)
+    ..add(10540)
+    ..add(10541)
+    ..add(10542)
+    ..add(10543)
+    ..add(10544)
+    ..add(10545)
+    ..add(10546)
+    ..add(10547)
+    ..add(10548)
+    ..add(10549)
+    ..add(10550)
+    ..add(10551)
+    ..add(10552)
+    ..add(10553)
+    ..add(10554)
+    ..add(10555)
+    ..add(10556)
+    ..add(10557)
+    ..add(10558)
+    ..add(10559)
+    ..add(10560)
+    ..add(10561)
+    ..add(10562)
+    ..add(10563)
+    ..add(10564)
+    ..add(10565)
+    ..add(10566)
+    ..add(10567)
+    ..add(10568)
+    ..add(10569)
+    ..add(10570)
+    ..add(10571)
+    ..add(10572)
+    ..add(10573)
+    ..add(10574)
+    ..add(10575)
+    ..add(10576)
+    ..add(10577)
+    ..add(10578)
+    ..add(10579)
+    ..add(10580)
+    ..add(10581)
+    ..add(10582)
+    ..add(10583)
+    ..add(10584)
+    ..add(10585)
+    ..add(10586)
+    ..add(10587)
+    ..add(10588)
+    ..add(10589)
+    ..add(10590)
+    ..add(10591)
+    ..add(10592)
+    ..add(10593)
+    ..add(10594)
+    ..add(10595)
+    ..add(10596)
+    ..add(10597)
+    ..add(10598)
+    ..add(10599)
+    ..add(10600)
+    ..add(10601)
+    ..add(10602)
+    ..add(10603)
+    ..add(10604)
+    ..add(10605)
+    ..add(10606)
+    ..add(10607)
+    ..add(10608)
+    ..add(10609)
+    ..add(10610)
+    ..add(10611)
+    ..add(10612)
+    ..add(10613)
+    ..add(10614)
+    ..add(10615)
+    ..add(10616)
+    ..add(10617)
+    ..add(10618)
+    ..add(10619)
+    ..add(10620)
+    ..add(10621)
+    ..add(10622)
+    ..add(10623)
+    ..add(10624)
+    ..add(10625)
+    ..add(10626)
+    ..add(10627)
+    ..add(10628)
+    ..add(10629)
+    ..add(10630)
+    ..add(10631)
+    ..add(10632)
+    ..add(10633)
+    ..add(10634)
+    ..add(10635)
+    ..add(10636)
+    ..add(10637)
+    ..add(10638)
+    ..add(10639)
+    ..add(10640)
+    ..add(10641)
+    ..add(10642)
+    ..add(10643)
+    ..add(10644)
+    ..add(10645)
+    ..add(10646)
+    ..add(10647)
+    ..add(10648)
+    ..add(10649)
+    ..add(10650)
+    ..add(10651)
+    ..add(10652)
+    ..add(10653)
+    ..add(10654)
+    ..add(10655)
+    ..add(10656)
+    ..add(10657)
+    ..add(10658)
+    ..add(10659)
+    ..add(10660)
+    ..add(10661)
+    ..add(10662)
+    ..add(10663)
+    ..add(10664)
+    ..add(10665)
+    ..add(10666)
+    ..add(10667)
+    ..add(10668)
+    ..add(10669)
+    ..add(10670)
+    ..add(10671)
+    ..add(10672)
+    ..add(10673)
+    ..add(10674)
+    ..add(10675)
+    ..add(10676)
+    ..add(10677)
+    ..add(10678)
+    ..add(10679)
+    ..add(10680)
+    ..add(10681)
+    ..add(10682)
+    ..add(10683)
+    ..add(10684)
+    ..add(10685)
+    ..add(10686)
+    ..add(10687)
+    ..add(10688)
+    ..add(10689)
+    ..add(10690)
+    ..add(10691)
+    ..add(10692)
+    ..add(10693)
+    ..add(10694)
+    ..add(10695)
+    ..add(10696)
+    ..add(10697)
+    ..add(10698)
+    ..add(10699)
+    ..add(10700)
+    ..add(10701)
+    ..add(10702)
+    ..add(10703)
+    ..add(10704)
+    ..add(10705)
+    ..add(10706)
+    ..add(10707)
+    ..add(10708)
+    ..add(10709)
+    ..add(10710)
+    ..add(10711)
+    ..add(10712)
+    ..add(10713)
+    ..add(10714)
+    ..add(10715)
+    ..add(10716)
+    ..add(10717)
+    ..add(10718)
+    ..add(10719)
+    ..add(10720)
+    ..add(10721)
+    ..add(10722)
+    ..add(10723)
+    ..add(10724)
+    ..add(10725)
+    ..add(10726)
+    ..add(10727)
+    ..add(10728)
+    ..add(10729)
+    ..add(10730)
+    ..add(10731)
+    ..add(10732)
+    ..add(10733)
+    ..add(10734)
+    ..add(10735)
+    ..add(10736)
+    ..add(10737)
+    ..add(10738)
+    ..add(10739)
+    ..add(10740)
+    ..add(10741)
+    ..add(10742)
+    ..add(10743)
+    ..add(10744)
+    ..add(10745)
+    ..add(10746)
+    ..add(10747)
+    ..add(10748)
+    ..add(10749)
+    ..add(10750)
+    ..add(10751)
+    ..add(10752)
+    ..add(10753)
+    ..add(10754)
+    ..add(10755)
+    ..add(10756)
+    ..add(10757)
+    ..add(10758)
+    ..add(10759)
+    ..add(10760)
+    ..add(10761)
+    ..add(10762)
+    ..add(10763)
+    ..add(10764)
+    ..add(10765)
+    ..add(10766)
+    ..add(10767)
+    ..add(10768)
+    ..add(10769)
+    ..add(10770)
+    ..add(10771)
+    ..add(10772)
+    ..add(10773)
+    ..add(10774)
+    ..add(10775)
+    ..add(10776)
+    ..add(10777)
+    ..add(10778)
+    ..add(10779)
+    ..add(10780)
+    ..add(10781)
+    ..add(10782)
+    ..add(10783)
+    ..add(10784)
+    ..add(10785)
+    ..add(10786)
+    ..add(10787)
+    ..add(10788)
+    ..add(10789)
+    ..add(10790)
+    ..add(10791)
+    ..add(10792)
+    ..add(10793)
+    ..add(10794)
+    ..add(10795)
+    ..add(10796)
+    ..add(10797)
+    ..add(10798)
+    ..add(10799)
+    ..add(10800)
+    ..add(10801)
+    ..add(10802)
+    ..add(10803)
+    ..add(10804)
+    ..add(10805)
+    ..add(10806)
+    ..add(10807)
+    ..add(10808)
+    ..add(10809)
+    ..add(10810)
+    ..add(10811)
+    ..add(10812)
+    ..add(10813)
+    ..add(10814)
+    ..add(10815)
+    ..add(10816)
+    ..add(10817)
+    ..add(10818)
+    ..add(10819)
+    ..add(10820)
+    ..add(10821)
+    ..add(10822)
+    ..add(10823)
+    ..add(10824)
+    ..add(10825)
+    ..add(10826)
+    ..add(10827)
+    ..add(10828)
+    ..add(10829)
+    ..add(10830)
+    ..add(10831)
+    ..add(10832)
+    ..add(10833)
+    ..add(10834)
+    ..add(10835)
+    ..add(10836)
+    ..add(10837)
+    ..add(10838)
+    ..add(10839)
+    ..add(10840)
+    ..add(10841)
+    ..add(10842)
+    ..add(10843)
+    ..add(10844)
+    ..add(10845)
+    ..add(10846)
+    ..add(10847)
+    ..add(10848)
+    ..add(10849)
+    ..add(10850)
+    ..add(10851)
+    ..add(10852)
+    ..add(10853)
+    ..add(10854)
+    ..add(10855)
+    ..add(10856)
+    ..add(10857)
+    ..add(10858)
+    ..add(10859)
+    ..add(10860)
+    ..add(10861)
+    ..add(10862)
+    ..add(10863)
+    ..add(10864)
+    ..add(10865)
+    ..add(10866)
+    ..add(10867)
+    ..add(10868)
+    ..add(10869)
+    ..add(10870)
+    ..add(10871)
+    ..add(10872)
+    ..add(10873)
+    ..add(10874)
+    ..add(10875)
+    ..add(10876)
+    ..add(10877)
+    ..add(10878)
+    ..add(10879)
+    ..add(10880)
+    ..add(10881)
+    ..add(10882)
+    ..add(10883)
+    ..add(10884)
+    ..add(10885)
+    ..add(10886)
+    ..add(10887)
+    ..add(10888)
+    ..add(10889)
+    ..add(10890)
+    ..add(10891)
+    ..add(10892)
+    ..add(10893)
+    ..add(10894)
+    ..add(10895)
+    ..add(10896)
+    ..add(10897)
+    ..add(10898)
+    ..add(10899)
+    ..add(10900)
+    ..add(10901)
+    ..add(10902)
+    ..add(10903)
+    ..add(10904)
+    ..add(10905)
+    ..add(10906)
+    ..add(10907)
+    ..add(10908)
+    ..add(10909)
+    ..add(10910)
+    ..add(10911)
+    ..add(10912)
+    ..add(10913)
+    ..add(10914)
+    ..add(10915)
+    ..add(10916)
+    ..add(10917)
+    ..add(10918)
+    ..add(10919)
+    ..add(10920)
+    ..add(10921)
+    ..add(10922)
+    ..add(10923)
+    ..add(10924)
+    ..add(10925)
+    ..add(10926)
+    ..add(10927)
+    ..add(10928)
+    ..add(10929)
+    ..add(10930)
+    ..add(10931)
+    ..add(10932)
+    ..add(10933)
+    ..add(10934)
+    ..add(10935)
+    ..add(10936)
+    ..add(10937)
+    ..add(10938)
+    ..add(10939)
+    ..add(10940)
+    ..add(10941)
+    ..add(10942)
+    ..add(10943)
+    ..add(10944)
+    ..add(10945)
+    ..add(10946)
+    ..add(10947)
+    ..add(10948)
+    ..add(10949)
+    ..add(10950)
+    ..add(10951)
+    ..add(10952)
+    ..add(10953)
+    ..add(10954)
+    ..add(10955)
+    ..add(10956)
+    ..add(10957)
+    ..add(10958)
+    ..add(10959)
+    ..add(10960)
+    ..add(10961)
+    ..add(10962)
+    ..add(10963)
+    ..add(10964)
+    ..add(10965)
+    ..add(10966)
+    ..add(10967)
+    ..add(10968)
+    ..add(10969)
+    ..add(10970)
+    ..add(10971)
+    ..add(10972)
+    ..add(10973)
+    ..add(10974)
+    ..add(10975)
+    ..add(10976)
+    ..add(10977)
+    ..add(10978)
+    ..add(10979)
+    ..add(10980)
+    ..add(10981)
+    ..add(10982)
+    ..add(10983)
+    ..add(10984)
+    ..add(10985)
+    ..add(10986)
+    ..add(10987)
+    ..add(10988)
+    ..add(10989)
+    ..add(10990)
+    ..add(10991)
+    ..add(10992)
+    ..add(10993)
+    ..add(10994)
+    ..add(10995)
+    ..add(10996)
+    ..add(10997)
+    ..add(10998)
+    ..add(10999)
+    ..add(11000)
+    ..add(11001)
+    ..add(11002)
+    ..add(11003)
+    ..add(11004)
+    ..add(11005)
+    ..add(11006)
+    ..add(11007)
+    ..add(11008)
+    ..add(11009)
+    ..add(11010)
+    ..add(11011)
+    ..add(11012)
+    ..add(11013)
+    ..add(11014)
+    ..add(11015)
+    ..add(11016)
+    ..add(11017)
+    ..add(11018)
+    ..add(11019)
+    ..add(11020)
+    ..add(11021)
+    ..add(11022)
+    ..add(11023)
+    ..add(11024)
+    ..add(11025)
+    ..add(11026)
+    ..add(11027)
+    ..add(11028)
+    ..add(11029)
+    ..add(11030)
+    ..add(11031)
+    ..add(11032)
+    ..add(11033)
+    ..add(11034)
+    ..add(11035)
+    ..add(11036)
+    ..add(11037)
+    ..add(11038)
+    ..add(11039)
+    ..add(11040)
+    ..add(11041)
+    ..add(11042)
+    ..add(11043)
+    ..add(11044)
+    ..add(11045)
+    ..add(11046)
+    ..add(11047)
+    ..add(11048)
+    ..add(11049)
+    ..add(11050)
+    ..add(11051)
+    ..add(11052)
+    ..add(11053)
+    ..add(11054)
+    ..add(11055)
+    ..add(11056)
+    ..add(11057)
+    ..add(11058)
+    ..add(11059)
+    ..add(11060)
+    ..add(11061)
+    ..add(11062)
+    ..add(11063)
+    ..add(11064)
+    ..add(11065)
+    ..add(11066)
+    ..add(11067)
+    ..add(11068)
+    ..add(11069)
+    ..add(11070)
+    ..add(11071)
+    ..add(11072)
+    ..add(11073)
+    ..add(11074)
+    ..add(11075)
+    ..add(11076)
+    ..add(11077)
+    ..add(11078)
+    ..add(11079)
+    ..add(11080)
+    ..add(11081)
+    ..add(11082)
+    ..add(11083)
+    ..add(11084)
+    ..add(11085)
+    ..add(11086)
+    ..add(11087)
+    ..add(11088)
+    ..add(11089)
+    ..add(11090)
+    ..add(11091)
+    ..add(11092)
+    ..add(11093)
+    ..add(11094)
+    ..add(11095)
+    ..add(11096)
+    ..add(11097)
+    ..add(11098)
+    ..add(11099)
+    ..add(11100)
+    ..add(11101)
+    ..add(11102)
+    ..add(11103)
+    ..add(11104)
+    ..add(11105)
+    ..add(11106)
+    ..add(11107)
+    ..add(11108)
+    ..add(11109)
+    ..add(11110)
+    ..add(11111)
+    ..add(11112)
+    ..add(11113)
+    ..add(11114)
+    ..add(11115)
+    ..add(11116)
+    ..add(11117)
+    ..add(11118)
+    ..add(11119)
+    ..add(11120)
+    ..add(11121)
+    ..add(11122)
+    ..add(11123)
+    ..add(11124)
+    ..add(11125)
+    ..add(11126)
+    ..add(11127)
+    ..add(11128)
+    ..add(11129)
+    ..add(11130)
+    ..add(11131)
+    ..add(11132)
+    ..add(11133)
+    ..add(11134)
+    ..add(11135)
+    ..add(11136)
+    ..add(11137)
+    ..add(11138)
+    ..add(11139)
+    ..add(11140)
+    ..add(11141)
+    ..add(11142)
+    ..add(11143)
+    ..add(11144)
+    ..add(11145)
+    ..add(11146)
+    ..add(11147)
+    ..add(11148)
+    ..add(11149)
+    ..add(11150)
+    ..add(11151)
+    ..add(11152)
+    ..add(11153)
+    ..add(11154)
+    ..add(11155)
+    ..add(11156)
+    ..add(11157)
+    ..add(11158)
+    ..add(11159)
+    ..add(11160)
+    ..add(11161)
+    ..add(11162)
+    ..add(11163)
+    ..add(11164)
+    ..add(11165)
+    ..add(11166)
+    ..add(11167)
+    ..add(11168)
+    ..add(11169)
+    ..add(11170)
+    ..add(11171)
+    ..add(11172)
+    ..add(11173)
+    ..add(11174)
+    ..add(11175)
+    ..add(11176)
+    ..add(11177)
+    ..add(11178)
+    ..add(11179)
+    ..add(11180)
+    ..add(11181)
+    ..add(11182)
+    ..add(11183)
+    ..add(11184)
+    ..add(11185)
+    ..add(11186)
+    ..add(11187)
+    ..add(11188)
+    ..add(11189)
+    ..add(11190)
+    ..add(11191)
+    ..add(11192)
+    ..add(11193)
+    ..add(11194)
+    ..add(11195)
+    ..add(11196)
+    ..add(11197)
+    ..add(11198)
+    ..add(11199)
+    ..add(11200)
+    ..add(11201)
+    ..add(11202)
+    ..add(11203)
+    ..add(11204)
+    ..add(11205)
+    ..add(11206)
+    ..add(11207)
+    ..add(11208)
+    ..add(11209)
+    ..add(11210)
+    ..add(11211)
+    ..add(11212)
+    ..add(11213)
+    ..add(11214)
+    ..add(11215)
+    ..add(11216)
+    ..add(11217)
+    ..add(11218)
+    ..add(11219)
+    ..add(11220)
+    ..add(11221)
+    ..add(11222)
+    ..add(11223)
+    ..add(11224)
+    ..add(11225)
+    ..add(11226)
+    ..add(11227)
+    ..add(11228)
+    ..add(11229)
+    ..add(11230)
+    ..add(11231)
+    ..add(11232)
+    ..add(11233)
+    ..add(11234)
+    ..add(11235)
+    ..add(11236)
+    ..add(11237)
+    ..add(11238)
+    ..add(11239)
+    ..add(11240)
+    ..add(11241)
+    ..add(11242)
+    ..add(11243)
+    ..add(11244)
+    ..add(11245)
+    ..add(11246)
+    ..add(11247)
+    ..add(11248)
+    ..add(11249)
+    ..add(11250)
+    ..add(11251)
+    ..add(11252)
+    ..add(11253)
+    ..add(11254)
+    ..add(11255)
+    ..add(11256)
+    ..add(11257)
+    ..add(11258)
+    ..add(11259)
+    ..add(11260)
+    ..add(11261)
+    ..add(11262)
+    ..add(11263)
+    ..add(11264)
+    ..add(11265)
+    ..add(11266)
+    ..add(11267)
+    ..add(11268)
+    ..add(11269)
+    ..add(11270)
+    ..add(11271)
+    ..add(11272)
+    ..add(11273)
+    ..add(11274)
+    ..add(11275)
+    ..add(11276)
+    ..add(11277)
+    ..add(11278)
+    ..add(11279)
+    ..add(11280)
+    ..add(11281)
+    ..add(11282)
+    ..add(11283)
+    ..add(11284)
+    ..add(11285)
+    ..add(11286)
+    ..add(11287)
+    ..add(11288)
+    ..add(11289)
+    ..add(11290)
+    ..add(11291)
+    ..add(11292)
+    ..add(11293)
+    ..add(11294)
+    ..add(11295)
+    ..add(11296)
+    ..add(11297)
+    ..add(11298)
+    ..add(11299)
+    ..add(11300)
+    ..add(11301)
+    ..add(11302)
+    ..add(11303)
+    ..add(11304)
+    ..add(11305)
+    ..add(11306)
+    ..add(11307)
+    ..add(11308)
+    ..add(11309)
+    ..add(11310)
+    ..add(11311)
+    ..add(11312)
+    ..add(11313)
+    ..add(11314)
+    ..add(11315)
+    ..add(11316)
+    ..add(11317)
+    ..add(11318)
+    ..add(11319)
+    ..add(11320)
+    ..add(11321)
+    ..add(11322)
+    ..add(11323)
+    ..add(11324)
+    ..add(11325)
+    ..add(11326)
+    ..add(11327)
+    ..add(11328)
+    ..add(11329)
+    ..add(11330)
+    ..add(11331)
+    ..add(11332)
+    ..add(11333)
+    ..add(11334)
+    ..add(11335)
+    ..add(11336)
+    ..add(11337)
+    ..add(11338)
+    ..add(11339)
+    ..add(11340)
+    ..add(11341)
+    ..add(11342)
+    ..add(11343)
+    ..add(11344)
+    ..add(11345)
+    ..add(11346)
+    ..add(11347)
+    ..add(11348)
+    ..add(11349)
+    ..add(11350)
+    ..add(11351)
+    ..add(11352)
+    ..add(11353)
+    ..add(11354)
+    ..add(11355)
+    ..add(11356)
+    ..add(11357)
+    ..add(11358)
+    ..add(11359)
+    ..add(11360)
+    ..add(11361)
+    ..add(11362)
+    ..add(11363)
+    ..add(11364)
+    ..add(11365)
+    ..add(11366)
+    ..add(11367)
+    ..add(11368)
+    ..add(11369)
+    ..add(11370)
+    ..add(11371)
+    ..add(11372)
+    ..add(11373)
+    ..add(11374)
+    ..add(11375)
+    ..add(11376)
+    ..add(11377)
+    ..add(11378)
+    ..add(11379)
+    ..add(11380)
+    ..add(11381)
+    ..add(11382)
+    ..add(11383)
+    ..add(11384)
+    ..add(11385)
+    ..add(11386)
+    ..add(11387)
+    ..add(11388)
+    ..add(11389)
+    ..add(11390)
+    ..add(11391)
+    ..add(11392)
+    ..add(11393)
+    ..add(11394)
+    ..add(11395)
+    ..add(11396)
+    ..add(11397)
+    ..add(11398)
+    ..add(11399)
+    ..add(11400)
+    ..add(11401)
+    ..add(11402)
+    ..add(11403)
+    ..add(11404)
+    ..add(11405)
+    ..add(11406)
+    ..add(11407)
+    ..add(11408)
+    ..add(11409)
+    ..add(11410)
+    ..add(11411)
+    ..add(11412)
+    ..add(11413)
+    ..add(11414)
+    ..add(11415)
+    ..add(11416)
+    ..add(11417)
+    ..add(11418)
+    ..add(11419)
+    ..add(11420)
+    ..add(11421)
+    ..add(11422)
+    ..add(11423)
+    ..add(11424)
+    ..add(11425)
+    ..add(11426)
+    ..add(11427)
+    ..add(11428)
+    ..add(11429)
+    ..add(11430)
+    ..add(11431)
+    ..add(11432)
+    ..add(11433)
+    ..add(11434)
+    ..add(11435)
+    ..add(11436)
+    ..add(11437)
+    ..add(11438)
+    ..add(11439)
+    ..add(11440)
+    ..add(11441)
+    ..add(11442)
+    ..add(11443)
+    ..add(11444)
+    ..add(11445)
+    ..add(11446)
+    ..add(11447)
+    ..add(11448)
+    ..add(11449)
+    ..add(11450)
+    ..add(11451)
+    ..add(11452)
+    ..add(11453)
+    ..add(11454)
+    ..add(11455)
+    ..add(11456)
+    ..add(11457)
+    ..add(11458)
+    ..add(11459)
+    ..add(11460)
+    ..add(11461)
+    ..add(11462)
+    ..add(11463)
+    ..add(11464)
+    ..add(11465)
+    ..add(11466)
+    ..add(11467)
+    ..add(11468)
+    ..add(11469)
+    ..add(11470)
+    ..add(11471)
+    ..add(11472)
+    ..add(11473)
+    ..add(11474)
+    ..add(11475)
+    ..add(11476)
+    ..add(11477)
+    ..add(11478)
+    ..add(11479)
+    ..add(11480)
+    ..add(11481)
+    ..add(11482)
+    ..add(11483)
+    ..add(11484)
+    ..add(11485)
+    ..add(11486)
+    ..add(11487)
+    ..add(11488)
+    ..add(11489)
+    ..add(11490)
+    ..add(11491)
+    ..add(11492)
+    ..add(11493)
+    ..add(11494)
+    ..add(11495)
+    ..add(11496)
+    ..add(11497)
+    ..add(11498)
+    ..add(11499)
+    ..add(11500)
+    ..add(11501)
+    ..add(11502)
+    ..add(11503)
+    ..add(11504)
+    ..add(11505)
+    ..add(11506)
+    ..add(11507)
+    ..add(11508)
+    ..add(11509)
+    ..add(11510)
+    ..add(11511)
+    ..add(11512)
+    ..add(11513)
+    ..add(11514)
+    ..add(11515)
+    ..add(11516)
+    ..add(11517)
+    ..add(11518)
+    ..add(11519)
+    ..add(11520)
+    ..add(11521)
+    ..add(11522)
+    ..add(11523)
+    ..add(11524)
+    ..add(11525)
+    ..add(11526)
+    ..add(11527)
+    ..add(11528)
+    ..add(11529)
+    ..add(11530)
+    ..add(11531)
+    ..add(11532)
+    ..add(11533)
+    ..add(11534)
+    ..add(11535)
+    ..add(11536)
+    ..add(11537)
+    ..add(11538)
+    ..add(11539)
+    ..add(11540)
+    ..add(11541)
+    ..add(11542)
+    ..add(11543)
+    ..add(11544)
+    ..add(11545)
+    ..add(11546)
+    ..add(11547)
+    ..add(11548)
+    ..add(11549)
+    ..add(11550)
+    ..add(11551)
+    ..add(11552)
+    ..add(11553)
+    ..add(11554)
+    ..add(11555)
+    ..add(11556)
+    ..add(11557)
+    ..add(11558)
+    ..add(11559)
+    ..add(11560)
+    ..add(11561)
+    ..add(11562)
+    ..add(11563)
+    ..add(11564)
+    ..add(11565)
+    ..add(11566)
+    ..add(11567)
+    ..add(11568)
+    ..add(11569)
+    ..add(11570)
+    ..add(11571)
+    ..add(11572)
+    ..add(11573)
+    ..add(11574)
+    ..add(11575)
+    ..add(11576)
+    ..add(11577)
+    ..add(11578)
+    ..add(11579)
+    ..add(11580)
+    ..add(11581)
+    ..add(11582)
+    ..add(11583)
+    ..add(11584)
+    ..add(11585)
+    ..add(11586)
+    ..add(11587)
+    ..add(11588)
+    ..add(11589)
+    ..add(11590)
+    ..add(11591)
+    ..add(11592)
+    ..add(11593)
+    ..add(11594)
+    ..add(11595)
+    ..add(11596)
+    ..add(11597)
+    ..add(11598)
+    ..add(11599)
+    ..add(11600)
+    ..add(11601)
+    ..add(11602)
+    ..add(11603)
+    ..add(11604)
+    ..add(11605)
+    ..add(11606)
+    ..add(11607)
+    ..add(11608)
+    ..add(11609)
+    ..add(11610)
+    ..add(11611)
+    ..add(11612)
+    ..add(11613)
+    ..add(11614)
+    ..add(11615)
+    ..add(11616)
+    ..add(11617)
+    ..add(11618)
+    ..add(11619)
+    ..add(11620)
+    ..add(11621)
+    ..add(11622)
+    ..add(11623)
+    ..add(11624)
+    ..add(11625)
+    ..add(11626)
+    ..add(11627)
+    ..add(11628)
+    ..add(11629)
+    ..add(11630)
+    ..add(11631)
+    ..add(11632)
+    ..add(11633)
+    ..add(11634)
+    ..add(11635)
+    ..add(11636)
+    ..add(11637)
+    ..add(11638)
+    ..add(11639)
+    ..add(11640)
+    ..add(11641)
+    ..add(11642)
+    ..add(11643)
+    ..add(11644)
+    ..add(11645)
+    ..add(11646)
+    ..add(11647)
+    ..add(11648)
+    ..add(11649)
+    ..add(11650)
+    ..add(11651)
+    ..add(11652)
+    ..add(11653)
+    ..add(11654)
+    ..add(11655)
+    ..add(11656)
+    ..add(11657)
+    ..add(11658)
+    ..add(11659)
+    ..add(11660)
+    ..add(11661)
+    ..add(11662)
+    ..add(11663)
+    ..add(11664)
+    ..add(11665)
+    ..add(11666)
+    ..add(11667)
+    ..add(11668)
+    ..add(11669)
+    ..add(11670)
+    ..add(11671)
+    ..add(11672)
+    ..add(11673)
+    ..add(11674)
+    ..add(11675)
+    ..add(11676)
+    ..add(11677)
+    ..add(11678)
+    ..add(11679)
+    ..add(11680)
+    ..add(11681)
+    ..add(11682)
+    ..add(11683)
+    ..add(11684)
+    ..add(11685)
+    ..add(11686)
+    ..add(11687)
+    ..add(11688)
+    ..add(11689)
+    ..add(11690)
+    ..add(11691)
+    ..add(11692)
+    ..add(11693)
+    ..add(11694)
+    ..add(11695)
+    ..add(11696)
+    ..add(11697)
+    ..add(11698)
+    ..add(11699)
+    ..add(11700)
+    ..add(11701)
+    ..add(11702)
+    ..add(11703)
+    ..add(11704)
+    ..add(11705)
+    ..add(11706)
+    ..add(11707)
+    ..add(11708)
+    ..add(11709)
+    ..add(11710)
+    ..add(11711)
+    ..add(11712)
+    ..add(11713)
+    ..add(11714)
+    ..add(11715)
+    ..add(11716)
+    ..add(11717)
+    ..add(11718)
+    ..add(11719)
+    ..add(11720)
+    ..add(11721)
+    ..add(11722)
+    ..add(11723)
+    ..add(11724)
+    ..add(11725)
+    ..add(11726)
+    ..add(11727)
+    ..add(11728)
+    ..add(11729)
+    ..add(11730)
+    ..add(11731)
+    ..add(11732)
+    ..add(11733)
+    ..add(11734)
+    ..add(11735)
+    ..add(11736)
+    ..add(11737)
+    ..add(11738)
+    ..add(11739)
+    ..add(11740)
+    ..add(11741)
+    ..add(11742)
+    ..add(11743)
+    ..add(11744)
+    ..add(11745)
+    ..add(11746)
+    ..add(11747)
+    ..add(11748)
+    ..add(11749)
+    ..add(11750)
+    ..add(11751)
+    ..add(11752)
+    ..add(11753)
+    ..add(11754)
+    ..add(11755)
+    ..add(11756)
+    ..add(11757)
+    ..add(11758)
+    ..add(11759)
+    ..add(11760)
+    ..add(11761)
+    ..add(11762)
+    ..add(11763)
+    ..add(11764)
+    ..add(11765)
+    ..add(11766)
+    ..add(11767)
+    ..add(11768)
+    ..add(11769)
+    ..add(11770)
+    ..add(11771)
+    ..add(11772)
+    ..add(11773)
+    ..add(11774)
+    ..add(11775)
+    ..add(11776)
+    ..add(11777)
+    ..add(11778)
+    ..add(11779)
+    ..add(11780)
+    ..add(11781)
+    ..add(11782)
+    ..add(11783)
+    ..add(11784)
+    ..add(11785)
+    ..add(11786)
+    ..add(11787)
+    ..add(11788)
+    ..add(11789)
+    ..add(11790)
+    ..add(11791)
+    ..add(11792)
+    ..add(11793)
+    ..add(11794)
+    ..add(11795)
+    ..add(11796)
+    ..add(11797)
+    ..add(11798)
+    ..add(11799)
+    ..add(11800)
+    ..add(11801)
+    ..add(11802)
+    ..add(11803)
+    ..add(11804)
+    ..add(11805)
+    ..add(11806)
+    ..add(11807)
+    ..add(11808)
+    ..add(11809)
+    ..add(11810)
+    ..add(11811)
+    ..add(11812)
+    ..add(11813)
+    ..add(11814)
+    ..add(11815)
+    ..add(11816)
+    ..add(11817)
+    ..add(11818)
+    ..add(11819)
+    ..add(11820)
+    ..add(11821)
+    ..add(11822)
+    ..add(11823)
+    ..add(11824)
+    ..add(11825)
+    ..add(11826)
+    ..add(11827)
+    ..add(11828)
+    ..add(11829)
+    ..add(11830)
+    ..add(11831)
+    ..add(11832)
+    ..add(11833)
+    ..add(11834)
+    ..add(11835)
+    ..add(11836)
+    ..add(11837)
+    ..add(11838)
+    ..add(11839)
+    ..add(11840)
+    ..add(11841)
+    ..add(11842)
+    ..add(11843)
+    ..add(11844)
+    ..add(11845)
+    ..add(11846)
+    ..add(11847)
+    ..add(11848)
+    ..add(11849)
+    ..add(11850)
+    ..add(11851)
+    ..add(11852)
+    ..add(11853)
+    ..add(11854)
+    ..add(11855)
+    ..add(11856)
+    ..add(11857)
+    ..add(11858)
+    ..add(11859)
+    ..add(11860)
+    ..add(11861)
+    ..add(11862)
+    ..add(11863)
+    ..add(11864)
+    ..add(11865)
+    ..add(11866)
+    ..add(11867)
+    ..add(11868)
+    ..add(11869)
+    ..add(11870)
+    ..add(11871)
+    ..add(11872)
+    ..add(11873)
+    ..add(11874)
+    ..add(11875)
+    ..add(11876)
+    ..add(11877)
+    ..add(11878)
+    ..add(11879)
+    ..add(11880)
+    ..add(11881)
+    ..add(11882)
+    ..add(11883)
+    ..add(11884)
+    ..add(11885)
+    ..add(11886)
+    ..add(11887)
+    ..add(11888)
+    ..add(11889)
+    ..add(11890)
+    ..add(11891)
+    ..add(11892)
+    ..add(11893)
+    ..add(11894)
+    ..add(11895)
+    ..add(11896)
+    ..add(11897)
+    ..add(11898)
+    ..add(11899)
+    ..add(11900)
+    ..add(11901)
+    ..add(11902)
+    ..add(11903)
+    ..add(11904)
+    ..add(11905)
+    ..add(11906)
+    ..add(11907)
+    ..add(11908)
+    ..add(11909)
+    ..add(11910)
+    ..add(11911)
+    ..add(11912)
+    ..add(11913)
+    ..add(11914)
+    ..add(11915)
+    ..add(11916)
+    ..add(11917)
+    ..add(11918)
+    ..add(11919)
+    ..add(11920)
+    ..add(11921)
+    ..add(11922)
+    ..add(11923)
+    ..add(11924)
+    ..add(11925)
+    ..add(11926)
+    ..add(11927)
+    ..add(11928)
+    ..add(11929)
+    ..add(11930)
+    ..add(11931)
+    ..add(11932)
+    ..add(11933)
+    ..add(11934)
+    ..add(11935)
+    ..add(11936)
+    ..add(11937)
+    ..add(11938)
+    ..add(11939)
+    ..add(11940)
+    ..add(11941)
+    ..add(11942)
+    ..add(11943)
+    ..add(11944)
+    ..add(11945)
+    ..add(11946)
+    ..add(11947)
+    ..add(11948)
+    ..add(11949)
+    ..add(11950)
+    ..add(11951)
+    ..add(11952)
+    ..add(11953)
+    ..add(11954)
+    ..add(11955)
+    ..add(11956)
+    ..add(11957)
+    ..add(11958)
+    ..add(11959)
+    ..add(11960)
+    ..add(11961)
+    ..add(11962)
+    ..add(11963)
+    ..add(11964)
+    ..add(11965)
+    ..add(11966)
+    ..add(11967)
+    ..add(11968)
+    ..add(11969)
+    ..add(11970)
+    ..add(11971)
+    ..add(11972)
+    ..add(11973)
+    ..add(11974)
+    ..add(11975)
+    ..add(11976)
+    ..add(11977)
+    ..add(11978)
+    ..add(11979)
+    ..add(11980)
+    ..add(11981)
+    ..add(11982)
+    ..add(11983)
+    ..add(11984)
+    ..add(11985)
+    ..add(11986)
+    ..add(11987)
+    ..add(11988)
+    ..add(11989)
+    ..add(11990)
+    ..add(11991)
+    ..add(11992)
+    ..add(11993)
+    ..add(11994)
+    ..add(11995)
+    ..add(11996)
+    ..add(11997)
+    ..add(11998)
+    ..add(11999)
+    ..add(12000)
+    ..add(12001)
+    ..add(12002)
+    ..add(12003)
+    ..add(12004)
+    ..add(12005)
+    ..add(12006)
+    ..add(12007)
+    ..add(12008)
+    ..add(12009)
+    ..add(12010)
+    ..add(12011)
+    ..add(12012)
+    ..add(12013)
+    ..add(12014)
+    ..add(12015)
+    ..add(12016)
+    ..add(12017)
+    ..add(12018)
+    ..add(12019)
+    ..add(12020)
+    ..add(12021)
+    ..add(12022)
+    ..add(12023)
+    ..add(12024)
+    ..add(12025)
+    ..add(12026)
+    ..add(12027)
+    ..add(12028)
+    ..add(12029)
+    ..add(12030)
+    ..add(12031)
+    ..add(12032)
+    ..add(12033)
+    ..add(12034)
+    ..add(12035)
+    ..add(12036)
+    ..add(12037)
+    ..add(12038)
+    ..add(12039)
+    ..add(12040)
+    ..add(12041)
+    ..add(12042)
+    ..add(12043)
+    ..add(12044)
+    ..add(12045)
+    ..add(12046)
+    ..add(12047)
+    ..add(12048)
+    ..add(12049)
+    ..add(12050)
+    ..add(12051)
+    ..add(12052)
+    ..add(12053)
+    ..add(12054)
+    ..add(12055)
+    ..add(12056)
+    ..add(12057)
+    ..add(12058)
+    ..add(12059)
+    ..add(12060)
+    ..add(12061)
+    ..add(12062)
+    ..add(12063)
+    ..add(12064)
+    ..add(12065)
+    ..add(12066)
+    ..add(12067)
+    ..add(12068)
+    ..add(12069)
+    ..add(12070)
+    ..add(12071)
+    ..add(12072)
+    ..add(12073)
+    ..add(12074)
+    ..add(12075)
+    ..add(12076)
+    ..add(12077)
+    ..add(12078)
+    ..add(12079)
+    ..add(12080)
+    ..add(12081)
+    ..add(12082)
+    ..add(12083)
+    ..add(12084)
+    ..add(12085)
+    ..add(12086)
+    ..add(12087)
+    ..add(12088)
+    ..add(12089)
+    ..add(12090)
+    ..add(12091)
+    ..add(12092)
+    ..add(12093)
+    ..add(12094)
+    ..add(12095)
+    ..add(12096)
+    ..add(12097)
+    ..add(12098)
+    ..add(12099)
+    ..add(12100)
+    ..add(12101)
+    ..add(12102)
+    ..add(12103)
+    ..add(12104)
+    ..add(12105)
+    ..add(12106)
+    ..add(12107)
+    ..add(12108)
+    ..add(12109)
+    ..add(12110)
+    ..add(12111)
+    ..add(12112)
+    ..add(12113)
+    ..add(12114)
+    ..add(12115)
+    ..add(12116)
+    ..add(12117)
+    ..add(12118)
+    ..add(12119)
+    ..add(12120)
+    ..add(12121)
+    ..add(12122)
+    ..add(12123)
+    ..add(12124)
+    ..add(12125)
+    ..add(12126)
+    ..add(12127)
+    ..add(12128)
+    ..add(12129)
+    ..add(12130)
+    ..add(12131)
+    ..add(12132)
+    ..add(12133)
+    ..add(12134)
+    ..add(12135)
+    ..add(12136)
+    ..add(12137)
+    ..add(12138)
+    ..add(12139)
+    ..add(12140)
+    ..add(12141)
+    ..add(12142)
+    ..add(12143)
+    ..add(12144)
+    ..add(12145)
+    ..add(12146)
+    ..add(12147)
+    ..add(12148)
+    ..add(12149)
+    ..add(12150)
+    ..add(12151)
+    ..add(12152)
+    ..add(12153)
+    ..add(12154)
+    ..add(12155)
+    ..add(12156)
+    ..add(12157)
+    ..add(12158)
+    ..add(12159)
+    ..add(12160)
+    ..add(12161)
+    ..add(12162)
+    ..add(12163)
+    ..add(12164)
+    ..add(12165)
+    ..add(12166)
+    ..add(12167)
+    ..add(12168)
+    ..add(12169)
+    ..add(12170)
+    ..add(12171)
+    ..add(12172)
+    ..add(12173)
+    ..add(12174)
+    ..add(12175)
+    ..add(12176)
+    ..add(12177)
+    ..add(12178)
+    ..add(12179)
+    ..add(12180)
+    ..add(12181)
+    ..add(12182)
+    ..add(12183)
+    ..add(12184)
+    ..add(12185)
+    ..add(12186)
+    ..add(12187)
+    ..add(12188)
+    ..add(12189)
+    ..add(12190)
+    ..add(12191)
+    ..add(12192)
+    ..add(12193)
+    ..add(12194)
+    ..add(12195)
+    ..add(12196)
+    ..add(12197)
+    ..add(12198)
+    ..add(12199)
+    ..add(12200)
+    ..add(12201)
+    ..add(12202)
+    ..add(12203)
+    ..add(12204)
+    ..add(12205)
+    ..add(12206)
+    ..add(12207)
+    ..add(12208)
+    ..add(12209)
+    ..add(12210)
+    ..add(12211)
+    ..add(12212)
+    ..add(12213)
+    ..add(12214)
+    ..add(12215)
+    ..add(12216)
+    ..add(12217)
+    ..add(12218)
+    ..add(12219)
+    ..add(12220)
+    ..add(12221)
+    ..add(12222)
+    ..add(12223)
+    ..add(12224)
+    ..add(12225)
+    ..add(12226)
+    ..add(12227)
+    ..add(12228)
+    ..add(12229)
+    ..add(12230)
+    ..add(12231)
+    ..add(12232)
+    ..add(12233)
+    ..add(12234)
+    ..add(12235)
+    ..add(12236)
+    ..add(12237)
+    ..add(12238)
+    ..add(12239)
+    ..add(12240)
+    ..add(12241)
+    ..add(12242)
+    ..add(12243)
+    ..add(12244)
+    ..add(12245)
+    ..add(12246)
+    ..add(12247)
+    ..add(12248)
+    ..add(12249)
+    ..add(12250)
+    ..add(12251)
+    ..add(12252)
+    ..add(12253)
+    ..add(12254)
+    ..add(12255)
+    ..add(12256)
+    ..add(12257)
+    ..add(12258)
+    ..add(12259)
+    ..add(12260)
+    ..add(12261)
+    ..add(12262)
+    ..add(12263)
+    ..add(12264)
+    ..add(12265)
+    ..add(12266)
+    ..add(12267)
+    ..add(12268)
+    ..add(12269)
+    ..add(12270)
+    ..add(12271)
+    ..add(12272)
+    ..add(12273)
+    ..add(12274)
+    ..add(12275)
+    ..add(12276)
+    ..add(12277)
+    ..add(12278)
+    ..add(12279)
+    ..add(12280)
+    ..add(12281)
+    ..add(12282)
+    ..add(12283)
+    ..add(12284)
+    ..add(12285)
+    ..add(12286)
+    ..add(12287)
+    ..add(12288)
+    ..add(12289)
+    ..add(12290)
+    ..add(12291)
+    ..add(12292)
+    ..add(12293)
+    ..add(12294)
+    ..add(12295)
+    ..add(12296)
+    ..add(12297)
+    ..add(12298)
+    ..add(12299)
+    ..add(12300)
+    ..add(12301)
+    ..add(12302)
+    ..add(12303)
+    ..add(12304)
+    ..add(12305)
+    ..add(12306)
+    ..add(12307)
+    ..add(12308)
+    ..add(12309)
+    ..add(12310)
+    ..add(12311)
+    ..add(12312)
+    ..add(12313)
+    ..add(12314)
+    ..add(12315)
+    ..add(12316)
+    ..add(12317)
+    ..add(12318)
+    ..add(12319)
+    ..add(12320)
+    ..add(12321)
+    ..add(12322)
+    ..add(12323)
+    ..add(12324)
+    ..add(12325)
+    ..add(12326)
+    ..add(12327)
+    ..add(12328)
+    ..add(12329)
+    ..add(12330)
+    ..add(12331)
+    ..add(12332)
+    ..add(12333)
+    ..add(12334)
+    ..add(12335)
+    ..add(12336)
+    ..add(12337)
+    ..add(12338)
+    ..add(12339)
+    ..add(12340)
+    ..add(12341)
+    ..add(12342)
+    ..add(12343)
+    ..add(12344)
+    ..add(12345)
+    ..add(12346)
+    ..add(12347)
+    ..add(12348)
+    ..add(12349)
+    ..add(12350)
+    ..add(12351)
+    ..add(12352)
+    ..add(12353)
+    ..add(12354)
+    ..add(12355)
+    ..add(12356)
+    ..add(12357)
+    ..add(12358)
+    ..add(12359)
+    ..add(12360)
+    ..add(12361)
+    ..add(12362)
+    ..add(12363)
+    ..add(12364)
+    ..add(12365)
+    ..add(12366)
+    ..add(12367)
+    ..add(12368)
+    ..add(12369)
+    ..add(12370)
+    ..add(12371)
+    ..add(12372)
+    ..add(12373)
+    ..add(12374)
+    ..add(12375)
+    ..add(12376)
+    ..add(12377)
+    ..add(12378)
+    ..add(12379)
+    ..add(12380)
+    ..add(12381)
+    ..add(12382)
+    ..add(12383)
+    ..add(12384)
+    ..add(12385)
+    ..add(12386)
+    ..add(12387)
+    ..add(12388)
+    ..add(12389)
+    ..add(12390)
+    ..add(12391)
+    ..add(12392)
+    ..add(12393)
+    ..add(12394)
+    ..add(12395)
+    ..add(12396)
+    ..add(12397)
+    ..add(12398)
+    ..add(12399)
+    ..add(12400)
+    ..add(12401)
+    ..add(12402)
+    ..add(12403)
+    ..add(12404)
+    ..add(12405)
+    ..add(12406)
+    ..add(12407)
+    ..add(12408)
+    ..add(12409)
+    ..add(12410)
+    ..add(12411)
+    ..add(12412)
+    ..add(12413)
+    ..add(12414)
+    ..add(12415)
+    ..add(12416)
+    ..add(12417)
+    ..add(12418)
+    ..add(12419)
+    ..add(12420)
+    ..add(12421)
+    ..add(12422)
+    ..add(12423)
+    ..add(12424)
+    ..add(12425)
+    ..add(12426)
+    ..add(12427)
+    ..add(12428)
+    ..add(12429)
+    ..add(12430)
+    ..add(12431)
+    ..add(12432)
+    ..add(12433)
+    ..add(12434)
+    ..add(12435)
+    ..add(12436)
+    ..add(12437)
+    ..add(12438)
+    ..add(12439)
+    ..add(12440)
+    ..add(12441)
+    ..add(12442)
+    ..add(12443)
+    ..add(12444)
+    ..add(12445)
+    ..add(12446)
+    ..add(12447)
+    ..add(12448)
+    ..add(12449)
+    ..add(12450)
+    ..add(12451)
+    ..add(12452)
+    ..add(12453)
+    ..add(12454)
+    ..add(12455)
+    ..add(12456)
+    ..add(12457)
+    ..add(12458)
+    ..add(12459)
+    ..add(12460)
+    ..add(12461)
+    ..add(12462)
+    ..add(12463)
+    ..add(12464)
+    ..add(12465)
+    ..add(12466)
+    ..add(12467)
+    ..add(12468)
+    ..add(12469)
+    ..add(12470)
+    ..add(12471)
+    ..add(12472)
+    ..add(12473)
+    ..add(12474)
+    ..add(12475)
+    ..add(12476)
+    ..add(12477)
+    ..add(12478)
+    ..add(12479)
+    ..add(12480)
+    ..add(12481)
+    ..add(12482)
+    ..add(12483)
+    ..add(12484)
+    ..add(12485)
+    ..add(12486)
+    ..add(12487)
+    ..add(12488)
+    ..add(12489)
+    ..add(12490)
+    ..add(12491)
+    ..add(12492)
+    ..add(12493)
+    ..add(12494)
+    ..add(12495)
+    ..add(12496)
+    ..add(12497)
+    ..add(12498)
+    ..add(12499)
+    ..add(12500)
+    ..add(12501)
+    ..add(12502)
+    ..add(12503)
+    ..add(12504)
+    ..add(12505)
+    ..add(12506)
+    ..add(12507)
+    ..add(12508)
+    ..add(12509)
+    ..add(12510)
+    ..add(12511)
+    ..add(12512)
+    ..add(12513)
+    ..add(12514)
+    ..add(12515)
+    ..add(12516)
+    ..add(12517)
+    ..add(12518)
+    ..add(12519)
+    ..add(12520)
+    ..add(12521)
+    ..add(12522)
+    ..add(12523)
+    ..add(12524)
+    ..add(12525)
+    ..add(12526)
+    ..add(12527)
+    ..add(12528)
+    ..add(12529)
+    ..add(12530)
+    ..add(12531)
+    ..add(12532)
+    ..add(12533)
+    ..add(12534)
+    ..add(12535)
+    ..add(12536)
+    ..add(12537)
+    ..add(12538)
+    ..add(12539)
+    ..add(12540)
+    ..add(12541)
+    ..add(12542)
+    ..add(12543)
+    ..add(12544)
+    ..add(12545)
+    ..add(12546)
+    ..add(12547)
+    ..add(12548)
+    ..add(12549)
+    ..add(12550)
+    ..add(12551)
+    ..add(12552)
+    ..add(12553)
+    ..add(12554)
+    ..add(12555)
+    ..add(12556)
+    ..add(12557)
+    ..add(12558)
+    ..add(12559)
+    ..add(12560)
+    ..add(12561)
+    ..add(12562)
+    ..add(12563)
+    ..add(12564)
+    ..add(12565)
+    ..add(12566)
+    ..add(12567)
+    ..add(12568)
+    ..add(12569)
+    ..add(12570)
+    ..add(12571)
+    ..add(12572)
+    ..add(12573)
+    ..add(12574)
+    ..add(12575)
+    ..add(12576)
+    ..add(12577)
+    ..add(12578)
+    ..add(12579)
+    ..add(12580)
+    ..add(12581)
+    ..add(12582)
+    ..add(12583)
+    ..add(12584)
+    ..add(12585)
+    ..add(12586)
+    ..add(12587)
+    ..add(12588)
+    ..add(12589)
+    ..add(12590)
+    ..add(12591)
+    ..add(12592)
+    ..add(12593)
+    ..add(12594)
+    ..add(12595)
+    ..add(12596)
+    ..add(12597)
+    ..add(12598)
+    ..add(12599)
+    ..add(12600)
+    ..add(12601)
+    ..add(12602)
+    ..add(12603)
+    ..add(12604)
+    ..add(12605)
+    ..add(12606)
+    ..add(12607)
+    ..add(12608)
+    ..add(12609)
+    ..add(12610)
+    ..add(12611)
+    ..add(12612)
+    ..add(12613)
+    ..add(12614)
+    ..add(12615)
+    ..add(12616)
+    ..add(12617)
+    ..add(12618)
+    ..add(12619)
+    ..add(12620)
+    ..add(12621)
+    ..add(12622)
+    ..add(12623)
+    ..add(12624)
+    ..add(12625)
+    ..add(12626)
+    ..add(12627)
+    ..add(12628)
+    ..add(12629)
+    ..add(12630)
+    ..add(12631)
+    ..add(12632)
+    ..add(12633)
+    ..add(12634)
+    ..add(12635)
+    ..add(12636)
+    ..add(12637)
+    ..add(12638)
+    ..add(12639)
+    ..add(12640)
+    ..add(12641)
+    ..add(12642)
+    ..add(12643)
+    ..add(12644)
+    ..add(12645)
+    ..add(12646)
+    ..add(12647)
+    ..add(12648)
+    ..add(12649)
+    ..add(12650)
+    ..add(12651)
+    ..add(12652)
+    ..add(12653)
+    ..add(12654)
+    ..add(12655)
+    ..add(12656)
+    ..add(12657)
+    ..add(12658)
+    ..add(12659)
+    ..add(12660)
+    ..add(12661)
+    ..add(12662)
+    ..add(12663)
+    ..add(12664)
+    ..add(12665)
+    ..add(12666)
+    ..add(12667)
+    ..add(12668)
+    ..add(12669)
+    ..add(12670)
+    ..add(12671)
+    ..add(12672)
+    ..add(12673)
+    ..add(12674)
+    ..add(12675)
+    ..add(12676)
+    ..add(12677)
+    ..add(12678)
+    ..add(12679)
+    ..add(12680)
+    ..add(12681)
+    ..add(12682)
+    ..add(12683)
+    ..add(12684)
+    ..add(12685)
+    ..add(12686)
+    ..add(12687)
+    ..add(12688)
+    ..add(12689)
+    ..add(12690)
+    ..add(12691)
+    ..add(12692)
+    ..add(12693)
+    ..add(12694)
+    ..add(12695)
+    ..add(12696)
+    ..add(12697)
+    ..add(12698)
+    ..add(12699)
+    ..add(12700)
+    ..add(12701)
+    ..add(12702)
+    ..add(12703)
+    ..add(12704)
+    ..add(12705)
+    ..add(12706)
+    ..add(12707)
+    ..add(12708)
+    ..add(12709)
+    ..add(12710)
+    ..add(12711)
+    ..add(12712)
+    ..add(12713)
+    ..add(12714)
+    ..add(12715)
+    ..add(12716)
+    ..add(12717)
+    ..add(12718)
+    ..add(12719)
+    ..add(12720)
+    ..add(12721)
+    ..add(12722)
+    ..add(12723)
+    ..add(12724)
+    ..add(12725)
+    ..add(12726)
+    ..add(12727)
+    ..add(12728)
+    ..add(12729)
+    ..add(12730)
+    ..add(12731)
+    ..add(12732)
+    ..add(12733)
+    ..add(12734)
+    ..add(12735)
+    ..add(12736)
+    ..add(12737)
+    ..add(12738)
+    ..add(12739)
+    ..add(12740)
+    ..add(12741)
+    ..add(12742)
+    ..add(12743)
+    ..add(12744)
+    ..add(12745)
+    ..add(12746)
+    ..add(12747)
+    ..add(12748)
+    ..add(12749)
+    ..add(12750)
+    ..add(12751)
+    ..add(12752)
+    ..add(12753)
+    ..add(12754)
+    ..add(12755)
+    ..add(12756)
+    ..add(12757)
+    ..add(12758)
+    ..add(12759)
+    ..add(12760)
+    ..add(12761)
+    ..add(12762)
+    ..add(12763)
+    ..add(12764)
+    ..add(12765)
+    ..add(12766)
+    ..add(12767)
+    ..add(12768)
+    ..add(12769)
+    ..add(12770)
+    ..add(12771)
+    ..add(12772)
+    ..add(12773)
+    ..add(12774)
+    ..add(12775)
+    ..add(12776)
+    ..add(12777)
+    ..add(12778)
+    ..add(12779)
+    ..add(12780)
+    ..add(12781)
+    ..add(12782)
+    ..add(12783)
+    ..add(12784)
+    ..add(12785)
+    ..add(12786)
+    ..add(12787)
+    ..add(12788)
+    ..add(12789)
+    ..add(12790)
+    ..add(12791)
+    ..add(12792)
+    ..add(12793)
+    ..add(12794)
+    ..add(12795)
+    ..add(12796)
+    ..add(12797)
+    ..add(12798)
+    ..add(12799)
+    ..add(12800)
+    ..add(12801)
+    ..add(12802)
+    ..add(12803)
+    ..add(12804)
+    ..add(12805)
+    ..add(12806)
+    ..add(12807)
+    ..add(12808)
+    ..add(12809)
+    ..add(12810)
+    ..add(12811)
+    ..add(12812)
+    ..add(12813)
+    ..add(12814)
+    ..add(12815)
+    ..add(12816)
+    ..add(12817)
+    ..add(12818)
+    ..add(12819)
+    ..add(12820)
+    ..add(12821)
+    ..add(12822)
+    ..add(12823)
+    ..add(12824)
+    ..add(12825)
+    ..add(12826)
+    ..add(12827)
+    ..add(12828)
+    ..add(12829)
+    ..add(12830)
+    ..add(12831)
+    ..add(12832)
+    ..add(12833)
+    ..add(12834)
+    ..add(12835)
+    ..add(12836)
+    ..add(12837)
+    ..add(12838)
+    ..add(12839)
+    ..add(12840)
+    ..add(12841)
+    ..add(12842)
+    ..add(12843)
+    ..add(12844)
+    ..add(12845)
+    ..add(12846)
+    ..add(12847)
+    ..add(12848)
+    ..add(12849)
+    ..add(12850)
+    ..add(12851)
+    ..add(12852)
+    ..add(12853)
+    ..add(12854)
+    ..add(12855)
+    ..add(12856)
+    ..add(12857)
+    ..add(12858)
+    ..add(12859)
+    ..add(12860)
+    ..add(12861)
+    ..add(12862)
+    ..add(12863)
+    ..add(12864)
+    ..add(12865)
+    ..add(12866)
+    ..add(12867)
+    ..add(12868)
+    ..add(12869)
+    ..add(12870)
+    ..add(12871)
+    ..add(12872)
+    ..add(12873)
+    ..add(12874)
+    ..add(12875)
+    ..add(12876)
+    ..add(12877)
+    ..add(12878)
+    ..add(12879)
+    ..add(12880)
+    ..add(12881)
+    ..add(12882)
+    ..add(12883)
+    ..add(12884)
+    ..add(12885)
+    ..add(12886)
+    ..add(12887)
+    ..add(12888)
+    ..add(12889)
+    ..add(12890)
+    ..add(12891)
+    ..add(12892)
+    ..add(12893)
+    ..add(12894)
+    ..add(12895)
+    ..add(12896)
+    ..add(12897)
+    ..add(12898)
+    ..add(12899)
+    ..add(12900)
+    ..add(12901)
+    ..add(12902)
+    ..add(12903)
+    ..add(12904)
+    ..add(12905)
+    ..add(12906)
+    ..add(12907)
+    ..add(12908)
+    ..add(12909)
+    ..add(12910)
+    ..add(12911)
+    ..add(12912)
+    ..add(12913)
+    ..add(12914)
+    ..add(12915)
+    ..add(12916)
+    ..add(12917)
+    ..add(12918)
+    ..add(12919)
+    ..add(12920)
+    ..add(12921)
+    ..add(12922)
+    ..add(12923)
+    ..add(12924)
+    ..add(12925)
+    ..add(12926)
+    ..add(12927)
+    ..add(12928)
+    ..add(12929)
+    ..add(12930)
+    ..add(12931)
+    ..add(12932)
+    ..add(12933)
+    ..add(12934)
+    ..add(12935)
+    ..add(12936)
+    ..add(12937)
+    ..add(12938)
+    ..add(12939)
+    ..add(12940)
+    ..add(12941)
+    ..add(12942)
+    ..add(12943)
+    ..add(12944)
+    ..add(12945)
+    ..add(12946)
+    ..add(12947)
+    ..add(12948)
+    ..add(12949)
+    ..add(12950)
+    ..add(12951)
+    ..add(12952)
+    ..add(12953)
+    ..add(12954)
+    ..add(12955)
+    ..add(12956)
+    ..add(12957)
+    ..add(12958)
+    ..add(12959)
+    ..add(12960)
+    ..add(12961)
+    ..add(12962)
+    ..add(12963)
+    ..add(12964)
+    ..add(12965)
+    ..add(12966)
+    ..add(12967)
+    ..add(12968)
+    ..add(12969)
+    ..add(12970)
+    ..add(12971)
+    ..add(12972)
+    ..add(12973)
+    ..add(12974)
+    ..add(12975)
+    ..add(12976)
+    ..add(12977)
+    ..add(12978)
+    ..add(12979)
+    ..add(12980)
+    ..add(12981)
+    ..add(12982)
+    ..add(12983)
+    ..add(12984)
+    ..add(12985)
+    ..add(12986)
+    ..add(12987)
+    ..add(12988)
+    ..add(12989)
+    ..add(12990)
+    ..add(12991)
+    ..add(12992)
+    ..add(12993)
+    ..add(12994)
+    ..add(12995)
+    ..add(12996)
+    ..add(12997)
+    ..add(12998)
+    ..add(12999)
+    ..add(13000)
+    ..add(13001)
+    ..add(13002)
+    ..add(13003)
+    ..add(13004)
+    ..add(13005)
+    ..add(13006)
+    ..add(13007)
+    ..add(13008)
+    ..add(13009)
+    ..add(13010)
+    ..add(13011)
+    ..add(13012)
+    ..add(13013)
+    ..add(13014)
+    ..add(13015)
+    ..add(13016)
+    ..add(13017)
+    ..add(13018)
+    ..add(13019)
+    ..add(13020)
+    ..add(13021)
+    ..add(13022)
+    ..add(13023)
+    ..add(13024)
+    ..add(13025)
+    ..add(13026)
+    ..add(13027)
+    ..add(13028)
+    ..add(13029)
+    ..add(13030)
+    ..add(13031)
+    ..add(13032)
+    ..add(13033)
+    ..add(13034)
+    ..add(13035)
+    ..add(13036)
+    ..add(13037)
+    ..add(13038)
+    ..add(13039)
+    ..add(13040)
+    ..add(13041)
+    ..add(13042)
+    ..add(13043)
+    ..add(13044)
+    ..add(13045)
+    ..add(13046)
+    ..add(13047)
+    ..add(13048)
+    ..add(13049)
+    ..add(13050)
+    ..add(13051)
+    ..add(13052)
+    ..add(13053)
+    ..add(13054)
+    ..add(13055)
+    ..add(13056)
+    ..add(13057)
+    ..add(13058)
+    ..add(13059)
+    ..add(13060)
+    ..add(13061)
+    ..add(13062)
+    ..add(13063)
+    ..add(13064)
+    ..add(13065)
+    ..add(13066)
+    ..add(13067)
+    ..add(13068)
+    ..add(13069)
+    ..add(13070)
+    ..add(13071)
+    ..add(13072)
+    ..add(13073)
+    ..add(13074)
+    ..add(13075)
+    ..add(13076)
+    ..add(13077)
+    ..add(13078)
+    ..add(13079)
+    ..add(13080)
+    ..add(13081)
+    ..add(13082)
+    ..add(13083)
+    ..add(13084)
+    ..add(13085)
+    ..add(13086)
+    ..add(13087)
+    ..add(13088)
+    ..add(13089)
+    ..add(13090)
+    ..add(13091)
+    ..add(13092)
+    ..add(13093)
+    ..add(13094)
+    ..add(13095)
+    ..add(13096)
+    ..add(13097)
+    ..add(13098)
+    ..add(13099)
+    ..add(13100)
+    ..add(13101)
+    ..add(13102)
+    ..add(13103)
+    ..add(13104)
+    ..add(13105)
+    ..add(13106)
+    ..add(13107)
+    ..add(13108)
+    ..add(13109)
+    ..add(13110)
+    ..add(13111)
+    ..add(13112)
+    ..add(13113)
+    ..add(13114)
+    ..add(13115)
+    ..add(13116)
+    ..add(13117)
+    ..add(13118)
+    ..add(13119)
+    ..add(13120)
+    ..add(13121)
+    ..add(13122)
+    ..add(13123)
+    ..add(13124)
+    ..add(13125)
+    ..add(13126)
+    ..add(13127)
+    ..add(13128)
+    ..add(13129)
+    ..add(13130)
+    ..add(13131)
+    ..add(13132)
+    ..add(13133)
+    ..add(13134)
+    ..add(13135)
+    ..add(13136)
+    ..add(13137)
+    ..add(13138)
+    ..add(13139)
+    ..add(13140)
+    ..add(13141)
+    ..add(13142)
+    ..add(13143)
+    ..add(13144)
+    ..add(13145)
+    ..add(13146)
+    ..add(13147)
+    ..add(13148)
+    ..add(13149)
+    ..add(13150)
+    ..add(13151)
+    ..add(13152)
+    ..add(13153)
+    ..add(13154)
+    ..add(13155)
+    ..add(13156)
+    ..add(13157)
+    ..add(13158)
+    ..add(13159)
+    ..add(13160)
+    ..add(13161)
+    ..add(13162)
+    ..add(13163)
+    ..add(13164)
+    ..add(13165)
+    ..add(13166)
+    ..add(13167)
+    ..add(13168)
+    ..add(13169)
+    ..add(13170)
+    ..add(13171)
+    ..add(13172)
+    ..add(13173)
+    ..add(13174)
+    ..add(13175)
+    ..add(13176)
+    ..add(13177)
+    ..add(13178)
+    ..add(13179)
+    ..add(13180)
+    ..add(13181)
+    ..add(13182)
+    ..add(13183)
+    ..add(13184)
+    ..add(13185)
+    ..add(13186)
+    ..add(13187)
+    ..add(13188)
+    ..add(13189)
+    ..add(13190)
+    ..add(13191)
+    ..add(13192)
+    ..add(13193)
+    ..add(13194)
+    ..add(13195)
+    ..add(13196)
+    ..add(13197)
+    ..add(13198)
+    ..add(13199)
+    ..add(13200)
+    ..add(13201)
+    ..add(13202)
+    ..add(13203)
+    ..add(13204)
+    ..add(13205)
+    ..add(13206)
+    ..add(13207)
+    ..add(13208)
+    ..add(13209)
+    ..add(13210)
+    ..add(13211)
+    ..add(13212)
+    ..add(13213)
+    ..add(13214)
+    ..add(13215)
+    ..add(13216)
+    ..add(13217)
+    ..add(13218)
+    ..add(13219)
+    ..add(13220)
+    ..add(13221)
+    ..add(13222)
+    ..add(13223)
+    ..add(13224)
+    ..add(13225)
+    ..add(13226)
+    ..add(13227)
+    ..add(13228)
+    ..add(13229)
+    ..add(13230)
+    ..add(13231)
+    ..add(13232)
+    ..add(13233)
+    ..add(13234)
+    ..add(13235)
+    ..add(13236)
+    ..add(13237)
+    ..add(13238)
+    ..add(13239)
+    ..add(13240)
+    ..add(13241)
+    ..add(13242)
+    ..add(13243)
+    ..add(13244)
+    ..add(13245)
+    ..add(13246)
+    ..add(13247)
+    ..add(13248)
+    ..add(13249)
+    ..add(13250)
+    ..add(13251)
+    ..add(13252)
+    ..add(13253)
+    ..add(13254)
+    ..add(13255)
+    ..add(13256)
+    ..add(13257)
+    ..add(13258)
+    ..add(13259)
+    ..add(13260)
+    ..add(13261)
+    ..add(13262)
+    ..add(13263)
+    ..add(13264)
+    ..add(13265)
+    ..add(13266)
+    ..add(13267)
+    ..add(13268)
+    ..add(13269)
+    ..add(13270)
+    ..add(13271)
+    ..add(13272)
+    ..add(13273)
+    ..add(13274)
+    ..add(13275)
+    ..add(13276)
+    ..add(13277)
+    ..add(13278)
+    ..add(13279)
+    ..add(13280)
+    ..add(13281)
+    ..add(13282)
+    ..add(13283)
+    ..add(13284)
+    ..add(13285)
+    ..add(13286)
+    ..add(13287)
+    ..add(13288)
+    ..add(13289)
+    ..add(13290)
+    ..add(13291)
+    ..add(13292)
+    ..add(13293)
+    ..add(13294)
+    ..add(13295)
+    ..add(13296)
+    ..add(13297)
+    ..add(13298)
+    ..add(13299)
+    ..add(13300)
+    ..add(13301)
+    ..add(13302)
+    ..add(13303)
+    ..add(13304)
+    ..add(13305)
+    ..add(13306)
+    ..add(13307)
+    ..add(13308)
+    ..add(13309)
+    ..add(13310)
+    ..add(13311)
+    ..add(13312)
+    ..add(13313)
+    ..add(13314)
+    ..add(13315)
+    ..add(13316)
+    ..add(13317)
+    ..add(13318)
+    ..add(13319)
+    ..add(13320)
+    ..add(13321)
+    ..add(13322)
+    ..add(13323)
+    ..add(13324)
+    ..add(13325)
+    ..add(13326)
+    ..add(13327)
+    ..add(13328)
+    ..add(13329)
+    ..add(13330)
+    ..add(13331)
+    ..add(13332)
+    ..add(13333)
+    ..add(13334)
+    ..add(13335)
+    ..add(13336)
+    ..add(13337)
+    ..add(13338)
+    ..add(13339)
+    ..add(13340)
+    ..add(13341)
+    ..add(13342)
+    ..add(13343)
+    ..add(13344)
+    ..add(13345)
+    ..add(13346)
+    ..add(13347)
+    ..add(13348)
+    ..add(13349)
+    ..add(13350)
+    ..add(13351)
+    ..add(13352)
+    ..add(13353)
+    ..add(13354)
+    ..add(13355)
+    ..add(13356)
+    ..add(13357)
+    ..add(13358)
+    ..add(13359)
+    ..add(13360)
+    ..add(13361)
+    ..add(13362)
+    ..add(13363)
+    ..add(13364)
+    ..add(13365)
+    ..add(13366)
+    ..add(13367)
+    ..add(13368)
+    ..add(13369)
+    ..add(13370)
+    ..add(13371)
+    ..add(13372)
+    ..add(13373)
+    ..add(13374)
+    ..add(13375)
+    ..add(13376)
+    ..add(13377)
+    ..add(13378)
+    ..add(13379)
+    ..add(13380)
+    ..add(13381)
+    ..add(13382)
+    ..add(13383)
+    ..add(13384)
+    ..add(13385)
+    ..add(13386)
+    ..add(13387)
+    ..add(13388)
+    ..add(13389)
+    ..add(13390)
+    ..add(13391)
+    ..add(13392)
+    ..add(13393)
+    ..add(13394)
+    ..add(13395)
+    ..add(13396)
+    ..add(13397)
+    ..add(13398)
+    ..add(13399)
+    ..add(13400)
+    ..add(13401)
+    ..add(13402)
+    ..add(13403)
+    ..add(13404)
+    ..add(13405)
+    ..add(13406)
+    ..add(13407)
+    ..add(13408)
+    ..add(13409)
+    ..add(13410)
+    ..add(13411)
+    ..add(13412)
+    ..add(13413)
+    ..add(13414)
+    ..add(13415)
+    ..add(13416)
+    ..add(13417)
+    ..add(13418)
+    ..add(13419)
+    ..add(13420)
+    ..add(13421)
+    ..add(13422)
+    ..add(13423)
+    ..add(13424)
+    ..add(13425)
+    ..add(13426)
+    ..add(13427)
+    ..add(13428)
+    ..add(13429)
+    ..add(13430)
+    ..add(13431)
+    ..add(13432)
+    ..add(13433)
+    ..add(13434)
+    ..add(13435)
+    ..add(13436)
+    ..add(13437)
+    ..add(13438)
+    ..add(13439)
+    ..add(13440)
+    ..add(13441)
+    ..add(13442)
+    ..add(13443)
+    ..add(13444)
+    ..add(13445)
+    ..add(13446)
+    ..add(13447)
+    ..add(13448)
+    ..add(13449)
+    ..add(13450)
+    ..add(13451)
+    ..add(13452)
+    ..add(13453)
+    ..add(13454)
+    ..add(13455)
+    ..add(13456)
+    ..add(13457)
+    ..add(13458)
+    ..add(13459)
+    ..add(13460)
+    ..add(13461)
+    ..add(13462)
+    ..add(13463)
+    ..add(13464)
+    ..add(13465)
+    ..add(13466)
+    ..add(13467)
+    ..add(13468)
+    ..add(13469)
+    ..add(13470)
+    ..add(13471)
+    ..add(13472)
+    ..add(13473)
+    ..add(13474)
+    ..add(13475)
+    ..add(13476)
+    ..add(13477)
+    ..add(13478)
+    ..add(13479)
+    ..add(13480)
+    ..add(13481)
+    ..add(13482)
+    ..add(13483)
+    ..add(13484)
+    ..add(13485)
+    ..add(13486)
+    ..add(13487)
+    ..add(13488)
+    ..add(13489)
+    ..add(13490)
+    ..add(13491)
+    ..add(13492)
+    ..add(13493)
+    ..add(13494)
+    ..add(13495)
+    ..add(13496)
+    ..add(13497)
+    ..add(13498)
+    ..add(13499)
+    ..add(13500)
+    ..add(13501)
+    ..add(13502)
+    ..add(13503)
+    ..add(13504)
+    ..add(13505)
+    ..add(13506)
+    ..add(13507)
+    ..add(13508)
+    ..add(13509)
+    ..add(13510)
+    ..add(13511)
+    ..add(13512)
+    ..add(13513)
+    ..add(13514)
+    ..add(13515)
+    ..add(13516)
+    ..add(13517)
+    ..add(13518)
+    ..add(13519)
+    ..add(13520)
+    ..add(13521)
+    ..add(13522)
+    ..add(13523)
+    ..add(13524)
+    ..add(13525)
+    ..add(13526)
+    ..add(13527)
+    ..add(13528)
+    ..add(13529)
+    ..add(13530)
+    ..add(13531)
+    ..add(13532)
+    ..add(13533)
+    ..add(13534)
+    ..add(13535)
+    ..add(13536)
+    ..add(13537)
+    ..add(13538)
+    ..add(13539)
+    ..add(13540)
+    ..add(13541)
+    ..add(13542)
+    ..add(13543)
+    ..add(13544)
+    ..add(13545)
+    ..add(13546)
+    ..add(13547)
+    ..add(13548)
+    ..add(13549)
+    ..add(13550)
+    ..add(13551)
+    ..add(13552)
+    ..add(13553)
+    ..add(13554)
+    ..add(13555)
+    ..add(13556)
+    ..add(13557)
+    ..add(13558)
+    ..add(13559)
+    ..add(13560)
+    ..add(13561)
+    ..add(13562)
+    ..add(13563)
+    ..add(13564)
+    ..add(13565)
+    ..add(13566)
+    ..add(13567)
+    ..add(13568)
+    ..add(13569)
+    ..add(13570)
+    ..add(13571)
+    ..add(13572)
+    ..add(13573)
+    ..add(13574)
+    ..add(13575)
+    ..add(13576)
+    ..add(13577)
+    ..add(13578)
+    ..add(13579)
+    ..add(13580)
+    ..add(13581)
+    ..add(13582)
+    ..add(13583)
+    ..add(13584)
+    ..add(13585)
+    ..add(13586)
+    ..add(13587)
+    ..add(13588)
+    ..add(13589)
+    ..add(13590)
+    ..add(13591)
+    ..add(13592)
+    ..add(13593)
+    ..add(13594)
+    ..add(13595)
+    ..add(13596)
+    ..add(13597)
+    ..add(13598)
+    ..add(13599)
+    ..add(13600)
+    ..add(13601)
+    ..add(13602)
+    ..add(13603)
+    ..add(13604)
+    ..add(13605)
+    ..add(13606)
+    ..add(13607)
+    ..add(13608)
+    ..add(13609)
+    ..add(13610)
+    ..add(13611)
+    ..add(13612)
+    ..add(13613)
+    ..add(13614)
+    ..add(13615)
+    ..add(13616)
+    ..add(13617)
+    ..add(13618)
+    ..add(13619)
+    ..add(13620)
+    ..add(13621)
+    ..add(13622)
+    ..add(13623)
+    ..add(13624)
+    ..add(13625)
+    ..add(13626)
+    ..add(13627)
+    ..add(13628)
+    ..add(13629)
+    ..add(13630)
+    ..add(13631)
+    ..add(13632)
+    ..add(13633)
+    ..add(13634)
+    ..add(13635)
+    ..add(13636)
+    ..add(13637)
+    ..add(13638)
+    ..add(13639)
+    ..add(13640)
+    ..add(13641)
+    ..add(13642)
+    ..add(13643)
+    ..add(13644)
+    ..add(13645)
+    ..add(13646)
+    ..add(13647)
+    ..add(13648)
+    ..add(13649)
+    ..add(13650)
+    ..add(13651)
+    ..add(13652)
+    ..add(13653)
+    ..add(13654)
+    ..add(13655)
+    ..add(13656)
+    ..add(13657)
+    ..add(13658)
+    ..add(13659)
+    ..add(13660)
+    ..add(13661)
+    ..add(13662)
+    ..add(13663)
+    ..add(13664)
+    ..add(13665)
+    ..add(13666)
+    ..add(13667)
+    ..add(13668)
+    ..add(13669)
+    ..add(13670)
+    ..add(13671)
+    ..add(13672)
+    ..add(13673)
+    ..add(13674)
+    ..add(13675)
+    ..add(13676)
+    ..add(13677)
+    ..add(13678)
+    ..add(13679)
+    ..add(13680)
+    ..add(13681)
+    ..add(13682)
+    ..add(13683)
+    ..add(13684)
+    ..add(13685)
+    ..add(13686)
+    ..add(13687)
+    ..add(13688)
+    ..add(13689)
+    ..add(13690)
+    ..add(13691)
+    ..add(13692)
+    ..add(13693)
+    ..add(13694)
+    ..add(13695)
+    ..add(13696)
+    ..add(13697)
+    ..add(13698)
+    ..add(13699)
+    ..add(13700)
+    ..add(13701)
+    ..add(13702)
+    ..add(13703)
+    ..add(13704)
+    ..add(13705)
+    ..add(13706)
+    ..add(13707)
+    ..add(13708)
+    ..add(13709)
+    ..add(13710)
+    ..add(13711)
+    ..add(13712)
+    ..add(13713)
+    ..add(13714)
+    ..add(13715)
+    ..add(13716)
+    ..add(13717)
+    ..add(13718)
+    ..add(13719)
+    ..add(13720)
+    ..add(13721)
+    ..add(13722)
+    ..add(13723)
+    ..add(13724)
+    ..add(13725)
+    ..add(13726)
+    ..add(13727)
+    ..add(13728)
+    ..add(13729)
+    ..add(13730)
+    ..add(13731)
+    ..add(13732)
+    ..add(13733)
+    ..add(13734)
+    ..add(13735)
+    ..add(13736)
+    ..add(13737)
+    ..add(13738)
+    ..add(13739)
+    ..add(13740)
+    ..add(13741)
+    ..add(13742)
+    ..add(13743)
+    ..add(13744)
+    ..add(13745)
+    ..add(13746)
+    ..add(13747)
+    ..add(13748)
+    ..add(13749)
+    ..add(13750)
+    ..add(13751)
+    ..add(13752)
+    ..add(13753)
+    ..add(13754)
+    ..add(13755)
+    ..add(13756)
+    ..add(13757)
+    ..add(13758)
+    ..add(13759)
+    ..add(13760)
+    ..add(13761)
+    ..add(13762)
+    ..add(13763)
+    ..add(13764)
+    ..add(13765)
+    ..add(13766)
+    ..add(13767)
+    ..add(13768)
+    ..add(13769)
+    ..add(13770)
+    ..add(13771)
+    ..add(13772)
+    ..add(13773)
+    ..add(13774)
+    ..add(13775)
+    ..add(13776)
+    ..add(13777)
+    ..add(13778)
+    ..add(13779)
+    ..add(13780)
+    ..add(13781)
+    ..add(13782)
+    ..add(13783)
+    ..add(13784)
+    ..add(13785)
+    ..add(13786)
+    ..add(13787)
+    ..add(13788)
+    ..add(13789)
+    ..add(13790)
+    ..add(13791)
+    ..add(13792)
+    ..add(13793)
+    ..add(13794)
+    ..add(13795)
+    ..add(13796)
+    ..add(13797)
+    ..add(13798)
+    ..add(13799)
+    ..add(13800)
+    ..add(13801)
+    ..add(13802)
+    ..add(13803)
+    ..add(13804)
+    ..add(13805)
+    ..add(13806)
+    ..add(13807)
+    ..add(13808)
+    ..add(13809)
+    ..add(13810)
+    ..add(13811)
+    ..add(13812)
+    ..add(13813)
+    ..add(13814)
+    ..add(13815)
+    ..add(13816)
+    ..add(13817)
+    ..add(13818)
+    ..add(13819)
+    ..add(13820)
+    ..add(13821)
+    ..add(13822)
+    ..add(13823)
+    ..add(13824)
+    ..add(13825)
+    ..add(13826)
+    ..add(13827)
+    ..add(13828)
+    ..add(13829)
+    ..add(13830)
+    ..add(13831)
+    ..add(13832)
+    ..add(13833)
+    ..add(13834)
+    ..add(13835)
+    ..add(13836)
+    ..add(13837)
+    ..add(13838)
+    ..add(13839)
+    ..add(13840)
+    ..add(13841)
+    ..add(13842)
+    ..add(13843)
+    ..add(13844)
+    ..add(13845)
+    ..add(13846)
+    ..add(13847)
+    ..add(13848)
+    ..add(13849)
+    ..add(13850)
+    ..add(13851)
+    ..add(13852)
+    ..add(13853)
+    ..add(13854)
+    ..add(13855)
+    ..add(13856)
+    ..add(13857)
+    ..add(13858)
+    ..add(13859)
+    ..add(13860)
+    ..add(13861)
+    ..add(13862)
+    ..add(13863)
+    ..add(13864)
+    ..add(13865)
+    ..add(13866)
+    ..add(13867)
+    ..add(13868)
+    ..add(13869)
+    ..add(13870)
+    ..add(13871)
+    ..add(13872)
+    ..add(13873)
+    ..add(13874)
+    ..add(13875)
+    ..add(13876)
+    ..add(13877)
+    ..add(13878)
+    ..add(13879)
+    ..add(13880)
+    ..add(13881)
+    ..add(13882)
+    ..add(13883)
+    ..add(13884)
+    ..add(13885)
+    ..add(13886)
+    ..add(13887)
+    ..add(13888)
+    ..add(13889)
+    ..add(13890)
+    ..add(13891)
+    ..add(13892)
+    ..add(13893)
+    ..add(13894)
+    ..add(13895)
+    ..add(13896)
+    ..add(13897)
+    ..add(13898)
+    ..add(13899)
+    ..add(13900)
+    ..add(13901)
+    ..add(13902)
+    ..add(13903)
+    ..add(13904)
+    ..add(13905)
+    ..add(13906)
+    ..add(13907)
+    ..add(13908)
+    ..add(13909)
+    ..add(13910)
+    ..add(13911)
+    ..add(13912)
+    ..add(13913)
+    ..add(13914)
+    ..add(13915)
+    ..add(13916)
+    ..add(13917)
+    ..add(13918)
+    ..add(13919)
+    ..add(13920)
+    ..add(13921)
+    ..add(13922)
+    ..add(13923)
+    ..add(13924)
+    ..add(13925)
+    ..add(13926)
+    ..add(13927)
+    ..add(13928)
+    ..add(13929)
+    ..add(13930)
+    ..add(13931)
+    ..add(13932)
+    ..add(13933)
+    ..add(13934)
+    ..add(13935)
+    ..add(13936)
+    ..add(13937)
+    ..add(13938)
+    ..add(13939)
+    ..add(13940)
+    ..add(13941)
+    ..add(13942)
+    ..add(13943)
+    ..add(13944)
+    ..add(13945)
+    ..add(13946)
+    ..add(13947)
+    ..add(13948)
+    ..add(13949)
+    ..add(13950)
+    ..add(13951)
+    ..add(13952)
+    ..add(13953)
+    ..add(13954)
+    ..add(13955)
+    ..add(13956)
+    ..add(13957)
+    ..add(13958)
+    ..add(13959)
+    ..add(13960)
+    ..add(13961)
+    ..add(13962)
+    ..add(13963)
+    ..add(13964)
+    ..add(13965)
+    ..add(13966)
+    ..add(13967)
+    ..add(13968)
+    ..add(13969)
+    ..add(13970)
+    ..add(13971)
+    ..add(13972)
+    ..add(13973)
+    ..add(13974)
+    ..add(13975)
+    ..add(13976)
+    ..add(13977)
+    ..add(13978)
+    ..add(13979)
+    ..add(13980)
+    ..add(13981)
+    ..add(13982)
+    ..add(13983)
+    ..add(13984)
+    ..add(13985)
+    ..add(13986)
+    ..add(13987)
+    ..add(13988)
+    ..add(13989)
+    ..add(13990)
+    ..add(13991)
+    ..add(13992)
+    ..add(13993)
+    ..add(13994)
+    ..add(13995)
+    ..add(13996)
+    ..add(13997)
+    ..add(13998)
+    ..add(13999)
+    ..add(14000)
+    ..add(14001)
+    ..add(14002)
+    ..add(14003)
+    ..add(14004)
+    ..add(14005)
+    ..add(14006)
+    ..add(14007)
+    ..add(14008)
+    ..add(14009)
+    ..add(14010)
+    ..add(14011)
+    ..add(14012)
+    ..add(14013)
+    ..add(14014)
+    ..add(14015)
+    ..add(14016)
+    ..add(14017)
+    ..add(14018)
+    ..add(14019)
+    ..add(14020)
+    ..add(14021)
+    ..add(14022)
+    ..add(14023)
+    ..add(14024)
+    ..add(14025)
+    ..add(14026)
+    ..add(14027)
+    ..add(14028)
+    ..add(14029)
+    ..add(14030)
+    ..add(14031)
+    ..add(14032)
+    ..add(14033)
+    ..add(14034)
+    ..add(14035)
+    ..add(14036)
+    ..add(14037)
+    ..add(14038)
+    ..add(14039)
+    ..add(14040)
+    ..add(14041)
+    ..add(14042)
+    ..add(14043)
+    ..add(14044)
+    ..add(14045)
+    ..add(14046)
+    ..add(14047)
+    ..add(14048)
+    ..add(14049)
+    ..add(14050)
+    ..add(14051)
+    ..add(14052)
+    ..add(14053)
+    ..add(14054)
+    ..add(14055)
+    ..add(14056)
+    ..add(14057)
+    ..add(14058)
+    ..add(14059)
+    ..add(14060)
+    ..add(14061)
+    ..add(14062)
+    ..add(14063)
+    ..add(14064)
+    ..add(14065)
+    ..add(14066)
+    ..add(14067)
+    ..add(14068)
+    ..add(14069)
+    ..add(14070)
+    ..add(14071)
+    ..add(14072)
+    ..add(14073)
+    ..add(14074)
+    ..add(14075)
+    ..add(14076)
+    ..add(14077)
+    ..add(14078)
+    ..add(14079)
+    ..add(14080)
+    ..add(14081)
+    ..add(14082)
+    ..add(14083)
+    ..add(14084)
+    ..add(14085)
+    ..add(14086)
+    ..add(14087)
+    ..add(14088)
+    ..add(14089)
+    ..add(14090)
+    ..add(14091)
+    ..add(14092)
+    ..add(14093)
+    ..add(14094)
+    ..add(14095)
+    ..add(14096)
+    ..add(14097)
+    ..add(14098)
+    ..add(14099)
+    ..add(14100)
+    ..add(14101)
+    ..add(14102)
+    ..add(14103)
+    ..add(14104)
+    ..add(14105)
+    ..add(14106)
+    ..add(14107)
+    ..add(14108)
+    ..add(14109)
+    ..add(14110)
+    ..add(14111)
+    ..add(14112)
+    ..add(14113)
+    ..add(14114)
+    ..add(14115)
+    ..add(14116)
+    ..add(14117)
+    ..add(14118)
+    ..add(14119)
+    ..add(14120)
+    ..add(14121)
+    ..add(14122)
+    ..add(14123)
+    ..add(14124)
+    ..add(14125)
+    ..add(14126)
+    ..add(14127)
+    ..add(14128)
+    ..add(14129)
+    ..add(14130)
+    ..add(14131)
+    ..add(14132)
+    ..add(14133)
+    ..add(14134)
+    ..add(14135)
+    ..add(14136)
+    ..add(14137)
+    ..add(14138)
+    ..add(14139)
+    ..add(14140)
+    ..add(14141)
+    ..add(14142)
+    ..add(14143)
+    ..add(14144)
+    ..add(14145)
+    ..add(14146)
+    ..add(14147)
+    ..add(14148)
+    ..add(14149)
+    ..add(14150)
+    ..add(14151)
+    ..add(14152)
+    ..add(14153)
+    ..add(14154)
+    ..add(14155)
+    ..add(14156)
+    ..add(14157)
+    ..add(14158)
+    ..add(14159)
+    ..add(14160)
+    ..add(14161)
+    ..add(14162)
+    ..add(14163)
+    ..add(14164)
+    ..add(14165)
+    ..add(14166)
+    ..add(14167)
+    ..add(14168)
+    ..add(14169)
+    ..add(14170)
+    ..add(14171)
+    ..add(14172)
+    ..add(14173)
+    ..add(14174)
+    ..add(14175)
+    ..add(14176)
+    ..add(14177)
+    ..add(14178)
+    ..add(14179)
+    ..add(14180)
+    ..add(14181)
+    ..add(14182)
+    ..add(14183)
+    ..add(14184)
+    ..add(14185)
+    ..add(14186)
+    ..add(14187)
+    ..add(14188)
+    ..add(14189)
+    ..add(14190)
+    ..add(14191)
+    ..add(14192)
+    ..add(14193)
+    ..add(14194)
+    ..add(14195)
+    ..add(14196)
+    ..add(14197)
+    ..add(14198)
+    ..add(14199)
+    ..add(14200)
+    ..add(14201)
+    ..add(14202)
+    ..add(14203)
+    ..add(14204)
+    ..add(14205)
+    ..add(14206)
+    ..add(14207)
+    ..add(14208)
+    ..add(14209)
+    ..add(14210)
+    ..add(14211)
+    ..add(14212)
+    ..add(14213)
+    ..add(14214)
+    ..add(14215)
+    ..add(14216)
+    ..add(14217)
+    ..add(14218)
+    ..add(14219)
+    ..add(14220)
+    ..add(14221)
+    ..add(14222)
+    ..add(14223)
+    ..add(14224)
+    ..add(14225)
+    ..add(14226)
+    ..add(14227)
+    ..add(14228)
+    ..add(14229)
+    ..add(14230)
+    ..add(14231)
+    ..add(14232)
+    ..add(14233)
+    ..add(14234)
+    ..add(14235)
+    ..add(14236)
+    ..add(14237)
+    ..add(14238)
+    ..add(14239)
+    ..add(14240)
+    ..add(14241)
+    ..add(14242)
+    ..add(14243)
+    ..add(14244)
+    ..add(14245)
+    ..add(14246)
+    ..add(14247)
+    ..add(14248)
+    ..add(14249)
+    ..add(14250)
+    ..add(14251)
+    ..add(14252)
+    ..add(14253)
+    ..add(14254)
+    ..add(14255)
+    ..add(14256)
+    ..add(14257)
+    ..add(14258)
+    ..add(14259)
+    ..add(14260)
+    ..add(14261)
+    ..add(14262)
+    ..add(14263)
+    ..add(14264)
+    ..add(14265)
+    ..add(14266)
+    ..add(14267)
+    ..add(14268)
+    ..add(14269)
+    ..add(14270)
+    ..add(14271)
+    ..add(14272)
+    ..add(14273)
+    ..add(14274)
+    ..add(14275)
+    ..add(14276)
+    ..add(14277)
+    ..add(14278)
+    ..add(14279)
+    ..add(14280)
+    ..add(14281)
+    ..add(14282)
+    ..add(14283)
+    ..add(14284)
+    ..add(14285)
+    ..add(14286)
+    ..add(14287)
+    ..add(14288)
+    ..add(14289)
+    ..add(14290)
+    ..add(14291)
+    ..add(14292)
+    ..add(14293)
+    ..add(14294)
+    ..add(14295)
+    ..add(14296)
+    ..add(14297)
+    ..add(14298)
+    ..add(14299)
+    ..add(14300)
+    ..add(14301)
+    ..add(14302)
+    ..add(14303)
+    ..add(14304)
+    ..add(14305)
+    ..add(14306)
+    ..add(14307)
+    ..add(14308)
+    ..add(14309)
+    ..add(14310)
+    ..add(14311)
+    ..add(14312)
+    ..add(14313)
+    ..add(14314)
+    ..add(14315)
+    ..add(14316)
+    ..add(14317)
+    ..add(14318)
+    ..add(14319)
+    ..add(14320)
+    ..add(14321)
+    ..add(14322)
+    ..add(14323)
+    ..add(14324)
+    ..add(14325)
+    ..add(14326)
+    ..add(14327)
+    ..add(14328)
+    ..add(14329)
+    ..add(14330)
+    ..add(14331)
+    ..add(14332)
+    ..add(14333)
+    ..add(14334)
+    ..add(14335)
+    ..add(14336)
+    ..add(14337)
+    ..add(14338)
+    ..add(14339)
+    ..add(14340)
+    ..add(14341)
+    ..add(14342)
+    ..add(14343)
+    ..add(14344)
+    ..add(14345)
+    ..add(14346)
+    ..add(14347)
+    ..add(14348)
+    ..add(14349)
+    ..add(14350)
+    ..add(14351)
+    ..add(14352)
+    ..add(14353)
+    ..add(14354)
+    ..add(14355)
+    ..add(14356)
+    ..add(14357)
+    ..add(14358)
+    ..add(14359)
+    ..add(14360)
+    ..add(14361)
+    ..add(14362)
+    ..add(14363)
+    ..add(14364)
+    ..add(14365)
+    ..add(14366)
+    ..add(14367)
+    ..add(14368)
+    ..add(14369)
+    ..add(14370)
+    ..add(14371)
+    ..add(14372)
+    ..add(14373)
+    ..add(14374)
+    ..add(14375)
+    ..add(14376)
+    ..add(14377)
+    ..add(14378)
+    ..add(14379)
+    ..add(14380)
+    ..add(14381)
+    ..add(14382)
+    ..add(14383)
+    ..add(14384)
+    ..add(14385)
+    ..add(14386)
+    ..add(14387)
+    ..add(14388)
+    ..add(14389)
+    ..add(14390)
+    ..add(14391)
+    ..add(14392)
+    ..add(14393)
+    ..add(14394)
+    ..add(14395)
+    ..add(14396)
+    ..add(14397)
+    ..add(14398)
+    ..add(14399)
+    ..add(14400)
+    ..add(14401)
+    ..add(14402)
+    ..add(14403)
+    ..add(14404)
+    ..add(14405)
+    ..add(14406)
+    ..add(14407)
+    ..add(14408)
+    ..add(14409)
+    ..add(14410)
+    ..add(14411)
+    ..add(14412)
+    ..add(14413)
+    ..add(14414)
+    ..add(14415)
+    ..add(14416)
+    ..add(14417)
+    ..add(14418)
+    ..add(14419)
+    ..add(14420)
+    ..add(14421)
+    ..add(14422)
+    ..add(14423)
+    ..add(14424)
+    ..add(14425)
+    ..add(14426)
+    ..add(14427)
+    ..add(14428)
+    ..add(14429)
+    ..add(14430)
+    ..add(14431)
+    ..add(14432)
+    ..add(14433)
+    ..add(14434)
+    ..add(14435)
+    ..add(14436)
+    ..add(14437)
+    ..add(14438)
+    ..add(14439)
+    ..add(14440)
+    ..add(14441)
+    ..add(14442)
+    ..add(14443)
+    ..add(14444)
+    ..add(14445)
+    ..add(14446)
+    ..add(14447)
+    ..add(14448)
+    ..add(14449)
+    ..add(14450)
+    ..add(14451)
+    ..add(14452)
+    ..add(14453)
+    ..add(14454)
+    ..add(14455)
+    ..add(14456)
+    ..add(14457)
+    ..add(14458)
+    ..add(14459)
+    ..add(14460)
+    ..add(14461)
+    ..add(14462)
+    ..add(14463)
+    ..add(14464)
+    ..add(14465)
+    ..add(14466)
+    ..add(14467)
+    ..add(14468)
+    ..add(14469)
+    ..add(14470)
+    ..add(14471)
+    ..add(14472)
+    ..add(14473)
+    ..add(14474)
+    ..add(14475)
+    ..add(14476)
+    ..add(14477)
+    ..add(14478)
+    ..add(14479)
+    ..add(14480)
+    ..add(14481)
+    ..add(14482)
+    ..add(14483)
+    ..add(14484)
+    ..add(14485)
+    ..add(14486)
+    ..add(14487)
+    ..add(14488)
+    ..add(14489)
+    ..add(14490)
+    ..add(14491)
+    ..add(14492)
+    ..add(14493)
+    ..add(14494)
+    ..add(14495)
+    ..add(14496)
+    ..add(14497)
+    ..add(14498)
+    ..add(14499)
+    ..add(14500)
+    ..add(14501)
+    ..add(14502)
+    ..add(14503)
+    ..add(14504)
+    ..add(14505)
+    ..add(14506)
+    ..add(14507)
+    ..add(14508)
+    ..add(14509)
+    ..add(14510)
+    ..add(14511)
+    ..add(14512)
+    ..add(14513)
+    ..add(14514)
+    ..add(14515)
+    ..add(14516)
+    ..add(14517)
+    ..add(14518)
+    ..add(14519)
+    ..add(14520)
+    ..add(14521)
+    ..add(14522)
+    ..add(14523)
+    ..add(14524)
+    ..add(14525)
+    ..add(14526)
+    ..add(14527)
+    ..add(14528)
+    ..add(14529)
+    ..add(14530)
+    ..add(14531)
+    ..add(14532)
+    ..add(14533)
+    ..add(14534)
+    ..add(14535)
+    ..add(14536)
+    ..add(14537)
+    ..add(14538)
+    ..add(14539)
+    ..add(14540)
+    ..add(14541)
+    ..add(14542)
+    ..add(14543)
+    ..add(14544)
+    ..add(14545)
+    ..add(14546)
+    ..add(14547)
+    ..add(14548)
+    ..add(14549)
+    ..add(14550)
+    ..add(14551)
+    ..add(14552)
+    ..add(14553)
+    ..add(14554)
+    ..add(14555)
+    ..add(14556)
+    ..add(14557)
+    ..add(14558)
+    ..add(14559)
+    ..add(14560)
+    ..add(14561)
+    ..add(14562)
+    ..add(14563)
+    ..add(14564)
+    ..add(14565)
+    ..add(14566)
+    ..add(14567)
+    ..add(14568)
+    ..add(14569)
+    ..add(14570)
+    ..add(14571)
+    ..add(14572)
+    ..add(14573)
+    ..add(14574)
+    ..add(14575)
+    ..add(14576)
+    ..add(14577)
+    ..add(14578)
+    ..add(14579)
+    ..add(14580)
+    ..add(14581)
+    ..add(14582)
+    ..add(14583)
+    ..add(14584)
+    ..add(14585)
+    ..add(14586)
+    ..add(14587)
+    ..add(14588)
+    ..add(14589)
+    ..add(14590)
+    ..add(14591)
+    ..add(14592)
+    ..add(14593)
+    ..add(14594)
+    ..add(14595)
+    ..add(14596)
+    ..add(14597)
+    ..add(14598)
+    ..add(14599)
+    ..add(14600)
+    ..add(14601)
+    ..add(14602)
+    ..add(14603)
+    ..add(14604)
+    ..add(14605)
+    ..add(14606)
+    ..add(14607)
+    ..add(14608)
+    ..add(14609)
+    ..add(14610)
+    ..add(14611)
+    ..add(14612)
+    ..add(14613)
+    ..add(14614)
+    ..add(14615)
+    ..add(14616)
+    ..add(14617)
+    ..add(14618)
+    ..add(14619)
+    ..add(14620)
+    ..add(14621)
+    ..add(14622)
+    ..add(14623)
+    ..add(14624)
+    ..add(14625)
+    ..add(14626)
+    ..add(14627)
+    ..add(14628)
+    ..add(14629)
+    ..add(14630)
+    ..add(14631)
+    ..add(14632)
+    ..add(14633)
+    ..add(14634)
+    ..add(14635)
+    ..add(14636)
+    ..add(14637)
+    ..add(14638)
+    ..add(14639)
+    ..add(14640)
+    ..add(14641)
+    ..add(14642)
+    ..add(14643)
+    ..add(14644)
+    ..add(14645)
+    ..add(14646)
+    ..add(14647)
+    ..add(14648)
+    ..add(14649)
+    ..add(14650)
+    ..add(14651)
+    ..add(14652)
+    ..add(14653)
+    ..add(14654)
+    ..add(14655)
+    ..add(14656)
+    ..add(14657)
+    ..add(14658)
+    ..add(14659)
+    ..add(14660)
+    ..add(14661)
+    ..add(14662)
+    ..add(14663)
+    ..add(14664)
+    ..add(14665)
+    ..add(14666)
+    ..add(14667)
+    ..add(14668)
+    ..add(14669)
+    ..add(14670)
+    ..add(14671)
+    ..add(14672)
+    ..add(14673)
+    ..add(14674)
+    ..add(14675)
+    ..add(14676)
+    ..add(14677)
+    ..add(14678)
+    ..add(14679)
+    ..add(14680)
+    ..add(14681)
+    ..add(14682)
+    ..add(14683)
+    ..add(14684)
+    ..add(14685)
+    ..add(14686)
+    ..add(14687)
+    ..add(14688)
+    ..add(14689)
+    ..add(14690)
+    ..add(14691)
+    ..add(14692)
+    ..add(14693)
+    ..add(14694)
+    ..add(14695)
+    ..add(14696)
+    ..add(14697)
+    ..add(14698)
+    ..add(14699)
+    ..add(14700)
+    ..add(14701)
+    ..add(14702)
+    ..add(14703)
+    ..add(14704)
+    ..add(14705)
+    ..add(14706)
+    ..add(14707)
+    ..add(14708)
+    ..add(14709)
+    ..add(14710)
+    ..add(14711)
+    ..add(14712)
+    ..add(14713)
+    ..add(14714)
+    ..add(14715)
+    ..add(14716)
+    ..add(14717)
+    ..add(14718)
+    ..add(14719)
+    ..add(14720)
+    ..add(14721)
+    ..add(14722)
+    ..add(14723)
+    ..add(14724)
+    ..add(14725)
+    ..add(14726)
+    ..add(14727)
+    ..add(14728)
+    ..add(14729)
+    ..add(14730)
+    ..add(14731)
+    ..add(14732)
+    ..add(14733)
+    ..add(14734)
+    ..add(14735)
+    ..add(14736)
+    ..add(14737)
+    ..add(14738)
+    ..add(14739)
+    ..add(14740)
+    ..add(14741)
+    ..add(14742)
+    ..add(14743)
+    ..add(14744)
+    ..add(14745)
+    ..add(14746)
+    ..add(14747)
+    ..add(14748)
+    ..add(14749)
+    ..add(14750)
+    ..add(14751)
+    ..add(14752)
+    ..add(14753)
+    ..add(14754)
+    ..add(14755)
+    ..add(14756)
+    ..add(14757)
+    ..add(14758)
+    ..add(14759)
+    ..add(14760)
+    ..add(14761)
+    ..add(14762)
+    ..add(14763)
+    ..add(14764)
+    ..add(14765)
+    ..add(14766)
+    ..add(14767)
+    ..add(14768)
+    ..add(14769)
+    ..add(14770)
+    ..add(14771)
+    ..add(14772)
+    ..add(14773)
+    ..add(14774)
+    ..add(14775)
+    ..add(14776)
+    ..add(14777)
+    ..add(14778)
+    ..add(14779)
+    ..add(14780)
+    ..add(14781)
+    ..add(14782)
+    ..add(14783)
+    ..add(14784)
+    ..add(14785)
+    ..add(14786)
+    ..add(14787)
+    ..add(14788)
+    ..add(14789)
+    ..add(14790)
+    ..add(14791)
+    ..add(14792)
+    ..add(14793)
+    ..add(14794)
+    ..add(14795)
+    ..add(14796)
+    ..add(14797)
+    ..add(14798)
+    ..add(14799)
+    ..add(14800)
+    ..add(14801)
+    ..add(14802)
+    ..add(14803)
+    ..add(14804)
+    ..add(14805)
+    ..add(14806)
+    ..add(14807)
+    ..add(14808)
+    ..add(14809)
+    ..add(14810)
+    ..add(14811)
+    ..add(14812)
+    ..add(14813)
+    ..add(14814)
+    ..add(14815)
+    ..add(14816)
+    ..add(14817)
+    ..add(14818)
+    ..add(14819)
+    ..add(14820)
+    ..add(14821)
+    ..add(14822)
+    ..add(14823)
+    ..add(14824)
+    ..add(14825)
+    ..add(14826)
+    ..add(14827)
+    ..add(14828)
+    ..add(14829)
+    ..add(14830)
+    ..add(14831)
+    ..add(14832)
+    ..add(14833)
+    ..add(14834)
+    ..add(14835)
+    ..add(14836)
+    ..add(14837)
+    ..add(14838)
+    ..add(14839)
+    ..add(14840)
+    ..add(14841)
+    ..add(14842)
+    ..add(14843)
+    ..add(14844)
+    ..add(14845)
+    ..add(14846)
+    ..add(14847)
+    ..add(14848)
+    ..add(14849)
+    ..add(14850)
+    ..add(14851)
+    ..add(14852)
+    ..add(14853)
+    ..add(14854)
+    ..add(14855)
+    ..add(14856)
+    ..add(14857)
+    ..add(14858)
+    ..add(14859)
+    ..add(14860)
+    ..add(14861)
+    ..add(14862)
+    ..add(14863)
+    ..add(14864)
+    ..add(14865)
+    ..add(14866)
+    ..add(14867)
+    ..add(14868)
+    ..add(14869)
+    ..add(14870)
+    ..add(14871)
+    ..add(14872)
+    ..add(14873)
+    ..add(14874)
+    ..add(14875)
+    ..add(14876)
+    ..add(14877)
+    ..add(14878)
+    ..add(14879)
+    ..add(14880)
+    ..add(14881)
+    ..add(14882)
+    ..add(14883)
+    ..add(14884)
+    ..add(14885)
+    ..add(14886)
+    ..add(14887)
+    ..add(14888)
+    ..add(14889)
+    ..add(14890)
+    ..add(14891)
+    ..add(14892)
+    ..add(14893)
+    ..add(14894)
+    ..add(14895)
+    ..add(14896)
+    ..add(14897)
+    ..add(14898)
+    ..add(14899)
+    ..add(14900)
+    ..add(14901)
+    ..add(14902)
+    ..add(14903)
+    ..add(14904)
+    ..add(14905)
+    ..add(14906)
+    ..add(14907)
+    ..add(14908)
+    ..add(14909)
+    ..add(14910)
+    ..add(14911)
+    ..add(14912)
+    ..add(14913)
+    ..add(14914)
+    ..add(14915)
+    ..add(14916)
+    ..add(14917)
+    ..add(14918)
+    ..add(14919)
+    ..add(14920)
+    ..add(14921)
+    ..add(14922)
+    ..add(14923)
+    ..add(14924)
+    ..add(14925)
+    ..add(14926)
+    ..add(14927)
+    ..add(14928)
+    ..add(14929)
+    ..add(14930)
+    ..add(14931)
+    ..add(14932)
+    ..add(14933)
+    ..add(14934)
+    ..add(14935)
+    ..add(14936)
+    ..add(14937)
+    ..add(14938)
+    ..add(14939)
+    ..add(14940)
+    ..add(14941)
+    ..add(14942)
+    ..add(14943)
+    ..add(14944)
+    ..add(14945)
+    ..add(14946)
+    ..add(14947)
+    ..add(14948)
+    ..add(14949)
+    ..add(14950)
+    ..add(14951)
+    ..add(14952)
+    ..add(14953)
+    ..add(14954)
+    ..add(14955)
+    ..add(14956)
+    ..add(14957)
+    ..add(14958)
+    ..add(14959)
+    ..add(14960)
+    ..add(14961)
+    ..add(14962)
+    ..add(14963)
+    ..add(14964)
+    ..add(14965)
+    ..add(14966)
+    ..add(14967)
+    ..add(14968)
+    ..add(14969)
+    ..add(14970)
+    ..add(14971)
+    ..add(14972)
+    ..add(14973)
+    ..add(14974)
+    ..add(14975)
+    ..add(14976)
+    ..add(14977)
+    ..add(14978)
+    ..add(14979)
+    ..add(14980)
+    ..add(14981)
+    ..add(14982)
+    ..add(14983)
+    ..add(14984)
+    ..add(14985)
+    ..add(14986)
+    ..add(14987)
+    ..add(14988)
+    ..add(14989)
+    ..add(14990)
+    ..add(14991)
+    ..add(14992)
+    ..add(14993)
+    ..add(14994)
+    ..add(14995)
+    ..add(14996)
+    ..add(14997)
+    ..add(14998)
+    ..add(14999)
+    ..add(15000)
+    ..add(15001)
+    ..add(15002)
+    ..add(15003)
+    ..add(15004)
+    ..add(15005)
+    ..add(15006)
+    ..add(15007)
+    ..add(15008)
+    ..add(15009)
+    ..add(15010)
+    ..add(15011)
+    ..add(15012)
+    ..add(15013)
+    ..add(15014)
+    ..add(15015)
+    ..add(15016)
+    ..add(15017)
+    ..add(15018)
+    ..add(15019)
+    ..add(15020)
+    ..add(15021)
+    ..add(15022)
+    ..add(15023)
+    ..add(15024)
+    ..add(15025)
+    ..add(15026)
+    ..add(15027)
+    ..add(15028)
+    ..add(15029)
+    ..add(15030)
+    ..add(15031)
+    ..add(15032)
+    ..add(15033)
+    ..add(15034)
+    ..add(15035)
+    ..add(15036)
+    ..add(15037)
+    ..add(15038)
+    ..add(15039)
+    ..add(15040)
+    ..add(15041)
+    ..add(15042)
+    ..add(15043)
+    ..add(15044)
+    ..add(15045)
+    ..add(15046)
+    ..add(15047)
+    ..add(15048)
+    ..add(15049)
+    ..add(15050)
+    ..add(15051)
+    ..add(15052)
+    ..add(15053)
+    ..add(15054)
+    ..add(15055)
+    ..add(15056)
+    ..add(15057)
+    ..add(15058)
+    ..add(15059)
+    ..add(15060)
+    ..add(15061)
+    ..add(15062)
+    ..add(15063)
+    ..add(15064)
+    ..add(15065)
+    ..add(15066)
+    ..add(15067)
+    ..add(15068)
+    ..add(15069)
+    ..add(15070)
+    ..add(15071)
+    ..add(15072)
+    ..add(15073)
+    ..add(15074)
+    ..add(15075)
+    ..add(15076)
+    ..add(15077)
+    ..add(15078)
+    ..add(15079)
+    ..add(15080)
+    ..add(15081)
+    ..add(15082)
+    ..add(15083)
+    ..add(15084)
+    ..add(15085)
+    ..add(15086)
+    ..add(15087)
+    ..add(15088)
+    ..add(15089)
+    ..add(15090)
+    ..add(15091)
+    ..add(15092)
+    ..add(15093)
+    ..add(15094)
+    ..add(15095)
+    ..add(15096)
+    ..add(15097)
+    ..add(15098)
+    ..add(15099)
+    ..add(15100)
+    ..add(15101)
+    ..add(15102)
+    ..add(15103)
+    ..add(15104)
+    ..add(15105)
+    ..add(15106)
+    ..add(15107)
+    ..add(15108)
+    ..add(15109)
+    ..add(15110)
+    ..add(15111)
+    ..add(15112)
+    ..add(15113)
+    ..add(15114)
+    ..add(15115)
+    ..add(15116)
+    ..add(15117)
+    ..add(15118)
+    ..add(15119)
+    ..add(15120)
+    ..add(15121)
+    ..add(15122)
+    ..add(15123)
+    ..add(15124)
+    ..add(15125)
+    ..add(15126)
+    ..add(15127)
+    ..add(15128)
+    ..add(15129)
+    ..add(15130)
+    ..add(15131)
+    ..add(15132)
+    ..add(15133)
+    ..add(15134)
+    ..add(15135)
+    ..add(15136)
+    ..add(15137)
+    ..add(15138)
+    ..add(15139)
+    ..add(15140)
+    ..add(15141)
+    ..add(15142)
+    ..add(15143)
+    ..add(15144)
+    ..add(15145)
+    ..add(15146)
+    ..add(15147)
+    ..add(15148)
+    ..add(15149)
+    ..add(15150)
+    ..add(15151)
+    ..add(15152)
+    ..add(15153)
+    ..add(15154)
+    ..add(15155)
+    ..add(15156)
+    ..add(15157)
+    ..add(15158)
+    ..add(15159)
+    ..add(15160)
+    ..add(15161)
+    ..add(15162)
+    ..add(15163)
+    ..add(15164)
+    ..add(15165)
+    ..add(15166)
+    ..add(15167)
+    ..add(15168)
+    ..add(15169)
+    ..add(15170)
+    ..add(15171)
+    ..add(15172)
+    ..add(15173)
+    ..add(15174)
+    ..add(15175)
+    ..add(15176)
+    ..add(15177)
+    ..add(15178)
+    ..add(15179)
+    ..add(15180)
+    ..add(15181)
+    ..add(15182)
+    ..add(15183)
+    ..add(15184)
+    ..add(15185)
+    ..add(15186)
+    ..add(15187)
+    ..add(15188)
+    ..add(15189)
+    ..add(15190)
+    ..add(15191)
+    ..add(15192)
+    ..add(15193)
+    ..add(15194)
+    ..add(15195)
+    ..add(15196)
+    ..add(15197)
+    ..add(15198)
+    ..add(15199)
+    ..add(15200)
+    ..add(15201)
+    ..add(15202)
+    ..add(15203)
+    ..add(15204)
+    ..add(15205)
+    ..add(15206)
+    ..add(15207)
+    ..add(15208)
+    ..add(15209)
+    ..add(15210)
+    ..add(15211)
+    ..add(15212)
+    ..add(15213)
+    ..add(15214)
+    ..add(15215)
+    ..add(15216)
+    ..add(15217)
+    ..add(15218)
+    ..add(15219)
+    ..add(15220)
+    ..add(15221)
+    ..add(15222)
+    ..add(15223)
+    ..add(15224)
+    ..add(15225)
+    ..add(15226)
+    ..add(15227)
+    ..add(15228)
+    ..add(15229)
+    ..add(15230)
+    ..add(15231)
+    ..add(15232)
+    ..add(15233)
+    ..add(15234)
+    ..add(15235)
+    ..add(15236)
+    ..add(15237)
+    ..add(15238)
+    ..add(15239)
+    ..add(15240)
+    ..add(15241)
+    ..add(15242)
+    ..add(15243)
+    ..add(15244)
+    ..add(15245)
+    ..add(15246)
+    ..add(15247)
+    ..add(15248)
+    ..add(15249)
+    ..add(15250)
+    ..add(15251)
+    ..add(15252)
+    ..add(15253)
+    ..add(15254)
+    ..add(15255)
+    ..add(15256)
+    ..add(15257)
+    ..add(15258)
+    ..add(15259)
+    ..add(15260)
+    ..add(15261)
+    ..add(15262)
+    ..add(15263)
+    ..add(15264)
+    ..add(15265)
+    ..add(15266)
+    ..add(15267)
+    ..add(15268)
+    ..add(15269)
+    ..add(15270)
+    ..add(15271)
+    ..add(15272)
+    ..add(15273)
+    ..add(15274)
+    ..add(15275)
+    ..add(15276)
+    ..add(15277)
+    ..add(15278)
+    ..add(15279)
+    ..add(15280)
+    ..add(15281)
+    ..add(15282)
+    ..add(15283)
+    ..add(15284)
+    ..add(15285)
+    ..add(15286)
+    ..add(15287)
+    ..add(15288)
+    ..add(15289)
+    ..add(15290)
+    ..add(15291)
+    ..add(15292)
+    ..add(15293)
+    ..add(15294)
+    ..add(15295)
+    ..add(15296)
+    ..add(15297)
+    ..add(15298)
+    ..add(15299)
+    ..add(15300)
+    ..add(15301)
+    ..add(15302)
+    ..add(15303)
+    ..add(15304)
+    ..add(15305)
+    ..add(15306)
+    ..add(15307)
+    ..add(15308)
+    ..add(15309)
+    ..add(15310)
+    ..add(15311)
+    ..add(15312)
+    ..add(15313)
+    ..add(15314)
+    ..add(15315)
+    ..add(15316)
+    ..add(15317)
+    ..add(15318)
+    ..add(15319)
+    ..add(15320)
+    ..add(15321)
+    ..add(15322)
+    ..add(15323)
+    ..add(15324)
+    ..add(15325)
+    ..add(15326)
+    ..add(15327)
+    ..add(15328)
+    ..add(15329)
+    ..add(15330)
+    ..add(15331)
+    ..add(15332)
+    ..add(15333)
+    ..add(15334)
+    ..add(15335)
+    ..add(15336)
+    ..add(15337)
+    ..add(15338)
+    ..add(15339)
+    ..add(15340)
+    ..add(15341)
+    ..add(15342)
+    ..add(15343)
+    ..add(15344)
+    ..add(15345)
+    ..add(15346)
+    ..add(15347)
+    ..add(15348)
+    ..add(15349)
+    ..add(15350)
+    ..add(15351)
+    ..add(15352)
+    ..add(15353)
+    ..add(15354)
+    ..add(15355)
+    ..add(15356)
+    ..add(15357)
+    ..add(15358)
+    ..add(15359)
+    ..add(15360)
+    ..add(15361)
+    ..add(15362)
+    ..add(15363)
+    ..add(15364)
+    ..add(15365)
+    ..add(15366)
+    ..add(15367)
+    ..add(15368)
+    ..add(15369)
+    ..add(15370)
+    ..add(15371)
+    ..add(15372)
+    ..add(15373)
+    ..add(15374)
+    ..add(15375)
+    ..add(15376)
+    ..add(15377)
+    ..add(15378)
+    ..add(15379)
+    ..add(15380)
+    ..add(15381)
+    ..add(15382)
+    ..add(15383)
+    ..add(15384)
+    ..add(15385)
+    ..add(15386)
+    ..add(15387)
+    ..add(15388)
+    ..add(15389)
+    ..add(15390)
+    ..add(15391)
+    ..add(15392)
+    ..add(15393)
+    ..add(15394)
+    ..add(15395)
+    ..add(15396)
+    ..add(15397)
+    ..add(15398)
+    ..add(15399)
+    ..add(15400)
+    ..add(15401)
+    ..add(15402)
+    ..add(15403)
+    ..add(15404)
+    ..add(15405)
+    ..add(15406)
+    ..add(15407)
+    ..add(15408)
+    ..add(15409)
+    ..add(15410)
+    ..add(15411)
+    ..add(15412)
+    ..add(15413)
+    ..add(15414)
+    ..add(15415)
+    ..add(15416)
+    ..add(15417)
+    ..add(15418)
+    ..add(15419)
+    ..add(15420)
+    ..add(15421)
+    ..add(15422)
+    ..add(15423)
+    ..add(15424)
+    ..add(15425)
+    ..add(15426)
+    ..add(15427)
+    ..add(15428)
+    ..add(15429)
+    ..add(15430)
+    ..add(15431)
+    ..add(15432)
+    ..add(15433)
+    ..add(15434)
+    ..add(15435)
+    ..add(15436)
+    ..add(15437)
+    ..add(15438)
+    ..add(15439)
+    ..add(15440)
+    ..add(15441)
+    ..add(15442)
+    ..add(15443)
+    ..add(15444)
+    ..add(15445)
+    ..add(15446)
+    ..add(15447)
+    ..add(15448)
+    ..add(15449)
+    ..add(15450)
+    ..add(15451)
+    ..add(15452)
+    ..add(15453)
+    ..add(15454)
+    ..add(15455)
+    ..add(15456)
+    ..add(15457)
+    ..add(15458)
+    ..add(15459)
+    ..add(15460)
+    ..add(15461)
+    ..add(15462)
+    ..add(15463)
+    ..add(15464)
+    ..add(15465)
+    ..add(15466)
+    ..add(15467)
+    ..add(15468)
+    ..add(15469)
+    ..add(15470)
+    ..add(15471)
+    ..add(15472)
+    ..add(15473)
+    ..add(15474)
+    ..add(15475)
+    ..add(15476)
+    ..add(15477)
+    ..add(15478)
+    ..add(15479)
+    ..add(15480)
+    ..add(15481)
+    ..add(15482)
+    ..add(15483)
+    ..add(15484)
+    ..add(15485)
+    ..add(15486)
+    ..add(15487)
+    ..add(15488)
+    ..add(15489)
+    ..add(15490)
+    ..add(15491)
+    ..add(15492)
+    ..add(15493)
+    ..add(15494)
+    ..add(15495)
+    ..add(15496)
+    ..add(15497)
+    ..add(15498)
+    ..add(15499)
+    ..add(15500)
+    ..add(15501)
+    ..add(15502)
+    ..add(15503)
+    ..add(15504)
+    ..add(15505)
+    ..add(15506)
+    ..add(15507)
+    ..add(15508)
+    ..add(15509)
+    ..add(15510)
+    ..add(15511)
+    ..add(15512)
+    ..add(15513)
+    ..add(15514)
+    ..add(15515)
+    ..add(15516)
+    ..add(15517)
+    ..add(15518)
+    ..add(15519)
+    ..add(15520)
+    ..add(15521)
+    ..add(15522)
+    ..add(15523)
+    ..add(15524)
+    ..add(15525)
+    ..add(15526)
+    ..add(15527)
+    ..add(15528)
+    ..add(15529)
+    ..add(15530)
+    ..add(15531)
+    ..add(15532)
+    ..add(15533)
+    ..add(15534)
+    ..add(15535)
+    ..add(15536)
+    ..add(15537)
+    ..add(15538)
+    ..add(15539)
+    ..add(15540)
+    ..add(15541)
+    ..add(15542)
+    ..add(15543)
+    ..add(15544)
+    ..add(15545)
+    ..add(15546)
+    ..add(15547)
+    ..add(15548)
+    ..add(15549)
+    ..add(15550)
+    ..add(15551)
+    ..add(15552)
+    ..add(15553)
+    ..add(15554)
+    ..add(15555)
+    ..add(15556)
+    ..add(15557)
+    ..add(15558)
+    ..add(15559)
+    ..add(15560)
+    ..add(15561)
+    ..add(15562)
+    ..add(15563)
+    ..add(15564)
+    ..add(15565)
+    ..add(15566)
+    ..add(15567)
+    ..add(15568)
+    ..add(15569)
+    ..add(15570)
+    ..add(15571)
+    ..add(15572)
+    ..add(15573)
+    ..add(15574)
+    ..add(15575)
+    ..add(15576)
+    ..add(15577)
+    ..add(15578)
+    ..add(15579)
+    ..add(15580)
+    ..add(15581)
+    ..add(15582)
+    ..add(15583)
+    ..add(15584)
+    ..add(15585)
+    ..add(15586)
+    ..add(15587)
+    ..add(15588)
+    ..add(15589)
+    ..add(15590)
+    ..add(15591)
+    ..add(15592)
+    ..add(15593)
+    ..add(15594)
+    ..add(15595)
+    ..add(15596)
+    ..add(15597)
+    ..add(15598)
+    ..add(15599)
+    ..add(15600)
+    ..add(15601)
+    ..add(15602)
+    ..add(15603)
+    ..add(15604)
+    ..add(15605)
+    ..add(15606)
+    ..add(15607)
+    ..add(15608)
+    ..add(15609)
+    ..add(15610)
+    ..add(15611)
+    ..add(15612)
+    ..add(15613)
+    ..add(15614)
+    ..add(15615)
+    ..add(15616)
+    ..add(15617)
+    ..add(15618)
+    ..add(15619)
+    ..add(15620)
+    ..add(15621)
+    ..add(15622)
+    ..add(15623)
+    ..add(15624)
+    ..add(15625)
+    ..add(15626)
+    ..add(15627)
+    ..add(15628)
+    ..add(15629)
+    ..add(15630)
+    ..add(15631)
+    ..add(15632)
+    ..add(15633)
+    ..add(15634)
+    ..add(15635)
+    ..add(15636)
+    ..add(15637)
+    ..add(15638)
+    ..add(15639)
+    ..add(15640)
+    ..add(15641)
+    ..add(15642)
+    ..add(15643)
+    ..add(15644)
+    ..add(15645)
+    ..add(15646)
+    ..add(15647)
+    ..add(15648)
+    ..add(15649)
+    ..add(15650)
+    ..add(15651)
+    ..add(15652)
+    ..add(15653)
+    ..add(15654)
+    ..add(15655)
+    ..add(15656)
+    ..add(15657)
+    ..add(15658)
+    ..add(15659)
+    ..add(15660)
+    ..add(15661)
+    ..add(15662)
+    ..add(15663)
+    ..add(15664)
+    ..add(15665)
+    ..add(15666)
+    ..add(15667)
+    ..add(15668)
+    ..add(15669)
+    ..add(15670)
+    ..add(15671)
+    ..add(15672)
+    ..add(15673)
+    ..add(15674)
+    ..add(15675)
+    ..add(15676)
+    ..add(15677)
+    ..add(15678)
+    ..add(15679)
+    ..add(15680)
+    ..add(15681)
+    ..add(15682)
+    ..add(15683)
+    ..add(15684)
+    ..add(15685)
+    ..add(15686)
+    ..add(15687)
+    ..add(15688)
+    ..add(15689)
+    ..add(15690)
+    ..add(15691)
+    ..add(15692)
+    ..add(15693)
+    ..add(15694)
+    ..add(15695)
+    ..add(15696)
+    ..add(15697)
+    ..add(15698)
+    ..add(15699)
+    ..add(15700)
+    ..add(15701)
+    ..add(15702)
+    ..add(15703)
+    ..add(15704)
+    ..add(15705)
+    ..add(15706)
+    ..add(15707)
+    ..add(15708)
+    ..add(15709)
+    ..add(15710)
+    ..add(15711)
+    ..add(15712)
+    ..add(15713)
+    ..add(15714)
+    ..add(15715)
+    ..add(15716)
+    ..add(15717)
+    ..add(15718)
+    ..add(15719)
+    ..add(15720)
+    ..add(15721)
+    ..add(15722)
+    ..add(15723)
+    ..add(15724)
+    ..add(15725)
+    ..add(15726)
+    ..add(15727)
+    ..add(15728)
+    ..add(15729)
+    ..add(15730)
+    ..add(15731)
+    ..add(15732)
+    ..add(15733)
+    ..add(15734)
+    ..add(15735)
+    ..add(15736)
+    ..add(15737)
+    ..add(15738)
+    ..add(15739)
+    ..add(15740)
+    ..add(15741)
+    ..add(15742)
+    ..add(15743)
+    ..add(15744)
+    ..add(15745)
+    ..add(15746)
+    ..add(15747)
+    ..add(15748)
+    ..add(15749)
+    ..add(15750)
+    ..add(15751)
+    ..add(15752)
+    ..add(15753)
+    ..add(15754)
+    ..add(15755)
+    ..add(15756)
+    ..add(15757)
+    ..add(15758)
+    ..add(15759)
+    ..add(15760)
+    ..add(15761)
+    ..add(15762)
+    ..add(15763)
+    ..add(15764)
+    ..add(15765)
+    ..add(15766)
+    ..add(15767)
+    ..add(15768)
+    ..add(15769)
+    ..add(15770)
+    ..add(15771)
+    ..add(15772)
+    ..add(15773)
+    ..add(15774)
+    ..add(15775)
+    ..add(15776)
+    ..add(15777)
+    ..add(15778)
+    ..add(15779)
+    ..add(15780)
+    ..add(15781)
+    ..add(15782)
+    ..add(15783)
+    ..add(15784)
+    ..add(15785)
+    ..add(15786)
+    ..add(15787)
+    ..add(15788)
+    ..add(15789)
+    ..add(15790)
+    ..add(15791)
+    ..add(15792)
+    ..add(15793)
+    ..add(15794)
+    ..add(15795)
+    ..add(15796)
+    ..add(15797)
+    ..add(15798)
+    ..add(15799)
+    ..add(15800)
+    ..add(15801)
+    ..add(15802)
+    ..add(15803)
+    ..add(15804)
+    ..add(15805)
+    ..add(15806)
+    ..add(15807)
+    ..add(15808)
+    ..add(15809)
+    ..add(15810)
+    ..add(15811)
+    ..add(15812)
+    ..add(15813)
+    ..add(15814)
+    ..add(15815)
+    ..add(15816)
+    ..add(15817)
+    ..add(15818)
+    ..add(15819)
+    ..add(15820)
+    ..add(15821)
+    ..add(15822)
+    ..add(15823)
+    ..add(15824)
+    ..add(15825)
+    ..add(15826)
+    ..add(15827)
+    ..add(15828)
+    ..add(15829)
+    ..add(15830)
+    ..add(15831)
+    ..add(15832)
+    ..add(15833)
+    ..add(15834)
+    ..add(15835)
+    ..add(15836)
+    ..add(15837)
+    ..add(15838)
+    ..add(15839)
+    ..add(15840)
+    ..add(15841)
+    ..add(15842)
+    ..add(15843)
+    ..add(15844)
+    ..add(15845)
+    ..add(15846)
+    ..add(15847)
+    ..add(15848)
+    ..add(15849)
+    ..add(15850)
+    ..add(15851)
+    ..add(15852)
+    ..add(15853)
+    ..add(15854)
+    ..add(15855)
+    ..add(15856)
+    ..add(15857)
+    ..add(15858)
+    ..add(15859)
+    ..add(15860)
+    ..add(15861)
+    ..add(15862)
+    ..add(15863)
+    ..add(15864)
+    ..add(15865)
+    ..add(15866)
+    ..add(15867)
+    ..add(15868)
+    ..add(15869)
+    ..add(15870)
+    ..add(15871)
+    ..add(15872)
+    ..add(15873)
+    ..add(15874)
+    ..add(15875)
+    ..add(15876)
+    ..add(15877)
+    ..add(15878)
+    ..add(15879)
+    ..add(15880)
+    ..add(15881)
+    ..add(15882)
+    ..add(15883)
+    ..add(15884)
+    ..add(15885)
+    ..add(15886)
+    ..add(15887)
+    ..add(15888)
+    ..add(15889)
+    ..add(15890)
+    ..add(15891)
+    ..add(15892)
+    ..add(15893)
+    ..add(15894)
+    ..add(15895)
+    ..add(15896)
+    ..add(15897)
+    ..add(15898)
+    ..add(15899)
+    ..add(15900)
+    ..add(15901)
+    ..add(15902)
+    ..add(15903)
+    ..add(15904)
+    ..add(15905)
+    ..add(15906)
+    ..add(15907)
+    ..add(15908)
+    ..add(15909)
+    ..add(15910)
+    ..add(15911)
+    ..add(15912)
+    ..add(15913)
+    ..add(15914)
+    ..add(15915)
+    ..add(15916)
+    ..add(15917)
+    ..add(15918)
+    ..add(15919)
+    ..add(15920)
+    ..add(15921)
+    ..add(15922)
+    ..add(15923)
+    ..add(15924)
+    ..add(15925)
+    ..add(15926)
+    ..add(15927)
+    ..add(15928)
+    ..add(15929)
+    ..add(15930)
+    ..add(15931)
+    ..add(15932)
+    ..add(15933)
+    ..add(15934)
+    ..add(15935)
+    ..add(15936)
+    ..add(15937)
+    ..add(15938)
+    ..add(15939)
+    ..add(15940)
+    ..add(15941)
+    ..add(15942)
+    ..add(15943)
+    ..add(15944)
+    ..add(15945)
+    ..add(15946)
+    ..add(15947)
+    ..add(15948)
+    ..add(15949)
+    ..add(15950)
+    ..add(15951)
+    ..add(15952)
+    ..add(15953)
+    ..add(15954)
+    ..add(15955)
+    ..add(15956)
+    ..add(15957)
+    ..add(15958)
+    ..add(15959)
+    ..add(15960)
+    ..add(15961)
+    ..add(15962)
+    ..add(15963)
+    ..add(15964)
+    ..add(15965)
+    ..add(15966)
+    ..add(15967)
+    ..add(15968)
+    ..add(15969)
+    ..add(15970)
+    ..add(15971)
+    ..add(15972)
+    ..add(15973)
+    ..add(15974)
+    ..add(15975)
+    ..add(15976)
+    ..add(15977)
+    ..add(15978)
+    ..add(15979)
+    ..add(15980)
+    ..add(15981)
+    ..add(15982)
+    ..add(15983)
+    ..add(15984)
+    ..add(15985)
+    ..add(15986)
+    ..add(15987)
+    ..add(15988)
+    ..add(15989)
+    ..add(15990)
+    ..add(15991)
+    ..add(15992)
+    ..add(15993)
+    ..add(15994)
+    ..add(15995)
+    ..add(15996)
+    ..add(15997)
+    ..add(15998)
+    ..add(15999)
+    ..add(16000)
+    ..add(16001)
+    ..add(16002)
+    ..add(16003)
+    ..add(16004)
+    ..add(16005)
+    ..add(16006)
+    ..add(16007)
+    ..add(16008)
+    ..add(16009)
+    ..add(16010)
+    ..add(16011)
+    ..add(16012)
+    ..add(16013)
+    ..add(16014)
+    ..add(16015)
+    ..add(16016)
+    ..add(16017)
+    ..add(16018)
+    ..add(16019)
+    ..add(16020)
+    ..add(16021)
+    ..add(16022)
+    ..add(16023)
+    ..add(16024)
+    ..add(16025)
+    ..add(16026)
+    ..add(16027)
+    ..add(16028)
+    ..add(16029)
+    ..add(16030)
+    ..add(16031)
+    ..add(16032)
+    ..add(16033)
+    ..add(16034)
+    ..add(16035)
+    ..add(16036)
+    ..add(16037)
+    ..add(16038)
+    ..add(16039)
+    ..add(16040)
+    ..add(16041)
+    ..add(16042)
+    ..add(16043)
+    ..add(16044)
+    ..add(16045)
+    ..add(16046)
+    ..add(16047)
+    ..add(16048)
+    ..add(16049)
+    ..add(16050)
+    ..add(16051)
+    ..add(16052)
+    ..add(16053)
+    ..add(16054)
+    ..add(16055)
+    ..add(16056)
+    ..add(16057)
+    ..add(16058)
+    ..add(16059)
+    ..add(16060)
+    ..add(16061)
+    ..add(16062)
+    ..add(16063)
+    ..add(16064)
+    ..add(16065)
+    ..add(16066)
+    ..add(16067)
+    ..add(16068)
+    ..add(16069)
+    ..add(16070)
+    ..add(16071)
+    ..add(16072)
+    ..add(16073)
+    ..add(16074)
+    ..add(16075)
+    ..add(16076)
+    ..add(16077)
+    ..add(16078)
+    ..add(16079)
+    ..add(16080)
+    ..add(16081)
+    ..add(16082)
+    ..add(16083)
+    ..add(16084)
+    ..add(16085)
+    ..add(16086)
+    ..add(16087)
+    ..add(16088)
+    ..add(16089)
+    ..add(16090)
+    ..add(16091)
+    ..add(16092)
+    ..add(16093)
+    ..add(16094)
+    ..add(16095)
+    ..add(16096)
+    ..add(16097)
+    ..add(16098)
+    ..add(16099)
+    ..add(16100)
+    ..add(16101)
+    ..add(16102)
+    ..add(16103)
+    ..add(16104)
+    ..add(16105)
+    ..add(16106)
+    ..add(16107)
+    ..add(16108)
+    ..add(16109)
+    ..add(16110)
+    ..add(16111)
+    ..add(16112)
+    ..add(16113)
+    ..add(16114)
+    ..add(16115)
+    ..add(16116)
+    ..add(16117)
+    ..add(16118)
+    ..add(16119)
+    ..add(16120)
+    ..add(16121)
+    ..add(16122)
+    ..add(16123)
+    ..add(16124)
+    ..add(16125)
+    ..add(16126)
+    ..add(16127)
+    ..add(16128)
+    ..add(16129)
+    ..add(16130)
+    ..add(16131)
+    ..add(16132)
+    ..add(16133)
+    ..add(16134)
+    ..add(16135)
+    ..add(16136)
+    ..add(16137)
+    ..add(16138)
+    ..add(16139)
+    ..add(16140)
+    ..add(16141)
+    ..add(16142)
+    ..add(16143)
+    ..add(16144)
+    ..add(16145)
+    ..add(16146)
+    ..add(16147)
+    ..add(16148)
+    ..add(16149)
+    ..add(16150)
+    ..add(16151)
+    ..add(16152)
+    ..add(16153)
+    ..add(16154)
+    ..add(16155)
+    ..add(16156)
+    ..add(16157)
+    ..add(16158)
+    ..add(16159)
+    ..add(16160)
+    ..add(16161)
+    ..add(16162)
+    ..add(16163)
+    ..add(16164)
+    ..add(16165)
+    ..add(16166)
+    ..add(16167)
+    ..add(16168)
+    ..add(16169)
+    ..add(16170)
+    ..add(16171)
+    ..add(16172)
+    ..add(16173)
+    ..add(16174)
+    ..add(16175)
+    ..add(16176)
+    ..add(16177)
+    ..add(16178)
+    ..add(16179)
+    ..add(16180)
+    ..add(16181)
+    ..add(16182)
+    ..add(16183)
+    ..add(16184)
+    ..add(16185)
+    ..add(16186)
+    ..add(16187)
+    ..add(16188)
+    ..add(16189)
+    ..add(16190)
+    ..add(16191)
+    ..add(16192)
+    ..add(16193)
+    ..add(16194)
+    ..add(16195)
+    ..add(16196)
+    ..add(16197)
+    ..add(16198)
+    ..add(16199)
+    ..add(16200)
+    ..add(16201)
+    ..add(16202)
+    ..add(16203)
+    ..add(16204)
+    ..add(16205)
+    ..add(16206)
+    ..add(16207)
+    ..add(16208)
+    ..add(16209)
+    ..add(16210)
+    ..add(16211)
+    ..add(16212)
+    ..add(16213)
+    ..add(16214)
+    ..add(16215)
+    ..add(16216)
+    ..add(16217)
+    ..add(16218)
+    ..add(16219)
+    ..add(16220)
+    ..add(16221)
+    ..add(16222)
+    ..add(16223)
+    ..add(16224)
+    ..add(16225)
+    ..add(16226)
+    ..add(16227)
+    ..add(16228)
+    ..add(16229)
+    ..add(16230)
+    ..add(16231)
+    ..add(16232)
+    ..add(16233)
+    ..add(16234)
+    ..add(16235)
+    ..add(16236)
+    ..add(16237)
+    ..add(16238)
+    ..add(16239)
+    ..add(16240)
+    ..add(16241)
+    ..add(16242)
+    ..add(16243)
+    ..add(16244)
+    ..add(16245)
+    ..add(16246)
+    ..add(16247)
+    ..add(16248)
+    ..add(16249)
+    ..add(16250)
+    ..add(16251)
+    ..add(16252)
+    ..add(16253)
+    ..add(16254)
+    ..add(16255)
+    ..add(16256)
+    ..add(16257)
+    ..add(16258)
+    ..add(16259)
+    ..add(16260)
+    ..add(16261)
+    ..add(16262)
+    ..add(16263)
+    ..add(16264)
+    ..add(16265)
+    ..add(16266)
+    ..add(16267)
+    ..add(16268)
+    ..add(16269)
+    ..add(16270)
+    ..add(16271)
+    ..add(16272)
+    ..add(16273)
+    ..add(16274)
+    ..add(16275)
+    ..add(16276)
+    ..add(16277)
+    ..add(16278)
+    ..add(16279)
+    ..add(16280)
+    ..add(16281)
+    ..add(16282)
+    ..add(16283)
+    ..add(16284)
+    ..add(16285)
+    ..add(16286)
+    ..add(16287)
+    ..add(16288)
+    ..add(16289)
+    ..add(16290)
+    ..add(16291)
+    ..add(16292)
+    ..add(16293)
+    ..add(16294)
+    ..add(16295)
+    ..add(16296)
+    ..add(16297)
+    ..add(16298)
+    ..add(16299)
+    ..add(16300)
+    ..add(16301)
+    ..add(16302)
+    ..add(16303)
+    ..add(16304)
+    ..add(16305)
+    ..add(16306)
+    ..add(16307)
+    ..add(16308)
+    ..add(16309)
+    ..add(16310)
+    ..add(16311)
+    ..add(16312)
+    ..add(16313)
+    ..add(16314)
+    ..add(16315)
+    ..add(16316)
+    ..add(16317)
+    ..add(16318)
+    ..add(16319)
+    ..add(16320)
+    ..add(16321)
+    ..add(16322)
+    ..add(16323)
+    ..add(16324)
+    ..add(16325)
+    ..add(16326)
+    ..add(16327)
+    ..add(16328)
+    ..add(16329)
+    ..add(16330)
+    ..add(16331)
+    ..add(16332)
+    ..add(16333)
+    ..add(16334)
+    ..add(16335)
+    ..add(16336)
+    ..add(16337)
+    ..add(16338)
+    ..add(16339)
+    ..add(16340)
+    ..add(16341)
+    ..add(16342)
+    ..add(16343)
+    ..add(16344)
+    ..add(16345)
+    ..add(16346)
+    ..add(16347)
+    ..add(16348)
+    ..add(16349)
+    ..add(16350)
+    ..add(16351)
+    ..add(16352)
+    ..add(16353)
+    ..add(16354)
+    ..add(16355)
+    ..add(16356)
+    ..add(16357)
+    ..add(16358)
+    ..add(16359)
+    ..add(16360)
+    ..add(16361)
+    ..add(16362)
+    ..add(16363)
+    ..add(16364)
+    ..add(16365)
+    ..add(16366)
+    ..add(16367)
+    ..add(16368)
+    ..add(16369)
+    ..add(16370)
+    ..add(16371)
+    ..add(16372)
+    ..add(16373)
+    ..add(16374)
+    ..add(16375)
+    ..add(16376)
+    ..add(16377)
+    ..add(16378)
+    ..add(16379)
+    ..add(16380)
+    ..add(16381)
+    ..add(16382)
+    ..add(16383)
+    ..add(16384)
+    ..add(16385)
+    ..add(16386)
+    ..add(16387)
+    ..add(16388)
+    ..add(16389)
+    ..add(16390)
+    ..add(16391)
+    ..add(16392)
+    ..add(16393)
+    ..add(16394)
+    ..add(16395)
+    ..add(16396)
+    ..add(16397)
+    ..add(16398)
+    ..add(16399)
+    ..add(16400)
+    ..add(16401)
+    ..add(16402)
+    ..add(16403)
+    ..add(16404)
+    ..add(16405)
+    ..add(16406)
+    ..add(16407)
+    ..add(16408)
+    ..add(16409)
+    ..add(16410)
+    ..add(16411)
+    ..add(16412)
+    ..add(16413)
+    ..add(16414)
+    ..add(16415)
+    ..add(16416)
+    ..add(16417)
+    ..add(16418)
+    ..add(16419)
+    ..add(16420)
+    ..add(16421)
+    ..add(16422)
+    ..add(16423)
+    ..add(16424)
+    ..add(16425)
+    ..add(16426)
+    ..add(16427)
+    ..add(16428)
+    ..add(16429)
+    ..add(16430)
+    ..add(16431)
+    ..add(16432)
+    ..add(16433)
+    ..add(16434)
+    ..add(16435)
+    ..add(16436)
+    ..add(16437)
+    ..add(16438)
+    ..add(16439)
+    ..add(16440)
+    ..add(16441)
+    ..add(16442)
+    ..add(16443)
+    ..add(16444)
+    ..add(16445)
+    ..add(16446)
+    ..add(16447)
+    ..add(16448)
+    ..add(16449)
+    ..add(16450)
+    ..add(16451)
+    ..add(16452)
+    ..add(16453)
+    ..add(16454)
+    ..add(16455)
+    ..add(16456)
+    ..add(16457)
+    ..add(16458)
+    ..add(16459)
+    ..add(16460)
+    ..add(16461)
+    ..add(16462)
+    ..add(16463)
+    ..add(16464)
+    ..add(16465)
+    ..add(16466)
+    ..add(16467)
+    ..add(16468)
+    ..add(16469)
+    ..add(16470)
+    ..add(16471)
+    ..add(16472)
+    ..add(16473)
+    ..add(16474)
+    ..add(16475)
+    ..add(16476)
+    ..add(16477)
+    ..add(16478)
+    ..add(16479)
+    ..add(16480)
+    ..add(16481)
+    ..add(16482)
+    ..add(16483)
+    ..add(16484)
+    ..add(16485)
+    ..add(16486)
+    ..add(16487)
+    ..add(16488)
+    ..add(16489)
+    ..add(16490)
+    ..add(16491)
+    ..add(16492)
+    ..add(16493)
+    ..add(16494)
+    ..add(16495)
+    ..add(16496)
+    ..add(16497)
+    ..add(16498)
+    ..add(16499)
+    ..add(16500)
+    ..add(16501)
+    ..add(16502)
+    ..add(16503)
+    ..add(16504)
+    ..add(16505)
+    ..add(16506)
+    ..add(16507)
+    ..add(16508)
+    ..add(16509)
+    ..add(16510)
+    ..add(16511)
+    ..add(16512)
+    ..add(16513)
+    ..add(16514)
+    ..add(16515)
+    ..add(16516)
+    ..add(16517)
+    ..add(16518)
+    ..add(16519)
+    ..add(16520)
+    ..add(16521)
+    ..add(16522)
+    ..add(16523)
+    ..add(16524)
+    ..add(16525)
+    ..add(16526)
+    ..add(16527)
+    ..add(16528)
+    ..add(16529)
+    ..add(16530)
+    ..add(16531)
+    ..add(16532)
+    ..add(16533)
+    ..add(16534)
+    ..add(16535)
+    ..add(16536)
+    ..add(16537)
+    ..add(16538)
+    ..add(16539)
+    ..add(16540)
+    ..add(16541)
+    ..add(16542)
+    ..add(16543)
+    ..add(16544)
+    ..add(16545)
+    ..add(16546)
+    ..add(16547)
+    ..add(16548)
+    ..add(16549)
+    ..add(16550)
+    ..add(16551)
+    ..add(16552)
+    ..add(16553)
+    ..add(16554)
+    ..add(16555)
+    ..add(16556)
+    ..add(16557)
+    ..add(16558)
+    ..add(16559)
+    ..add(16560)
+    ..add(16561)
+    ..add(16562)
+    ..add(16563)
+    ..add(16564)
+    ..add(16565)
+    ..add(16566)
+    ..add(16567)
+    ..add(16568)
+    ..add(16569)
+    ..add(16570)
+    ..add(16571)
+    ..add(16572)
+    ..add(16573)
+    ..add(16574)
+    ..add(16575)
+    ..add(16576)
+    ..add(16577)
+    ..add(16578)
+    ..add(16579)
+    ..add(16580)
+    ..add(16581)
+    ..add(16582)
+    ..add(16583)
+    ..add(16584)
+    ..add(16585)
+    ..add(16586)
+    ..add(16587)
+    ..add(16588)
+    ..add(16589)
+    ..add(16590)
+    ..add(16591)
+    ..add(16592)
+    ..add(16593)
+    ..add(16594)
+    ..add(16595)
+    ..add(16596)
+    ..add(16597)
+    ..add(16598)
+    ..add(16599)
+    ..add(16600)
+    ..add(16601)
+    ..add(16602)
+    ..add(16603)
+    ..add(16604)
+    ..add(16605)
+    ..add(16606)
+    ..add(16607)
+    ..add(16608)
+    ..add(16609)
+    ..add(16610)
+    ..add(16611)
+    ..add(16612)
+    ..add(16613)
+    ..add(16614)
+    ..add(16615)
+    ..add(16616)
+    ..add(16617)
+    ..add(16618)
+    ..add(16619)
+    ..add(16620)
+    ..add(16621)
+    ..add(16622)
+    ..add(16623)
+    ..add(16624)
+    ..add(16625)
+    ..add(16626)
+    ..add(16627)
+    ..add(16628)
+    ..add(16629)
+    ..add(16630)
+    ..add(16631)
+    ..add(16632)
+    ..add(16633)
+    ..add(16634)
+    ..add(16635)
+    ..add(16636)
+    ..add(16637)
+    ..add(16638)
+    ..add(16639)
+    ..add(16640)
+    ..add(16641)
+    ..add(16642)
+    ..add(16643)
+    ..add(16644)
+    ..add(16645)
+    ..add(16646)
+    ..add(16647)
+    ..add(16648)
+    ..add(16649)
+    ..add(16650)
+    ..add(16651)
+    ..add(16652)
+    ..add(16653)
+    ..add(16654)
+    ..add(16655)
+    ..add(16656)
+    ..add(16657)
+    ..add(16658)
+    ..add(16659)
+    ..add(16660)
+    ..add(16661)
+    ..add(16662)
+    ..add(16663)
+    ..add(16664)
+    ..add(16665)
+    ..add(16666)
+    ..add(16667)
+    ..add(16668)
+    ..add(16669)
+    ..add(16670)
+    ..add(16671)
+    ..add(16672)
+    ..add(16673)
+    ..add(16674)
+    ..add(16675)
+    ..add(16676)
+    ..add(16677)
+    ..add(16678)
+    ..add(16679)
+    ..add(16680)
+    ..add(16681)
+    ..add(16682)
+    ..add(16683)
+    ..add(16684)
+    ..add(16685)
+    ..add(16686)
+    ..add(16687)
+    ..add(16688)
+    ..add(16689)
+    ..add(16690)
+    ..add(16691)
+    ..add(16692)
+    ..add(16693)
+    ..add(16694)
+    ..add(16695)
+    ..add(16696)
+    ..add(16697)
+    ..add(16698)
+    ..add(16699)
+    ..add(16700)
+    ..add(16701)
+    ..add(16702)
+    ..add(16703)
+    ..add(16704)
+    ..add(16705)
+    ..add(16706)
+    ..add(16707)
+    ..add(16708)
+    ..add(16709)
+    ..add(16710)
+    ..add(16711)
+    ..add(16712)
+    ..add(16713)
+    ..add(16714)
+    ..add(16715)
+    ..add(16716)
+    ..add(16717)
+    ..add(16718)
+    ..add(16719)
+    ..add(16720)
+    ..add(16721)
+    ..add(16722)
+    ..add(16723)
+    ..add(16724)
+    ..add(16725)
+    ..add(16726)
+    ..add(16727)
+    ..add(16728)
+    ..add(16729)
+    ..add(16730)
+    ..add(16731)
+    ..add(16732)
+    ..add(16733)
+    ..add(16734)
+    ..add(16735)
+    ..add(16736)
+    ..add(16737)
+    ..add(16738)
+    ..add(16739)
+    ..add(16740)
+    ..add(16741)
+    ..add(16742)
+    ..add(16743)
+    ..add(16744)
+    ..add(16745)
+    ..add(16746)
+    ..add(16747)
+    ..add(16748)
+    ..add(16749)
+    ..add(16750)
+    ..add(16751)
+    ..add(16752)
+    ..add(16753)
+    ..add(16754)
+    ..add(16755)
+    ..add(16756)
+    ..add(16757)
+    ..add(16758)
+    ..add(16759)
+    ..add(16760)
+    ..add(16761)
+    ..add(16762)
+    ..add(16763)
+    ..add(16764)
+    ..add(16765)
+    ..add(16766)
+    ..add(16767)
+    ..add(16768)
+    ..add(16769)
+    ..add(16770)
+    ..add(16771)
+    ..add(16772)
+    ..add(16773)
+    ..add(16774)
+    ..add(16775)
+    ..add(16776)
+    ..add(16777)
+    ..add(16778)
+    ..add(16779)
+    ..add(16780)
+    ..add(16781)
+    ..add(16782)
+    ..add(16783)
+    ..add(16784)
+    ..add(16785)
+    ..add(16786)
+    ..add(16787)
+    ..add(16788)
+    ..add(16789)
+    ..add(16790)
+    ..add(16791)
+    ..add(16792)
+    ..add(16793)
+    ..add(16794)
+    ..add(16795)
+    ..add(16796)
+    ..add(16797)
+    ..add(16798)
+    ..add(16799)
+    ..add(16800)
+    ..add(16801)
+    ..add(16802)
+    ..add(16803)
+    ..add(16804)
+    ..add(16805)
+    ..add(16806)
+    ..add(16807)
+    ..add(16808)
+    ..add(16809)
+    ..add(16810)
+    ..add(16811)
+    ..add(16812)
+    ..add(16813)
+    ..add(16814)
+    ..add(16815)
+    ..add(16816)
+    ..add(16817)
+    ..add(16818)
+    ..add(16819)
+    ..add(16820)
+    ..add(16821)
+    ..add(16822)
+    ..add(16823)
+    ..add(16824)
+    ..add(16825)
+    ..add(16826)
+    ..add(16827)
+    ..add(16828)
+    ..add(16829)
+    ..add(16830)
+    ..add(16831)
+    ..add(16832)
+    ..add(16833)
+    ..add(16834)
+    ..add(16835)
+    ..add(16836)
+    ..add(16837)
+    ..add(16838)
+    ..add(16839)
+    ..add(16840)
+    ..add(16841)
+    ..add(16842)
+    ..add(16843)
+    ..add(16844)
+    ..add(16845)
+    ..add(16846)
+    ..add(16847)
+    ..add(16848)
+    ..add(16849)
+    ..add(16850)
+    ..add(16851)
+    ..add(16852)
+    ..add(16853)
+    ..add(16854)
+    ..add(16855)
+    ..add(16856)
+    ..add(16857)
+    ..add(16858)
+    ..add(16859)
+    ..add(16860)
+    ..add(16861)
+    ..add(16862)
+    ..add(16863)
+    ..add(16864)
+    ..add(16865)
+    ..add(16866)
+    ..add(16867)
+    ..add(16868)
+    ..add(16869)
+    ..add(16870)
+    ..add(16871)
+    ..add(16872)
+    ..add(16873)
+    ..add(16874)
+    ..add(16875)
+    ..add(16876)
+    ..add(16877)
+    ..add(16878)
+    ..add(16879)
+    ..add(16880)
+    ..add(16881)
+    ..add(16882)
+    ..add(16883)
+    ..add(16884)
+    ..add(16885)
+    ..add(16886)
+    ..add(16887)
+    ..add(16888)
+    ..add(16889)
+    ..add(16890)
+    ..add(16891)
+    ..add(16892)
+    ..add(16893)
+    ..add(16894)
+    ..add(16895)
+    ..add(16896)
+    ..add(16897)
+    ..add(16898)
+    ..add(16899)
+    ..add(16900)
+    ..add(16901)
+    ..add(16902)
+    ..add(16903)
+    ..add(16904)
+    ..add(16905)
+    ..add(16906)
+    ..add(16907)
+    ..add(16908)
+    ..add(16909)
+    ..add(16910)
+    ..add(16911)
+    ..add(16912)
+    ..add(16913)
+    ..add(16914)
+    ..add(16915)
+    ..add(16916)
+    ..add(16917)
+    ..add(16918)
+    ..add(16919)
+    ..add(16920)
+    ..add(16921)
+    ..add(16922)
+    ..add(16923)
+    ..add(16924)
+    ..add(16925)
+    ..add(16926)
+    ..add(16927)
+    ..add(16928)
+    ..add(16929)
+    ..add(16930)
+    ..add(16931)
+    ..add(16932)
+    ..add(16933)
+    ..add(16934)
+    ..add(16935)
+    ..add(16936)
+    ..add(16937)
+    ..add(16938)
+    ..add(16939)
+    ..add(16940)
+    ..add(16941)
+    ..add(16942)
+    ..add(16943)
+    ..add(16944)
+    ..add(16945)
+    ..add(16946)
+    ..add(16947)
+    ..add(16948)
+    ..add(16949)
+    ..add(16950)
+    ..add(16951)
+    ..add(16952)
+    ..add(16953)
+    ..add(16954)
+    ..add(16955)
+    ..add(16956)
+    ..add(16957)
+    ..add(16958)
+    ..add(16959)
+    ..add(16960)
+    ..add(16961)
+    ..add(16962)
+    ..add(16963)
+    ..add(16964)
+    ..add(16965)
+    ..add(16966)
+    ..add(16967)
+    ..add(16968)
+    ..add(16969)
+    ..add(16970)
+    ..add(16971)
+    ..add(16972)
+    ..add(16973)
+    ..add(16974)
+    ..add(16975)
+    ..add(16976)
+    ..add(16977)
+    ..add(16978)
+    ..add(16979)
+    ..add(16980)
+    ..add(16981)
+    ..add(16982)
+    ..add(16983)
+    ..add(16984)
+    ..add(16985)
+    ..add(16986)
+    ..add(16987)
+    ..add(16988)
+    ..add(16989)
+    ..add(16990)
+    ..add(16991)
+    ..add(16992)
+    ..add(16993)
+    ..add(16994)
+    ..add(16995)
+    ..add(16996)
+    ..add(16997)
+    ..add(16998)
+    ..add(16999)
+    ..add(17000)
+    ..add(17001)
+    ..add(17002)
+    ..add(17003)
+    ..add(17004)
+    ..add(17005)
+    ..add(17006)
+    ..add(17007)
+    ..add(17008)
+    ..add(17009)
+    ..add(17010)
+    ..add(17011)
+    ..add(17012)
+    ..add(17013)
+    ..add(17014)
+    ..add(17015)
+    ..add(17016)
+    ..add(17017)
+    ..add(17018)
+    ..add(17019)
+    ..add(17020)
+    ..add(17021)
+    ..add(17022)
+    ..add(17023)
+    ..add(17024)
+    ..add(17025)
+    ..add(17026)
+    ..add(17027)
+    ..add(17028)
+    ..add(17029)
+    ..add(17030)
+    ..add(17031)
+    ..add(17032)
+    ..add(17033)
+    ..add(17034)
+    ..add(17035)
+    ..add(17036)
+    ..add(17037)
+    ..add(17038)
+    ..add(17039)
+    ..add(17040)
+    ..add(17041)
+    ..add(17042)
+    ..add(17043)
+    ..add(17044)
+    ..add(17045)
+    ..add(17046)
+    ..add(17047)
+    ..add(17048)
+    ..add(17049)
+    ..add(17050)
+    ..add(17051)
+    ..add(17052)
+    ..add(17053)
+    ..add(17054)
+    ..add(17055)
+    ..add(17056)
+    ..add(17057)
+    ..add(17058)
+    ..add(17059)
+    ..add(17060)
+    ..add(17061)
+    ..add(17062)
+    ..add(17063)
+    ..add(17064)
+    ..add(17065)
+    ..add(17066)
+    ..add(17067)
+    ..add(17068)
+    ..add(17069)
+    ..add(17070)
+    ..add(17071)
+    ..add(17072)
+    ..add(17073)
+    ..add(17074)
+    ..add(17075)
+    ..add(17076)
+    ..add(17077)
+    ..add(17078)
+    ..add(17079)
+    ..add(17080)
+    ..add(17081)
+    ..add(17082)
+    ..add(17083)
+    ..add(17084)
+    ..add(17085)
+    ..add(17086)
+    ..add(17087)
+    ..add(17088)
+    ..add(17089)
+    ..add(17090)
+    ..add(17091)
+    ..add(17092)
+    ..add(17093)
+    ..add(17094)
+    ..add(17095)
+    ..add(17096)
+    ..add(17097)
+    ..add(17098)
+    ..add(17099)
+    ..add(17100)
+    ..add(17101)
+    ..add(17102)
+    ..add(17103)
+    ..add(17104)
+    ..add(17105)
+    ..add(17106)
+    ..add(17107)
+    ..add(17108)
+    ..add(17109)
+    ..add(17110)
+    ..add(17111)
+    ..add(17112)
+    ..add(17113)
+    ..add(17114)
+    ..add(17115)
+    ..add(17116)
+    ..add(17117)
+    ..add(17118)
+    ..add(17119)
+    ..add(17120)
+    ..add(17121)
+    ..add(17122)
+    ..add(17123)
+    ..add(17124)
+    ..add(17125)
+    ..add(17126)
+    ..add(17127)
+    ..add(17128)
+    ..add(17129)
+    ..add(17130)
+    ..add(17131)
+    ..add(17132)
+    ..add(17133)
+    ..add(17134)
+    ..add(17135)
+    ..add(17136)
+    ..add(17137)
+    ..add(17138)
+    ..add(17139)
+    ..add(17140)
+    ..add(17141)
+    ..add(17142)
+    ..add(17143)
+    ..add(17144)
+    ..add(17145)
+    ..add(17146)
+    ..add(17147)
+    ..add(17148)
+    ..add(17149)
+    ..add(17150)
+    ..add(17151)
+    ..add(17152)
+    ..add(17153)
+    ..add(17154)
+    ..add(17155)
+    ..add(17156)
+    ..add(17157)
+    ..add(17158)
+    ..add(17159)
+    ..add(17160)
+    ..add(17161)
+    ..add(17162)
+    ..add(17163)
+    ..add(17164)
+    ..add(17165)
+    ..add(17166)
+    ..add(17167)
+    ..add(17168)
+    ..add(17169)
+    ..add(17170)
+    ..add(17171)
+    ..add(17172)
+    ..add(17173)
+    ..add(17174)
+    ..add(17175)
+    ..add(17176)
+    ..add(17177)
+    ..add(17178)
+    ..add(17179)
+    ..add(17180)
+    ..add(17181)
+    ..add(17182)
+    ..add(17183)
+    ..add(17184)
+    ..add(17185)
+    ..add(17186)
+    ..add(17187)
+    ..add(17188)
+    ..add(17189)
+    ..add(17190)
+    ..add(17191)
+    ..add(17192)
+    ..add(17193)
+    ..add(17194)
+    ..add(17195)
+    ..add(17196)
+    ..add(17197)
+    ..add(17198)
+    ..add(17199)
+    ..add(17200)
+    ..add(17201)
+    ..add(17202)
+    ..add(17203)
+    ..add(17204)
+    ..add(17205)
+    ..add(17206)
+    ..add(17207)
+    ..add(17208)
+    ..add(17209)
+    ..add(17210)
+    ..add(17211)
+    ..add(17212)
+    ..add(17213)
+    ..add(17214)
+    ..add(17215)
+    ..add(17216)
+    ..add(17217)
+    ..add(17218)
+    ..add(17219)
+    ..add(17220)
+    ..add(17221)
+    ..add(17222)
+    ..add(17223)
+    ..add(17224)
+    ..add(17225)
+    ..add(17226)
+    ..add(17227)
+    ..add(17228)
+    ..add(17229)
+    ..add(17230)
+    ..add(17231)
+    ..add(17232)
+    ..add(17233)
+    ..add(17234)
+    ..add(17235)
+    ..add(17236)
+    ..add(17237)
+    ..add(17238)
+    ..add(17239)
+    ..add(17240)
+    ..add(17241)
+    ..add(17242)
+    ..add(17243)
+    ..add(17244)
+    ..add(17245)
+    ..add(17246)
+    ..add(17247)
+    ..add(17248)
+    ..add(17249)
+    ..add(17250)
+    ..add(17251)
+    ..add(17252)
+    ..add(17253)
+    ..add(17254)
+    ..add(17255)
+    ..add(17256)
+    ..add(17257)
+    ..add(17258)
+    ..add(17259)
+    ..add(17260)
+    ..add(17261)
+    ..add(17262)
+    ..add(17263)
+    ..add(17264)
+    ..add(17265)
+    ..add(17266)
+    ..add(17267)
+    ..add(17268)
+    ..add(17269)
+    ..add(17270)
+    ..add(17271)
+    ..add(17272)
+    ..add(17273)
+    ..add(17274)
+    ..add(17275)
+    ..add(17276)
+    ..add(17277)
+    ..add(17278)
+    ..add(17279)
+    ..add(17280)
+    ..add(17281)
+    ..add(17282)
+    ..add(17283)
+    ..add(17284)
+    ..add(17285)
+    ..add(17286)
+    ..add(17287)
+    ..add(17288)
+    ..add(17289)
+    ..add(17290)
+    ..add(17291)
+    ..add(17292)
+    ..add(17293)
+    ..add(17294)
+    ..add(17295)
+    ..add(17296)
+    ..add(17297)
+    ..add(17298)
+    ..add(17299)
+    ..add(17300)
+    ..add(17301)
+    ..add(17302)
+    ..add(17303)
+    ..add(17304)
+    ..add(17305)
+    ..add(17306)
+    ..add(17307)
+    ..add(17308)
+    ..add(17309)
+    ..add(17310)
+    ..add(17311)
+    ..add(17312)
+    ..add(17313)
+    ..add(17314)
+    ..add(17315)
+    ..add(17316)
+    ..add(17317)
+    ..add(17318)
+    ..add(17319)
+    ..add(17320)
+    ..add(17321)
+    ..add(17322)
+    ..add(17323)
+    ..add(17324)
+    ..add(17325)
+    ..add(17326)
+    ..add(17327)
+    ..add(17328)
+    ..add(17329)
+    ..add(17330)
+    ..add(17331)
+    ..add(17332)
+    ..add(17333)
+    ..add(17334)
+    ..add(17335)
+    ..add(17336)
+    ..add(17337)
+    ..add(17338)
+    ..add(17339)
+    ..add(17340)
+    ..add(17341)
+    ..add(17342)
+    ..add(17343)
+    ..add(17344)
+    ..add(17345)
+    ..add(17346)
+    ..add(17347)
+    ..add(17348)
+    ..add(17349)
+    ..add(17350)
+    ..add(17351)
+    ..add(17352)
+    ..add(17353)
+    ..add(17354)
+    ..add(17355)
+    ..add(17356)
+    ..add(17357)
+    ..add(17358)
+    ..add(17359)
+    ..add(17360)
+    ..add(17361)
+    ..add(17362)
+    ..add(17363)
+    ..add(17364)
+    ..add(17365)
+    ..add(17366)
+    ..add(17367)
+    ..add(17368)
+    ..add(17369)
+    ..add(17370)
+    ..add(17371)
+    ..add(17372)
+    ..add(17373)
+    ..add(17374)
+    ..add(17375)
+    ..add(17376)
+    ..add(17377)
+    ..add(17378)
+    ..add(17379)
+    ..add(17380)
+    ..add(17381)
+    ..add(17382)
+    ..add(17383)
+    ..add(17384)
+    ..add(17385)
+    ..add(17386)
+    ..add(17387)
+    ..add(17388)
+    ..add(17389)
+    ..add(17390)
+    ..add(17391)
+    ..add(17392)
+    ..add(17393)
+    ..add(17394)
+    ..add(17395)
+    ..add(17396)
+    ..add(17397)
+    ..add(17398)
+    ..add(17399)
+    ..add(17400)
+    ..add(17401)
+    ..add(17402)
+    ..add(17403)
+    ..add(17404)
+    ..add(17405)
+    ..add(17406)
+    ..add(17407)
+    ..add(17408)
+    ..add(17409)
+    ..add(17410)
+    ..add(17411)
+    ..add(17412)
+    ..add(17413)
+    ..add(17414)
+    ..add(17415)
+    ..add(17416)
+    ..add(17417)
+    ..add(17418)
+    ..add(17419)
+    ..add(17420)
+    ..add(17421)
+    ..add(17422)
+    ..add(17423)
+    ..add(17424)
+    ..add(17425)
+    ..add(17426)
+    ..add(17427)
+    ..add(17428)
+    ..add(17429)
+    ..add(17430)
+    ..add(17431)
+    ..add(17432)
+    ..add(17433)
+    ..add(17434)
+    ..add(17435)
+    ..add(17436)
+    ..add(17437)
+    ..add(17438)
+    ..add(17439)
+    ..add(17440)
+    ..add(17441)
+    ..add(17442)
+    ..add(17443)
+    ..add(17444)
+    ..add(17445)
+    ..add(17446)
+    ..add(17447)
+    ..add(17448)
+    ..add(17449)
+    ..add(17450)
+    ..add(17451)
+    ..add(17452)
+    ..add(17453)
+    ..add(17454)
+    ..add(17455)
+    ..add(17456)
+    ..add(17457)
+    ..add(17458)
+    ..add(17459)
+    ..add(17460)
+    ..add(17461)
+    ..add(17462)
+    ..add(17463)
+    ..add(17464)
+    ..add(17465)
+    ..add(17466)
+    ..add(17467)
+    ..add(17468)
+    ..add(17469)
+    ..add(17470)
+    ..add(17471)
+    ..add(17472)
+    ..add(17473)
+    ..add(17474)
+    ..add(17475)
+    ..add(17476)
+    ..add(17477)
+    ..add(17478)
+    ..add(17479)
+    ..add(17480)
+    ..add(17481)
+    ..add(17482)
+    ..add(17483)
+    ..add(17484)
+    ..add(17485)
+    ..add(17486)
+    ..add(17487)
+    ..add(17488)
+    ..add(17489)
+    ..add(17490)
+    ..add(17491)
+    ..add(17492)
+    ..add(17493)
+    ..add(17494)
+    ..add(17495)
+    ..add(17496)
+    ..add(17497)
+    ..add(17498)
+    ..add(17499)
+    ..add(17500)
+    ..add(17501)
+    ..add(17502)
+    ..add(17503)
+    ..add(17504)
+    ..add(17505)
+    ..add(17506)
+    ..add(17507)
+    ..add(17508)
+    ..add(17509)
+    ..add(17510)
+    ..add(17511)
+    ..add(17512)
+    ..add(17513)
+    ..add(17514)
+    ..add(17515)
+    ..add(17516)
+    ..add(17517)
+    ..add(17518)
+    ..add(17519)
+    ..add(17520)
+    ..add(17521)
+    ..add(17522)
+    ..add(17523)
+    ..add(17524)
+    ..add(17525)
+    ..add(17526)
+    ..add(17527)
+    ..add(17528)
+    ..add(17529)
+    ..add(17530)
+    ..add(17531)
+    ..add(17532)
+    ..add(17533)
+    ..add(17534)
+    ..add(17535)
+    ..add(17536)
+    ..add(17537)
+    ..add(17538)
+    ..add(17539)
+    ..add(17540)
+    ..add(17541)
+    ..add(17542)
+    ..add(17543)
+    ..add(17544)
+    ..add(17545)
+    ..add(17546)
+    ..add(17547)
+    ..add(17548)
+    ..add(17549)
+    ..add(17550)
+    ..add(17551)
+    ..add(17552)
+    ..add(17553)
+    ..add(17554)
+    ..add(17555)
+    ..add(17556)
+    ..add(17557)
+    ..add(17558)
+    ..add(17559)
+    ..add(17560)
+    ..add(17561)
+    ..add(17562)
+    ..add(17563)
+    ..add(17564)
+    ..add(17565)
+    ..add(17566)
+    ..add(17567)
+    ..add(17568)
+    ..add(17569)
+    ..add(17570)
+    ..add(17571)
+    ..add(17572)
+    ..add(17573)
+    ..add(17574)
+    ..add(17575)
+    ..add(17576)
+    ..add(17577)
+    ..add(17578)
+    ..add(17579)
+    ..add(17580)
+    ..add(17581)
+    ..add(17582)
+    ..add(17583)
+    ..add(17584)
+    ..add(17585)
+    ..add(17586)
+    ..add(17587)
+    ..add(17588)
+    ..add(17589)
+    ..add(17590)
+    ..add(17591)
+    ..add(17592)
+    ..add(17593)
+    ..add(17594)
+    ..add(17595)
+    ..add(17596)
+    ..add(17597)
+    ..add(17598)
+    ..add(17599)
+    ..add(17600)
+    ..add(17601)
+    ..add(17602)
+    ..add(17603)
+    ..add(17604)
+    ..add(17605)
+    ..add(17606)
+    ..add(17607)
+    ..add(17608)
+    ..add(17609)
+    ..add(17610)
+    ..add(17611)
+    ..add(17612)
+    ..add(17613)
+    ..add(17614)
+    ..add(17615)
+    ..add(17616)
+    ..add(17617)
+    ..add(17618)
+    ..add(17619)
+    ..add(17620)
+    ..add(17621)
+    ..add(17622)
+    ..add(17623)
+    ..add(17624)
+    ..add(17625)
+    ..add(17626)
+    ..add(17627)
+    ..add(17628)
+    ..add(17629)
+    ..add(17630)
+    ..add(17631)
+    ..add(17632)
+    ..add(17633)
+    ..add(17634)
+    ..add(17635)
+    ..add(17636)
+    ..add(17637)
+    ..add(17638)
+    ..add(17639)
+    ..add(17640)
+    ..add(17641)
+    ..add(17642)
+    ..add(17643)
+    ..add(17644)
+    ..add(17645)
+    ..add(17646)
+    ..add(17647)
+    ..add(17648)
+    ..add(17649)
+    ..add(17650)
+    ..add(17651)
+    ..add(17652)
+    ..add(17653)
+    ..add(17654)
+    ..add(17655)
+    ..add(17656)
+    ..add(17657)
+    ..add(17658)
+    ..add(17659)
+    ..add(17660)
+    ..add(17661)
+    ..add(17662)
+    ..add(17663)
+    ..add(17664)
+    ..add(17665)
+    ..add(17666)
+    ..add(17667)
+    ..add(17668)
+    ..add(17669)
+    ..add(17670)
+    ..add(17671)
+    ..add(17672)
+    ..add(17673)
+    ..add(17674)
+    ..add(17675)
+    ..add(17676)
+    ..add(17677)
+    ..add(17678)
+    ..add(17679)
+    ..add(17680)
+    ..add(17681)
+    ..add(17682)
+    ..add(17683)
+    ..add(17684)
+    ..add(17685)
+    ..add(17686)
+    ..add(17687)
+    ..add(17688)
+    ..add(17689)
+    ..add(17690)
+    ..add(17691)
+    ..add(17692)
+    ..add(17693)
+    ..add(17694)
+    ..add(17695)
+    ..add(17696)
+    ..add(17697)
+    ..add(17698)
+    ..add(17699)
+    ..add(17700)
+    ..add(17701)
+    ..add(17702)
+    ..add(17703)
+    ..add(17704)
+    ..add(17705)
+    ..add(17706)
+    ..add(17707)
+    ..add(17708)
+    ..add(17709)
+    ..add(17710)
+    ..add(17711)
+    ..add(17712)
+    ..add(17713)
+    ..add(17714)
+    ..add(17715)
+    ..add(17716)
+    ..add(17717)
+    ..add(17718)
+    ..add(17719)
+    ..add(17720)
+    ..add(17721)
+    ..add(17722)
+    ..add(17723)
+    ..add(17724)
+    ..add(17725)
+    ..add(17726)
+    ..add(17727)
+    ..add(17728)
+    ..add(17729)
+    ..add(17730)
+    ..add(17731)
+    ..add(17732)
+    ..add(17733)
+    ..add(17734)
+    ..add(17735)
+    ..add(17736)
+    ..add(17737)
+    ..add(17738)
+    ..add(17739)
+    ..add(17740)
+    ..add(17741)
+    ..add(17742)
+    ..add(17743)
+    ..add(17744)
+    ..add(17745)
+    ..add(17746)
+    ..add(17747)
+    ..add(17748)
+    ..add(17749)
+    ..add(17750)
+    ..add(17751)
+    ..add(17752)
+    ..add(17753)
+    ..add(17754)
+    ..add(17755)
+    ..add(17756)
+    ..add(17757)
+    ..add(17758)
+    ..add(17759)
+    ..add(17760)
+    ..add(17761)
+    ..add(17762)
+    ..add(17763)
+    ..add(17764)
+    ..add(17765)
+    ..add(17766)
+    ..add(17767)
+    ..add(17768)
+    ..add(17769)
+    ..add(17770)
+    ..add(17771)
+    ..add(17772)
+    ..add(17773)
+    ..add(17774)
+    ..add(17775)
+    ..add(17776)
+    ..add(17777)
+    ..add(17778)
+    ..add(17779)
+    ..add(17780)
+    ..add(17781)
+    ..add(17782)
+    ..add(17783)
+    ..add(17784)
+    ..add(17785)
+    ..add(17786)
+    ..add(17787)
+    ..add(17788)
+    ..add(17789)
+    ..add(17790)
+    ..add(17791)
+    ..add(17792)
+    ..add(17793)
+    ..add(17794)
+    ..add(17795)
+    ..add(17796)
+    ..add(17797)
+    ..add(17798)
+    ..add(17799)
+    ..add(17800)
+    ..add(17801)
+    ..add(17802)
+    ..add(17803)
+    ..add(17804)
+    ..add(17805)
+    ..add(17806)
+    ..add(17807)
+    ..add(17808)
+    ..add(17809)
+    ..add(17810)
+    ..add(17811)
+    ..add(17812)
+    ..add(17813)
+    ..add(17814)
+    ..add(17815)
+    ..add(17816)
+    ..add(17817)
+    ..add(17818)
+    ..add(17819)
+    ..add(17820)
+    ..add(17821)
+    ..add(17822)
+    ..add(17823)
+    ..add(17824)
+    ..add(17825)
+    ..add(17826)
+    ..add(17827)
+    ..add(17828)
+    ..add(17829)
+    ..add(17830)
+    ..add(17831)
+    ..add(17832)
+    ..add(17833)
+    ..add(17834)
+    ..add(17835)
+    ..add(17836)
+    ..add(17837)
+    ..add(17838)
+    ..add(17839)
+    ..add(17840)
+    ..add(17841)
+    ..add(17842)
+    ..add(17843)
+    ..add(17844)
+    ..add(17845)
+    ..add(17846)
+    ..add(17847)
+    ..add(17848)
+    ..add(17849)
+    ..add(17850)
+    ..add(17851)
+    ..add(17852)
+    ..add(17853)
+    ..add(17854)
+    ..add(17855)
+    ..add(17856)
+    ..add(17857)
+    ..add(17858)
+    ..add(17859)
+    ..add(17860)
+    ..add(17861)
+    ..add(17862)
+    ..add(17863)
+    ..add(17864)
+    ..add(17865)
+    ..add(17866)
+    ..add(17867)
+    ..add(17868)
+    ..add(17869)
+    ..add(17870)
+    ..add(17871)
+    ..add(17872)
+    ..add(17873)
+    ..add(17874)
+    ..add(17875)
+    ..add(17876)
+    ..add(17877)
+    ..add(17878)
+    ..add(17879)
+    ..add(17880)
+    ..add(17881)
+    ..add(17882)
+    ..add(17883)
+    ..add(17884)
+    ..add(17885)
+    ..add(17886)
+    ..add(17887)
+    ..add(17888)
+    ..add(17889)
+    ..add(17890)
+    ..add(17891)
+    ..add(17892)
+    ..add(17893)
+    ..add(17894)
+    ..add(17895)
+    ..add(17896)
+    ..add(17897)
+    ..add(17898)
+    ..add(17899)
+    ..add(17900)
+    ..add(17901)
+    ..add(17902)
+    ..add(17903)
+    ..add(17904)
+    ..add(17905)
+    ..add(17906)
+    ..add(17907)
+    ..add(17908)
+    ..add(17909)
+    ..add(17910)
+    ..add(17911)
+    ..add(17912)
+    ..add(17913)
+    ..add(17914)
+    ..add(17915)
+    ..add(17916)
+    ..add(17917)
+    ..add(17918)
+    ..add(17919)
+    ..add(17920)
+    ..add(17921)
+    ..add(17922)
+    ..add(17923)
+    ..add(17924)
+    ..add(17925)
+    ..add(17926)
+    ..add(17927)
+    ..add(17928)
+    ..add(17929)
+    ..add(17930)
+    ..add(17931)
+    ..add(17932)
+    ..add(17933)
+    ..add(17934)
+    ..add(17935)
+    ..add(17936)
+    ..add(17937)
+    ..add(17938)
+    ..add(17939)
+    ..add(17940)
+    ..add(17941)
+    ..add(17942)
+    ..add(17943)
+    ..add(17944)
+    ..add(17945)
+    ..add(17946)
+    ..add(17947)
+    ..add(17948)
+    ..add(17949)
+    ..add(17950)
+    ..add(17951)
+    ..add(17952)
+    ..add(17953)
+    ..add(17954)
+    ..add(17955)
+    ..add(17956)
+    ..add(17957)
+    ..add(17958)
+    ..add(17959)
+    ..add(17960)
+    ..add(17961)
+    ..add(17962)
+    ..add(17963)
+    ..add(17964)
+    ..add(17965)
+    ..add(17966)
+    ..add(17967)
+    ..add(17968)
+    ..add(17969)
+    ..add(17970)
+    ..add(17971)
+    ..add(17972)
+    ..add(17973)
+    ..add(17974)
+    ..add(17975)
+    ..add(17976)
+    ..add(17977)
+    ..add(17978)
+    ..add(17979)
+    ..add(17980)
+    ..add(17981)
+    ..add(17982)
+    ..add(17983)
+    ..add(17984)
+    ..add(17985)
+    ..add(17986)
+    ..add(17987)
+    ..add(17988)
+    ..add(17989)
+    ..add(17990)
+    ..add(17991)
+    ..add(17992)
+    ..add(17993)
+    ..add(17994)
+    ..add(17995)
+    ..add(17996)
+    ..add(17997)
+    ..add(17998)
+    ..add(17999)
+    ..add(18000)
+    ..add(18001)
+    ..add(18002)
+    ..add(18003)
+    ..add(18004)
+    ..add(18005)
+    ..add(18006)
+    ..add(18007)
+    ..add(18008)
+    ..add(18009)
+    ..add(18010)
+    ..add(18011)
+    ..add(18012)
+    ..add(18013)
+    ..add(18014)
+    ..add(18015)
+    ..add(18016)
+    ..add(18017)
+    ..add(18018)
+    ..add(18019)
+    ..add(18020)
+    ..add(18021)
+    ..add(18022)
+    ..add(18023)
+    ..add(18024)
+    ..add(18025)
+    ..add(18026)
+    ..add(18027)
+    ..add(18028)
+    ..add(18029)
+    ..add(18030)
+    ..add(18031)
+    ..add(18032)
+    ..add(18033)
+    ..add(18034)
+    ..add(18035)
+    ..add(18036)
+    ..add(18037)
+    ..add(18038)
+    ..add(18039)
+    ..add(18040)
+    ..add(18041)
+    ..add(18042)
+    ..add(18043)
+    ..add(18044)
+    ..add(18045)
+    ..add(18046)
+    ..add(18047)
+    ..add(18048)
+    ..add(18049)
+    ..add(18050)
+    ..add(18051)
+    ..add(18052)
+    ..add(18053)
+    ..add(18054)
+    ..add(18055)
+    ..add(18056)
+    ..add(18057)
+    ..add(18058)
+    ..add(18059)
+    ..add(18060)
+    ..add(18061)
+    ..add(18062)
+    ..add(18063)
+    ..add(18064)
+    ..add(18065)
+    ..add(18066)
+    ..add(18067)
+    ..add(18068)
+    ..add(18069)
+    ..add(18070)
+    ..add(18071)
+    ..add(18072)
+    ..add(18073)
+    ..add(18074)
+    ..add(18075)
+    ..add(18076)
+    ..add(18077)
+    ..add(18078)
+    ..add(18079)
+    ..add(18080)
+    ..add(18081)
+    ..add(18082)
+    ..add(18083)
+    ..add(18084)
+    ..add(18085)
+    ..add(18086)
+    ..add(18087)
+    ..add(18088)
+    ..add(18089)
+    ..add(18090)
+    ..add(18091)
+    ..add(18092)
+    ..add(18093)
+    ..add(18094)
+    ..add(18095)
+    ..add(18096)
+    ..add(18097)
+    ..add(18098)
+    ..add(18099)
+    ..add(18100)
+    ..add(18101)
+    ..add(18102)
+    ..add(18103)
+    ..add(18104)
+    ..add(18105)
+    ..add(18106)
+    ..add(18107)
+    ..add(18108)
+    ..add(18109)
+    ..add(18110)
+    ..add(18111)
+    ..add(18112)
+    ..add(18113)
+    ..add(18114)
+    ..add(18115)
+    ..add(18116)
+    ..add(18117)
+    ..add(18118)
+    ..add(18119)
+    ..add(18120)
+    ..add(18121)
+    ..add(18122)
+    ..add(18123)
+    ..add(18124)
+    ..add(18125)
+    ..add(18126)
+    ..add(18127)
+    ..add(18128)
+    ..add(18129)
+    ..add(18130)
+    ..add(18131)
+    ..add(18132)
+    ..add(18133)
+    ..add(18134)
+    ..add(18135)
+    ..add(18136)
+    ..add(18137)
+    ..add(18138)
+    ..add(18139)
+    ..add(18140)
+    ..add(18141)
+    ..add(18142)
+    ..add(18143)
+    ..add(18144)
+    ..add(18145)
+    ..add(18146)
+    ..add(18147)
+    ..add(18148)
+    ..add(18149)
+    ..add(18150)
+    ..add(18151)
+    ..add(18152)
+    ..add(18153)
+    ..add(18154)
+    ..add(18155)
+    ..add(18156)
+    ..add(18157)
+    ..add(18158)
+    ..add(18159)
+    ..add(18160)
+    ..add(18161)
+    ..add(18162)
+    ..add(18163)
+    ..add(18164)
+    ..add(18165)
+    ..add(18166)
+    ..add(18167)
+    ..add(18168)
+    ..add(18169)
+    ..add(18170)
+    ..add(18171)
+    ..add(18172)
+    ..add(18173)
+    ..add(18174)
+    ..add(18175)
+    ..add(18176)
+    ..add(18177)
+    ..add(18178)
+    ..add(18179)
+    ..add(18180)
+    ..add(18181)
+    ..add(18182)
+    ..add(18183)
+    ..add(18184)
+    ..add(18185)
+    ..add(18186)
+    ..add(18187)
+    ..add(18188)
+    ..add(18189)
+    ..add(18190)
+    ..add(18191)
+    ..add(18192)
+    ..add(18193)
+    ..add(18194)
+    ..add(18195)
+    ..add(18196)
+    ..add(18197)
+    ..add(18198)
+    ..add(18199)
+    ..add(18200)
+    ..add(18201)
+    ..add(18202)
+    ..add(18203)
+    ..add(18204)
+    ..add(18205)
+    ..add(18206)
+    ..add(18207)
+    ..add(18208)
+    ..add(18209)
+    ..add(18210)
+    ..add(18211)
+    ..add(18212)
+    ..add(18213)
+    ..add(18214)
+    ..add(18215)
+    ..add(18216)
+    ..add(18217)
+    ..add(18218)
+    ..add(18219)
+    ..add(18220)
+    ..add(18221)
+    ..add(18222)
+    ..add(18223)
+    ..add(18224)
+    ..add(18225)
+    ..add(18226)
+    ..add(18227)
+    ..add(18228)
+    ..add(18229)
+    ..add(18230)
+    ..add(18231)
+    ..add(18232)
+    ..add(18233)
+    ..add(18234)
+    ..add(18235)
+    ..add(18236)
+    ..add(18237)
+    ..add(18238)
+    ..add(18239)
+    ..add(18240)
+    ..add(18241)
+    ..add(18242)
+    ..add(18243)
+    ..add(18244)
+    ..add(18245)
+    ..add(18246)
+    ..add(18247)
+    ..add(18248)
+    ..add(18249)
+    ..add(18250)
+    ..add(18251)
+    ..add(18252)
+    ..add(18253)
+    ..add(18254)
+    ..add(18255)
+    ..add(18256)
+    ..add(18257)
+    ..add(18258)
+    ..add(18259)
+    ..add(18260)
+    ..add(18261)
+    ..add(18262)
+    ..add(18263)
+    ..add(18264)
+    ..add(18265)
+    ..add(18266)
+    ..add(18267)
+    ..add(18268)
+    ..add(18269)
+    ..add(18270)
+    ..add(18271)
+    ..add(18272)
+    ..add(18273)
+    ..add(18274)
+    ..add(18275)
+    ..add(18276)
+    ..add(18277)
+    ..add(18278)
+    ..add(18279)
+    ..add(18280)
+    ..add(18281)
+    ..add(18282)
+    ..add(18283)
+    ..add(18284)
+    ..add(18285)
+    ..add(18286)
+    ..add(18287)
+    ..add(18288)
+    ..add(18289)
+    ..add(18290)
+    ..add(18291)
+    ..add(18292)
+    ..add(18293)
+    ..add(18294)
+    ..add(18295)
+    ..add(18296)
+    ..add(18297)
+    ..add(18298)
+    ..add(18299)
+    ..add(18300)
+    ..add(18301)
+    ..add(18302)
+    ..add(18303)
+    ..add(18304)
+    ..add(18305)
+    ..add(18306)
+    ..add(18307)
+    ..add(18308)
+    ..add(18309)
+    ..add(18310)
+    ..add(18311)
+    ..add(18312)
+    ..add(18313)
+    ..add(18314)
+    ..add(18315)
+    ..add(18316)
+    ..add(18317)
+    ..add(18318)
+    ..add(18319)
+    ..add(18320)
+    ..add(18321)
+    ..add(18322)
+    ..add(18323)
+    ..add(18324)
+    ..add(18325)
+    ..add(18326)
+    ..add(18327)
+    ..add(18328)
+    ..add(18329)
+    ..add(18330)
+    ..add(18331)
+    ..add(18332)
+    ..add(18333)
+    ..add(18334)
+    ..add(18335)
+    ..add(18336)
+    ..add(18337)
+    ..add(18338)
+    ..add(18339)
+    ..add(18340)
+    ..add(18341)
+    ..add(18342)
+    ..add(18343)
+    ..add(18344)
+    ..add(18345)
+    ..add(18346)
+    ..add(18347)
+    ..add(18348)
+    ..add(18349)
+    ..add(18350)
+    ..add(18351)
+    ..add(18352)
+    ..add(18353)
+    ..add(18354)
+    ..add(18355)
+    ..add(18356)
+    ..add(18357)
+    ..add(18358)
+    ..add(18359)
+    ..add(18360)
+    ..add(18361)
+    ..add(18362)
+    ..add(18363)
+    ..add(18364)
+    ..add(18365)
+    ..add(18366)
+    ..add(18367)
+    ..add(18368)
+    ..add(18369)
+    ..add(18370)
+    ..add(18371)
+    ..add(18372)
+    ..add(18373)
+    ..add(18374)
+    ..add(18375)
+    ..add(18376)
+    ..add(18377)
+    ..add(18378)
+    ..add(18379)
+    ..add(18380)
+    ..add(18381)
+    ..add(18382)
+    ..add(18383)
+    ..add(18384)
+    ..add(18385)
+    ..add(18386)
+    ..add(18387)
+    ..add(18388)
+    ..add(18389)
+    ..add(18390)
+    ..add(18391)
+    ..add(18392)
+    ..add(18393)
+    ..add(18394)
+    ..add(18395)
+    ..add(18396)
+    ..add(18397)
+    ..add(18398)
+    ..add(18399)
+    ..add(18400)
+    ..add(18401)
+    ..add(18402)
+    ..add(18403)
+    ..add(18404)
+    ..add(18405)
+    ..add(18406)
+    ..add(18407)
+    ..add(18408)
+    ..add(18409)
+    ..add(18410)
+    ..add(18411)
+    ..add(18412)
+    ..add(18413)
+    ..add(18414)
+    ..add(18415)
+    ..add(18416)
+    ..add(18417)
+    ..add(18418)
+    ..add(18419)
+    ..add(18420)
+    ..add(18421)
+    ..add(18422)
+    ..add(18423)
+    ..add(18424)
+    ..add(18425)
+    ..add(18426)
+    ..add(18427)
+    ..add(18428)
+    ..add(18429)
+    ..add(18430)
+    ..add(18431)
+    ..add(18432)
+    ..add(18433)
+    ..add(18434)
+    ..add(18435)
+    ..add(18436)
+    ..add(18437)
+    ..add(18438)
+    ..add(18439)
+    ..add(18440)
+    ..add(18441)
+    ..add(18442)
+    ..add(18443)
+    ..add(18444)
+    ..add(18445)
+    ..add(18446)
+    ..add(18447)
+    ..add(18448)
+    ..add(18449)
+    ..add(18450)
+    ..add(18451)
+    ..add(18452)
+    ..add(18453)
+    ..add(18454)
+    ..add(18455)
+    ..add(18456)
+    ..add(18457)
+    ..add(18458)
+    ..add(18459)
+    ..add(18460)
+    ..add(18461)
+    ..add(18462)
+    ..add(18463)
+    ..add(18464)
+    ..add(18465)
+    ..add(18466)
+    ..add(18467)
+    ..add(18468)
+    ..add(18469)
+    ..add(18470)
+    ..add(18471)
+    ..add(18472)
+    ..add(18473)
+    ..add(18474)
+    ..add(18475)
+    ..add(18476)
+    ..add(18477)
+    ..add(18478)
+    ..add(18479)
+    ..add(18480)
+    ..add(18481)
+    ..add(18482)
+    ..add(18483)
+    ..add(18484)
+    ..add(18485)
+    ..add(18486)
+    ..add(18487)
+    ..add(18488)
+    ..add(18489)
+    ..add(18490)
+    ..add(18491)
+    ..add(18492)
+    ..add(18493)
+    ..add(18494)
+    ..add(18495)
+    ..add(18496)
+    ..add(18497)
+    ..add(18498)
+    ..add(18499)
+    ..add(18500)
+    ..add(18501)
+    ..add(18502)
+    ..add(18503)
+    ..add(18504)
+    ..add(18505)
+    ..add(18506)
+    ..add(18507)
+    ..add(18508)
+    ..add(18509)
+    ..add(18510)
+    ..add(18511)
+    ..add(18512)
+    ..add(18513)
+    ..add(18514)
+    ..add(18515)
+    ..add(18516)
+    ..add(18517)
+    ..add(18518)
+    ..add(18519)
+    ..add(18520)
+    ..add(18521)
+    ..add(18522)
+    ..add(18523)
+    ..add(18524)
+    ..add(18525)
+    ..add(18526)
+    ..add(18527)
+    ..add(18528)
+    ..add(18529)
+    ..add(18530)
+    ..add(18531)
+    ..add(18532)
+    ..add(18533)
+    ..add(18534)
+    ..add(18535)
+    ..add(18536)
+    ..add(18537)
+    ..add(18538)
+    ..add(18539)
+    ..add(18540)
+    ..add(18541)
+    ..add(18542)
+    ..add(18543)
+    ..add(18544)
+    ..add(18545)
+    ..add(18546)
+    ..add(18547)
+    ..add(18548)
+    ..add(18549)
+    ..add(18550)
+    ..add(18551)
+    ..add(18552)
+    ..add(18553)
+    ..add(18554)
+    ..add(18555)
+    ..add(18556)
+    ..add(18557)
+    ..add(18558)
+    ..add(18559)
+    ..add(18560)
+    ..add(18561)
+    ..add(18562)
+    ..add(18563)
+    ..add(18564)
+    ..add(18565)
+    ..add(18566)
+    ..add(18567)
+    ..add(18568)
+    ..add(18569)
+    ..add(18570)
+    ..add(18571)
+    ..add(18572)
+    ..add(18573)
+    ..add(18574)
+    ..add(18575)
+    ..add(18576)
+    ..add(18577)
+    ..add(18578)
+    ..add(18579)
+    ..add(18580)
+    ..add(18581)
+    ..add(18582)
+    ..add(18583)
+    ..add(18584)
+    ..add(18585)
+    ..add(18586)
+    ..add(18587)
+    ..add(18588)
+    ..add(18589)
+    ..add(18590)
+    ..add(18591)
+    ..add(18592)
+    ..add(18593)
+    ..add(18594)
+    ..add(18595)
+    ..add(18596)
+    ..add(18597)
+    ..add(18598)
+    ..add(18599)
+    ..add(18600)
+    ..add(18601)
+    ..add(18602)
+    ..add(18603)
+    ..add(18604)
+    ..add(18605)
+    ..add(18606)
+    ..add(18607)
+    ..add(18608)
+    ..add(18609)
+    ..add(18610)
+    ..add(18611)
+    ..add(18612)
+    ..add(18613)
+    ..add(18614)
+    ..add(18615)
+    ..add(18616)
+    ..add(18617)
+    ..add(18618)
+    ..add(18619)
+    ..add(18620)
+    ..add(18621)
+    ..add(18622)
+    ..add(18623)
+    ..add(18624)
+    ..add(18625)
+    ..add(18626)
+    ..add(18627)
+    ..add(18628)
+    ..add(18629)
+    ..add(18630)
+    ..add(18631)
+    ..add(18632)
+    ..add(18633)
+    ..add(18634)
+    ..add(18635)
+    ..add(18636)
+    ..add(18637)
+    ..add(18638)
+    ..add(18639)
+    ..add(18640)
+    ..add(18641)
+    ..add(18642)
+    ..add(18643)
+    ..add(18644)
+    ..add(18645)
+    ..add(18646)
+    ..add(18647)
+    ..add(18648)
+    ..add(18649)
+    ..add(18650)
+    ..add(18651)
+    ..add(18652)
+    ..add(18653)
+    ..add(18654)
+    ..add(18655)
+    ..add(18656)
+    ..add(18657)
+    ..add(18658)
+    ..add(18659)
+    ..add(18660)
+    ..add(18661)
+    ..add(18662)
+    ..add(18663)
+    ..add(18664)
+    ..add(18665)
+    ..add(18666)
+    ..add(18667)
+    ..add(18668)
+    ..add(18669)
+    ..add(18670)
+    ..add(18671)
+    ..add(18672)
+    ..add(18673)
+    ..add(18674)
+    ..add(18675)
+    ..add(18676)
+    ..add(18677)
+    ..add(18678)
+    ..add(18679)
+    ..add(18680)
+    ..add(18681)
+    ..add(18682)
+    ..add(18683)
+    ..add(18684)
+    ..add(18685)
+    ..add(18686)
+    ..add(18687)
+    ..add(18688)
+    ..add(18689)
+    ..add(18690)
+    ..add(18691)
+    ..add(18692)
+    ..add(18693)
+    ..add(18694)
+    ..add(18695)
+    ..add(18696)
+    ..add(18697)
+    ..add(18698)
+    ..add(18699)
+    ..add(18700)
+    ..add(18701)
+    ..add(18702)
+    ..add(18703)
+    ..add(18704)
+    ..add(18705)
+    ..add(18706)
+    ..add(18707)
+    ..add(18708)
+    ..add(18709)
+    ..add(18710)
+    ..add(18711)
+    ..add(18712)
+    ..add(18713)
+    ..add(18714)
+    ..add(18715)
+    ..add(18716)
+    ..add(18717)
+    ..add(18718)
+    ..add(18719)
+    ..add(18720)
+    ..add(18721)
+    ..add(18722)
+    ..add(18723)
+    ..add(18724)
+    ..add(18725)
+    ..add(18726)
+    ..add(18727)
+    ..add(18728)
+    ..add(18729)
+    ..add(18730)
+    ..add(18731)
+    ..add(18732)
+    ..add(18733)
+    ..add(18734)
+    ..add(18735)
+    ..add(18736)
+    ..add(18737)
+    ..add(18738)
+    ..add(18739)
+    ..add(18740)
+    ..add(18741)
+    ..add(18742)
+    ..add(18743)
+    ..add(18744)
+    ..add(18745)
+    ..add(18746)
+    ..add(18747)
+    ..add(18748)
+    ..add(18749)
+    ..add(18750)
+    ..add(18751)
+    ..add(18752)
+    ..add(18753)
+    ..add(18754)
+    ..add(18755)
+    ..add(18756)
+    ..add(18757)
+    ..add(18758)
+    ..add(18759)
+    ..add(18760)
+    ..add(18761)
+    ..add(18762)
+    ..add(18763)
+    ..add(18764)
+    ..add(18765)
+    ..add(18766)
+    ..add(18767)
+    ..add(18768)
+    ..add(18769)
+    ..add(18770)
+    ..add(18771)
+    ..add(18772)
+    ..add(18773)
+    ..add(18774)
+    ..add(18775)
+    ..add(18776)
+    ..add(18777)
+    ..add(18778)
+    ..add(18779)
+    ..add(18780)
+    ..add(18781)
+    ..add(18782)
+    ..add(18783)
+    ..add(18784)
+    ..add(18785)
+    ..add(18786)
+    ..add(18787)
+    ..add(18788)
+    ..add(18789)
+    ..add(18790)
+    ..add(18791)
+    ..add(18792)
+    ..add(18793)
+    ..add(18794)
+    ..add(18795)
+    ..add(18796)
+    ..add(18797)
+    ..add(18798)
+    ..add(18799)
+    ..add(18800)
+    ..add(18801)
+    ..add(18802)
+    ..add(18803)
+    ..add(18804)
+    ..add(18805)
+    ..add(18806)
+    ..add(18807)
+    ..add(18808)
+    ..add(18809)
+    ..add(18810)
+    ..add(18811)
+    ..add(18812)
+    ..add(18813)
+    ..add(18814)
+    ..add(18815)
+    ..add(18816)
+    ..add(18817)
+    ..add(18818)
+    ..add(18819)
+    ..add(18820)
+    ..add(18821)
+    ..add(18822)
+    ..add(18823)
+    ..add(18824)
+    ..add(18825)
+    ..add(18826)
+    ..add(18827)
+    ..add(18828)
+    ..add(18829)
+    ..add(18830)
+    ..add(18831)
+    ..add(18832)
+    ..add(18833)
+    ..add(18834)
+    ..add(18835)
+    ..add(18836)
+    ..add(18837)
+    ..add(18838)
+    ..add(18839)
+    ..add(18840)
+    ..add(18841)
+    ..add(18842)
+    ..add(18843)
+    ..add(18844)
+    ..add(18845)
+    ..add(18846)
+    ..add(18847)
+    ..add(18848)
+    ..add(18849)
+    ..add(18850)
+    ..add(18851)
+    ..add(18852)
+    ..add(18853)
+    ..add(18854)
+    ..add(18855)
+    ..add(18856)
+    ..add(18857)
+    ..add(18858)
+    ..add(18859)
+    ..add(18860)
+    ..add(18861)
+    ..add(18862)
+    ..add(18863)
+    ..add(18864)
+    ..add(18865)
+    ..add(18866)
+    ..add(18867)
+    ..add(18868)
+    ..add(18869)
+    ..add(18870)
+    ..add(18871)
+    ..add(18872)
+    ..add(18873)
+    ..add(18874)
+    ..add(18875)
+    ..add(18876)
+    ..add(18877)
+    ..add(18878)
+    ..add(18879)
+    ..add(18880)
+    ..add(18881)
+    ..add(18882)
+    ..add(18883)
+    ..add(18884)
+    ..add(18885)
+    ..add(18886)
+    ..add(18887)
+    ..add(18888)
+    ..add(18889)
+    ..add(18890)
+    ..add(18891)
+    ..add(18892)
+    ..add(18893)
+    ..add(18894)
+    ..add(18895)
+    ..add(18896)
+    ..add(18897)
+    ..add(18898)
+    ..add(18899)
+    ..add(18900)
+    ..add(18901)
+    ..add(18902)
+    ..add(18903)
+    ..add(18904)
+    ..add(18905)
+    ..add(18906)
+    ..add(18907)
+    ..add(18908)
+    ..add(18909)
+    ..add(18910)
+    ..add(18911)
+    ..add(18912)
+    ..add(18913)
+    ..add(18914)
+    ..add(18915)
+    ..add(18916)
+    ..add(18917)
+    ..add(18918)
+    ..add(18919)
+    ..add(18920)
+    ..add(18921)
+    ..add(18922)
+    ..add(18923)
+    ..add(18924)
+    ..add(18925)
+    ..add(18926)
+    ..add(18927)
+    ..add(18928)
+    ..add(18929)
+    ..add(18930)
+    ..add(18931)
+    ..add(18932)
+    ..add(18933)
+    ..add(18934)
+    ..add(18935)
+    ..add(18936)
+    ..add(18937)
+    ..add(18938)
+    ..add(18939)
+    ..add(18940)
+    ..add(18941)
+    ..add(18942)
+    ..add(18943)
+    ..add(18944)
+    ..add(18945)
+    ..add(18946)
+    ..add(18947)
+    ..add(18948)
+    ..add(18949)
+    ..add(18950)
+    ..add(18951)
+    ..add(18952)
+    ..add(18953)
+    ..add(18954)
+    ..add(18955)
+    ..add(18956)
+    ..add(18957)
+    ..add(18958)
+    ..add(18959)
+    ..add(18960)
+    ..add(18961)
+    ..add(18962)
+    ..add(18963)
+    ..add(18964)
+    ..add(18965)
+    ..add(18966)
+    ..add(18967)
+    ..add(18968)
+    ..add(18969)
+    ..add(18970)
+    ..add(18971)
+    ..add(18972)
+    ..add(18973)
+    ..add(18974)
+    ..add(18975)
+    ..add(18976)
+    ..add(18977)
+    ..add(18978)
+    ..add(18979)
+    ..add(18980)
+    ..add(18981)
+    ..add(18982)
+    ..add(18983)
+    ..add(18984)
+    ..add(18985)
+    ..add(18986)
+    ..add(18987)
+    ..add(18988)
+    ..add(18989)
+    ..add(18990)
+    ..add(18991)
+    ..add(18992)
+    ..add(18993)
+    ..add(18994)
+    ..add(18995)
+    ..add(18996)
+    ..add(18997)
+    ..add(18998)
+    ..add(18999)
+    ..add(19000)
+    ..add(19001)
+    ..add(19002)
+    ..add(19003)
+    ..add(19004)
+    ..add(19005)
+    ..add(19006)
+    ..add(19007)
+    ..add(19008)
+    ..add(19009)
+    ..add(19010)
+    ..add(19011)
+    ..add(19012)
+    ..add(19013)
+    ..add(19014)
+    ..add(19015)
+    ..add(19016)
+    ..add(19017)
+    ..add(19018)
+    ..add(19019)
+    ..add(19020)
+    ..add(19021)
+    ..add(19022)
+    ..add(19023)
+    ..add(19024)
+    ..add(19025)
+    ..add(19026)
+    ..add(19027)
+    ..add(19028)
+    ..add(19029)
+    ..add(19030)
+    ..add(19031)
+    ..add(19032)
+    ..add(19033)
+    ..add(19034)
+    ..add(19035)
+    ..add(19036)
+    ..add(19037)
+    ..add(19038)
+    ..add(19039)
+    ..add(19040)
+    ..add(19041)
+    ..add(19042)
+    ..add(19043)
+    ..add(19044)
+    ..add(19045)
+    ..add(19046)
+    ..add(19047)
+    ..add(19048)
+    ..add(19049)
+    ..add(19050)
+    ..add(19051)
+    ..add(19052)
+    ..add(19053)
+    ..add(19054)
+    ..add(19055)
+    ..add(19056)
+    ..add(19057)
+    ..add(19058)
+    ..add(19059)
+    ..add(19060)
+    ..add(19061)
+    ..add(19062)
+    ..add(19063)
+    ..add(19064)
+    ..add(19065)
+    ..add(19066)
+    ..add(19067)
+    ..add(19068)
+    ..add(19069)
+    ..add(19070)
+    ..add(19071)
+    ..add(19072)
+    ..add(19073)
+    ..add(19074)
+    ..add(19075)
+    ..add(19076)
+    ..add(19077)
+    ..add(19078)
+    ..add(19079)
+    ..add(19080)
+    ..add(19081)
+    ..add(19082)
+    ..add(19083)
+    ..add(19084)
+    ..add(19085)
+    ..add(19086)
+    ..add(19087)
+    ..add(19088)
+    ..add(19089)
+    ..add(19090)
+    ..add(19091)
+    ..add(19092)
+    ..add(19093)
+    ..add(19094)
+    ..add(19095)
+    ..add(19096)
+    ..add(19097)
+    ..add(19098)
+    ..add(19099)
+    ..add(19100)
+    ..add(19101)
+    ..add(19102)
+    ..add(19103)
+    ..add(19104)
+    ..add(19105)
+    ..add(19106)
+    ..add(19107)
+    ..add(19108)
+    ..add(19109)
+    ..add(19110)
+    ..add(19111)
+    ..add(19112)
+    ..add(19113)
+    ..add(19114)
+    ..add(19115)
+    ..add(19116)
+    ..add(19117)
+    ..add(19118)
+    ..add(19119)
+    ..add(19120)
+    ..add(19121)
+    ..add(19122)
+    ..add(19123)
+    ..add(19124)
+    ..add(19125)
+    ..add(19126)
+    ..add(19127)
+    ..add(19128)
+    ..add(19129)
+    ..add(19130)
+    ..add(19131)
+    ..add(19132)
+    ..add(19133)
+    ..add(19134)
+    ..add(19135)
+    ..add(19136)
+    ..add(19137)
+    ..add(19138)
+    ..add(19139)
+    ..add(19140)
+    ..add(19141)
+    ..add(19142)
+    ..add(19143)
+    ..add(19144)
+    ..add(19145)
+    ..add(19146)
+    ..add(19147)
+    ..add(19148)
+    ..add(19149)
+    ..add(19150)
+    ..add(19151)
+    ..add(19152)
+    ..add(19153)
+    ..add(19154)
+    ..add(19155)
+    ..add(19156)
+    ..add(19157)
+    ..add(19158)
+    ..add(19159)
+    ..add(19160)
+    ..add(19161)
+    ..add(19162)
+    ..add(19163)
+    ..add(19164)
+    ..add(19165)
+    ..add(19166)
+    ..add(19167)
+    ..add(19168)
+    ..add(19169)
+    ..add(19170)
+    ..add(19171)
+    ..add(19172)
+    ..add(19173)
+    ..add(19174)
+    ..add(19175)
+    ..add(19176)
+    ..add(19177)
+    ..add(19178)
+    ..add(19179)
+    ..add(19180)
+    ..add(19181)
+    ..add(19182)
+    ..add(19183)
+    ..add(19184)
+    ..add(19185)
+    ..add(19186)
+    ..add(19187)
+    ..add(19188)
+    ..add(19189)
+    ..add(19190)
+    ..add(19191)
+    ..add(19192)
+    ..add(19193)
+    ..add(19194)
+    ..add(19195)
+    ..add(19196)
+    ..add(19197)
+    ..add(19198)
+    ..add(19199)
+    ..add(19200)
+    ..add(19201)
+    ..add(19202)
+    ..add(19203)
+    ..add(19204)
+    ..add(19205)
+    ..add(19206)
+    ..add(19207)
+    ..add(19208)
+    ..add(19209)
+    ..add(19210)
+    ..add(19211)
+    ..add(19212)
+    ..add(19213)
+    ..add(19214)
+    ..add(19215)
+    ..add(19216)
+    ..add(19217)
+    ..add(19218)
+    ..add(19219)
+    ..add(19220)
+    ..add(19221)
+    ..add(19222)
+    ..add(19223)
+    ..add(19224)
+    ..add(19225)
+    ..add(19226)
+    ..add(19227)
+    ..add(19228)
+    ..add(19229)
+    ..add(19230)
+    ..add(19231)
+    ..add(19232)
+    ..add(19233)
+    ..add(19234)
+    ..add(19235)
+    ..add(19236)
+    ..add(19237)
+    ..add(19238)
+    ..add(19239)
+    ..add(19240)
+    ..add(19241)
+    ..add(19242)
+    ..add(19243)
+    ..add(19244)
+    ..add(19245)
+    ..add(19246)
+    ..add(19247)
+    ..add(19248)
+    ..add(19249)
+    ..add(19250)
+    ..add(19251)
+    ..add(19252)
+    ..add(19253)
+    ..add(19254)
+    ..add(19255)
+    ..add(19256)
+    ..add(19257)
+    ..add(19258)
+    ..add(19259)
+    ..add(19260)
+    ..add(19261)
+    ..add(19262)
+    ..add(19263)
+    ..add(19264)
+    ..add(19265)
+    ..add(19266)
+    ..add(19267)
+    ..add(19268)
+    ..add(19269)
+    ..add(19270)
+    ..add(19271)
+    ..add(19272)
+    ..add(19273)
+    ..add(19274)
+    ..add(19275)
+    ..add(19276)
+    ..add(19277)
+    ..add(19278)
+    ..add(19279)
+    ..add(19280)
+    ..add(19281)
+    ..add(19282)
+    ..add(19283)
+    ..add(19284)
+    ..add(19285)
+    ..add(19286)
+    ..add(19287)
+    ..add(19288)
+    ..add(19289)
+    ..add(19290)
+    ..add(19291)
+    ..add(19292)
+    ..add(19293)
+    ..add(19294)
+    ..add(19295)
+    ..add(19296)
+    ..add(19297)
+    ..add(19298)
+    ..add(19299)
+    ..add(19300)
+    ..add(19301)
+    ..add(19302)
+    ..add(19303)
+    ..add(19304)
+    ..add(19305)
+    ..add(19306)
+    ..add(19307)
+    ..add(19308)
+    ..add(19309)
+    ..add(19310)
+    ..add(19311)
+    ..add(19312)
+    ..add(19313)
+    ..add(19314)
+    ..add(19315)
+    ..add(19316)
+    ..add(19317)
+    ..add(19318)
+    ..add(19319)
+    ..add(19320)
+    ..add(19321)
+    ..add(19322)
+    ..add(19323)
+    ..add(19324)
+    ..add(19325)
+    ..add(19326)
+    ..add(19327)
+    ..add(19328)
+    ..add(19329)
+    ..add(19330)
+    ..add(19331)
+    ..add(19332)
+    ..add(19333)
+    ..add(19334)
+    ..add(19335)
+    ..add(19336)
+    ..add(19337)
+    ..add(19338)
+    ..add(19339)
+    ..add(19340)
+    ..add(19341)
+    ..add(19342)
+    ..add(19343)
+    ..add(19344)
+    ..add(19345)
+    ..add(19346)
+    ..add(19347)
+    ..add(19348)
+    ..add(19349)
+    ..add(19350)
+    ..add(19351)
+    ..add(19352)
+    ..add(19353)
+    ..add(19354)
+    ..add(19355)
+    ..add(19356)
+    ..add(19357)
+    ..add(19358)
+    ..add(19359)
+    ..add(19360)
+    ..add(19361)
+    ..add(19362)
+    ..add(19363)
+    ..add(19364)
+    ..add(19365)
+    ..add(19366)
+    ..add(19367)
+    ..add(19368)
+    ..add(19369)
+    ..add(19370)
+    ..add(19371)
+    ..add(19372)
+    ..add(19373)
+    ..add(19374)
+    ..add(19375)
+    ..add(19376)
+    ..add(19377)
+    ..add(19378)
+    ..add(19379)
+    ..add(19380)
+    ..add(19381)
+    ..add(19382)
+    ..add(19383)
+    ..add(19384)
+    ..add(19385)
+    ..add(19386)
+    ..add(19387)
+    ..add(19388)
+    ..add(19389)
+    ..add(19390)
+    ..add(19391)
+    ..add(19392)
+    ..add(19393)
+    ..add(19394)
+    ..add(19395)
+    ..add(19396)
+    ..add(19397)
+    ..add(19398)
+    ..add(19399)
+    ..add(19400)
+    ..add(19401)
+    ..add(19402)
+    ..add(19403)
+    ..add(19404)
+    ..add(19405)
+    ..add(19406)
+    ..add(19407)
+    ..add(19408)
+    ..add(19409)
+    ..add(19410)
+    ..add(19411)
+    ..add(19412)
+    ..add(19413)
+    ..add(19414)
+    ..add(19415)
+    ..add(19416)
+    ..add(19417)
+    ..add(19418)
+    ..add(19419)
+    ..add(19420)
+    ..add(19421)
+    ..add(19422)
+    ..add(19423)
+    ..add(19424)
+    ..add(19425)
+    ..add(19426)
+    ..add(19427)
+    ..add(19428)
+    ..add(19429)
+    ..add(19430)
+    ..add(19431)
+    ..add(19432)
+    ..add(19433)
+    ..add(19434)
+    ..add(19435)
+    ..add(19436)
+    ..add(19437)
+    ..add(19438)
+    ..add(19439)
+    ..add(19440)
+    ..add(19441)
+    ..add(19442)
+    ..add(19443)
+    ..add(19444)
+    ..add(19445)
+    ..add(19446)
+    ..add(19447)
+    ..add(19448)
+    ..add(19449)
+    ..add(19450)
+    ..add(19451)
+    ..add(19452)
+    ..add(19453)
+    ..add(19454)
+    ..add(19455)
+    ..add(19456)
+    ..add(19457)
+    ..add(19458)
+    ..add(19459)
+    ..add(19460)
+    ..add(19461)
+    ..add(19462)
+    ..add(19463)
+    ..add(19464)
+    ..add(19465)
+    ..add(19466)
+    ..add(19467)
+    ..add(19468)
+    ..add(19469)
+    ..add(19470)
+    ..add(19471)
+    ..add(19472)
+    ..add(19473)
+    ..add(19474)
+    ..add(19475)
+    ..add(19476)
+    ..add(19477)
+    ..add(19478)
+    ..add(19479)
+    ..add(19480)
+    ..add(19481)
+    ..add(19482)
+    ..add(19483)
+    ..add(19484)
+    ..add(19485)
+    ..add(19486)
+    ..add(19487)
+    ..add(19488)
+    ..add(19489)
+    ..add(19490)
+    ..add(19491)
+    ..add(19492)
+    ..add(19493)
+    ..add(19494)
+    ..add(19495)
+    ..add(19496)
+    ..add(19497)
+    ..add(19498)
+    ..add(19499)
+    ..add(19500)
+    ..add(19501)
+    ..add(19502)
+    ..add(19503)
+    ..add(19504)
+    ..add(19505)
+    ..add(19506)
+    ..add(19507)
+    ..add(19508)
+    ..add(19509)
+    ..add(19510)
+    ..add(19511)
+    ..add(19512)
+    ..add(19513)
+    ..add(19514)
+    ..add(19515)
+    ..add(19516)
+    ..add(19517)
+    ..add(19518)
+    ..add(19519)
+    ..add(19520)
+    ..add(19521)
+    ..add(19522)
+    ..add(19523)
+    ..add(19524)
+    ..add(19525)
+    ..add(19526)
+    ..add(19527)
+    ..add(19528)
+    ..add(19529)
+    ..add(19530)
+    ..add(19531)
+    ..add(19532)
+    ..add(19533)
+    ..add(19534)
+    ..add(19535)
+    ..add(19536)
+    ..add(19537)
+    ..add(19538)
+    ..add(19539)
+    ..add(19540)
+    ..add(19541)
+    ..add(19542)
+    ..add(19543)
+    ..add(19544)
+    ..add(19545)
+    ..add(19546)
+    ..add(19547)
+    ..add(19548)
+    ..add(19549)
+    ..add(19550)
+    ..add(19551)
+    ..add(19552)
+    ..add(19553)
+    ..add(19554)
+    ..add(19555)
+    ..add(19556)
+    ..add(19557)
+    ..add(19558)
+    ..add(19559)
+    ..add(19560)
+    ..add(19561)
+    ..add(19562)
+    ..add(19563)
+    ..add(19564)
+    ..add(19565)
+    ..add(19566)
+    ..add(19567)
+    ..add(19568)
+    ..add(19569)
+    ..add(19570)
+    ..add(19571)
+    ..add(19572)
+    ..add(19573)
+    ..add(19574)
+    ..add(19575)
+    ..add(19576)
+    ..add(19577)
+    ..add(19578)
+    ..add(19579)
+    ..add(19580)
+    ..add(19581)
+    ..add(19582)
+    ..add(19583)
+    ..add(19584)
+    ..add(19585)
+    ..add(19586)
+    ..add(19587)
+    ..add(19588)
+    ..add(19589)
+    ..add(19590)
+    ..add(19591)
+    ..add(19592)
+    ..add(19593)
+    ..add(19594)
+    ..add(19595)
+    ..add(19596)
+    ..add(19597)
+    ..add(19598)
+    ..add(19599)
+    ..add(19600)
+    ..add(19601)
+    ..add(19602)
+    ..add(19603)
+    ..add(19604)
+    ..add(19605)
+    ..add(19606)
+    ..add(19607)
+    ..add(19608)
+    ..add(19609)
+    ..add(19610)
+    ..add(19611)
+    ..add(19612)
+    ..add(19613)
+    ..add(19614)
+    ..add(19615)
+    ..add(19616)
+    ..add(19617)
+    ..add(19618)
+    ..add(19619)
+    ..add(19620)
+    ..add(19621)
+    ..add(19622)
+    ..add(19623)
+    ..add(19624)
+    ..add(19625)
+    ..add(19626)
+    ..add(19627)
+    ..add(19628)
+    ..add(19629)
+    ..add(19630)
+    ..add(19631)
+    ..add(19632)
+    ..add(19633)
+    ..add(19634)
+    ..add(19635)
+    ..add(19636)
+    ..add(19637)
+    ..add(19638)
+    ..add(19639)
+    ..add(19640)
+    ..add(19641)
+    ..add(19642)
+    ..add(19643)
+    ..add(19644)
+    ..add(19645)
+    ..add(19646)
+    ..add(19647)
+    ..add(19648)
+    ..add(19649)
+    ..add(19650)
+    ..add(19651)
+    ..add(19652)
+    ..add(19653)
+    ..add(19654)
+    ..add(19655)
+    ..add(19656)
+    ..add(19657)
+    ..add(19658)
+    ..add(19659)
+    ..add(19660)
+    ..add(19661)
+    ..add(19662)
+    ..add(19663)
+    ..add(19664)
+    ..add(19665)
+    ..add(19666)
+    ..add(19667)
+    ..add(19668)
+    ..add(19669)
+    ..add(19670)
+    ..add(19671)
+    ..add(19672)
+    ..add(19673)
+    ..add(19674)
+    ..add(19675)
+    ..add(19676)
+    ..add(19677)
+    ..add(19678)
+    ..add(19679)
+    ..add(19680)
+    ..add(19681)
+    ..add(19682)
+    ..add(19683)
+    ..add(19684)
+    ..add(19685)
+    ..add(19686)
+    ..add(19687)
+    ..add(19688)
+    ..add(19689)
+    ..add(19690)
+    ..add(19691)
+    ..add(19692)
+    ..add(19693)
+    ..add(19694)
+    ..add(19695)
+    ..add(19696)
+    ..add(19697)
+    ..add(19698)
+    ..add(19699)
+    ..add(19700)
+    ..add(19701)
+    ..add(19702)
+    ..add(19703)
+    ..add(19704)
+    ..add(19705)
+    ..add(19706)
+    ..add(19707)
+    ..add(19708)
+    ..add(19709)
+    ..add(19710)
+    ..add(19711)
+    ..add(19712)
+    ..add(19713)
+    ..add(19714)
+    ..add(19715)
+    ..add(19716)
+    ..add(19717)
+    ..add(19718)
+    ..add(19719)
+    ..add(19720)
+    ..add(19721)
+    ..add(19722)
+    ..add(19723)
+    ..add(19724)
+    ..add(19725)
+    ..add(19726)
+    ..add(19727)
+    ..add(19728)
+    ..add(19729)
+    ..add(19730)
+    ..add(19731)
+    ..add(19732)
+    ..add(19733)
+    ..add(19734)
+    ..add(19735)
+    ..add(19736)
+    ..add(19737)
+    ..add(19738)
+    ..add(19739)
+    ..add(19740)
+    ..add(19741)
+    ..add(19742)
+    ..add(19743)
+    ..add(19744)
+    ..add(19745)
+    ..add(19746)
+    ..add(19747)
+    ..add(19748)
+    ..add(19749)
+    ..add(19750)
+    ..add(19751)
+    ..add(19752)
+    ..add(19753)
+    ..add(19754)
+    ..add(19755)
+    ..add(19756)
+    ..add(19757)
+    ..add(19758)
+    ..add(19759)
+    ..add(19760)
+    ..add(19761)
+    ..add(19762)
+    ..add(19763)
+    ..add(19764)
+    ..add(19765)
+    ..add(19766)
+    ..add(19767)
+    ..add(19768)
+    ..add(19769)
+    ..add(19770)
+    ..add(19771)
+    ..add(19772)
+    ..add(19773)
+    ..add(19774)
+    ..add(19775)
+    ..add(19776)
+    ..add(19777)
+    ..add(19778)
+    ..add(19779)
+    ..add(19780)
+    ..add(19781)
+    ..add(19782)
+    ..add(19783)
+    ..add(19784)
+    ..add(19785)
+    ..add(19786)
+    ..add(19787)
+    ..add(19788)
+    ..add(19789)
+    ..add(19790)
+    ..add(19791)
+    ..add(19792)
+    ..add(19793)
+    ..add(19794)
+    ..add(19795)
+    ..add(19796)
+    ..add(19797)
+    ..add(19798)
+    ..add(19799)
+    ..add(19800)
+    ..add(19801)
+    ..add(19802)
+    ..add(19803)
+    ..add(19804)
+    ..add(19805)
+    ..add(19806)
+    ..add(19807)
+    ..add(19808)
+    ..add(19809)
+    ..add(19810)
+    ..add(19811)
+    ..add(19812)
+    ..add(19813)
+    ..add(19814)
+    ..add(19815)
+    ..add(19816)
+    ..add(19817)
+    ..add(19818)
+    ..add(19819)
+    ..add(19820)
+    ..add(19821)
+    ..add(19822)
+    ..add(19823)
+    ..add(19824)
+    ..add(19825)
+    ..add(19826)
+    ..add(19827)
+    ..add(19828)
+    ..add(19829)
+    ..add(19830)
+    ..add(19831)
+    ..add(19832)
+    ..add(19833)
+    ..add(19834)
+    ..add(19835)
+    ..add(19836)
+    ..add(19837)
+    ..add(19838)
+    ..add(19839)
+    ..add(19840)
+    ..add(19841)
+    ..add(19842)
+    ..add(19843)
+    ..add(19844)
+    ..add(19845)
+    ..add(19846)
+    ..add(19847)
+    ..add(19848)
+    ..add(19849)
+    ..add(19850)
+    ..add(19851)
+    ..add(19852)
+    ..add(19853)
+    ..add(19854)
+    ..add(19855)
+    ..add(19856)
+    ..add(19857)
+    ..add(19858)
+    ..add(19859)
+    ..add(19860)
+    ..add(19861)
+    ..add(19862)
+    ..add(19863)
+    ..add(19864)
+    ..add(19865)
+    ..add(19866)
+    ..add(19867)
+    ..add(19868)
+    ..add(19869)
+    ..add(19870)
+    ..add(19871)
+    ..add(19872)
+    ..add(19873)
+    ..add(19874)
+    ..add(19875)
+    ..add(19876)
+    ..add(19877)
+    ..add(19878)
+    ..add(19879)
+    ..add(19880)
+    ..add(19881)
+    ..add(19882)
+    ..add(19883)
+    ..add(19884)
+    ..add(19885)
+    ..add(19886)
+    ..add(19887)
+    ..add(19888)
+    ..add(19889)
+    ..add(19890)
+    ..add(19891)
+    ..add(19892)
+    ..add(19893)
+    ..add(19894)
+    ..add(19895)
+    ..add(19896)
+    ..add(19897)
+    ..add(19898)
+    ..add(19899)
+    ..add(19900)
+    ..add(19901)
+    ..add(19902)
+    ..add(19903)
+    ..add(19904)
+    ..add(19905)
+    ..add(19906)
+    ..add(19907)
+    ..add(19908)
+    ..add(19909)
+    ..add(19910)
+    ..add(19911)
+    ..add(19912)
+    ..add(19913)
+    ..add(19914)
+    ..add(19915)
+    ..add(19916)
+    ..add(19917)
+    ..add(19918)
+    ..add(19919)
+    ..add(19920)
+    ..add(19921)
+    ..add(19922)
+    ..add(19923)
+    ..add(19924)
+    ..add(19925)
+    ..add(19926)
+    ..add(19927)
+    ..add(19928)
+    ..add(19929)
+    ..add(19930)
+    ..add(19931)
+    ..add(19932)
+    ..add(19933)
+    ..add(19934)
+    ..add(19935)
+    ..add(19936)
+    ..add(19937)
+    ..add(19938)
+    ..add(19939)
+    ..add(19940)
+    ..add(19941)
+    ..add(19942)
+    ..add(19943)
+    ..add(19944)
+    ..add(19945)
+    ..add(19946)
+    ..add(19947)
+    ..add(19948)
+    ..add(19949)
+    ..add(19950)
+    ..add(19951)
+    ..add(19952)
+    ..add(19953)
+    ..add(19954)
+    ..add(19955)
+    ..add(19956)
+    ..add(19957)
+    ..add(19958)
+    ..add(19959)
+    ..add(19960)
+    ..add(19961)
+    ..add(19962)
+    ..add(19963)
+    ..add(19964)
+    ..add(19965)
+    ..add(19966)
+    ..add(19967)
+    ..add(19968)
+    ..add(19969)
+    ..add(19970)
+    ..add(19971)
+    ..add(19972)
+    ..add(19973)
+    ..add(19974)
+    ..add(19975)
+    ..add(19976)
+    ..add(19977)
+    ..add(19978)
+    ..add(19979)
+    ..add(19980)
+    ..add(19981)
+    ..add(19982)
+    ..add(19983)
+    ..add(19984)
+    ..add(19985)
+    ..add(19986)
+    ..add(19987)
+    ..add(19988)
+    ..add(19989)
+    ..add(19990)
+    ..add(19991)
+    ..add(19992)
+    ..add(19993)
+    ..add(19994)
+    ..add(19995)
+    ..add(19996)
+    ..add(19997)
+    ..add(19998)
+    ..add(19999);
+
+  Expect.equals(ints.length, 20000);
+  for (int i = 0; i < ints.length; i++) {
+    Expect.equals(ints[i], i);
+  }
+}
diff --git a/tests/language/void/README.md b/tests/language/void/README.md
new file mode 100644
index 0000000..d2a17c9
--- /dev/null
+++ b/tests/language/void/README.md
@@ -0,0 +1,10 @@
+# Feature tests for void
+
+This directory was created in order to hold tests pertaining to the
+Dart feature temporarily known as _generalized void_. This feature
+allows the type `void` to occur in many locations where it was
+previously a compile-time error, and it is intended to allow
+developers to express the intent that the value of certain expressions
+is of no interest, and help them to avoid using such values. For more
+details, please check the
+[feature specification](https://github.com/dart-lang/sdk/blob/master/docs/language/informal/generalized-void.md).
\ No newline at end of file
diff --git a/tests/language/void/await_void_error_test.dart b/tests/language/void/await_void_error_test.dart
index 94b902b..fb52fda 100644
--- a/tests/language/void/await_void_error_test.dart
+++ b/tests/language/void/await_void_error_test.dart
@@ -14,23 +14,24 @@
   await print('');
   //    ^
   // [analyzer] unspecified
-  // [cfe] unspecified
+  // [cfe] This expression has type 'void' and can't be used.
 
   await v;
   //    ^
   // [analyzer] unspecified
-  // [cfe] unspecified
+  // [cfe] This expression has type 'void' and can't be used.
 
   await vs[0];
   //    ^
   // [analyzer] unspecified
-  // [cfe] unspecified
+  //      ^
+  // [cfe] This expression has type 'void' and can't be used.
 
   var v2 = vs[0];
   await v2;
   //    ^
   // [analyzer] unspecified
-  // [cfe] unspecified
+  // [cfe] This expression has type 'void' and can't be used.
 
   // A `FutureOr<void>` can be awaited.
   await fov;
diff --git a/tests/language/void/generalized_void_syntax_test.dart b/tests/language/void/generalized_void_syntax_test.dart
new file mode 100644
index 0000000..02f3404
--- /dev/null
+++ b/tests/language/void/generalized_void_syntax_test.dart
@@ -0,0 +1,146 @@
+// 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.
+
+// Testing that the reserved word `void` is allowed to occur as a type, not
+// just as a return type.
+
+typedef F = void Function(Object?);
+typedef F2 = void Function([Object?]);
+typedef F3 = void Function({Object? x});
+
+typedef G = void Function(void);
+typedef G2 = void Function([void]);
+typedef G3 = void Function({void x});
+
+typedef H = int Function(void);
+typedef H2 = int Function([void]);
+typedef H3 = int Function({void x});
+
+class A<T> {
+  final T t;
+  const A(this.t);
+}
+
+const void x1 = null;
+const A<void> x2 = const A<void>(null);
+
+final void x3 = null;
+final A<void> x4 = new A<void>(null);
+
+void x5 = null, x6;
+A<void> x7 = new A<void>(null), x8 = new A<void>(null);
+
+void get g1 => null;
+A<void> get g2 => new A<void>(null);
+void set s1(void x) => null;
+void set s2(A<void> x) => null;
+void m1(void x, [void y]) => null;
+void m2(void x, {void y}) => null;
+A<void> m3(A<void>? x, [A<void>? y]) => new A<void>(null);
+A<void> m4(A<void>? x, {A<void>? y}) => new A<void>(null);
+
+class B<S, T> implements A<void> {
+  void get t => null;
+}
+
+class C extends A<void> with B<void, A<void>> {
+  C() : super(null);
+
+  static final void x1 = null;
+  static final A<void> x2 = new A<void>(null);
+
+  static const void x3 = null;
+  static const A<void> x4 = const A<void>(null);
+
+  final void x5 = null;
+  final A<void> x6 = new A<void>(null);
+
+  static void x7 = null, x8;
+  static A<void> x9 = new A<void>(null);
+
+  covariant void x11 = null, x12;
+  covariant A<void> x13 = new A<void>(null);
+
+  static void get g1 => null;
+  static A<void> get g2 => new A<void>(null);
+  static void set s1(void x) => null;
+  static void set s2(A<void> x) => null;
+  static void m1(void x, [void y]) => null;
+  static void m2(void x, {void y}) => null;
+  static A<void> m3(A<void> x, [A<void>? y]) => x;
+  static A<void> m4(A<void> x, {A<void>? y}) => x;
+
+  void get g3 => null;
+  A<void> get g4 => new A<void>(null);
+  void set s3(void x) => null;
+  void set s4(A<void> x) => null;
+  void m5(void x, [void y]) => null;
+  void m6(void x, {void y}) => null;
+  A<void> m7(A<void> x, [A<void>? y]) => x;
+  A<void> m8(A<void> x, {A<void>? y}) => x;
+
+  // Ensure that all members are used, and use `void` in expressions.
+  void run() {
+    x1;
+    x2;
+    x3;
+    x4;
+    x5;
+    x6;
+    x7;
+    x8;
+    x9;
+
+    x11;
+    x12;
+    x13;
+
+    g1;
+    g2;
+    g3;
+    g4;
+
+    s1 = null;
+    s2 = new A<void>(null);
+    s3 = null;
+    s4 = new A<void>(null);
+    m1(new A<void>(null), null);
+    m2(new A<void>(null), y: null);
+    m3(new A<void>(null), new A<void>(null));
+    m4(new A<void>(null), y: new A<void>(null));
+    m5(new A<void>(null), null);
+    m6(new A<void>(null), y: null);
+    m7(new A<void>(null), new A<void>(null));
+    m8(new A<void>(null), y: new A<void>(null));
+
+    void pretendToUse(dynamic x) => null;
+    pretendToUse(<void>[]);
+    pretendToUse(<void, void>{});
+    pretendToUse(<A<void>>[]);
+    pretendToUse(<A<void>, A<void>>{});
+  }
+}
+
+// Testing syntax, just enforce compilation.
+main() {
+  // ignore
+  x1;
+  x2;
+  x3;
+  x4;
+  x5;
+  x6;
+  x7;
+  x8;
+  g1;
+  g2;
+
+  s1 = null;
+  s2 = new A<void>(null);
+  m1(new A<void>(null), new A<void>(null));
+  m2(new A<void>(null), y: new A<void>(null));
+  m3(new A<void>(null), new A<void>(null));
+  m4(new A<void>(null), y: new A<void>(null));
+  new C().run();
+}
diff --git a/tests/language/void/generalized_void_usage_test.dart b/tests/language/void/generalized_void_usage_test.dart
new file mode 100644
index 0000000..13bb717
--- /dev/null
+++ b/tests/language/void/generalized_void_usage_test.dart
@@ -0,0 +1,37 @@
+// 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.
+
+// Dart test for static checks on situations where expressions of type void
+// can be used. The point is simply that there are no compile-time errors.
+
+// We need expressions of type `void`; `void x` would do, but using
+// `void get x` will work with tools that do not yet handle `void x`.
+void get x => null;
+
+void use(dynamic x) {}
+
+main() {
+  // In an expressionStatement `e;`, e may have type void.
+  x;
+
+  // In the initialization and increment expressions of a for-loop,
+  // `for (e1; e2; e3) {..}`, `e1` and `e3` may have type void.
+  for (x;; x) {
+    break;
+  }
+
+  // In a typeCast `e as T`, `e` may have type void.
+  var y = x as Object?;
+
+  // In a parenthesized expression `(e)`, `e` may have type void.
+  (x);
+
+  // In a return statement `return e;`, when the return type of the
+  // innermost enclosing function is the type void, e may have type void.
+  void f() => x;
+
+  void g() {
+    return x;
+  }
+}
diff --git a/tests/language/void/return_future_future_or_void_async_error0_test.dart b/tests/language/void/return_future_future_or_void_async_error0_test.dart
new file mode 100644
index 0000000..ea6093a
--- /dev/null
+++ b/tests/language/void/return_future_future_or_void_async_error0_test.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.
+
+import 'dart:async';
+
+void voidValue = null;
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied async function may not return void
+Future<FutureOr<void>> test() async {
+  return /*@compile-error=unspecified*/ voidValue;
+}
diff --git a/tests/language/void/return_future_future_or_void_async_error1_test.dart b/tests/language/void/return_future_future_or_void_async_error1_test.dart
new file mode 100644
index 0000000..daf1667
--- /dev/null
+++ b/tests/language/void/return_future_future_or_void_async_error1_test.dart
@@ -0,0 +1,15 @@
+// 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 'dart:async';
+
+void main() {
+  test();
+}
+
+// Can only have `return;` if future value type is `void`, `dynamic` or `Null`.
+// Here it's `FutureOr<void>` which is equivalent to `void`, but is not `void`.
+Future<FutureOr<void>> test() async {
+  return; //# none: compile-time error
+}
diff --git a/tests/language/void/return_future_future_or_void_async_test.dart b/tests/language/void/return_future_future_or_void_async_test.dart
new file mode 100644
index 0000000..6553294
--- /dev/null
+++ b/tests/language/void/return_future_future_or_void_async_test.dart
@@ -0,0 +1,46 @@
+// 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 'dart:async';
+
+void voidValue = null;
+
+void main() {
+  test1();
+  test4();
+  test5();
+  test6();
+  test7();
+  test8();
+}
+
+// Testing that a block bodied async function may have no return
+Future<FutureOr<void>> test1() async {}
+
+// Testing that a block bodied async function may return Future<FutureOr<void>>
+Future<FutureOr<void>> test4([bool? b]) async {
+  return Future<FutureOr<void>>.value(null);
+}
+
+// Testing that a block bodied async function may return Future<Future<void>>
+Future<FutureOr<void>> test5([bool? b]) async {
+  return Future<Future<void>>.value(Future<void>.value(null));
+}
+
+// Testing that a block bodied async function may return FutureOr<Future<void>>
+Future<FutureOr<void>> test6([bool? b]) async {
+  return Future<void>.value(null) as FutureOr<Future<void>>;
+}
+
+// Testing that a block bodied async function may return non-void
+// values
+Future<FutureOr<void>> test7() async {
+  return 42;
+}
+
+// Testing that a block bodied async function may return non-void
+// Future values
+Future<FutureOr<void>> test8() async {
+  return new Future<int>.value(42);
+}
diff --git a/tests/language/void/return_future_future_or_void_sync_error0_test.dart b/tests/language/void/return_future_future_or_void_sync_error0_test.dart
new file mode 100644
index 0000000..70f8c2e
--- /dev/null
+++ b/tests/language/void/return_future_future_or_void_sync_error0_test.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.
+
+import 'dart:async';
+
+void voidValue = null;
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not return void
+Future<FutureOr<void>> test() {
+  return /*@compile-error=unspecified*/ voidValue;
+}
diff --git a/tests/language/void/return_future_future_or_void_sync_error1_test.dart b/tests/language/void/return_future_future_or_void_sync_error1_test.dart
new file mode 100644
index 0000000..dd12358
--- /dev/null
+++ b/tests/language/void/return_future_future_or_void_sync_error1_test.dart
@@ -0,0 +1,14 @@
+// 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 'dart:async';
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not have an empty return
+Future<FutureOr<void>> test0() {
+  return; /*@compile-error=unspecified*/
+}
diff --git a/tests/language/void/return_future_future_or_void_sync_test.dart b/tests/language/void/return_future_future_or_void_sync_test.dart
new file mode 100644
index 0000000..6851ef0
--- /dev/null
+++ b/tests/language/void/return_future_future_or_void_sync_test.dart
@@ -0,0 +1,32 @@
+// 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 'dart:async';
+
+void voidValue = null;
+
+void main() {
+  test1();
+  test2();
+  test3();
+  test4();
+}
+
+// Testing that a block bodied function may have no return
+Future<FutureOr<void>>? test1() {}
+
+// Testing that a block bodied function may return Future<void>
+Future<FutureOr<void>>? test2() {
+  return null as Future<void>?;
+}
+
+// Testing that a block bodied function may return FutureOr<void>
+Future<FutureOr<void>>? test3() {
+  return null as Future<FutureOr<void>>?;
+}
+
+// Testing that a block bodied function may return non-void Future values
+Future<FutureOr<void>> test4() {
+  return new Future.value(42);
+}
diff --git a/tests/language/void/return_future_or_future_or_void_sync_error1_test.dart b/tests/language/void/return_future_or_future_or_void_sync_error1_test.dart
new file mode 100644
index 0000000..25b0df7
--- /dev/null
+++ b/tests/language/void/return_future_or_future_or_void_sync_error1_test.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.
+
+import 'dart:async';
+
+void voidValue = null;
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not return void
+FutureOr<FutureOr<void>> test() {
+  return /*@compile-error=unspecified*/ voidValue;
+}
diff --git a/tests/language/void/return_future_or_future_or_void_sync_error2_test.dart b/tests/language/void/return_future_or_future_or_void_sync_error2_test.dart
new file mode 100644
index 0000000..6a09786
--- /dev/null
+++ b/tests/language/void/return_future_or_future_or_void_sync_error2_test.dart
@@ -0,0 +1,14 @@
+// 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 'dart:async';
+
+void main() {
+  test();
+}
+
+// Can only `return;` if the return type is `void`, `Future` or `Null`.
+FutureOr<FutureOr<void>> test() {
+  return; //# none: compile-time error
+}
diff --git a/tests/language/void/return_future_or_future_or_void_sync_test.dart b/tests/language/void/return_future_or_future_or_void_sync_test.dart
new file mode 100644
index 0000000..f2254f7
--- /dev/null
+++ b/tests/language/void/return_future_or_future_or_void_sync_test.dart
@@ -0,0 +1,51 @@
+// 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 '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/tests/language/void/return_future_or_void_async_test.dart b/tests/language/void/return_future_or_void_async_test.dart
new file mode 100644
index 0000000..1700bb5
--- /dev/null
+++ b/tests/language/void/return_future_or_void_async_test.dart
@@ -0,0 +1,38 @@
+// 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 'dart:async';
+
+void voidValue = null;
+
+void main() {
+  test0();
+  test1();
+  test2();
+  test3();
+  test6();
+}
+
+// Testing that a block bodied function may have an empty return
+FutureOr<void> test0() async {
+  return;
+}
+
+// Testing that a block bodied function may have no return
+FutureOr<void> test1() async {}
+
+// Testing that a block bodied function may return Future<void>
+FutureOr<void> test2() async {
+  return Future<void>.value(null);
+}
+
+// Testing that a block bodied function may return FutureOr<void>
+FutureOr<void> test3() async {
+  return null as FutureOr<void>;
+}
+
+// Testing that a block bodied function may return void
+FutureOr<void> test6() async {
+  return voidValue;
+}
diff --git a/tests/language/void/return_future_or_void_sync_error3_test.dart b/tests/language/void/return_future_or_void_sync_error3_test.dart
new file mode 100644
index 0000000..c921114
--- /dev/null
+++ b/tests/language/void/return_future_or_void_sync_error3_test.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.
+
+import 'dart:async';
+
+void voidValue = null;
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not return void
+FutureOr<void> test() {
+  return /*@compile-error=unspecified*/ voidValue;
+}
diff --git a/tests/language/void/return_future_or_void_sync_error4_test.dart b/tests/language/void/return_future_or_void_sync_error4_test.dart
new file mode 100644
index 0000000..c1defcb
--- /dev/null
+++ b/tests/language/void/return_future_or_void_sync_error4_test.dart
@@ -0,0 +1,14 @@
+// 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 'dart:async';
+
+void main() {
+  test();
+}
+
+// Can only `return;` if return type is `void`, `dynamic` or `Null`.
+FutureOr<void> test() {
+  return; //# none: compile-time error
+}
diff --git a/tests/language/void/return_future_or_void_sync_test.dart b/tests/language/void/return_future_or_void_sync_test.dart
new file mode 100644
index 0000000..b3274a1
--- /dev/null
+++ b/tests/language/void/return_future_or_void_sync_test.dart
@@ -0,0 +1,44 @@
+// 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 'dart:async';
+
+void voidValue = null;
+
+void main() {
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+}
+
+// Testing that a block bodied function may have no return
+FutureOr<void> test1() {}
+
+// Testing that a block bodied function may return Future<void>
+FutureOr<void> test2() {
+  return Future<void>.value(null);
+}
+
+// Testing that a block bodied function may return FutureOr<void>
+FutureOr<void> test3() {
+  return null as FutureOr<void>;
+}
+
+// Testing that a block bodied function may return Future<void>
+FutureOr<void> test4() {
+  return Future<Future<void>>.value(Future<void>.value(null));
+}
+
+// Testing that a block bodied function may return non-void values
+FutureOr<void> test5() {
+  return 42;
+}
+
+// Testing that a block bodied function may return non-void Future values
+FutureOr<void> test6() {
+  return new Future.value(42);
+}
diff --git a/tests/language/void/return_future_void_async_test.dart b/tests/language/void/return_future_void_async_test.dart
new file mode 100644
index 0000000..2f80ecb
--- /dev/null
+++ b/tests/language/void/return_future_void_async_test.dart
@@ -0,0 +1,50 @@
+// 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 'dart:async';
+
+void voidValue = null;
+
+void main() {
+  test0();
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+}
+
+// Testing that a block bodied async function may have an empty return
+Future<void> test0() async {
+  return;
+}
+
+// Testing that a block bodied async function may have no return
+Future<void> test1() async {}
+
+// Testing that a block bodied async function may return Future<void>
+Future<void> test2([bool? b]) async {
+  return Future<void>.value(null);
+}
+
+// Testing that a block bodied async function may return FutureOr<void>
+Future<void> test3([bool? b]) async {
+  return null as FutureOr<void>;
+}
+
+// Testing that a block bodied async function may return null
+Future<void> test4([bool? b]) async {
+  return null;
+}
+
+// Testing that a block bodied async function may return dynamic
+Future<void> test5([bool? b]) async {
+  return null as dynamic;
+}
+
+// Testing that a block bodied async function return void
+Future<void> test6() async {
+  return voidValue;
+}
diff --git a/tests/language/void/return_void_async_error0_test.dart b/tests/language/void/return_void_async_error0_test.dart
new file mode 100644
index 0000000..cb02f38
--- /dev/null
+++ b/tests/language/void/return_void_async_error0_test.dart
@@ -0,0 +1,13 @@
+// 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.
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied async function may not return non-void non-top
+// values
+void test() async {
+  return /*@compile-error=unspecified*/ 3;
+}
diff --git a/tests/language/void/return_void_async_error1_test.dart b/tests/language/void/return_void_async_error1_test.dart
new file mode 100644
index 0000000..c685097
--- /dev/null
+++ b/tests/language/void/return_void_async_error1_test.dart
@@ -0,0 +1,14 @@
+// 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.
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied async function may not return non-void Object
+// values
+void test() async {
+  Object a = 3;
+  return /*@compile-error=unspecified*/ a;
+}
diff --git a/tests/language/void/return_void_async_error2_test.dart b/tests/language/void/return_void_async_error2_test.dart
new file mode 100644
index 0000000..afc2825
--- /dev/null
+++ b/tests/language/void/return_void_async_error2_test.dart
@@ -0,0 +1,15 @@
+// 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 'dart:async';
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied async function may not return non-void Future
+// values
+void test() async {
+  return /*@compile-error=unspecified*/ null as Future<int>;
+}
diff --git a/tests/language/void/return_void_async_test.dart b/tests/language/void/return_void_async_test.dart
new file mode 100644
index 0000000..5ed8ea0
--- /dev/null
+++ b/tests/language/void/return_void_async_test.dart
@@ -0,0 +1,55 @@
+// 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 'dart:async';
+
+void voidValue = null;
+
+void main() {
+  test0();
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+}
+
+// Testing that a block bodied async function may have an empty return
+void test0() async {
+  return;
+}
+
+// Testing that a block bodied async function may have no return
+void test1() async {}
+
+// Testing that a block bodied async function may return void
+void test2() async {
+  return voidValue;
+}
+
+// Testing that a block bodied async function may have both empty returns
+//  and void returning paths
+void test3([bool? b]) async {
+  if (b == null) {
+    return;
+  } else {
+    return voidValue;
+  }
+}
+
+// Testing that a block bodied async function may return Null
+void test4() async {
+  return null;
+}
+
+// Testing that a block bodied async function may return dynamic
+void test5() async {
+  return null as dynamic;
+}
+
+// Testing that a block bodied async function may return FutureOr<void>
+void test6() async {
+  return null as FutureOr<void>;
+}
diff --git a/tests/language/void/return_void_sync_error0_test.dart b/tests/language/void/return_void_sync_error0_test.dart
new file mode 100644
index 0000000..5d27b5d
--- /dev/null
+++ b/tests/language/void/return_void_sync_error0_test.dart
@@ -0,0 +1,12 @@
+// 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.
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not return non-void non-top values
+void test() {
+  return /*@compile-error=unspecified*/ 3;
+}
diff --git a/tests/language/void/return_void_sync_error1_test.dart b/tests/language/void/return_void_sync_error1_test.dart
new file mode 100644
index 0000000..4d212c9
--- /dev/null
+++ b/tests/language/void/return_void_sync_error1_test.dart
@@ -0,0 +1,13 @@
+// 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.
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not return non-void Object values
+void test() {
+  Object a = 3;
+  return /*@compile-error=unspecified*/ a;
+}
diff --git a/tests/language/void/return_void_sync_error2_test.dart b/tests/language/void/return_void_sync_error2_test.dart
new file mode 100644
index 0000000..389aa15
--- /dev/null
+++ b/tests/language/void/return_void_sync_error2_test.dart
@@ -0,0 +1,14 @@
+// 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 'dart:async';
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not return FutureOr<void>
+void test() {
+  return /*@compile-error=unspecified*/ null as FutureOr<void>;
+}
diff --git a/tests/language/void/return_void_sync_test.dart b/tests/language/void/return_void_sync_test.dart
new file mode 100644
index 0000000..fa868fd
--- /dev/null
+++ b/tests/language/void/return_void_sync_test.dart
@@ -0,0 +1,35 @@
+// 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.
+
+void voidValue = null;
+
+void main() {
+  test0();
+  test1();
+  test2();
+  test3();
+}
+
+// Testing that a block bodied function may have an empty return
+void test0() {
+  return;
+}
+
+// Testing that a block bodied function may have no return
+void test1() {}
+
+// Testing that a block bodied function may return void
+void test2() {
+  return voidValue;
+}
+
+// Testing that a block bodied function may have both empty returns
+// and void returning paths
+void test3([bool? b]) {
+  if (b == null) {
+    return;
+  } else if (b) {
+    return voidValue;
+  }
+}
diff --git a/tests/language/void/void_arrow_return_test.dart b/tests/language/void/void_arrow_return_test.dart
new file mode 100644
index 0000000..17ab84c
--- /dev/null
+++ b/tests/language/void/void_arrow_return_test.dart
@@ -0,0 +1,13 @@
+// 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.
+
+// Testing that a void arrow function is allowed to return any type of value.
+
+void foo() => 42;
+void set bar(x) => 43;
+
+main() {
+  foo();
+  bar = 44;
+}
diff --git a/tests/language/void/void_block_return_test.dart b/tests/language/void/void_block_return_test.dart
new file mode 100644
index 0000000..8dd8bad
--- /dev/null
+++ b/tests/language/void/void_block_return_test.dart
@@ -0,0 +1,14 @@
+// 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.
+
+// Testing that a void block function is not allowed to `return e`
+// where `e` is non-void.
+
+void foo() {
+  return 42; //# 00: compile-time error
+}
+
+main() {
+  foo();
+}
diff --git a/tests/language/void/void_check_test.dart b/tests/language/void/void_check_test.dart
new file mode 100644
index 0000000..4b80f52
--- /dev/null
+++ b/tests/language/void/void_check_test.dart
@@ -0,0 +1,37 @@
+// 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.
+
+// Tests that `void` accepts any value and won't throw on non-`null` values.
+// The test is set up in a way that `--trust-type-annotations` and type
+// propagation must not assume that `void` is `null` either.
+
+import 'package:expect/expect.dart';
+
+class A {
+  void foo() {
+    return bar();
+  }
+
+  void bar() {}
+}
+
+class B extends A {
+  int bar() => 42;
+}
+
+// Makes the typing cleaner: the return type here is `dynamic` and we are
+// guaranteed that there won't be any warnings.
+// Dart2js can still infer the type by itself.
+@pragma('dart2js:noInline')
+dynamic callFoo(A a) => a.foo();
+
+main() {
+  var a = new A();
+  var b = new B();
+  // The following line is not throwing, even though `a.foo()` (inside
+  // `callFoo`) is supposedly `void`.
+  callFoo(b).abs();
+  Expect.isNull(callFoo(a));
+  Expect.equals(42, callFoo(b));
+}
diff --git a/tests/language/void/void_subtype_test.dart b/tests/language/void/void_subtype_test.dart
new file mode 100644
index 0000000..2ecdc33
--- /dev/null
+++ b/tests/language/void/void_subtype_test.dart
@@ -0,0 +1,61 @@
+// 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 for type checks involving the void type.
+
+import "package:expect/expect.dart";
+
+var _str = new StringBuffer();
+
+T run<T>(T f()) {
+  _str.write("+");
+  var t = f();
+  _str.write("-");
+  return t;
+}
+
+void writeV() {
+  _str.write("V");
+}
+
+main() {
+  {
+    var x = run<dynamic>(writeV);
+    Expect.equals('+V-', _str.toString());
+    Expect.equals(null, x);
+    _str.clear();
+
+    var y = run(writeV) as dynamic;
+    Expect.equals('+V-', _str.toString());
+    Expect.equals(null, y);
+    _str.clear();
+  }
+
+  // implicit cast
+  {
+    dynamic d = writeV;
+    var x = run<dynamic>(d);
+    Expect.equals('+V-', _str.toString());
+    Expect.equals(null, x);
+    _str.clear();
+
+    var y = run(d);
+    Expect.equals('+V-', _str.toString());
+    Expect.equals(null, y);
+    _str.clear();
+  }
+
+  // dynamic dispatch
+  {
+    dynamic d = run;
+    var x = d<dynamic>(writeV);
+    Expect.equals('+V-', _str.toString());
+    Expect.equals(null, x);
+    _str.clear();
+
+    var y = d(writeV);
+    Expect.equals('+V-', _str.toString());
+    Expect.equals(null, y);
+    _str.clear();
+  }
+}
diff --git a/tests/language/void/void_type_callbacks_test.dart b/tests/language/void/void_type_callbacks_test.dart
new file mode 100644
index 0000000..bf51a39
--- /dev/null
+++ b/tests/language/void/void_type_callbacks_test.dart
@@ -0,0 +1,41 @@
+// 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.
+
+// Dart test for type checks involving callbacks and the type void.
+
+import 'package:expect/expect.dart';
+
+class A<T> {
+  T x;
+
+  A(this.x);
+
+  foo(T x) {}
+
+  T bar(T f()) {
+    T tmp = f();
+    return tmp;
+  }
+
+  gee(T f()) {
+    x = bar(f);
+  }
+
+  Object? xAsObject() => x;
+}
+
+void voidFun() => 499;
+int intFun() => 42;
+
+main() {
+  A<void> a = new A<void>(null);
+  a.foo(a.x);
+  a.bar(voidFun);
+  Expect.equals(null, a.xAsObject());
+  a.x = a.bar(voidFun);
+  a.gee(voidFun);
+  Expect.equals(499, a.xAsObject());
+  a.gee(intFun);
+  Expect.equals(42, a.xAsObject());
+}
diff --git a/tests/language/void/void_type_function_types_test.dart b/tests/language/void/void_type_function_types_test.dart
new file mode 100644
index 0000000..db4f880
--- /dev/null
+++ b/tests/language/void/void_type_function_types_test.dart
@@ -0,0 +1,108 @@
+// 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.
+
+// Dart test for type checks involving the void type in function types.
+
+import 'package:expect/expect.dart';
+
+typedef F = void Function(Object?);
+typedef F2 = void Function([Object?]);
+typedef F3 = void Function({Object? x});
+
+typedef G = void Function(void);
+typedef G2 = void Function([void]);
+typedef G3 = void Function({void x});
+
+typedef H = int Function(void);
+typedef H2 = int Function([void]);
+typedef H3 = int Function({void x});
+
+void f(Object? x) {}
+void f2([Object? x]) {}
+void f3({Object? x}) {}
+
+void g(void x) {}
+void g2([void x]) {}
+void g3({void x}) {}
+
+int h(void x) => 499;
+int h2([void x]) => 499;
+int h3({void x}) => 499;
+
+void expectsF(F f) {}
+void expectsG(G g) {}
+void expectsH(H h) {}
+
+void expectsF2(F2 f) {}
+void expectsG2(G2 g) {}
+void expectsH2(H2 h) {}
+
+void expectsF3(F3 f) {}
+void expectsG3(G3 g) {}
+void expectsH3(H3 h) {}
+
+main() {
+  Expect.isTrue(f is F);
+  Expect.isTrue(f is G);
+  Expect.isFalse(f is H);
+  expectsF(f);
+  expectsG(f);
+  expectsH(f); //# 00: compile-time error
+
+  Expect.isTrue(f2 is F2);
+  Expect.isTrue(f2 is G2);
+  Expect.isFalse(f2 is H2);
+  expectsF2(f2);
+  expectsG2(f2);
+  expectsH2(f2); //# 01: compile-time error
+
+  Expect.isTrue(f3 is F3);
+  Expect.isTrue(f3 is G3);
+  Expect.isFalse(f3 is H3);
+  expectsF3(f3);
+  expectsG3(f3);
+  expectsH3(f3); //# 03: compile-time error
+
+  Expect.isTrue(g is F);
+  Expect.isTrue(g is G);
+  Expect.isFalse(g is H);
+  expectsF(g);
+  expectsG(g);
+  expectsH(g); //# 05: compile-time error
+
+  Expect.isTrue(g2 is F2);
+  Expect.isTrue(g2 is G2);
+  Expect.isFalse(g2 is H2);
+  expectsF2(g2);
+  expectsG2(g2);
+  expectsH2(g2); //# 07: compile-time error
+
+  Expect.isTrue(g3 is F3);
+  Expect.isTrue(g3 is G3);
+  Expect.isFalse(g3 is H3);
+  expectsF3(g3);
+  expectsG3(g3);
+  expectsH3(g3); //# 09: compile-time error
+
+  Expect.isTrue(h is F);
+  Expect.isTrue(h is G);
+  Expect.isTrue(h is H);
+  expectsF(h);
+  expectsG(h);
+  expectsH(h);
+
+  Expect.isTrue(h2 is F2);
+  Expect.isTrue(h2 is G2);
+  Expect.isTrue(h2 is H2);
+  expectsF2(h2);
+  expectsG2(h2);
+  expectsH2(h2);
+
+  Expect.isTrue(h3 is F3);
+  Expect.isTrue(h3 is G3);
+  Expect.isTrue(h3 is H3);
+  expectsF3(h3);
+  expectsG3(h3);
+  expectsH3(h3);
+}
diff --git a/tests/language/void/void_type_override_test.dart b/tests/language/void/void_type_override_test.dart
new file mode 100644
index 0000000..d4749ad
--- /dev/null
+++ b/tests/language/void/void_type_override_test.dart
@@ -0,0 +1,122 @@
+// 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.
+
+// Dart test for type checks involving the void type and overriding.
+
+import 'package:expect/expect.dart';
+
+use<T>(T x) {}
+
+class A<T> {
+  T x;
+  A(this.x);
+  Object? y;
+  int z = 0;
+
+  T foo() => x;
+  void bar() {}
+  void gee(T x) {}
+
+  f(A<Object?> a) {}
+  g(A<void> a) {}
+  h(A<T> a) {}
+}
+
+class B implements A<Object?> {
+  void   //# 00: ok
+  /*     //# 00: continued
+  var
+  */     //# 00: continued
+  x;
+
+  void   //# 00b: ok
+  /*     //# 00b: continued
+  var
+  */     //# 00b: continued
+  y;
+
+  void   //# 00c: compile-time error
+  /*     //# 00c: continued
+  int
+  */     //# 00c: continued
+  z = 0;
+
+  void  //# 01: ok
+  foo() {}
+
+  int bar() => 499;
+  void gee(void x) {}
+  f(A<void> a) {}
+  g(A<void> a) {}
+  h(A<void> a) {}
+}
+
+class C implements A<void> {
+  void x;
+  Object? y;
+  int z = 0;
+
+  void foo() {}
+  void bar() {}
+  void gee(void x) {
+    use(x);
+  }
+
+  f(covariant C c) {}
+  g(covariant C c) {}
+  h(covariant C c) {}
+}
+
+class D implements A<void> {
+  Object? x; // Setter will become a voidness preservation violation.
+  Object? y;
+  int z = 0;
+
+  Object? foo() => null;
+  void bar() {}
+  void gee(
+      Object? // Will become a voidness preservation violation.
+      x) {}
+
+  f(A<Object?> a) {}
+  g(
+      A<Object?> // Will become a voidness preservation violation.
+      a) {}
+  h(
+      A<Object?> // Will become a voidness preservation violation.
+      a) {}
+}
+
+void instantiateClasses() {
+  var a = new A<void>(null);
+  var b = new B();
+  var c = new C();
+  var d = new D();
+
+  a.foo();
+  b.foo();
+  c.foo();
+  d.foo();
+  a.bar();
+  b.bar();
+  c.bar();
+  d.bar();
+  a.gee(499);
+  b.gee(499);
+  c.gee(499);
+  d.gee(499);
+}
+
+void testAssignments() {
+  A<void> a1 = new A<Object?>(null);
+  A<Object?> a2 = new A<void>(null);
+  A a3 = new A<void>(null);
+  A<dynamic> a4 = new A<void>(null);
+  dynamic a5 = new A<void>(null);
+}
+
+main() {
+  instantiateClasses();
+  testAssignments();
+}
diff --git a/tests/language/void/void_type_test.dart b/tests/language/void/void_type_test.dart
new file mode 100644
index 0000000..c858989
--- /dev/null
+++ b/tests/language/void/void_type_test.dart
@@ -0,0 +1,66 @@
+// 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 for type checks involving the void type.
+
+import "package:expect/expect.dart";
+
+void f() {
+  return;
+}
+
+void f_null() {
+  return null;
+}
+
+void f_dyn_null() {
+  return null as dynamic;
+}
+
+void f_f() {
+  return f();
+}
+
+void test(int n, void func()) {
+  // Test as closure call.
+  {
+    bool got_type_error = false;
+    try {
+      func();
+    } on TypeError catch (error) {
+      got_type_error = true;
+    }
+    Expect.isFalse(got_type_error);
+  }
+  // Test as direct call.
+  {
+    bool got_type_error = false;
+    try {
+      var x;
+      switch (n) {
+        case 0:
+          x = f() as dynamic;
+          break;
+        case 1:
+          x = f_null() as dynamic;
+          break;
+        case 2:
+          x = f_dyn_null() as dynamic;
+          break;
+        case 3:
+          x = f_f() as dynamic;
+          break;
+      }
+    } on TypeError catch (error) {
+      got_type_error = true;
+    }
+    Expect.isFalse(got_type_error);
+  }
+}
+
+main() {
+  test(0, f);
+  test(1, f_null);
+  test(2, f_dyn_null);
+  test(3, f_f);
+}
diff --git a/tests/language/void/void_type_usage_test.dart b/tests/language/void/void_type_usage_test.dart
new file mode 100644
index 0000000..3be3627
--- /dev/null
+++ b/tests/language/void/void_type_usage_test.dart
@@ -0,0 +1,585 @@
+// 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.
+
+// Dart test for type checks on usage of expressions of type void.
+
+void use(dynamic x) { }
+void useAsVoid(void x) { }
+
+Object? testVoidParam(void x) {
+  x;  //# param_stmt: ok
+  true ? x : x;  //# param_conditional: ok
+  for (x; false; x) {}   //# param_for: ok
+  useAsVoid(x); //# param_argument_void: ok
+  use(x);   //# param_argument: compile-time error
+  use(x as Object?);  //# param_as: ok
+  void y = x;   //# param_void_init: ok
+  dynamic z = x;  //# param_dynamic_init: compile-time error
+  x is Object?;   //# param_is: compile-time error
+  throw x;   //# param_throw: compile-time error
+  <void>[x];   //# param_literal_void_list_init: ok
+  <Object?>[x];   //# param_literal_list_init: compile-time error
+  var m1 = <int, void>{4: x};   //# param_literal_map_value_init: ok
+  var m2 = <void, int>{x : 4};   //# param_literal_map_key_init: ok
+  var m3 = <dynamic, dynamic>{4: x};  //# param_literal_map_value_init2: compile-time error
+  var m4 = <dynamic, dynamic>{x : 4};  //# param_literal_map_key_init2: compile-time error
+  x ?? 499;  //# param_null_equals1: compile-time error
+  null ?? x;  //# param_null_equals2: ok
+  return x;   //# param_return: compile-time error
+  while (x) {};  //# param_while: compile-time error
+  do {} while (x);  //# param_do_while: compile-time error
+  for (var v in x) {}   //# param_for_in: compile-time error
+  for (x in [1, 2]) {}  //# param_for_in2: ok
+  x += 1;  //# param_plus_eq: compile-time error
+  x.toString();  //# param_toString: compile-time error
+  x?.toString();  //# param_null_dot: compile-time error
+  x..toString();  //# param_cascade: compile-time error
+  if (x) {}; //# param_conditional_stmt: compile-time error
+  !x; //# param_boolean_negation: compile-time error
+  x && true; //# param_boolean_and_left: compile-time error
+  true && x; //# param_boolean_and_right: compile-time error
+  x || true; //# param_boolean_or_left: compile-time error
+  true || x; //# param_boolean_or_right: compile-time error
+  x == 3; //# param_equals_left: compile-time error
+  3 == x; //# param_equals_right: compile-time error
+  identical(3, x); //# param_identical: compile-time error
+  3 + x; //# param_addition: compile-time error
+  3 * x; //# param_multiplication: compile-time error
+  -x; //# param_negation: compile-time error
+  x(3); //# param_use_as_function: compile-time error
+  "hello$x"; //# param_use_in_string_interpolation: compile-time error
+  x ??= 3; //# param_use_in_conditional_assignment_left: compile-time error
+  Object? xx;  xx ??= x; //# param_use_in_conditional_assignment_right: compile-time error
+  var ll = <int>[3]; ll[x]; //# param_use_in_list_subscript: compile-time error
+  var mm = <void, void>{}; mm[x]; //# param_use_in_map_lookup: compile-time error
+}
+
+testVoidAsync(void x) async {
+  await x; //# async_use_in_await: compile-time error
+}
+
+testVoidAsyncStar(void x) async* {
+  yield x; //# async_use_in_yield: compile-time error
+  yield* x; //# async_use_in_yield_star: compile-time error
+  await for (var i in x) {} //# async_use_in_await_for: compile-time error
+}
+
+testVoidSyncStar(void x) sync* {
+  yield x; //# sync_use_in_yield: compile-time error
+  yield* x; //# sync_use_in_yield_star: compile-time error
+}
+
+const void c = null;
+
+dynamic testVoidDefaultParameter([int y = c]) {} //# void_default_parameter_global: compile-time error
+
+dynamic testVoidDefaultParameterClosure() {
+  ([int y = c]) => 3;//# void_default_parameter_closure: compile-time error
+}
+
+dynamic testVoidParamDynamic(void x) {
+  return x;   //# param_return_dynamic: ok
+}
+
+Object? testVoidCall(void f()) {
+  f();  //# call_stmt: ok
+  true ? f() : f();  //# call_conditional: ok
+  for (f(); false; f()) {}   //# call_for: ok
+  useAsVoid(f()); //# call_argument_void: ok
+  use(f());   //# call_argument: compile-time error
+  use(f() as Object?);  //# call_as: ok
+  void y = f();   //# call_void_init: ok
+  dynamic z = f();  //# call_dynamic_init: compile-time error
+  f() is Object?;   //# call_is: compile-time error
+  throw f();   //# call_throw: compile-time error
+  <void>[f()];   //# call_literal_void_list_init: ok
+  <Object?>[f()];   //# call_literal_list_init: compile-time error
+  var m1 = <int, void>{4: f() };   //# call_literal_map_value_init: ok
+  var m2 = <void, int>{ f(): 4};   //# call_literal_map_key_init: ok
+  var m3 = <dynamic, dynamic>{4: f() };  //# call_literal_map_value_init2: compile-time error
+  var m4 = <dynamic, dynamic>{ f(): 4};  //# call_literal_map_key_init2: compile-time error
+  f() ?? 499;  //# call_null_equals1: compile-time error
+  null ?? f();  //# call_null_equals2: ok
+  return f();   //# call_return: compile-time error
+  while (f()) {};  //# call_while: compile-time error
+  do {} while (f());  //# call_do_while: compile-time error
+  for (var v in f()) {}   //# call_for_in: compile-time error
+  f().toString();  //# call_toString: compile-time error
+  f()?.toString();  //# call_null_dot: compile-time error
+  f()..toString();  //# call_cascade: compile-time error
+  if (f()) {}; //# call_conditional_stmt: compile-time error
+  !f(); //# call_boolean_negation: compile-time error
+  f() && true; //# call_boolean_and_left: compile-time error
+  true && f(); //# call_boolean_and_right: compile-time error
+  f() || true; //# call_boolean_or_left: compile-time error
+  true || f(); //# call_boolean_or_right: compile-time error
+  f() == 3; //# call_equals_left: compile-time error
+  3 == f(); //# call_equals_right: compile-time error
+  identical(3, f()); //# call_identical: compile-time error
+  3 + f(); //# call_addition: compile-time error
+  3 * f(); //# call_multiplication: compile-time error
+  -f(); //# call_negation: compile-time error
+  f()(3); //# call_use_as_function: compile-time error
+  "hello${f()}"; //# call_use_in_string_interpolation: compile-time error
+  f() ??= 3; //# call_use_in_conditional_assignment_left: compile-time error
+  Object? xx;  xx ??= f(); //# call_use_in_conditional_assignment_right: compile-time error
+  var ll = <int>[3]; ll[f()]; //# call_use_in_list_subscript: compile-time error
+  var mm = <void, void>{}; mm[f()]; //# call_use_in_map_lookup: compile-time error
+}
+
+dynamic testVoidCallDynamic(void f()) {
+  return f();   //# call_return: ok
+}
+
+Object? testVoidLocal() {
+  void x;
+  x = 42;   //# local_assign: ok
+  x;  //# local_stmt: ok
+  true ? x : x;  //# local_conditional: ok
+  for (x; false; x) {}   //# local_for: ok
+  useAsVoid(x); //# local_argument_void: ok
+  use(x);   //# local_argument: compile-time error
+  use(x as Object?);  //# local_as: ok
+  void y = x;   //# local_void_init: ok
+  dynamic z = x;  //# local_dynamic_init: compile-time error
+  x is Object?;   //# local_is: compile-time error
+  throw x;   //# local_throw: compile-time error
+  <void>[x];   //# local_literal_void_list_init: ok
+  <Object?>[x];   //# local_literal_list_init: compile-time error
+  var m1 = <int, void>{4: x};   //# local_literal_map_value_init: ok
+  var m2 = <void, int>{x : 4};   //# local_literal_map_key_init: ok
+  var m3 = <dynamic, dynamic>{4: x};  //# local_literal_map_value_init2: compile-time error
+  var m4 = <dynamic, dynamic>{x : 4};  //# local_literal_map_key_init2: compile-time error
+  x ?? 499;  //# local_null_equals1: compile-time error
+  null ?? x;  //# local_null_equals2: ok
+  return x;   //# local_return: compile-time error
+  while (x) {};  //# local_while: compile-time error
+  do {} while (x);  //# local_do_while: compile-time error
+  for (var v in x) {}   //# local_for_in: compile-time error
+  for (x in [1, 2]) {}  //# local_for_in2: ok
+  x += 1;  //# local_plus_eq: compile-time error
+  x.toString();  //# local_toString: compile-time error
+  x?.toString();  //# local_null_dot: compile-time error
+  x..toString();  //# local_cascade: compile-time error
+   if (x) {}; //# local_conditional_stmt: compile-time error
+  !x; //# local_boolean_negation: compile-time error
+  x && true; //# local_boolean_and_left: compile-time error
+  true && x; //# local_boolean_and_right: compile-time error
+  x || true; //# local_boolean_or_left: compile-time error
+  true || x; //# local_boolean_or_right: compile-time error
+  x == 3; //# local_equals_left: compile-time error
+  3 == x; //# local_equals_right: compile-time error
+  identical(3, x); //# local_identical: compile-time error
+  3 + x; //# local_addition: compile-time error
+  3 * x; //# local_multiplication: compile-time error
+  -x; //# local_negation: compile-time error
+  x(3); //# local_use_as_function: compile-time error
+  "hello$x"; //# local_use_in_string_interpolation: compile-time error
+  x ??= 3; //# local_use_in_conditional_assignment_left: compile-time error
+  Object? xx;  xx ??= x; //# local_use_in_conditional_assignment_right: compile-time error
+  var ll = <int>[3]; ll[x]; //# local_use_in_list_subscript: compile-time error
+  var mm = <void, void>{}; mm[x]; //# local_use_in_map_lookup: compile-time error
+}
+
+dynamic testVoidLocalDynamic() {
+  void x;
+  return x;   //# local_return_dynamic: ok
+}
+
+Object? testVoidFinalLocal() {
+  final void x = null;
+  x = 42;   //# final_local_assign: compile-time error
+  x;  //# final_local_stmt: ok
+  true ? x : x;  //# final_local_conditional: ok
+  for (x; false; x) {}   //# final_local_for: ok
+  useAsVoid(x); //# final_local_argument_void: ok
+  use(x);   //# final_local_argument: compile-time error
+  use(x as Object?);  //# final_local_as: ok
+  void y = x;   //# final_local_void_init: ok
+  dynamic z = x;  //# final_local_dynamic_init: compile-time error
+  x is Object?;   //# final_local_is: compile-time error
+  throw x;   //# final_local_throw: compile-time error
+  <void>[x];   //# final_local_literal_void_list_init: ok
+  <Object?>[x];   //# final_local_literal_list_init: compile-time error
+  var m1 = <int, void>{4: x};   //# final_local_literal_map_value_init: ok
+  var m2 = <void, int>{x : 4};   //# final_local_literal_map_key_init: ok
+  var m3 = <dynamic, dynamic>{4: x};  //# final_local_literal_map_value_init2: compile-time error
+  var m4 = <dynamic, dynamic>{x : 4};  //# final_local_literal_map_key_init2: compile-time error
+  x ?? 499;  //# final_local_null_equals1: compile-time error
+  null ?? x;  //# final_local_null_equals2: ok
+  return x;   //# final_local_return: compile-time error
+  while (x) {};  //# final_local_while: compile-time error
+  do {} while (x);  //# final_local_do_while: compile-time error
+  for (var v in x) {}   //# final_local_for_in: compile-time error
+  for (x in [1, 2]) {}  //# final_local_for_in2: compile-time error
+  x += 1;  //# final_local_plus_eq: compile-time error
+  x.toString();  //# final_local_toString: compile-time error
+  x?.toString();  //# final_local_null_dot: compile-time error
+  x..toString();  //# final_local_cascade: compile-time error
+   if (x) {}; //# final_local_conditional_stmt: compile-time error
+  !x; //# final_local_boolean_negation: compile-time error
+  x && true; //# final_local_boolean_and_left: compile-time error
+  true && x; //# final_local_boolean_and_right: compile-time error
+  x || true; //# final_local_boolean_or_left: compile-time error
+  true || x; //# final_local_boolean_or_right: compile-time error
+  x == 3; //# final_local_equals_left: compile-time error
+  3 == x; //# final_local_equals_right: compile-time error
+  identical(3, x); //# final_local_identical: compile-time error
+  3 + x; //# final_local_addition: compile-time error
+  3 * x; //# final_local_multiplication: compile-time error
+  -x; //# final_local_negation: compile-time error
+  x(3); //# final_local_use_as_function: compile-time error
+  "hello$x"; //# final_local_use_in_string_interpolation: compile-time error
+  x ??= 3; //# final_local_use_in_conditional_assignment_left: compile-time error
+  Object? xx;  xx ??= x; //# final_local_use_in_conditional_assignment_right: compile-time error
+  var ll = <int>[3]; ll[x]; //# final_local_use_in_list_subscript: compile-time error
+  var mm = <void, void>{}; mm[x]; //# final_local_use_in_map_lookup: compile-time error
+}
+
+dynamic testVoidFinalLocalDynamic() {
+  final void x = null;
+  return x;   //# final_local_return_dynamic: ok
+}
+
+void global;
+Object? testVoidGlobal() {
+  global;  //# global_stmt: ok
+  true ? global : global;  //# global_conditional: ok
+  for (global; false; global) {}   //# global_for: ok
+  useAsVoid(global); //# global_argument_void: ok
+  use(global);   //# global_argument: compile-time error
+  use(global as Object?);  //# global_as: ok
+  void y = global;   //# global_void_init: ok
+  dynamic z = global;  //# global_dynamic_init: compile-time error
+  global is Object?;   //# global_is: compile-time error
+  throw global;   //# global_throw: compile-time error
+  <void>[global];   //# global_literal_void_list_init: ok
+  <Object?>[global];   //# global_literal_list_init: compile-time error
+  var m1 = <int, void>{4: global };   //# global_literal_map_value_init: ok
+  var m2 = <void, int>{ global: 4};   //# global_literal_map_key_init: ok
+  var m3 = <dynamic, dynamic>{4: global };  //# global_literal_map_value_init2: compile-time error
+  var m4 = <dynamic, dynamic>{ global: 4};  //# global_literal_map_key_init2: compile-time error
+  null ?? global;  //# global_null_equals1: ok
+  global ?? 499;  //# global_null_equals2: compile-time error
+  return global;   //# global_return: compile-time error
+  while (global) {};  //# global_while: compile-time error
+  do {} while (global);  //# global_do_while: compile-time error
+  for (var v in global) {}   //# global_for_in: compile-time error
+  for (global in [1, 2]) {}  //# global_for_in2: ok
+  global += 1;  //# global_plus_eq: compile-time error
+  global.toString();  //# global_toString: compile-time error
+  global?.toString();  //# global_null_dot: compile-time error
+  global..toString();  //# global_cascade: compile-time error
+  if (global) {}; //# global_conditional_stmt: compile-time error
+  !global; //# global_boolean_negation: compile-time error
+  global && true; //# global_boolean_and_left: compile-time error
+  true && global; //# global_boolean_and_right: compile-time error
+  global || true; //# global_boolean_or_left: compile-time error
+  true || global; //# global_boolean_or_right: compile-time error
+  global == 3; //# global_equals_left: compile-time error
+  3 == global; //# global_equals_right: compile-time error
+  identical(3, global); //# global_identical: compile-time error
+  3 + global; //# global_addition: compile-time error
+  3 * global; //# global_multiplication: compile-time error
+  -global; //# global_negation: compile-time error
+  global(3); //# global_use_as_function: compile-time error
+  "hello$global"; //# global_use_in_string_interpolation: compile-time error
+  global ??= 3; //# global_use_in_conditional_assignment_left: compile-time error
+  Object? xx;  xx ??= global; //# global_use_in_conditional_assignment_right: compile-time error
+  var ll = <int>[3]; ll[global]; //# global_use_in_list_subscript: compile-time error
+  var mm = <void, void>{}; mm[global]; //# global_use_in_map_lookup: compile-time error
+}
+
+dynamic testVoidGlobalDynamic() {
+  return global;   //# global_return_dynamic: ok
+}
+
+Object? testVoidConditional() {
+  void x;
+  (true ? x : x);   //# conditional_parens: ok
+  true ? x : x;  //# conditional_stmt: ok
+  true ? true ? x : x : true ? x : x;  //# conditional_conditional: ok
+  for (true ? x : x; false; true ? x : x) {}   //# conditional_for: ok
+  useAsVoid(true ? x : x); //# conditional_argument_void: ok
+  use(true ? x : x);   //# conditional_argument: compile-time error
+  void y = true ? x : x;   //# conditional_void_init: ok
+  dynamic z = true ? x : x;  //# conditional_dynamic_init: compile-time error
+  throw true ? x : x;   //# conditional_throw: compile-time error
+  <void>[true ? x : x];   //# conditional_literal_void_list_init: ok
+  <Object?>[true ? x : x];   //# conditional_literal_list_init: compile-time error
+  var m1 = <int, void>{4: true ? x : x};   //# conditional_literal_map_value_init: ok
+  var m3 = <dynamic, dynamic>{4: true ? x : x};  //# conditional_literal_map_value_init2: compile-time error
+  (true ? x : x) ?? null;  //# conditional_null_equals1: compile-time error
+  null ?? (true ? x : x);  //# conditional_null_equals2: ok
+  return true ? x : x;   //# conditional_return: compile-time error
+  while (true ? x : x) {};  //# conditional_while: compile-time error
+  do {} while (true ? x : x);  //# conditional_do_while: compile-time error
+  for (var v in true ? x : x) {}   //# conditional_for_in: compile-time error
+
+  (true ? 499 : x);   //# conditional2_parens: ok
+  true ? 499 : x;  //# conditional2_stmt: ok
+  true ? true ? 499 : x : true ? 499 : x;  //# conditional2_conditional: ok
+  for (true ? 499 : x; false; true ? 499 : x) {}   //# conditional2_for: ok
+  useAsVoid(true ? 499 : x); //# conditional2_argument_void: ok
+  use(true ? 499 : x);   //# conditional2_argument: compile-time error
+  void y2 = true ? 499 : x;   //# conditional2_void_init: ok
+  dynamic z2 = true ? 499 : x;  //# conditional2_dynamic_init: compile-time error
+  throw true ? 499 : x;   //# conditional2_throw: compile-time error
+  <void>[true ? 499 : x];   //# conditional2_literal_void_list_init: ok
+  <Object?>[true ? 499 : x];   //# conditional2_literal_list_init: compile-time error
+  var m12 = <int, void>{4: true ? 499 : x};   //# conditional2_literal_map_value_init: ok
+  var m32 = <dynamic, dynamic>{4: true ? 499 : x};  //# conditional2_literal_map_value_init2: compile-time error
+  (true ? 499 : x) ?? null;  //# conditional2_null_equals1: compile-time error
+  null ?? (true ? 499 : x);  //# conditional2_null_equals2: ok
+  return true ? 499 : x;   //# conditional2_return: compile-time error
+  while (true ? 499 : x) {};  //# conditional2while: compile-time error
+  do {} while (true ? 499 : x);  //# conditional2do_while: compile-time error
+  for (var v in true ? 499 : x) {}   //# conditional2for_in: compile-time error
+
+  (true ? x : 499);   //# conditional3_parens: ok
+  true ? x : 499;  //# conditional3_stmt: ok
+  true ? true ? x : 499 : true ? x : 499;  //# conditional3_conditional: ok
+  for (true ? x : 499; false; true ? x : 499) {}   //# conditional3_for: ok
+  useAsVoid(true ? x : 499); //# conditional3_argument_void: ok
+  use(true ? x : 499);   //# conditional3_argument: compile-time error
+  void y3 = true ? x : 499;   //# conditional3_void_init: ok
+  dynamic z3 = true ? x : 499;  //# conditional3_dynamic_init: compile-time error
+  throw true ? x : 499;   //# conditional3_throw: compile-time error
+  <void>[true ? x : 499];   //# conditional3_literal_void_list_init: ok
+  <Object?>[true ? x : 499];   //# conditional3_literal_list_init: compile-time error
+  var m13 = <int, void>{4: true ? x : 499 };   //# conditional3_literal_map_value_init: ok
+  var m33 = <dynamic, dynamic>{4: true ? x : 499 };  //# conditional3_literal_map_value_init2: compile-time error
+  (true ? x : 499) ?? null;  //# conditional3_null_equals1: compile-time error
+  null ?? (true ? x : 499);  //# conditional3_null_equals2: ok
+  return true ? x : 499;   //# conditional3_return: compile-time error
+  while (true ? x : 499) {};  //# conditional_while: compile-time error
+  do {} while (true ? x : 499);  //# conditional_do_while: compile-time error
+  for (var v in true ? x : 499) {}   //# conditional_for_in: compile-time error
+}
+
+dynamic testVoidConditionalDynamic() {
+  void x;
+  return true ? x : x;   //# conditional_return_dynamic: ok
+  return true ? 499 : x;   //# conditional2_return_dynamic: ok
+  return true ? x : 499;   //# conditional3_return_dynamic: ok
+}
+
+class A<T> {
+  T x;
+  A(this.x);
+  void foo() {}
+}
+
+class B implements A<void> {
+  void x;
+
+  int foo() => 499;
+
+  void forInTest() {
+    for (x in <void>[]) {}  //# instance2_for_in2: ok
+    for (x in [1, 2]) {}  //# instance2_for_in3: ok
+  }
+}
+
+class C implements A<void> {
+  void get x => null;
+  set x(void y) {}
+
+  void foo() {}
+
+  void forInTest() {
+    for (x in <void>[]) {}  //# instance3_for_in2: ok
+    for (x in [1, 2]) {}  //# instance3_for_in3: ok
+  }
+}
+
+Object? testInstanceField() {
+  A<void> a = new A<void>(null);
+  a.x = 499;  //# field_assign: ok
+  a.x;  //# instance_stmt: ok
+  true ? a.x : a.x;  //# instance_conditional: ok
+  for (a.x; false; a.x) {}   //# instance_for: ok
+  useAsVoid(a.x); //# instance_argument_void: ok
+  use(a.x);   //# instance_argument: compile-time error
+  use(a.x as Object?);  //# instance_as: ok
+  void y = a.x;   //# instance_void_init: ok
+  dynamic z = a.x;  //# instance_dynamic_init: compile-time error
+  a.x is Object?;   //# instance_is: compile-time error
+  throw a.x;   //# instance_throw: compile-time error
+  <void>[a.x];   //# instance_literal_void_list_init: ok
+  <Object?>[a.x];   //# instance_literal_list_init: compile-time error
+  var m1 = <int, void>{4: a.x};   //# instance_literal_map_value_init: ok
+  var m2 = <void, int>{ a.x : 4};   //# instance_literal_map_key_init: ok
+  var m3 = <dynamic, dynamic>{4: a.x};  //# instance_literal_map_value_init2: compile-time error
+  var m4 = <dynamic, dynamic>{ a.x : 4};  //# instance_literal_map_key_init2: compile-time error
+  null ?? a.x;  //# instance_null_equals1: ok
+  a.x ?? 499;  //# instance_null_equals2: compile-time error
+  return a.x;   //# instance_return: compile-time error
+  while (a.x) {};  //# instance_while: compile-time error
+  do {} while (a.x);  //# instance_do_while: compile-time error
+  for (var v in a.x) {}   //# instance_for_in: compile-time error
+  a.x += 1;  //# instance_plus_eq: compile-time error
+  a.x.toString();  //# instance_toString: compile-time error
+  a.x?.toString();  //# instance_null_dot: compile-time error
+  a.x..toString();  //# instance_cascade: compile-time error
+
+  B b = new B();
+  b.x = 42;   //# field_assign2: ok
+  b.x;  //# instance2_stmt: ok
+  true ? b.x : b.x;  //# instance2_conditional: ok
+  for (b.x; false; b.x) {}   //# instance2_for: ok
+  useAsVoid(b.x); //# instance2_argument_void: ok
+  use(b.x);   //# instance2_argument: compile-time error
+  use(b.x as Object?);  //# instance2_as: ok
+  void y2 = b.x;   //# instance2_void_init: ok
+  dynamic z2 = b.x;  //# instance2_dynamic_init: compile-time error
+  b.x is Object?;   //# instance2_is: compile-time error
+  throw b.x;   //# instance2_throw: compile-time error
+  <void>[b.x];   //# instance2_literal_void_list_init: ok
+  <Object?>[b.x];   //# instance2_literal_list_init: compile-time error
+  var m12 = <int, void>{4: b.x};   //# instance2_literal_map_value_init: ok
+  var m22 = <void, int>{ b.x : 4};   //# instance2_literal_map_key_init: ok
+  var m32 = <dynamic, dynamic>{4: b.x};  //# instance2_literal_map_value_init2: compile-time error
+  var m42 = <dynamic, dynamic>{ b.x : 4};  //# instance2_literal_map_key_init2: compile-time error
+  null ?? b.x;  //# instance2_null_equals1: ok
+  b.x ?? 499;  //# instance2_null_equals2: compile-time error
+  return b.x;   //# instance2_return: compile-time error
+  while (b.x) {};  //# instance2_while: compile-time error
+  do {} while (b.x);  //# instance2_do_while: compile-time error
+  for (var v in b.x) {}   //# instance2_for_in: compile-time error
+  b.forInTest();
+  b.x += 1;  //# instance2_plus_eq: compile-time error
+  b.x.toString();  //# instance2_toString: compile-time error
+  b.x?.toString();  //# instance2_null_dot: compile-time error
+  b.x..toString();  //# instance2_cascade: compile-time error
+
+  C c = new C();
+  c.x = 32;   //# setter_assign: ok
+  c.x;  //# instance3_stmt: ok
+  true ? c.x : c.x;  //# instance3_conditional: ok
+  for (c.x; false; c.x) {}   //# instance3_for: ok
+  useAsVoid(c.x); //# instance3_argument_void: ok
+  use(c.x);   //# instance3_argument: compile-time error
+  use(c.x as Object?);  //# instance3_as: ok
+  void y3 = c.x;   //# instance3_void_init: ok
+  dynamic z3 = c.x;  //# instance3_dynamic_init: compile-time error
+  c.x is Object?;   //# instance3_is: compile-time error
+  throw c.x;   //# instance3_throw: compile-time error
+  <void>[c.x];   //# instance3_literal_void_list_init: ok
+  <Object?>[c.x];   //# instance3_literal_list_init: compile-time error
+  var m13 = <int, void>{4: c.x};   //# instance3_literal_map_value_init: ok
+  var m23 = <void, int>{ c.x : 4};   //# instance3_literal_map_key_init: ok
+  var m33 = <dynamic, dynamic>{4: c.x};  //# instance3_literal_map_value_init2: compile-time error
+  var m43 = <dynamic, dynamic>{ c.x : 4};  //# instance3_literal_map_key_init2: compile-time error
+  null ?? c.x;  //# instance3_null_equals1: ok
+  c.x ?? 499;  //# instance3_null_equals2: compile-time error
+  return c.x;   //# instance3_return: compile-time error
+  while (c.x) {};  //# instance3_while: compile-time error
+  do {} while (c.x);  //# instance3_do_while: compile-time error
+  for (var v in c.x) {}   //# instance3_for_in: compile-time error
+  c.forInTest();
+  c.x += 1;  //# instance3_plus_eq: compile-time error
+  c.x.toString();  //# instance3_toString: compile-time error
+  c.x?.toString();  //# instance3_null_dot: compile-time error
+  c.x..toString();  //# instance3_cascade: compile-time error
+}
+
+dynamic testInstanceFieldDynamic() {
+  A<void> a = new A<void>(null);
+  return a.x;   //# instance_return_dynamic: ok
+
+  B b = new B();
+  return b.x;   //# instance2_return_dynamic: ok
+
+  C c = new C();
+  return c.x;   //# instance3_return_dynamic: ok
+}
+
+Object? testParenthesized() {
+  void x;
+  (x);  //# paren_stmt: ok
+  true ? (x) : (x);  //# paren_conditional: ok
+  for ((x); false; (x)) {}   //# paren_for: ok
+  useAsVoid((x)); //# paren_argument_void: ok
+  use((x));   //# paren_argument: compile-time error
+  use((x) as Object?);  //# paren_as: ok
+  void y = (x);   //# paren_void_init: ok
+  dynamic z = (x);  //# paren_dynamic_init: compile-time error
+  (x) is Object?;   //# paren_is: compile-time error
+  throw (x);   //# paren_throw: compile-time error
+  <void>[(x)];   //# paren_literal_void_list_init: ok
+  <Object?>[(x)];   //# paren_literal_list_init: compile-time error
+  var m1 = <int, void>{4: (x) };   //# paren_literal_map_value_init: ok
+  var m2 = <void, int>{ (x): 4};   //# paren_literal_map_key_init: ok
+  var m3 = <dynamic, dynamic>{4: (x) };  //# paren_literal_map_value_init2: compile-time error
+  var m4 = <dynamic, dynamic>{ (x): 4};  //# paren_literal_map_key_init2: compile-time error
+  (x) ?? 499;  //# paren_null_equals1: compile-time error
+  null ?? (x);  //# paren_null_equals2: ok
+  return (x);   //# paren_return: compile-time error
+  while ((x)) {};  //# paren_while: compile-time error
+  do {} while ((x));  //# paren_do_while: compile-time error
+  for (var v in (x)) {}   //# paren_for_in: compile-time error
+  (x).toString();  //# paren_toString: compile-time error
+  (x)?.toString();  //# paren_null_dot: compile-time error
+  (x)..toString();  //# paren_cascade: compile-time error
+   if ((x)) {}; //# paren_conditional_stmt: compile-time error
+  !(x); //# paren_boolean_negation: compile-time error
+  (x) && true; //# paren_boolean_and_left: compile-time error
+  true && (x); //# paren_boolean_and_right: compile-time error
+  (x) || true; //# paren_boolean_or_left: compile-time error
+  true || (x); //# paren_boolean_or_right: compile-time error
+  (x) == 3; //# paren_equals_left: compile-time error
+  3 == (x); //# paren_equals_right: compile-time error
+  identical(3, (x)); //# paren_identical: compile-time error
+  3 + (x); //# paren_addition: compile-time error
+  3 * (x); //# paren_multiplication: compile-time error
+  -(x); //# paren_negation: compile-time error
+  (x)(3); //# paren_use_as_function: compile-time error
+  "hello${(x)}"; //# paren_use_in_string_interpolation: compile-time error
+  (x) ??= 3; //# paren_use_in_conditional_assignment_left: compile-time error
+  Object? xx;  xx ??= (x); //# paren_use_in_conditional_assignment_right: compile-time error
+  var ll = <int>[3]; ll[(x)]; //# paren_use_in_list_subscript: compile-time error
+  var mm = <void, void>{}; mm[(x)]; //# paren_use_in_map_lookup: compile-time error
+}
+
+dynamic testParenthesizedDynamic() {
+  void x;
+  return (x);   //# paren_return_dynamic: ok
+}
+
+void testReturnToVoid(void x, void f()) {
+  void y;
+  final void z = null;
+  A<void> a = new A<void>(null);
+  B b = new B();
+  C c = new C();
+  return x;   //# param_return_to_void: ok
+  return f();   //# call_return_to_void: ok
+  return y;   //# local_return_to_void: ok
+  return z;   //# final_local_return_to_void: ok
+  return global;   //# global_return_to_void: ok
+  return true ? x : x;   //# conditional_return_to_void: ok
+  return true ? 499 : x;   //# conditional2_return_to_void: ok
+  return true ? x : 499;   //# conditional3_return_to_void: ok
+  return a.x;   //# instance_return_to_void: ok
+  return b.x;   //# instance2_return_to_void: ok
+  return c.x;   //# instance3_return_to_void: ok
+  return (x);   //# paren_return_to_void: ok
+}
+
+main() {
+  try {
+    testVoidParam(499);
+    testVoidCall(() {});
+    testVoidLocal();
+    testVoidFinalLocal();
+    testVoidConditional();
+    testInstanceField();
+    testParenthesized();
+    testReturnToVoid(499, () {});
+  } catch (e) {
+    // Silently eat all dynamic errors.
+    // This test is only testing static analysis.
+  }
+}
diff --git a/tests/language_2/async_star/yield_from_catch_test.dart b/tests/language_2/async_star/yield_from_catch_test.dart
new file mode 100644
index 0000000..0f08c1f
--- /dev/null
+++ b/tests/language_2/async_star/yield_from_catch_test.dart
@@ -0,0 +1,33 @@
+// 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.
+
+// Test for issue: https://github.com/dart-lang/sdk/issues/39994
+
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+Stream<String> testStream() async* {
+  try {
+    await testThrow();
+    yield "A";
+  } catch (e) {
+    yield "B";
+    yield "C";
+    yield "D";
+  }
+}
+
+testThrow() async {
+  throw Exception();
+}
+
+test() async {
+  var result = await testStream().toList();
+  Expect.listEquals(["B", "C", "D"], result);
+}
+
+main() {
+  asyncTest(test);
+}
diff --git a/tests/language_2/extension_methods/basic_static_extension_test.dart b/tests/language_2/extension_methods/basic_static_extension_test.dart
index 39bb377..b8c3c33 100644
--- a/tests/language_2/extension_methods/basic_static_extension_test.dart
+++ b/tests/language_2/extension_methods/basic_static_extension_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 import "package:expect/expect.dart";
 
 // Tests the syntax of extension methods, and that the extensions are
diff --git a/tests/language_2/extension_methods/static_extension_bounds_error_test.dart b/tests/language_2/extension_methods/static_extension_bounds_error_test.dart
index 67c9544..5e8ae34 100644
--- a/tests/language_2/extension_methods/static_extension_bounds_error_test.dart
+++ b/tests/language_2/extension_methods/static_extension_bounds_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests bounds checking for extension methods
 
 extension E1<T extends num> on T {
diff --git a/tests/language_2/extension_methods/static_extension_constant_error_test.dart b/tests/language_2/extension_methods/static_extension_constant_error_test.dart
index e7a0d0c..a1bca72 100644
--- a/tests/language_2/extension_methods/static_extension_constant_error_test.dart
+++ b/tests/language_2/extension_methods/static_extension_constant_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 import 'static_extension_constant_lib.dart';
 
 // Tests that it is an error to invoke an extension method during constant
diff --git a/tests/language_2/extension_methods/static_extension_constant_test.dart b/tests/language_2/extension_methods/static_extension_constant_test.dart
index 1295d4a..18fdad15 100644
--- a/tests/language_2/extension_methods/static_extension_constant_test.dart
+++ b/tests/language_2/extension_methods/static_extension_constant_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 import 'package:expect/expect.dart';
 import 'static_extension_constant_lib.dart' hide b, i, d, s;
 import 'static_extension_constant_lib.dart' as lib show b, i, d, s;
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 5cf5c20..1d4b4db 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
@@ -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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests interactions between getters and setters where there is a conflict.
 
 // Conflicting class declarations.
diff --git a/tests/language_2/extension_methods/static_extension_getter_setter_test.dart b/tests/language_2/extension_methods/static_extension_getter_setter_test.dart
index e112a87..fed3596 100644
--- a/tests/language_2/extension_methods/static_extension_getter_setter_test.dart
+++ b/tests/language_2/extension_methods/static_extension_getter_setter_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests getters and setters where one or both is defined
 // by an extension.
 
diff --git a/tests/language_2/extension_methods/static_extension_inference_test.dart b/tests/language_2/extension_methods/static_extension_inference_test.dart
index 81c90cf..03d11d5 100644
--- a/tests/language_2/extension_methods/static_extension_inference_test.dart
+++ b/tests/language_2/extension_methods/static_extension_inference_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests extension method resolution type inference.
 
 import "package:expect/expect.dart";
diff --git a/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_error_test.dart b/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_error_test.dart
index 5c5c1c7..c7ce72e 100644
--- a/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_error_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 ///////////////////////////////////////////////////////////////////////
 // The following tests check that setters or getters in an extension
 // correctly shadow members with the same basename in the surrounding
diff --git a/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_test.dart b/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_test.dart
index 519451a..2e31d19 100644
--- a/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 import "package:expect/expect.dart";
 
 ///////////////////////////////////////////////////////////////////////
diff --git a/tests/language_2/extension_methods/static_extension_internal_name_conflict_error_test.dart b/tests/language_2/extension_methods/static_extension_internal_name_conflict_error_test.dart
index a284784..ae6d6fe 100644
--- a/tests/language_2/extension_methods/static_extension_internal_name_conflict_error_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_name_conflict_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests that errors are given for internal name conflicts in extension methods.
 
 // It is an error to have duplicate type parameter names.
diff --git a/tests/language_2/extension_methods/static_extension_internal_resolution_0_test.dart b/tests/language_2/extension_methods/static_extension_internal_resolution_0_test.dart
index 418ba2b..49433ea 100644
--- a/tests/language_2/extension_methods/static_extension_internal_resolution_0_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_resolution_0_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test an extension MyExt with no members against:
diff --git a/tests/language_2/extension_methods/static_extension_internal_resolution_1_test.dart b/tests/language_2/extension_methods/static_extension_internal_resolution_1_test.dart
index 052ab86..29f080f 100644
--- a/tests/language_2/extension_methods/static_extension_internal_resolution_1_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_resolution_1_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test an extension MyExt with no members against:
diff --git a/tests/language_2/extension_methods/static_extension_internal_resolution_2_test.dart b/tests/language_2/extension_methods/static_extension_internal_resolution_2_test.dart
index 861bb4b..88e5ed7 100644
--- a/tests/language_2/extension_methods/static_extension_internal_resolution_2_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_resolution_2_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test an extension MyExt with members whose names overlap with names from the
diff --git a/tests/language_2/extension_methods/static_extension_internal_resolution_3_error_test.dart b/tests/language_2/extension_methods/static_extension_internal_resolution_3_error_test.dart
index b0409f9..0e71bb2 100644
--- a/tests/language_2/extension_methods/static_extension_internal_resolution_3_error_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_resolution_3_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test the error cases for an extension MyExt with member names
diff --git a/tests/language_2/extension_methods/static_extension_internal_resolution_3_test.dart b/tests/language_2/extension_methods/static_extension_internal_resolution_3_test.dart
index f6c57e9..4ef0021 100644
--- a/tests/language_2/extension_methods/static_extension_internal_resolution_3_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_resolution_3_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test the non error cases for an extension MyExt with member names
diff --git a/tests/language_2/extension_methods/static_extension_internal_resolution_4_error_test.dart b/tests/language_2/extension_methods/static_extension_internal_resolution_4_error_test.dart
index 6cd8d4b..d1a4685 100644
--- a/tests/language_2/extension_methods/static_extension_internal_resolution_4_error_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_resolution_4_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test the error cases for an extension MyExt with member names
diff --git a/tests/language_2/extension_methods/static_extension_internal_resolution_4_test.dart b/tests/language_2/extension_methods/static_extension_internal_resolution_4_test.dart
index 93955cb..590a359 100644
--- a/tests/language_2/extension_methods/static_extension_internal_resolution_4_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_resolution_4_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test the non error cases for an extension MyExt with member names
diff --git a/tests/language_2/extension_methods/static_extension_internal_resolution_5_test.dart b/tests/language_2/extension_methods/static_extension_internal_resolution_5_test.dart
index 0334769..114959d 100644
--- a/tests/language_2/extension_methods/static_extension_internal_resolution_5_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_resolution_5_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test the non error cases for an extension MyExt with member names
diff --git a/tests/language_2/extension_methods/static_extension_internal_resolution_6_error_test.dart b/tests/language_2/extension_methods/static_extension_internal_resolution_6_error_test.dart
index 258feaa..38191b8 100644
--- a/tests/language_2/extension_methods/static_extension_internal_resolution_6_error_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_resolution_6_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test various static error corner cases around internal resolution.
diff --git a/tests/language_2/extension_methods/static_extension_internal_resolution_6_test.dart b/tests/language_2/extension_methods/static_extension_internal_resolution_6_test.dart
index f8dd416..2e41798 100644
--- a/tests/language_2/extension_methods/static_extension_internal_resolution_6_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_resolution_6_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests resolution of identifiers inside of extension methods
 
 // Test various non-error corner cases around internal resolution.
diff --git a/tests/language_2/extension_methods/static_extension_operators_test.dart b/tests/language_2/extension_methods/static_extension_operators_test.dart
index 6f902c8..e72f7b9 100644
--- a/tests/language_2/extension_methods/static_extension_operators_test.dart
+++ b/tests/language_2/extension_methods/static_extension_operators_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 import "package:expect/expect.dart";
 
 // Tests that static extensions can be used for all operators.
diff --git a/tests/language_2/extension_methods/static_extension_resolution_failures_test.dart b/tests/language_2/extension_methods/static_extension_resolution_failures_test.dart
index f68d72b..2856a18 100644
--- a/tests/language_2/extension_methods/static_extension_resolution_failures_test.dart
+++ b/tests/language_2/extension_methods/static_extension_resolution_failures_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests extension method resolution failures.
 
 import "package:expect/expect.dart";
diff --git a/tests/language_2/extension_methods/static_extension_resolution_test.dart b/tests/language_2/extension_methods/static_extension_resolution_test.dart
index 42bddbc..c29e658 100644
--- a/tests/language_2/extension_methods/static_extension_resolution_test.dart
+++ b/tests/language_2/extension_methods/static_extension_resolution_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 import "package:expect/expect.dart";
 
 // Tests the resolution of multiple applicable extensions.
diff --git a/tests/language_2/extension_methods/static_extension_setter_getter_assignability_error_test.dart b/tests/language_2/extension_methods/static_extension_setter_getter_assignability_error_test.dart
index 1b0a81b..8784f92 100644
--- a/tests/language_2/extension_methods/static_extension_setter_getter_assignability_error_test.dart
+++ b/tests/language_2/extension_methods/static_extension_setter_getter_assignability_error_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // It is an error to have a setter and a getter in an extension where
 // the return type of the getter is not assignable to the argument type
 // of the setter.
diff --git a/tests/language_2/extension_methods/static_extension_silly_types_test.dart b/tests/language_2/extension_methods/static_extension_silly_types_test.dart
index 6f69e79..bcb4e01 100644
--- a/tests/language_2/extension_methods/static_extension_silly_types_test.dart
+++ b/tests/language_2/extension_methods/static_extension_silly_types_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests extension methods on the non-function, non-class types.
 
 import "dart:async" show FutureOr;
diff --git a/tests/language_2/extension_methods/static_extension_syntax_test.dart b/tests/language_2/extension_methods/static_extension_syntax_test.dart
index 0d71b60..c400a88 100644
--- a/tests/language_2/extension_methods/static_extension_syntax_test.dart
+++ b/tests/language_2/extension_methods/static_extension_syntax_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 // Tests extension declaration syntax combinations.
 
 import "package:expect/expect.dart";
diff --git a/tests/language_2/extension_methods/syntax/extension_methods_test.dart b/tests/language_2/extension_methods/syntax/extension_methods_test.dart
index 51013db..079b344 100644
--- a/tests/language_2/extension_methods/syntax/extension_methods_test.dart
+++ b/tests/language_2/extension_methods/syntax/extension_methods_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.
 
-// SharedOptions=--enable-experiment=extension-methods
-
 import 'package:expect/expect.dart';
 
 class C {
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index a8603f8..5789be1 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -14,6 +14,9 @@
 [ $compiler == fasta ]
 number/web_int_literals_test/*: SkipByDesign # Test applies only to JavaScript targets
 
+[ ($hot_reload || $hot_reload_rollback) && $mode == debug ]
+regress/regress41983_test: Pass, Slow
+
 [ $fasta ]
 nnbd/*: Skip
 superinterface_variance/abstract_class_error_test/27: Crash # Issue dart-lang/language#113
diff --git a/tests/language_2/least_upper_bound/runtime_12_test.dart b/tests/language_2/least_upper_bound/runtime_12_test.dart
index 08c0855..67d2199 100644
--- a/tests/language_2/least_upper_bound/runtime_12_test.dart
+++ b/tests/language_2/least_upper_bound/runtime_12_test.dart
@@ -7,6 +7,9 @@
 
 // Test least upper bound through type checking of conditionals.
 
+// [NNBD non-migrated]: This test relies on implicit downcasts, so isn't
+// meaningful under NNBD.
+
 class A {
   var a;
 }
diff --git a/tests/language_2/least_upper_bound/runtime_13_test.dart b/tests/language_2/least_upper_bound/runtime_13_test.dart
index 493a68a..28c2cba 100644
--- a/tests/language_2/least_upper_bound/runtime_13_test.dart
+++ b/tests/language_2/least_upper_bound/runtime_13_test.dart
@@ -7,6 +7,9 @@
 
 // Test least upper bound through type checking of conditionals.
 
+// [NNBD non-migrated]: This test relies on implicit downcasts, so isn't
+// meaningful under NNBD.
+
 class A {
   var a;
 }
diff --git a/tests/language_2/least_upper_bound/runtime_17_test.dart b/tests/language_2/least_upper_bound/runtime_17_test.dart
index 3d88356..acaa1c5 100644
--- a/tests/language_2/least_upper_bound/runtime_17_test.dart
+++ b/tests/language_2/least_upper_bound/runtime_17_test.dart
@@ -7,6 +7,9 @@
 
 // Test least upper bound through type checking of conditionals.
 
+// [NNBD non-migrated]: This test relies on implicit downcasts, so isn't
+// meaningful under NNBD.
+
 class A {
   var a;
 }
diff --git a/tests/language_2/least_upper_bound/runtime_1_test.dart b/tests/language_2/least_upper_bound/runtime_1_test.dart
index 22311fe..c0dd626 100644
--- a/tests/language_2/least_upper_bound/runtime_1_test.dart
+++ b/tests/language_2/least_upper_bound/runtime_1_test.dart
@@ -7,6 +7,9 @@
 
 // Test least upper bound through type checking of conditionals.
 
+// [NNBD non-migrated]: This test relies on implicit downcasts, so isn't
+// meaningful under NNBD.
+
 class A {
   var a;
 }
diff --git a/tests/language_2/least_upper_bound/runtime_21_test.dart b/tests/language_2/least_upper_bound/runtime_21_test.dart
index c302432..6da9f5d 100644
--- a/tests/language_2/least_upper_bound/runtime_21_test.dart
+++ b/tests/language_2/least_upper_bound/runtime_21_test.dart
@@ -7,6 +7,9 @@
 
 // Test least upper bound through type checking of conditionals.
 
+// [NNBD non-migrated]: This test relies on implicit downcasts, so isn't
+// meaningful under NNBD.
+
 class A {
   var a;
 }
diff --git a/tests/language_2/least_upper_bound/runtime_2_test.dart b/tests/language_2/least_upper_bound/runtime_2_test.dart
index 8ccd6df..78e9ff6 100644
--- a/tests/language_2/least_upper_bound/runtime_2_test.dart
+++ b/tests/language_2/least_upper_bound/runtime_2_test.dart
@@ -7,6 +7,9 @@
 
 // Test least upper bound through type checking of conditionals.
 
+// [NNBD non-migrated]: This test relies on implicit downcasts, so isn't
+// meaningful under NNBD.
+
 class A {
   var a;
 }
diff --git a/tests/language_2/least_upper_bound/runtime_6_test.dart b/tests/language_2/least_upper_bound/runtime_6_test.dart
index 0d580d7..8bd31ee 100644
--- a/tests/language_2/least_upper_bound/runtime_6_test.dart
+++ b/tests/language_2/least_upper_bound/runtime_6_test.dart
@@ -7,6 +7,9 @@
 
 // Test least upper bound through type checking of conditionals.
 
+// [NNBD non-migrated]: This test relies on implicit downcasts, so isn't
+// meaningful under NNBD.
+
 class A {
   var a;
 }
diff --git a/tests/language_2/library/env_test.dart b/tests/language_2/library/env_test.dart
index b21805d..17a5e59 100644
--- a/tests/language_2/library/env_test.dart
+++ b/tests/language_2/library/env_test.dart
@@ -58,7 +58,7 @@
   hasIoSupport = false; //# has_no_io_support: ok
 
   if (hasIoSupport != null) {
-    // Dartium overrides 'dart.library.io' to return "false".
+    // Web platforms override 'dart.library.io' to return "false".
     // We don't test for the non-existence, but just make sure that
     // dart.library.io is not set to true.
     Expect.equals(hasIoSupport,
diff --git a/tests/language_2/void/await_void_test.dart b/tests/language_2/void/await_void_test.dart
index 314e732..764d41e 100644
--- a/tests/language_2/void/await_void_test.dart
+++ b/tests/language_2/void/await_void_test.dart
@@ -2,6 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// [NNBD non-migrated] This test has no NNBD equivalent.
+// In NNBD, you are not allowed to await `void` and the corresponding test
+// is await_void_error_test.dart
+
 // Test that it is not an error to await an expression of type `void`.
 
 import "dart:async";
diff --git a/tests/language_2/void/return_future_future_or_void_async_error1_test.dart b/tests/language_2/void/return_future_future_or_void_async_error1_test.dart
index ed75e7b..29f6293 100644
--- a/tests/language_2/void/return_future_future_or_void_async_error1_test.dart
+++ b/tests/language_2/void/return_future_future_or_void_async_error1_test.dart
@@ -10,5 +10,5 @@
 
 // Testing that a block bodied async function may not have an empty return
 Future<FutureOr<void>> test() async {
-  return; //# none: static type warning
+  return; //# none: compile-time error
 }
diff --git a/tests/language_2/void/return_future_or_future_or_void_sync_error2_test.dart b/tests/language_2/void/return_future_or_future_or_void_sync_error2_test.dart
index 36421f5..e6878fd 100644
--- a/tests/language_2/void/return_future_or_future_or_void_sync_error2_test.dart
+++ b/tests/language_2/void/return_future_or_future_or_void_sync_error2_test.dart
@@ -10,5 +10,5 @@
 
 // Testing that a block bodied function may have an empty return
 FutureOr<FutureOr<void>> test() {
-  return; //# none: static type warning
+  return; //# none: compile-time error
 }
diff --git a/tests/language_2/void/return_future_or_void_sync_error4_test.dart b/tests/language_2/void/return_future_or_void_sync_error4_test.dart
index 53d3b0c..bd020aa 100644
--- a/tests/language_2/void/return_future_or_void_sync_error4_test.dart
+++ b/tests/language_2/void/return_future_or_void_sync_error4_test.dart
@@ -10,5 +10,5 @@
 
 // Testing that a block bodied function may not have an empty return
 FutureOr<void> test() {
-  return; //# none: static type warning
+  return; //# none: compile-time error
 }
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index e005a49..6e52e77 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -35,6 +35,8 @@
 
 [ $csp ]
 isolate/deferred_in_isolate2_test: Skip # Issue 16898. Deferred loading does not work from an isolate in CSP-mode
+js/instanceof_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
+js/parameters_test: SkipByDesign # Issue 42085.
 
 [ $runtime == chrome && $system == linux ]
 mirrors/native_class_test: Slow, Pass
diff --git a/tests/lib_2/lib_2.status b/tests/lib_2/lib_2.status
index c21cc4c..5a05b95 100644
--- a/tests/lib_2/lib_2.status
+++ b/tests/lib_2/lib_2.status
@@ -35,6 +35,8 @@
 
 [ $csp ]
 isolate/deferred_in_isolate2_test: Skip # Issue 16898. Deferred loading does not work from an isolate in CSP-mode
+js/instanceof_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
+js/parameters_test: SkipByDesign # Issue 42085.
 
 [ $runtime == chrome && $system == linux ]
 mirrors/native_class_test: Slow, Pass
diff --git a/third_party/mdn/browser-compat-data/README.google b/third_party/mdn/browser-compat-data/README.google
new file mode 100644
index 0000000..ba7c993
--- /dev/null
+++ b/third_party/mdn/browser-compat-data/README.google
@@ -0,0 +1,11 @@
+Name: mdn-browser-compat-data
+Short Name: mdn-browser-compat-data
+URL: https://github.com/mdn/browser-compat-data
+Version: 1.0.22
+Date: May 26th 2020
+License: Creative Commons Zero v1.0 Universal
+
+Description:
+This repository contains compatibility data for Web technologies. The files were
+fetched from: https://github.com/mdn/browser-compat-data/tree/v1.0.22 on
+May 26th 2020.
diff --git a/tools/VERSION b/tools/VERSION
index 9898fae..eda72ea 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -33,7 +33,7 @@
 MAJOR 2
 MINOR 9
 PATCH 0
-PRERELEASE 13
+PRERELEASE 14
 PRERELEASE_PATCH 0
 ABI_VERSION 34
 OLDEST_SUPPORTED_ABI_VERSION 34
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index a5a6b0b..2baab41 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -845,7 +845,8 @@
         "enable-asserts": true,
 	"vm-options": [
           "--no-null-safety"
-        ]
+        ],
+        "builder-tag": "vm_nnbd"
       }
     },
     "dartkp-weak-asserts-win-(debug|product|release)-x64": {
@@ -860,7 +861,8 @@
         "use-elf": true,
 	"vm-options": [
           "--no-null-safety"
-        ]
+        ],
+        "builder-tag": "vm_nnbd"
       }
     },
     "dartk-weak-asserts-(linux|mac|win)-(debug|product|release)-x64": {
@@ -871,7 +873,8 @@
         "enable-asserts": true,
 	"vm-options": [
           "--no-null-safety"
-        ]
+        ],
+        "builder-tag": "vm_nnbd"
       }
     },
     "dartk-strong-(linux|mac|win)-(debug|product|release)-x64": {
@@ -881,7 +884,8 @@
         ],
         "vm-options": [
           "--null-safety"
-        ]
+        ],
+        "builder-tag": "vm_nnbd"
       }
     },
     "dartkp-strong-(linux|mac)-(debug|product|release)-x64": {
@@ -894,7 +898,8 @@
         ],
         "vm-options": [
           "--null-safety"
-        ]
+        ],
+        "builder-tag": "vm_nnbd"
       }
     },
     "dartkp-strong-win-(debug|product|release)-x64": {
@@ -908,7 +913,8 @@
         ],
         "vm-options": [
           "--null-safety"
-        ]
+        ],
+        "builder-tag": "vm_nnbd"
       }
     },
     "dartk-(linux|mac|win)-(debug|product|release)-(ia32|simarm|simarm64|x64)-ast": {
@@ -1466,7 +1472,8 @@
             "ffi",
             "language",
             "lib",
-            "standalone/io"
+            "standalone/io",
+            "vm"
           ]
         },
         {
@@ -1477,7 +1484,8 @@
             "ffi",
             "language",
             "lib",
-            "standalone/io"
+            "standalone/io",
+            "vm"
           ]
         }
       ]
@@ -1841,7 +1849,8 @@
             "language",
             "lib",
             "co19",
-            "standalone/io"
+            "standalone/io",
+            "vm"
           ]
         },
         {
@@ -1853,7 +1862,8 @@
             "language",
             "lib",
             "co19",
-            "standalone/io"
+            "standalone/io",
+            "vm"
           ]
         }
       ]
@@ -2442,7 +2452,7 @@
           "arguments": [
             "-ndart2js-hostasserts-linux-ia32-d8",
             "--dart2js-batch",
-            "dart2js_extra",
+            "dart2js_2",
             "dart2js_native"
           ]
         }
@@ -2472,8 +2482,8 @@
             "--dart2js-batch",
             "language_2",
             "corelib_2",
-            "dart2js_native",
-            "dart2js_extra"
+            "dart2js_2",
+            "dart2js_native"
           ],
           "shards": 6,
           "fileset": "dart2js_hostasserts_prennbd"
@@ -2548,7 +2558,7 @@
             "-ndart2js-${system}-${runtime}",
             "--dart2js-batch",
             "--reset-browser-configuration",
-            "dart2js_extra",
+            "dart2js_2",
             "dart2js_native"
           ]
         }
@@ -2600,7 +2610,7 @@
           "arguments": [
             "-ndart2js-minified-linux-d8",
             "--dart2js-batch",
-            "dart2js_extra",
+            "dart2js_2",
             "dart2js_native"
           ]
         },
@@ -2619,7 +2629,7 @@
           "arguments": [
             "-ndart2js-production-linux-d8",
             "--dart2js-batch",
-            "dart2js_extra",
+            "dart2js_2",
             "dart2js_native"
           ]
         }
@@ -2674,7 +2684,7 @@
           "arguments": [
             "-ndart2js-minified-csp-linux-chrome",
             "--dart2js-batch",
-            "dart2js_extra",
+            "dart2js_2",
             "dart2js_native"
           ]
         }
@@ -2713,7 +2723,7 @@
             "--dart2js-batch",
             "language",
             "corelib",
-            "dart2js_extra",
+            "dart2js_2",
             "dart2js_native",
             "kernel"
           ],
@@ -2747,7 +2757,7 @@
             "--dart2js-batch",
             "language",
             "corelib",
-            "dart2js_extra",
+            "dart2js_2",
             "dart2js_native",
             "kernel"
           ],
@@ -2778,7 +2788,7 @@
           "name": "dart2js nnbd unit tests",
           "arguments": [
             "-nunittest-weak-asserts-no-sdk-linux",
-            "dart2js",
+            "dart2js_2",
             "pkg//compiler/"
           ]
         }
diff --git a/tools/copy_dart.py b/tools/copy_dart.py
index 059b85b..dbb7ecf 100755
--- a/tools/copy_dart.py
+++ b/tools/copy_dart.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python2.7
 # 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.
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index 227b2d5..7288f5b4 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -80,10 +80,6 @@
 current-version: 2.9
 
 features:
-  extension-methods:
-    help: "Extension Methods"
-    enabledIn: '2.6.0'
-
   non-nullable:
     help: "Non Nullable by default"
 
@@ -101,6 +97,10 @@
 # on the command line, and will eventually be removed.
 #
 
+  extension-methods:
+    help: "Extension Methods"
+    enabledIn: '2.6.0'
+
   constant-update-2018:
     help: "Enhanced constant expressions"
     enabledIn: '2.4.1'
diff --git a/tools/migration/bin/test.dart b/tools/migration/bin/test.dart
index 9c7aba5..561b100 100644
--- a/tools/migration/bin/test.dart
+++ b/tools/migration/bin/test.dart
@@ -36,10 +36,13 @@
   "vm": "dartk-weak-asserts-linux-release-x64",
 };
 
+final _failurePattern = RegExp(r"FAILED: [a-z0-9_-]+ [a-z0-9_-]+ (.*)");
+
 void main(List<String> arguments) async {
   var testDir = "";
   var isLegacy = false;
   var isStrong = true;
+  var compare = false;
   var compiler = "ddc";
 
   var argParser = ArgParser();
@@ -54,9 +57,16 @@
       allowed: ["analyzer", "cfe", "dart2js", "ddc", "vm"],
       callback: (option) => compiler = option as String);
 
-  argParser.addFlag("weak", abbr: "w",
+  argParser.addFlag("weak",
+      abbr: "w",
       help: "Run the tests in weak mode.",
-      negatable: false, callback: (flag) => isStrong = !flag);
+      negatable: false,
+      callback: (flag) => isStrong = !flag);
+
+  argParser.addFlag("compare",
+      help: "Compare legacy and migrated results.",
+      negatable: false,
+      callback: (flag) => compare = flag);
 
   if (arguments.contains("--help")) {
     showUsage(argParser);
@@ -78,6 +88,69 @@
     showUsage(argParser, exception.message);
   }
 
+  if (compare) {
+    var legacyFailures =
+        await runTests(compiler, testDir, isLegacy: true, isStrong: isStrong);
+    var nnbdFailures =
+        await runTests(compiler, testDir, isLegacy: false, isStrong: isStrong);
+
+    var legacyFailureSet = legacyFailures.map(toNnbdPath).toSet();
+    var nnbdFailureSet = nnbdFailures.toSet();
+
+    showFailures(legacyFailures, "Legacy");
+    showFailures(nnbdFailures, "NNBD");
+
+    var hasFailures = false;
+    if (showDifferences("Legacy-only", legacyFailureSet, nnbdFailureSet)) {
+      hasFailures = true;
+    }
+    if (showDifferences("NNBD-only", nnbdFailureSet, legacyFailureSet)) {
+      hasFailures = true;
+    }
+
+    if (!hasFailures) {
+      if (legacyFailures.isEmpty && nnbdFailures.isEmpty) {
+        print("No test failures!");
+      } else {
+        print("Same failures in legacy and NNBD.");
+      }
+    }
+  } else {
+    var failures = await runTests(compiler, testDir,
+        isLegacy: isLegacy, isStrong: isStrong);
+    showFailures(failures);
+  }
+}
+
+bool showDifferences(String label, Set<String> from, Set<String> to) {
+  var difference = from.difference(to);
+  if (difference.isNotEmpty) {
+    showFailures(difference, label);
+  }
+
+  return difference.isNotEmpty;
+}
+
+void showFailures(Iterable<String> failures, [String label]) {
+  if (failures.isEmpty) return;
+
+  print("");
+  if (label != null) print("$label failures:");
+  failures.forEach(print);
+}
+
+void showUsage(ArgParser argParser, [String error]) {
+  if (error != null) {
+    print(error);
+    print("");
+  }
+  print("Usage: dart test.dart <source dir>");
+  print(argParser.usage);
+  exit(error == null ? 0 : 1);
+}
+
+Future<List<String>> runTests(String compiler, String testDir,
+    {bool isLegacy, bool isStrong}) async {
   if (!isLegacy) testDir = toNnbdPath(testDir);
 
   // DDC doesn't have a Mac bot so when running DDC tests on a Mac, use a manual
@@ -106,15 +179,12 @@
   }
 
   print("Running tools/test.py ${testArgs.join(' ')}");
-  await runProcessAsync("tools/test.py", testArgs);
-}
-
-void showUsage(ArgParser argParser, [String error]) {
-  if (error != null) {
-    print(error);
-    print("");
+  var lines = await runProcessAsync("tools/test.py", testArgs);
+  var failures = <String>[];
+  for (var line in lines) {
+    var match = _failurePattern.firstMatch(line);
+    if (match != null) failures.add(match[1]);
   }
-  print("Usage: dart test.dart <source dir>");
-  print(argParser.usage);
-  exit(error == null ? 0 : 1);
+
+  return failures;
 }
diff --git a/tools/migration/lib/src/io.dart b/tools/migration/lib/src/io.dart
index b64c378..26da687 100644
--- a/tools/migration/lib/src/io.dart
+++ b/tools/migration/lib/src/io.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:async';
+import 'dart:convert';
 import 'dart:io';
 
 import 'package:path/path.dart' as p;
@@ -114,18 +116,32 @@
   return result.exitCode == 0;
 }
 
-Future<bool> runProcessAsync(String executable, List<String> arguments,
+Future<List<String>> runProcessAsync(String executable, List<String> arguments,
     {String workingDirectory}) async {
   if (dryRun) {
     print("Dry run: run $executable ${arguments.join(' ')}");
-    return true;
+    return [];
   }
 
   var process = await Process.start(executable, arguments);
-  process.stdout.listen(stdout.add);
+
+  // Print stdout as it comes in, but also gather up the lines.
+  var lines = <String>[];
+  var controller = StreamController<List<int>>();
+  controller.stream
+      .transform(utf8.decoder)
+      .transform(const LineSplitter())
+      .listen(lines.add);
+
+  process.stdout.listen((bytes) {
+    controller.add(bytes);
+    stdout.add(bytes);
+  });
+
   process.stderr.listen(stderr.add);
 
-  return (await process.exitCode) == 0;
+  await process.exitCode;
+  return lines;
 }
 
 /// Returns a list of the paths to all files within [dir], which is
diff --git a/utils/dartanalyzer/BUILD.gn b/utils/dartanalyzer/BUILD.gn
index ad34236..59e462f 100644
--- a/utils/dartanalyzer/BUILD.gn
+++ b/utils/dartanalyzer/BUILD.gn
@@ -46,13 +46,13 @@
   outputs = [ output ]
   if (!dont_use_nnbd) {
     args = [
-      "build-non-nullable",
+      "build",
       rebase_path(output),
       rebase_path("../../sdk_nnbd"),
     ]
   } else {
     args = [
-      "build-legacy",
+      "build",
       rebase_path(output),
       rebase_path("../../sdk"),
     ]
diff --git a/utils/dartdevc/BUILD.gn b/utils/dartdevc/BUILD.gn
index d1a1fb4..d5c4f0e 100644
--- a/utils/dartdevc/BUILD.gn
+++ b/utils/dartdevc/BUILD.gn
@@ -146,11 +146,13 @@
     ":dartdevc_sound_sdk",
     ":dartdevc_test_kernel_pkg",
     "../..:create_sdk",
-
-    # TODO(nshahan) Temporarily here until we decide if we are going to include
-    # in the create_sdk target.
-    "../../sdk_nnbd:copy_dev_compiler_outline_sound",
   ]
+
+  # TODO(nshahan) Temporarily here until we decide if we are going to include
+  # in the create_sdk target.
+  if (!dont_use_nnbd) {
+    deps += [ "../../sdk_nnbd:copy_dev_compiler_outline_sound" ]
+  }
 }
 
 # Builds everything needed to run dartdevc tests locally using test.dart without