Version 2.11.0-252.0.dev

Merge commit '520fd2059aaa23145ba16a029fb318e7dce4a3ae' into 'dev'
diff --git a/benchmarks/EventLoopLatencyJson/dart/latency.dart b/benchmarks/EventLoopLatencyJson/dart/latency.dart
index c368802..5da9f4e 100644
--- a/benchmarks/EventLoopLatencyJson/dart/latency.dart
+++ b/benchmarks/EventLoopLatencyJson/dart/latency.dart
@@ -83,13 +83,13 @@
       this.maxRss);
 
   void report(String name) {
-    print('$name.Min(RunTime): $minLatency ms.');
-    print('$name.Avg(RunTime): $avgLatency ms.');
-    print('$name.Percentile50(RunTime): $percentile50th ms.');
-    print('$name.Percentile90(RunTime): $percentile90th ms.');
-    print('$name.Percentile95(RunTime): $percentile95th ms.');
-    print('$name.Percentile99(RunTime): $percentile99th ms.');
-    print('$name.Max(RunTime): $maxLatency ms.');
+    print('$name.Min(RunTimeRaw): $minLatency ms.');
+    print('$name.Avg(RunTimeRaw): $avgLatency ms.');
+    print('$name.Percentile50(RunTimeRaw): $percentile50th ms.');
+    print('$name.Percentile90(RunTimeRaw): $percentile90th ms.');
+    print('$name.Percentile95(RunTimeRaw): $percentile95th ms.');
+    print('$name.Percentile99(RunTimeRaw): $percentile99th ms.');
+    print('$name.Max(RunTimeRaw): $maxLatency ms.');
     print('$name.MaxRss(MemoryUse): $maxRss');
   }
 }
diff --git a/benchmarks/EventLoopLatencyJson/dart2/latency.dart b/benchmarks/EventLoopLatencyJson/dart2/latency.dart
index cfec940..44ecae6 100644
--- a/benchmarks/EventLoopLatencyJson/dart2/latency.dart
+++ b/benchmarks/EventLoopLatencyJson/dart2/latency.dart
@@ -85,13 +85,13 @@
       this.maxRss);
 
   void report(String name) {
-    print('$name.Min(RunTime): $minLatency ms.');
-    print('$name.Avg(RunTime): $avgLatency ms.');
-    print('$name.Percentile50(RunTime): $percentile50th ms.');
-    print('$name.Percentile90(RunTime): $percentile90th ms.');
-    print('$name.Percentile95(RunTime): $percentile95th ms.');
-    print('$name.Percentile99(RunTime): $percentile99th ms.');
-    print('$name.Max(RunTime): $maxLatency ms.');
+    print('$name.Min(RunTimeRaw): $minLatency ms.');
+    print('$name.Avg(RunTimeRaw): $avgLatency ms.');
+    print('$name.Percentile50(RunTimeRaw): $percentile50th ms.');
+    print('$name.Percentile90(RunTimeRaw): $percentile90th ms.');
+    print('$name.Percentile95(RunTimeRaw): $percentile95th ms.');
+    print('$name.Percentile99(RunTimeRaw): $percentile99th ms.');
+    print('$name.Max(RunTimeRaw): $maxLatency ms.');
     print('$name.MaxRss(MemoryUse): $maxRss');
   }
 }
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index c288f21..d701947 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -491,15 +491,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeBytecodeLimitExceededTooManyArguments =
-    messageBytecodeLimitExceededTooManyArguments;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageBytecodeLimitExceededTooManyArguments =
-    const MessageCode("BytecodeLimitExceededTooManyArguments",
-        message: r"""Dart bytecode limit exceeded: too many arguments.""");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeCandidateFound = messageCandidateFound;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3744,9 +3735,6 @@
   --omit-platform
     Exclude the platform from the serialized dill file.
 
-  --bytecode
-    Generate bytecode. Supported only for SDK platform compilation.
-
   --exclude-source
     Do not include source code in the dill file.
 
@@ -8626,7 +8614,7 @@
             _names)> templateStrongModeNNBDPackageOptOut = const Template<
         Message Function(List<String> _names)>(
     messageTemplate:
-        r"""Cannot run with sound null safety as one or more dependencies do not
+        r"""This project cannot run with sound null safety, because one or more project dependencies do not
 support null safety:
 
 #names
@@ -8649,7 +8637,7 @@
   String names = itemizeNames(_names);
   return new Message(codeStrongModeNNBDPackageOptOut,
       message:
-          """Cannot run with sound null safety as one or more dependencies do not
+          """This project cannot run with sound null safety, because one or more project dependencies do not
 support null safety:
 
 ${names}
diff --git a/pkg/compiler/lib/src/diagnostics/messages.dart b/pkg/compiler/lib/src/diagnostics/messages.dart
index 0271281..2efebfa 100644
--- a/pkg/compiler/lib/src/diagnostics/messages.dart
+++ b/pkg/compiler/lib/src/diagnostics/messages.dart
@@ -76,7 +76,6 @@
   JS_INTEROP_CLASS_CANNOT_EXTEND_DART_CLASS,
   JS_INTEROP_FIELD_NOT_SUPPORTED,
   JS_INTEROP_NON_EXTERNAL_MEMBER,
-  JS_INTEROP_METHOD_WITH_NAMED_ARGUMENTS,
   JS_OBJECT_LITERAL_CONSTRUCTOR_WITH_POSITIONAL_ARGUMENTS,
   JS_PLACEHOLDER_CAPTURE,
   LIBRARY_NOT_FOUND,
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_test.dart
index f1b9e63..49a1d1c 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_test.dart
@@ -338,6 +338,7 @@
 
   group('Expression compiler tests in static function:', () {
     const source = '''
+      // @dart = 2.9
       int foo(int x, {int y}) {
         int z = 0;
         /* evaluation placeholder */
@@ -1362,6 +1363,7 @@
 
   group('Expression compiler tests in constructor:', () {
     const source = '''
+      // @dart = 2.9
       extension NumberParsing on String {
         int parseInt() {
           return int.parse(this);
@@ -1618,6 +1620,7 @@
 
   group('Expression compiler tests in loops:', () {
     const source = r'''
+      // @dart = 2.9
       int globalFunction() {
         int x = 15;
         var c = C(1, 2);
@@ -1674,6 +1677,7 @@
 
   group('Expression compiler tests in conditional (then):', () {
     const source = r'''
+      // @dart = 2.9
       int globalFunction() {
         int x = 1;
         var c = C(1, 2);
@@ -1726,6 +1730,7 @@
 
   group('Expression compiler tests in conditional (else):', () {
     const source = r'''
+      // @dart = 2.9
       int globalFunction() {
         int x = 1;
         var c = C(1, 2);
@@ -1778,6 +1783,7 @@
 
   group('Expression compiler tests after conditionals:', () {
     const source = r'''
+      // @dart = 2.9
       int globalFunction() {
         int x = 1;
         var c = C(1, 2);
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 866ea26..4b517ca 100644
--- a/pkg/front_end/lib/src/api_prototype/compiler_options.dart
+++ b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
@@ -234,9 +234,6 @@
   /// diagnostic, but do not stop the compilation.
   int skipForDebugging = 0;
 
-  /// Whether to generate bytecode.
-  bool bytecode = false;
-
   /// Whether to write a file (e.g. a dill file) when reporting a crash.
   bool writeFileOnCrashReport = true;
 
@@ -343,7 +340,6 @@
       return false;
     }
     if (skipForDebugging != other.skipForDebugging) return false;
-    if (bytecode != other.bytecode) return false;
     if (writeFileOnCrashReport != other.writeFileOnCrashReport) return false;
     if (nnbdMode != other.nnbdMode) return false;
     if (currentSdkVersion != other.currentSdkVersion) return false;
diff --git a/pkg/front_end/lib/src/api_unstable/vm.dart b/pkg/front_end/lib/src/api_unstable/vm.dart
index 49d660d..e0970d7 100644
--- a/pkg/front_end/lib/src/api_unstable/vm.dart
+++ b/pkg/front_end/lib/src/api_unstable/vm.dart
@@ -43,7 +43,6 @@
 export '../fasta/fasta_codes.dart'
     show
         LocatedMessage,
-        messageBytecodeLimitExceededTooManyArguments,
         messageFfiExceptionalReturnNull,
         messageFfiExpectedConstant,
         noLength,
@@ -57,8 +56,7 @@
         templateFfiNotStatic,
         templateFfiStructGeneric,
         templateFfiTypeInvalid,
-        templateFfiTypeMismatch,
-        templateIllegalRecursiveType;
+        templateFfiTypeMismatch;
 
 export '../fasta/hybrid_file_system.dart' show HybridFileSystem;
 
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index 78bf4f4..b45bbcf 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -322,9 +322,6 @@
   /// effect.
   void clearFileSystemCache() => _fileSystem = null;
 
-  /// Whether to generate bytecode.
-  bool get bytecode => _raw.bytecode;
-
   /// Whether to write a file (e.g. a dill file) when reporting a crash.
   bool get writeFileOnCrashReport => _raw.writeFileOnCrashReport;
 
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
index 3e928df..902fdd1 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
@@ -1034,32 +1034,6 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
-    templateIllegalRecursiveType = const Template<
-            Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate: r"""Illegal recursive type '#type'.""",
-        withArguments: _withArgumentsIllegalRecursiveType);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(DartType _type, bool isNonNullableByDefault)>
-    codeIllegalRecursiveType =
-    const Code<Message Function(DartType _type, bool isNonNullableByDefault)>(
-  "IllegalRecursiveType",
-  templateIllegalRecursiveType,
-);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsIllegalRecursiveType(
-    DartType _type, bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  String type = typeParts.join();
-  return new Message(codeIllegalRecursiveType,
-      message: """Illegal recursive type '${type}'.""" + labeler.originMessages,
-      arguments: {'type': _type});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateImplicitCallOfNonMethod = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
         messageTemplate:
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 9428be9..a90e697 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1325,7 +1325,7 @@
 
 StrongModeNNBDPackageOptOut:
   template:  |
-    Cannot run with sound null safety as one or more dependencies do not
+    This project cannot run with sound null safety, because one or more project dependencies do not
     support null safety:
 
     #names
@@ -1747,9 +1747,6 @@
       --omit-platform
         Exclude the platform from the serialized dill file.
 
-      --bytecode
-        Generate bytecode. Supported only for SDK platform compilation.
-
       --exclude-source
         Do not include source code in the dill file.
 
@@ -4212,15 +4209,6 @@
       }
     }
 
-IllegalRecursiveType:
-  template: "Illegal recursive type '#type'."
-  script: >
-    class Base<T> {}
-    class Derived<T> extends Base<Derived<Derived<T>>> {}
-
-BytecodeLimitExceededTooManyArguments:
-  template: "Dart bytecode limit exceeded: too many arguments."
-
 CombinedMemberSignatureFailed:
   template: "Class '#name' inherits multiple members named '#name2' with incompatible signatures."
   tip: "Try adding a declaration of '#name2' to '#name'."
diff --git a/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart b/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart
index 5217ca9..f7b5496 100644
--- a/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart
@@ -386,6 +386,27 @@
     }
   }
 
+  void test_lower_bound_object() {
+    _initialize("");
+
+    testLower("Object", "FutureOr<Null>", "FutureOr<Never>");
+    testLower("FutureOr<Null>", "Object", "FutureOr<Never>");
+
+    // FutureOr<dynamic> is top.
+    testLower("Object", "FutureOr<dynamic>", "Object");
+    testLower("FutureOr<dynamic>", "Object", "Object");
+
+    // FutureOr<X> is not top and cannot be made non-nullable.
+    testLower("Object", "FutureOr<X>", "Never",
+        typeParameters: 'X extends dynamic');
+    testLower("FutureOr<X>", "Object", "Never",
+        typeParameters: 'X extends dynamic');
+
+    // FutureOr<void> is top.
+    testLower("Object", "FutureOr<void>", "Object");
+    testLower("FutureOr<void>", "Object", "Object");
+  }
+
   void test_lower_bound_function() {
     const String testSdk = """
       class A;
@@ -777,6 +798,13 @@
     testUpper("List<int?>", "List<double>", "List<num?>");
   }
 
+  void test_upper_bound_object() {
+    _initialize("");
+
+    testUpper("Object", "FutureOr<Function?>", "Object?");
+    testUpper("FutureOr<Function?>", "Object", "Object?");
+  }
+
   void test_upper_bound_function() {
     const String testSdk = """
       class A;
diff --git a/pkg/front_end/test/flutter_gallery_leak_tester.dart b/pkg/front_end/test/flutter_gallery_leak_tester.dart
index b0aacdb..033b59a 100644
--- a/pkg/front_end/test/flutter_gallery_leak_tester.dart
+++ b/pkg/front_end/test/flutter_gallery_leak_tester.dart
@@ -186,9 +186,6 @@
     "$rootPath/gallery/.packages",
     "-Ddart.vm.profile=false",
     "-Ddart.vm.product=false",
-    "--bytecode-options=source-positions,local-var-info,debugger-stops,"
-        "instance-field-initializers,keep-unreachable-code,"
-        "avoid-closure-call-instructions",
     "--enable-asserts",
     "--track-widget-creation",
     "--initialize-from-dill",
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.outline.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.outline.expect
index 0c8bca3..71ff088 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.outline.expect
@@ -1,7 +1,7 @@
 //
 // Problems in component:
 //
-// Error: Cannot run with sound null safety as one or more dependencies do not
+// Error: This project cannot run with sound null safety, because one or more project dependencies do not
 // support null safety:
 //
 //  - package:opt_in_package/opt_out_lib.dart
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.expect
index ce5b6e5..c889df0 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.expect
@@ -1,7 +1,7 @@
 //
 // Problems in component:
 //
-// Error: Cannot run with sound null safety as one or more dependencies do not
+// Error: This project cannot run with sound null safety, because one or more project dependencies do not
 // support null safety:
 //
 //  - package:opt_in_package/opt_out_lib.dart
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.transformed.expect
index ce5b6e5..c889df0 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.strong.transformed.expect
@@ -1,7 +1,7 @@
 //
 // Problems in component:
 //
-// Error: Cannot run with sound null safety as one or more dependencies do not
+// Error: This project cannot run with sound null safety, because one or more project dependencies do not
 // support null safety:
 //
 //  - package:opt_in_package/opt_out_lib.dart
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.outline.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.outline.expect
index 6d4bfe9..59a5039 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.outline.expect
@@ -8,7 +8,7 @@
 //
 // Problems in component:
 //
-// Error: Cannot run with sound null safety as one or more dependencies do not
+// Error: This project cannot run with sound null safety, because one or more project dependencies do not
 // support null safety:
 //
 //  - package:opt_out_package
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.expect
index 45dd453..d834f3b 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.expect
@@ -8,7 +8,7 @@
 //
 // Problems in component:
 //
-// Error: Cannot run with sound null safety as one or more dependencies do not
+// Error: This project cannot run with sound null safety, because one or more project dependencies do not
 // support null safety:
 //
 //  - package:opt_out_package
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.transformed.expect
index 0134870..95f7dc1 100644
--- a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.strong.transformed.expect
@@ -1,7 +1,7 @@
 //
 // Problems in component:
 //
-// Error: Cannot run with sound null safety as one or more dependencies do not
+// Error: This project cannot run with sound null safety, because one or more project dependencies do not
 // support null safety:
 //
 //  - package:opt_out_package
diff --git a/pkg/front_end/tool/_fasta/command_line.dart b/pkg/front_end/tool/_fasta/command_line.dart
index e9bf2ec..12a1073 100644
--- a/pkg/front_end/tool/_fasta/command_line.dart
+++ b/pkg/front_end/tool/_fasta/command_line.dart
@@ -171,7 +171,6 @@
 //  * Get an explicit approval from the front-end team.
 const Map<String, ValueSpecification> optionSpecification =
     const <String, ValueSpecification>{
-  Flags.bytecode: const BoolValue(false),
   Flags.compileSdk: const UriValue(),
   Flags.dumpIr: const BoolValue(false),
   Flags.enableExperiment: const StringListValue(),
@@ -285,8 +284,6 @@
 
   final int fatalSkip = int.tryParse(options[Flags.fatalSkip] ?? "0") ?? -1;
 
-  final bool bytecode = options[Flags.bytecode];
-
   final bool compileSdk = options.containsKey(Flags.compileSdk);
 
   final String singleRootScheme = options[Flags.singleRootScheme];
@@ -376,8 +373,7 @@
         options: compilerOptions
           ..sdkSummary = options[Flags.platform]
           ..librariesSpecificationUri = resolveInputUri(arguments[1])
-          ..setExitCodeOnProblem = true
-          ..bytecode = bytecode,
+          ..setExitCodeOnProblem = true,
         inputs: <Uri>[Uri.parse(arguments[0])],
         output: resolveInputUri(arguments[3]));
   } else if (arguments.isEmpty) {
diff --git a/pkg/front_end/tool/_fasta/entry_points.dart b/pkg/front_end/tool/_fasta/entry_points.dart
index d1af713..f6f412b 100644
--- a/pkg/front_end/tool/_fasta/entry_points.dart
+++ b/pkg/front_end/tool/_fasta/entry_points.dart
@@ -23,11 +23,6 @@
 
 import 'package:kernel/src/types.dart' show Types;
 
-import 'package:vm/bytecode/gen_bytecode.dart'
-    show createFreshComponentWithBytecode, generateBytecode;
-
-import 'package:vm/bytecode/options.dart' show BytecodeOptions;
-
 import 'package:front_end/src/api_prototype/compiler_options.dart'
     show CompilerOptions;
 
@@ -433,18 +428,7 @@
   new File.fromUri(outlineOutput).writeAsBytesSync(result.summary);
   c.options.ticker.logMs("Wrote outline to ${outlineOutput.toFilePath()}");
 
-  Component component = result.component;
-  if (c.options.bytecode) {
-    generateBytecode(component,
-        options: new BytecodeOptions(
-            enableAsserts: true,
-            emitSourceFiles: true,
-            emitSourcePositions: true,
-            environmentDefines: c.options.environmentDefines));
-    component = createFreshComponentWithBytecode(component);
-  }
-
-  await writeComponentToFile(component, fullOutput);
+  await writeComponentToFile(result.component, fullOutput);
 
   c.options.ticker.logMs("Wrote component to ${fullOutput.toFilePath()}");
 
diff --git a/pkg/frontend_server/lib/frontend_server.dart b/pkg/frontend_server/lib/frontend_server.dart
index 9f93eea..4d9b5ae 100644
--- a/pkg/frontend_server/lib/frontend_server.dart
+++ b/pkg/frontend_server/lib/frontend_server.dart
@@ -30,12 +30,6 @@
 import 'package:path/path.dart' as path;
 import 'package:usage/uuid/uuid.dart';
 
-import 'package:vm/metadata/binary_cache.dart'
-    show BinaryCacheMetadataRepository;
-
-import 'package:vm/bytecode/gen_bytecode.dart'
-    show generateBytecode, createFreshComponentWithBytecode;
-import 'package:vm/bytecode/options.dart' show BytecodeOptions;
 import 'package:vm/incremental_compiler.dart' show IncrementalCompiler;
 import 'package:vm/kernel_front_end.dart';
 
@@ -145,14 +139,6 @@
   ..addFlag('track-widget-creation',
       help: 'Run a kernel transformer to track creation locations for widgets.',
       defaultsTo: false)
-  ..addFlag('gen-bytecode', help: 'Generate bytecode', defaultsTo: false)
-  ..addMultiOption('bytecode-options',
-      help: 'Specify options for bytecode generation:',
-      valueHelp: 'opt1,opt2,...',
-      allowed: BytecodeOptions.commandLineFlags.keys,
-      allowedHelp: BytecodeOptions.commandLineFlags)
-  ..addFlag('drop-ast',
-      help: 'Include only bytecode into the output file', defaultsTo: true)
   ..addFlag('enable-asserts',
       help: 'Whether asserts will be enabled.', defaultsTo: false)
   ..addFlag('sound-null-safety',
@@ -345,7 +331,6 @@
   bool _printIncrementalDependencies;
 
   CompilerOptions _compilerOptions;
-  BytecodeOptions _bytecodeOptions;
   ProcessedOptions _processedOptions;
   FileSystem _fileSystem;
   Uri _mainSource;
@@ -484,14 +469,6 @@
       await autoDetectNullSafetyMode(_mainSource, compilerOptions);
     }
 
-    compilerOptions.bytecode = options['gen-bytecode'];
-    final BytecodeOptions bytecodeOptions = BytecodeOptions(
-      enableAsserts: options['enable-asserts'],
-      emitSourceFiles: options['embed-source-text'],
-      environmentDefines: environmentDefines,
-      aot: options['aot'],
-    )..parseCommandLineFlags(options['bytecode-options']);
-
     // Initialize additional supported kernel targets.
     _installDartdevcTarget();
     compilerOptions.target = createFrontEndTarget(
@@ -511,17 +488,7 @@
       ];
     }
 
-    if (compilerOptions.bytecode && _initializeFromDill != null) {
-      // If we are generating bytecode, put bytecode only (not AST) in
-      // [_kernelBinaryFilename], which the user of this tool will eventually
-      // feed to Flutter engine or flutter_tester. Use a separate file to cache
-      // the AST result to initialize the incremental compiler for the next
-      // invocation of this tool.
-      _initializeFromDill += ".ast";
-    }
-
     _compilerOptions = compilerOptions;
-    _bytecodeOptions = bytecodeOptions;
     _processedOptions = ProcessedOptions(options: compilerOptions);
 
     KernelCompilationResults results;
@@ -554,7 +521,6 @@
           sdkRoot.resolve(platformKernelDill)
         ];
       }
-      // No bytecode at this step. Bytecode is generated later in _writePackage.
       results = await _runWithPrintRedirection(() => compileToKernel(
           _mainSource, compilerOptions,
           includePlatform: options['link-platform'],
@@ -597,22 +563,6 @@
     return errors.isEmpty;
   }
 
-  Future<Component> _generateBytecodeIfNeeded(Component component) async {
-    if (_compilerOptions.bytecode && errors.isEmpty) {
-      await runWithFrontEndCompilerContext(
-          _mainSource, _compilerOptions, component, () {
-        generateBytecode(component,
-            coreTypes: _generator.getCoreTypes(),
-            hierarchy: _generator.getClassHierarchy(),
-            options: _bytecodeOptions);
-        if (_options['drop-ast']) {
-          component = createFreshComponentWithBytecode(component);
-        }
-      });
-    }
-    return component;
-  }
-
   void _outputDependenciesDelta(Iterable<Uri> compiledSources) async {
     if (!_printIncrementalDependencies) {
       return;
@@ -695,88 +645,29 @@
       {bool filterExternal: false,
       IncrementalSerializer incrementalSerializer}) async {
     final Component component = results.component;
-    // Remove the cache that came either from this function or from
-    // initializing from a kernel file.
-    component.metadata.remove(BinaryCacheMetadataRepository.repositoryTag);
+    final IOSink sink = File(filename).openWrite();
+    final Set<Library> loadedLibraries = results.loadedLibraries;
+    final BinaryPrinter printer = filterExternal
+        ? BinaryPrinter(sink,
+            libraryFilter: (lib) => !loadedLibraries.contains(lib),
+            includeSources: false)
+        : printerFactory.newBinaryPrinter(sink);
 
-    if (_compilerOptions.bytecode) {
-      {
-        // Generate bytecode as the output proper.
-        final IOSink sink = File(filename).openWrite();
-        await runWithFrontEndCompilerContext(
-            _mainSource, _compilerOptions, component, () async {
-          if (_options['incremental']) {
-            // When loading a single kernel buffer with multiple sub-components,
-            // the VM expects 'main' to be the first sub-component.
-            await forEachPackage(results,
-                (String package, List<Library> libraries) async {
-              _writePackage(results, package, libraries, sink);
-            }, mainFirst: true);
-          } else {
-            _writePackage(results, 'main', component.libraries, sink);
-          }
-        });
-        await sink.close();
-      }
+    sortComponent(component);
 
-      {
-        // Generate AST as a cache. This goes to [_initializeFromDill] instead
-        // of [filename] so that a later invocation of frontend_server will the
-        // same arguments will use this to initialize its incremental kernel
-        // compiler.
-        final repository = BinaryCacheMetadataRepository();
-        component.addMetadataRepository(repository);
-        for (var lib in component.libraries) {
-          var bytes = BinaryCacheMetadataRepository.lookup(lib);
-          if (bytes != null) {
-            repository.mapping[lib] = bytes;
-          }
-        }
-
-        final file = new File(_initializeFromDill);
-        await file.create(recursive: true);
-        final IOSink sink = file.openWrite();
-        final Set<Library> loadedLibraries = results.loadedLibraries;
-        final BinaryPrinter printer = filterExternal
-            ? BinaryPrinter(sink,
-                libraryFilter: (lib) => !loadedLibraries.contains(lib),
-                includeSources: false)
-            : printerFactory.newBinaryPrinter(sink);
-
-        sortComponent(component);
-
-        printer.writeComponentFile(component);
-        await sink.close();
-      }
-    } else {
-      // Generate AST as the output proper.
-      final IOSink sink = File(filename).openWrite();
-      final Set<Library> loadedLibraries = results.loadedLibraries;
-      final BinaryPrinter printer = filterExternal
-          ? BinaryPrinter(sink,
-              libraryFilter: (lib) => !loadedLibraries.contains(lib),
-              includeSources: false)
-          : printerFactory.newBinaryPrinter(sink);
-
-      sortComponent(component);
-
-      if (incrementalSerializer != null) {
-        incrementalSerializer.writePackagesToSinkAndTrimComponent(
-            component, sink);
-      } else if (unsafePackageSerialization == true) {
-        writePackagesToSinkAndTrimComponent(component, sink);
-      }
-
-      printer.writeComponentFile(component);
-      await sink.close();
+    if (incrementalSerializer != null) {
+      incrementalSerializer.writePackagesToSinkAndTrimComponent(
+          component, sink);
+    } else if (unsafePackageSerialization == true) {
+      writePackagesToSinkAndTrimComponent(component, sink);
     }
 
+    printer.writeComponentFile(component);
+    await sink.close();
+
     if (_options['split-output-by-packages']) {
       await writeOutputSplitByPackages(
-          _mainSource, _compilerOptions, results, filename,
-          genBytecode: _compilerOptions.bytecode,
-          bytecodeOptions: _bytecodeOptions,
-          dropAST: _options['drop-ast']);
+          _mainSource, _compilerOptions, results, filename);
     }
 
     final String manifestFilename = _options['far-manifest'];
@@ -846,54 +737,6 @@
     }
   }
 
-  void _writePackage(KernelCompilationResults result, String package,
-      List<Library> libraries, IOSink sink) {
-    final canCache = libraries.isNotEmpty &&
-        _compilerOptions.bytecode &&
-        errors.isEmpty &&
-        package != "main";
-
-    if (canCache) {
-      var cachedBytes = BinaryCacheMetadataRepository.lookup(libraries.first);
-      if (cachedBytes != null) {
-        sink.add(cachedBytes);
-        return;
-      }
-    }
-
-    Component partComponent = result.component;
-    if (_compilerOptions.bytecode && errors.isEmpty) {
-      final List<Library> librariesFiltered = new List<Library>();
-      final Set<Library> loadedLibraries = result.loadedLibraries;
-      for (Library library in libraries) {
-        if (loadedLibraries.contains(library)) continue;
-        librariesFiltered.add(library);
-      }
-
-      generateBytecode(partComponent,
-          options: _bytecodeOptions,
-          libraries: librariesFiltered,
-          coreTypes: _generator?.getCoreTypes(),
-          hierarchy: _generator?.getClassHierarchy());
-
-      if (_options['drop-ast']) {
-        partComponent = createFreshComponentWithBytecode(partComponent);
-      }
-    }
-
-    final byteSink = ByteSink();
-    final BinaryPrinter printer = BinaryPrinter(byteSink,
-        libraryFilter: (lib) =>
-            packageFor(lib, result.loadedLibraries) == package);
-    printer.writeComponentFile(partComponent);
-
-    final bytes = byteSink.builder.takeBytes();
-    sink.add(bytes);
-    if (canCache) {
-      BinaryCacheMetadataRepository.insert(libraries.first, bytes);
-    }
-  }
-
   @override
   Future<Null> recompileDelta({String entryPoint}) async {
     final String boundaryKey = Uuid().generateV4();
@@ -946,7 +789,6 @@
         expression, definitions, typeDefinitions, libraryUri, klass, isStatic);
     if (procedure != null) {
       Component component = createExpressionEvaluationComponent(procedure);
-      component = await _generateBytecodeIfNeeded(component);
       final IOSink sink = File(_kernelBinaryFilename).openWrite();
       sink.add(serializeComponent(component));
       await sink.close();
diff --git a/pkg/frontend_server/test/frontend_server_test.dart b/pkg/frontend_server/test/frontend_server_test.dart
index 0524ae1..470e340 100644
--- a/pkg/frontend_server/test/frontend_server_test.dart
+++ b/pkg/frontend_server/test/frontend_server_test.dart
@@ -2122,52 +2122,6 @@
       expect(count, 3);
     });
 
-    test('compile with bytecode', () async {
-      var file = File('${tempDir.path}/foo.dart')..createSync();
-      file.writeAsStringSync("main() {}\n");
-      var dillFile = File('${tempDir.path}/app.dill');
-      expect(dillFile.existsSync(), equals(false));
-      final List<String> args = <String>[
-        '--sdk-root=${sdkRoot.toFilePath()}',
-        '--incremental',
-        '--platform=${platformKernel.path}',
-        '--output-dill=${dillFile.path}',
-        '--gen-bytecode',
-        '--drop-ast',
-        file.path,
-      ];
-      expect(await starter(args), 0);
-    });
-
-    test('compile with bytecode and produce deps file', () async {
-      var sourceFoo = File('${tempDir.path}/foo.dart')..createSync();
-      sourceFoo.writeAsStringSync("import 'bar.dart'; main() { barfunc(); }\n");
-      var sourceBar = File('${tempDir.path}/bar.dart')..createSync();
-      sourceBar.writeAsStringSync("barfunc() {}\n");
-      var dillFile = File('${tempDir.path}/app.dill');
-      expect(dillFile.existsSync(), equals(false));
-      var depFile = File('${tempDir.path}/app.dill.d');
-      expect(depFile.existsSync(), equals(false));
-      final List<String> args = <String>[
-        '--sdk-root=${sdkRoot.toFilePath()}',
-        '--incremental',
-        '--platform=${platformKernel.path}',
-        '--output-dill=${dillFile.path}',
-        '--depfile=${depFile.path}',
-        '--gen-bytecode',
-        '--drop-ast',
-        sourceFoo.path,
-      ];
-      expect(await starter(args), 0);
-      expect(depFile.existsSync(), true);
-      var depContents = depFile.readAsStringSync();
-      print(depContents);
-      var depContentsParsed = depContents.split(': ');
-      expect(path.basename(depContentsParsed[0]), path.basename(dillFile.path));
-      expect(depContentsParsed[1], contains(path.basename(sourceFoo.path)));
-      expect(depContentsParsed[1], contains(path.basename(sourceBar.path)));
-    });
-
     test('compile "package:"-file', () async {
       Directory lib = Directory('${tempDir.path}/lib')..createSync();
       File('${lib.path}/foo.dart')
diff --git a/pkg/js/CHANGELOG.md b/pkg/js/CHANGELOG.md
index 3728fa9..3b4897d 100644
--- a/pkg/js/CHANGELOG.md
+++ b/pkg/js/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.6.3-nullsafety.2
+
+* Allow prerelease versions of the `2.12` sdk.
+
 ## 0.6.3-nullsafety.1
 
 * Allow 2.10 stable and 2.11.0 dev SDK versions.
diff --git a/pkg/js/pubspec.yaml b/pkg/js/pubspec.yaml
index b9d05c4..6ae05bb 100644
--- a/pkg/js/pubspec.yaml
+++ b/pkg/js/pubspec.yaml
@@ -1,10 +1,10 @@
 name: js
-version: 0.6.3-nullsafety.1
+version: 0.6.3-nullsafety.2
 description: Annotations to create static Dart interfaces for JavaScript APIs.
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/js
 
 environment:
-  sdk: '>=2.10.0-0 <2.11.0'
+  sdk: '>=2.10.0-0 <2.12.0'
 
 dev_dependencies:
   pedantic: ^1.9.0
diff --git a/pkg/kernel/lib/src/non_null.dart b/pkg/kernel/lib/src/non_null.dart
new file mode 100644
index 0000000..2e28022
--- /dev/null
+++ b/pkg/kernel/lib/src/non_null.dart
@@ -0,0 +1,139 @@
+// 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.md file.
+
+import '../ast.dart';
+import '../core_types.dart';
+
+/// Returns the type defines as `NonNull(type)` in the nnbd specification.
+DartType computeNonNull(CoreTypes coreTypes, DartType type) {
+  return type.accept1(const _NonNullVisitor(), coreTypes) ?? type;
+}
+
+/// Visitor that computes the `NonNull` function defined in the nnbd
+/// specification.
+///
+/// The visitor returns `null` if `NonNull(T) = T`.
+class _NonNullVisitor implements DartTypeVisitor1<DartType, CoreTypes> {
+  const _NonNullVisitor();
+
+  @override
+  DartType defaultDartType(DartType node, CoreTypes coreTypes) {
+    throw new UnsupportedError(
+        "Unexpected DartType ${node} (${node.runtimeType})");
+  }
+
+  @override
+  DartType visitBottomType(BottomType node, CoreTypes coreTypes) => null;
+
+  @override
+  DartType visitDynamicType(DynamicType node, CoreTypes coreTypes) => null;
+
+  @override
+  DartType visitFunctionType(FunctionType node, CoreTypes coreTypes) {
+    if (node.declaredNullability == Nullability.nonNullable) {
+      return null;
+    }
+    return node.withDeclaredNullability(Nullability.nonNullable);
+  }
+
+  @override
+  DartType visitFutureOrType(FutureOrType node, CoreTypes coreTypes) {
+    DartType typeArgument = node.typeArgument.accept1(this, coreTypes);
+    if (node.declaredNullability == Nullability.nonNullable &&
+        typeArgument == null) {
+      return null;
+    }
+    return new FutureOrType(
+        typeArgument ?? node.typeArgument, Nullability.nonNullable);
+  }
+
+  @override
+  DartType visitInterfaceType(InterfaceType node, CoreTypes coreTypes) {
+    if (node == coreTypes.nullType) {
+      return const NeverType(Nullability.nonNullable);
+    }
+    if (node.declaredNullability == Nullability.nonNullable) {
+      return null;
+    }
+    return node.withDeclaredNullability(Nullability.nonNullable);
+  }
+
+  @override
+  DartType visitInvalidType(InvalidType node, CoreTypes coreTypes) => null;
+
+  @override
+  DartType visitNeverType(NeverType node, CoreTypes coreTypes) {
+    if (node.declaredNullability == Nullability.nonNullable) {
+      return null;
+    }
+    return const NeverType(Nullability.nonNullable);
+  }
+
+  @override
+  DartType visitTypeParameterType(TypeParameterType node, CoreTypes coreTypes) {
+    if (node.nullability == Nullability.nonNullable) {
+      return null;
+    }
+    if (node.promotedBound != null) {
+      if (node.promotedBound.nullability == Nullability.nonNullable) {
+        // The promoted bound is already non-nullable so we set the declared
+        // nullability to non-nullable.
+        return node.withDeclaredNullability(Nullability.nonNullable);
+      }
+      DartType promotedBound = node.promotedBound.accept1(this, coreTypes);
+      if (promotedBound == null) {
+        // The promoted bound could not be made non-nullable so we set the
+        // declared nullability to undetermined.
+        if (node.declaredNullability == Nullability.undetermined) {
+          return null;
+        }
+        return new TypeParameterType.intersection(
+            node.parameter, Nullability.undetermined, node.promotedBound);
+      } else if (promotedBound.nullability == Nullability.nonNullable) {
+        // The bound could be made non-nullable so we use it as the promoted
+        // bound.
+        return new TypeParameterType.intersection(
+            node.parameter, Nullability.nonNullable, promotedBound);
+      } else {
+        // The bound could not be made non-nullable so we use it as the promoted
+        // bound with undetermined nullability.
+        return new TypeParameterType.intersection(
+            node.parameter, Nullability.undetermined, promotedBound);
+      }
+    } else {
+      if (node.bound.nullability == Nullability.nonNullable) {
+        // The bound is already non-nullable so we set the declared nullability
+        // to non-nullable.
+        return node.withDeclaredNullability(Nullability.nonNullable);
+      }
+      DartType bound = node.bound.accept1(this, coreTypes);
+      if (bound == null) {
+        // The bound could not be made non-nullable so we set the declared
+        // nullability to undetermined.
+        if (node.declaredNullability == Nullability.undetermined) {
+          return null;
+        }
+        return node.withDeclaredNullability(Nullability.undetermined);
+      } else {
+        // The nullability is fully determined by the bound so we pass the
+        // default nullability for the declared nullability.
+        return new TypeParameterType.intersection(
+            node.parameter,
+            TypeParameterType.computeNullabilityFromBound(node.parameter),
+            bound);
+      }
+    }
+  }
+
+  @override
+  DartType visitTypedefType(TypedefType node, CoreTypes coreTypes) {
+    if (node.declaredNullability == Nullability.nonNullable) {
+      return null;
+    }
+    return node.withDeclaredNullability(Nullability.nonNullable);
+  }
+
+  @override
+  DartType visitVoidType(VoidType node, CoreTypes coreTypes) => null;
+}
diff --git a/pkg/kernel/lib/src/standard_bounds.dart b/pkg/kernel/lib/src/standard_bounds.dart
index 2fb3a96..f94edc0 100644
--- a/pkg/kernel/lib/src/standard_bounds.dart
+++ b/pkg/kernel/lib/src/standard_bounds.dart
@@ -27,6 +27,7 @@
 import '../type_algebra.dart';
 import '../type_environment.dart';
 import 'legacy_erasure.dart';
+import 'non_null.dart';
 
 mixin StandardBounds {
   ClassHierarchyBase get hierarchy;
@@ -354,20 +355,20 @@
       if (coreTypes.isObject(type2)) {
         return moretop(type2, type1) ? type1 : type2;
       }
-      if (type2.declaredNullability == Nullability.nonNullable) {
+      if (type2.nullability == Nullability.nonNullable) {
         return type2;
       }
-      type2 = type2.withDeclaredNullability(Nullability.nonNullable);
-      if (type2.declaredNullability == Nullability.nonNullable) {
+      type2 = computeNonNull(coreTypes, type2);
+      if (type2.nullability == Nullability.nonNullable) {
         return type2;
       }
       return const NeverType(Nullability.nonNullable);
     } else if (coreTypes.isObject(type2)) {
-      if (type1.declaredNullability == Nullability.nonNullable) {
+      if (type1.nullability == Nullability.nonNullable) {
         return type1;
       }
-      type1 = type1.withDeclaredNullability(Nullability.nonNullable);
-      if (type1.declaredNullability == Nullability.nonNullable) {
+      type1 = computeNonNull(coreTypes, type1);
+      if (type1.nullability == Nullability.nonNullable) {
         return type1;
       }
       return const NeverType(Nullability.nonNullable);
@@ -667,12 +668,12 @@
       if (coreTypes.isObject(type2)) {
         return moretop(type1, type2) ? type1 : type2;
       }
-      if (type2.declaredNullability == Nullability.nonNullable) {
+      if (type2.nullability == Nullability.nonNullable) {
         return type1;
       }
       return type1.withDeclaredNullability(Nullability.nullable);
     } else if (coreTypes.isObject(type2)) {
-      if (type1.declaredNullability == Nullability.nonNullable) {
+      if (type1.nullability == Nullability.nonNullable) {
         return type2;
       }
       return type2.withDeclaredNullability(Nullability.nullable);
diff --git a/pkg/kernel/lib/testing/type_parser.dart b/pkg/kernel/lib/testing/type_parser.dart
index 4744340..ef288ed 100644
--- a/pkg/kernel/lib/testing/type_parser.dart
+++ b/pkg/kernel/lib/testing/type_parser.dart
@@ -345,7 +345,7 @@
   ParsedType parseType() {
     if (optional("class")) return parseClass();
     if (optional("typedef")) return parseTypedef();
-    ParsedType result;
+    List<ParsedType> results = <ParsedType>[];
     do {
       ParsedType type;
       if (optional("(") || optional("<")) {
@@ -369,12 +369,17 @@
         ParsedNullability parsedNullability = parseNullability();
         type = new ParsedInterfaceType(name, arguments, parsedNullability);
       }
+      results.add(type);
+    } while (optionalAdvance("&"));
+    // Parse `A & B & C` as `A & (B & C)` and not `(A & B) & C`.
+    ParsedType result;
+    for (ParsedType type in results.reversed) {
       if (result == null) {
         result = type;
       } else {
-        result = new ParsedIntersectionType(result, type);
+        result = new ParsedIntersectionType(type, result);
       }
-    } while (optionalAdvance("&"));
+    }
     return result;
   }
 
diff --git a/pkg/kernel/test/non_null_test.dart b/pkg/kernel/test/non_null_test.dart
new file mode 100644
index 0000000..1158a4e
--- /dev/null
+++ b/pkg/kernel/test/non_null_test.dart
@@ -0,0 +1,94 @@
+// 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" show Expect;
+
+import 'package:kernel/ast.dart' hide MapEntry;
+import 'package:kernel/src/non_null.dart';
+import 'package:kernel/testing/type_parser_environment.dart';
+
+const Map<String, String> data = {
+  'dynamic': 'dynamic',
+  'void': 'void',
+  'Null': 'Never',
+  'Never': 'Never',
+  'Never?': 'Never',
+  'Never*': 'Never',
+  'Object': 'Object',
+  'Object?': 'Object',
+  'Object*': 'Object',
+  'List<Object>': 'List<Object>',
+  'List<Object>?': 'List<Object>',
+  'List<Object>*': 'List<Object>',
+  'List<Object?>': 'List<Object?>',
+  'List<Object?>?': 'List<Object?>',
+  'List<Object?>*': 'List<Object?>',
+  'List<Object*>': 'List<Object*>',
+  'List<Object*>?': 'List<Object*>',
+  'List<Object*>*': 'List<Object*>',
+  'FutureOr<Null>': 'FutureOr<Never>',
+  'FutureOr<dynamic>': 'FutureOr<dynamic>',
+  'FutureOr<Object>': 'FutureOr<Object>',
+  'FutureOr<Object>?': 'FutureOr<Object>',
+  'FutureOr<Object>*': 'FutureOr<Object>',
+  'FutureOr<Object?>': 'FutureOr<Object>',
+  'FutureOr<Object?>?': 'FutureOr<Object>',
+  'FutureOr<Object?>*': 'FutureOr<Object>',
+  'FutureOr<Object*>': 'FutureOr<Object>',
+  'FutureOr<Object*>?': 'FutureOr<Object>',
+  'FutureOr<Object*>*': 'FutureOr<Object>',
+  'FutureOr<FutureOr<Object?>>': 'FutureOr<FutureOr<Object>>',
+  '(List<Object>, {required List<Object> a, List<Object> b}) -> List<Object>':
+      '(List<Object>, {required List<Object> a, List<Object> b}) -> List<Object>',
+  '(List<Object>, {required List<Object> a, List<Object> b}) ->? List<Object>':
+      '(List<Object>, {required List<Object> a, List<Object> b}) -> List<Object>',
+  '(List<Object>, {required List<Object> a, List<Object> b}) ->* List<Object>':
+      '(List<Object>, {required List<Object> a, List<Object> b}) -> List<Object>',
+  '(List<Object>?, {required List<Object?> a, List<Object?>? b}) ->? List<Object?>':
+      '(List<Object>?, {required List<Object?> a, List<Object?>? b}) -> List<Object?>',
+  'X': 'X & Object',
+  'X?': 'X & Object',
+  'X*': 'X & Object',
+  'X_extends_Object': 'X_extends_Object',
+  'X_extends_Object?': 'X_extends_Object',
+  'X_extends_Object*': 'X_extends_Object',
+  'X_extends_dynamic': 'X_extends_dynamic',
+  'X_extends_dynamic?': 'X_extends_dynamic',
+  'X_extends_dynamic*': 'X_extends_dynamic',
+  'X & Object?': 'X & Object',
+  'X & dynamic': 'X & dynamic',
+  'X & Object': 'X & Object',
+  'X? & Object?': 'X & Object',
+  'X? & dynamic': 'X & dynamic',
+  'X? & Object': 'X & Object',
+  'Y': 'Y & X & Object',
+  'Y?': 'Y & X & Object',
+  'Y_extends_dynamic': 'Y_extends_dynamic',
+  'Y_extends_dynamic?': 'Y_extends_dynamic',
+  'Y_extends_dynamic*': 'Y_extends_dynamic',
+  'Y_extends_dynamic & X': 'Y_extends_dynamic & X & Object',
+  'Y_extends_dynamic & X_extends_dynamic?':
+      'Y_extends_dynamic & X_extends_dynamic',
+};
+
+main() {
+  Env env = new Env('')
+    ..extendWithTypeParameters('X,'
+        'X_extends_Object extends Object,'
+        'X_extends_dynamic extends dynamic,'
+        'Y extends X,'
+        'Y_extends_dynamic extends X_extends_dynamic');
+  data.forEach((String input, String output) {
+    DartType inputType = env.parseType(input);
+    DartType expectedOutputType = env.parseType(output);
+    DartType actualOutputType = computeNonNull(env.coreTypes, inputType);
+    print('legacyErasure($inputType) = $actualOutputType: $expectedOutputType');
+    Expect.equals(
+        expectedOutputType,
+        actualOutputType,
+        "Unexpected NonNull of $inputType ('$input'):\n"
+        "Expected: ${expectedOutputType} ('$output')\n"
+        "Actual: ${actualOutputType}");
+  });
+}
diff --git a/pkg/kernel/test/type_parser_test.dart b/pkg/kernel/test/type_parser_test.dart
index 76bb490..5a2e651 100644
--- a/pkg/kernel/test/type_parser_test.dart
+++ b/pkg/kernel/test/type_parser_test.dart
@@ -42,6 +42,7 @@
 class B<T extends List<List<Object>>>;
 <E>(E) -> int
 S & T
+S & T & U
 class C;
 <E>(E) -> int & <E>(E) -> void
 C*
diff --git a/pkg/meta/CHANGELOG.md b/pkg/meta/CHANGELOG.md
index d80e12b..743ed08 100644
--- a/pkg/meta/CHANGELOG.md
+++ b/pkg/meta/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.3.0-nullsafety.5
+
+* Allow prerelease versions of the `2.12` sdk.
+
 ## 1.3.0-nullsafety.4
 
 * Introduce `@internal` to annotate elements that should not be used outside of
diff --git a/pkg/meta/pubspec.yaml b/pkg/meta/pubspec.yaml
index 28a9847..a68bacd 100644
--- a/pkg/meta/pubspec.yaml
+++ b/pkg/meta/pubspec.yaml
@@ -1,5 +1,5 @@
 name: meta
-version: 1.3.0-nullsafety.4
+version: 1.3.0-nullsafety.5
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/meta
 description: >
  This library contains the declarations of annotations that developers can use
@@ -8,4 +8,4 @@
  to provide a better user experience.
 environment:
   # This must remain a tight constraint until nnbd is stable
-  sdk: '>=2.10.0-0 <2.11.0'
+  sdk: '>=2.10.0-0 <2.12.0'
diff --git a/pkg/nnbd_migration/test/abstract_context.dart b/pkg/nnbd_migration/test/abstract_context.dart
index d04f358..4ea440d 100644
--- a/pkg/nnbd_migration/test/abstract_context.dart
+++ b/pkg/nnbd_migration/test/abstract_context.dart
@@ -131,6 +131,88 @@
     newFile('$testsPath/.packages', content: '''
 tests:file://$testsPath/lib
 ''');
+    var pubspecPath = '$testsPath/pubspec.yaml';
+    // Subclasses may write out a different file first.
+    if (!getFile(pubspecPath).exists) {
+      newFile(pubspecPath, content: '''
+name: tests
+version: 1.0.0
+environment:
+  sdk: '>=2.9.0 <3.0.0'
+''');
+    }
+    var packageConfigPath = '$testsPath/.dart_tool/package_config.json';
+    // Subclasses may write out a different file first.
+    if (!getFile(packageConfigPath).exists) {
+      // TODO(srawlins): This is a rough hack to allow for the "null safe by
+      // default" flag flip. We need to _opt out_ all packages at the onset.
+      // A better solution likely involves the package config-editing code in
+      // analyzer's [context_collection_resolution.dart].
+      newFile(packageConfigPath, content: '''
+{
+  "configVersion": 2,
+  "packages": [
+    {
+      "name": "args",
+      "rootUri": "${toUriStr('/.pub-cache/args')}",
+      "packageUri": "lib/",
+      "languageVersion": "2.9"
+    },
+    {
+      "name": "collection",
+      "rootUri": "${toUriStr('/.pub-cache/collection')}",
+      "packageUri": "lib/",
+      "languageVersion": "2.9"
+    },
+    {
+      "name": "fixnum",
+      "rootUri": "${toUriStr('/.pub-cache/fixnum')}",
+      "packageUri": "lib/",
+      "languageVersion": "2.9"
+    },
+    {
+      "name": "foo",
+      "rootUri": "${toUriStr('/.pub-cache/foo')}",
+      "packageUri": "lib/",
+      "languageVersion": "2.9"
+    },
+    {
+      "name": "meta",
+      "rootUri": "${toUriStr('/.pub-cache/meta')}",
+      "packageUri": "lib/",
+      "languageVersion": "2.9"
+    },
+    {
+      "name": "quiver",
+      "rootUri": "${toUriStr('/.pub-cache/quiver')}",
+      "packageUri": "lib/",
+      "languageVersion": "2.9"
+    },
+    {
+      "name": "test",
+      "rootUri": "${toUriStr('/.pub-cache/test')}",
+      "packageUri": "lib/",
+      "languageVersion": "2.9"
+    },
+    {
+      "name": "test_core",
+      "rootUri": "${toUriStr('/.pub-cache/test_core')}",
+      "packageUri": "lib/",
+      "languageVersion": "2.9"
+    },
+    {
+      "name": "tests",
+      "rootUri": "../",
+      "packageUri": "lib/",
+      "languageVersion": "2.9"
+    }
+  ],
+  "generated": "2020-10-21T21:13:05.186004Z",
+  "generator": "pub",
+  "generatorVersion": "2.10.0"
+}
+''');
+    }
 
     createAnalysisContexts();
   }
diff --git a/pkg/nnbd_migration/test/abstract_single_unit.dart b/pkg/nnbd_migration/test/abstract_single_unit.dart
index 16f0f45..cd7b060 100644
--- a/pkg/nnbd_migration/test/abstract_single_unit.dart
+++ b/pkg/nnbd_migration/test/abstract_single_unit.dart
@@ -74,6 +74,36 @@
     - non-nullable
 ''');
     }
+    if (analyzeWithNnbd) {
+      newFile('$testRoot/pubspec.yaml', content: '''
+name: tests
+version: 1.0.0
+environment:
+  sdk: '>=2.12.0 <3.0.0'
+''');
+      newFile('$testRoot/.dart_tool/package_config.json', content: '''
+{
+  "configVersion": 2,
+  "packages": [
+    {
+      "name": "meta",
+      "rootUri": "file:///.pub-cache/meta",
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
+    },
+    {
+      "name": "tests",
+      "rootUri": "../",
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
+    }
+  ],
+  "generated": "2020-10-21T21:13:05.186004Z",
+  "generator": "pub",
+  "generatorVersion": "2.12.0"
+}
+''');
+    }
     super.setUp();
     testFile = convertPath('$testRoot/lib/test.dart');
     testUri = Uri.parse('package:tests/test.dart');
diff --git a/pkg/nnbd_migration/test/api_test.dart b/pkg/nnbd_migration/test/api_test.dart
index 629a6ac..b1f06d2 100644
--- a/pkg/nnbd_migration/test/api_test.dart
+++ b/pkg/nnbd_migration/test/api_test.dart
@@ -30,6 +30,13 @@
 abstract class _ProvisionalApiTestBase extends AbstractContextTest {
   bool get _usePermissiveMode;
 
+  String projectPath;
+
+  void setUp() {
+    projectPath = convertPath(AbstractContextTest.testsPath);
+    super.setUp();
+  }
+
   /// Hook invoked between stages of processing inputs.
   void _betweenStages() {}
 
@@ -102,7 +109,8 @@
       {Map<String, String> migratedInput = const {},
       bool removeViaComments = false,
       bool warnOnWeakCode = false}) async {
-    var sourcePath = convertPath('/home/test/lib/test.dart');
+    var sourcePath =
+        convertPath('${AbstractContextTest.testsPath}/lib/test.dart');
     await _checkMultipleFileChanges(
         {sourcePath: content}, {sourcePath: expected},
         migratedInput: migratedInput,
@@ -398,7 +406,7 @@
 }
 ''';
     await _checkSingleFileChanges(content, expected, migratedInput: {
-      '/home/test/lib/already_migrated.dart': alreadyMigrated
+      '$projectPath/lib/already_migrated.dart': alreadyMigrated
     });
   }
 
@@ -4312,7 +4320,7 @@
   }
 
   Future<void> test_libraryWithParts() async {
-    var root = '/home/test/lib';
+    var root = '$projectPath/lib';
     var path1 = convertPath('$root/lib.dart');
     var file1 = '''
 part 'src/foo/part.dart';
@@ -4338,7 +4346,7 @@
   }
 
   Future<void> test_libraryWithParts_add_questions() async {
-    var root = '/home/test/lib';
+    var root = '$projectPath/lib';
     var path1 = convertPath('$root/lib.dart');
     var file1 = '''
 part 'src/foo/part.dart';
@@ -5581,7 +5589,7 @@
   }
 
   Future<void> test_prefixes() async {
-    var root = '/home/test/lib';
+    var root = '$projectPath/lib';
     var path1 = convertPath('$root/file1.dart');
     var file1 = '''
 import 'file2.dart';
@@ -6408,7 +6416,7 @@
   }
 
   Future<void> test_two_files() async {
-    var root = '/home/test/lib';
+    var root = '$projectPath/lib';
     var path1 = convertPath('$root/file1.dart');
     var file1 = '''
 import 'file2.dart';
@@ -6509,7 +6517,7 @@
 }
 ''';
     await _checkSingleFileChanges(content, expected, migratedInput: {
-      '/home/test/lib/migrated_typedef.dart': 'typedef F<R> = Function(R);'
+      '$projectPath/lib/migrated_typedef.dart': 'typedef F<R> = Function(R);'
     });
   }
 
@@ -6545,7 +6553,7 @@
 }
 ''';
     await _checkSingleFileChanges(content, expected, migratedInput: {
-      '/home/test/lib/migrated_typedef.dart':
+      '$projectPath/lib/migrated_typedef.dart':
           'typedef F<T> = Function<R>(T, R);'
     });
   }
@@ -6564,7 +6572,7 @@
 }
 ''';
     await _checkSingleFileChanges(content, expected, migratedInput: {
-      '/home/test/lib/migrated_typedef.dart': 'typedef F = Function<R>(R);'
+      '$projectPath/lib/migrated_typedef.dart': 'typedef F = Function<R>(R);'
     });
   }
 
diff --git a/pkg/nnbd_migration/test/edge_builder_test.dart b/pkg/nnbd_migration/test/edge_builder_test.dart
index 04aebe5..fc33d2e 100644
--- a/pkg/nnbd_migration/test/edge_builder_test.dart
+++ b/pkg/nnbd_migration/test/edge_builder_test.dart
@@ -5018,13 +5018,13 @@
   }
 
   Future<void> test_methodInvocation_parameter_named_differentPackage() async {
-    addPackageFile('pkgC', 'c.dart', '''
+    addPackageFile('foo', 'c.dart', '''
 class C {
   void f({int i}) {}
 }
 ''');
     await analyze('''
-import "package:pkgC/c.dart";
+import "package:foo/c.dart";
 void g(C c, int j) {
   c.f(i: j/*check*/);
 }
@@ -7663,11 +7663,11 @@
   }
 
   Future<void> test_topLevelVar_reference_differentPackage() async {
-    addPackageFile('pkgPi', 'piConst.dart', '''
+    addPackageFile('foo', 'piConst.dart', '''
 double pi = 3.1415;
 ''');
     await analyze('''
-import "package:pkgPi/piConst.dart";
+import "package:foo/piConst.dart";
 double get myPi => pi;
 ''');
     var myPiType = decoratedTypeAnnotation('double get');
diff --git a/pkg/nnbd_migration/test/edit_plan_test.dart b/pkg/nnbd_migration/test/edit_plan_test.dart
index 224da57..64ff882 100644
--- a/pkg/nnbd_migration/test/edit_plan_test.dart
+++ b/pkg/nnbd_migration/test/edit_plan_test.dart
@@ -332,11 +332,11 @@
   }
 
   Future<void> test_addUnaryPostfix_outer_precedence() async {
-    await analyze('f(x) => x!;');
+    await analyze('f(x) => x/*!*/;');
     checkPlan(
-        planner.addUnaryPostfix(
-            planner.passThrough(findNode.simple('x!')), TokenType.PLUS_PLUS),
-        'f(x) => x++!;');
+        planner.addUnaryPostfix(planner.passThrough(findNode.simple('x/*!*/')),
+            TokenType.PLUS_PLUS),
+        'f(x) => x++/*!*/;');
   }
 
   Future<void> test_addUnaryPrefix_inner_precedence_add_parens() async {
diff --git a/pkg/nnbd_migration/test/front_end/analysis_abstract.dart b/pkg/nnbd_migration/test/front_end/analysis_abstract.dart
index 7daaddd..2eb23ec 100644
--- a/pkg/nnbd_migration/test/front_end/analysis_abstract.dart
+++ b/pkg/nnbd_migration/test/front_end/analysis_abstract.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.
 
-import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:test/test.dart';
 
 import '../abstract_context.dart';
 
 /// An abstract base for all 'analysis' domain tests.
-class AbstractAnalysisTest extends AbstractContextTest
-    with ResourceProviderMixin {
+class AbstractAnalysisTest extends AbstractContextTest {
   String projectPath;
   String testFolder;
   String testFile;
diff --git a/pkg/nnbd_migration/test/front_end/info_builder_test.dart b/pkg/nnbd_migration/test/front_end/info_builder_test.dart
index 9fc7d93..67a796f 100644
--- a/pkg/nnbd_migration/test/front_end/info_builder_test.dart
+++ b/pkg/nnbd_migration/test/front_end/info_builder_test.dart
@@ -319,28 +319,6 @@
             replacement: ''));
   }
 
-  Future<void> test_addLateFinal_dueToHint() async {
-    var content = '/*late final*/ int x = 0;';
-    var migratedContent = '/*late final*/ int  x = 0;';
-    var unit = await buildInfoForSingleTestFile(content,
-        migratedContent: migratedContent);
-    var regions = unit.fixRegions;
-    expect(regions, hasLength(2));
-    var textToRemove = '/*late final*/ ';
-    assertRegionPair(regions, 0,
-        offset1: migratedContent.indexOf('/*'),
-        length1: 2,
-        offset2: migratedContent.indexOf('*/'),
-        length2: 2,
-        explanation: 'Added late and final keywords, due to a hint',
-        kind: NullabilityFixKind.addLateFinalDueToHint,
-        edits: (List<EditDetail> edits) => assertEdit(
-            edit: edits.single,
-            offset: content.indexOf(textToRemove),
-            length: textToRemove.length,
-            replacement: ''));
-  }
-
   Future<void> test_addLate_dueToTestSetup() async {
     addTestCorePackage();
     var content = '''
@@ -382,6 +360,28 @@
         kind: NullabilityFixKind.addLateDueToTestSetup);
   }
 
+  Future<void> test_addLateFinal_dueToHint() async {
+    var content = '/*late final*/ int x = 0;';
+    var migratedContent = '/*late final*/ int  x = 0;';
+    var unit = await buildInfoForSingleTestFile(content,
+        migratedContent: migratedContent);
+    var regions = unit.fixRegions;
+    expect(regions, hasLength(2));
+    var textToRemove = '/*late final*/ ';
+    assertRegionPair(regions, 0,
+        offset1: migratedContent.indexOf('/*'),
+        length1: 2,
+        offset2: migratedContent.indexOf('*/'),
+        length2: 2,
+        explanation: 'Added late and final keywords, due to a hint',
+        kind: NullabilityFixKind.addLateFinalDueToHint,
+        edits: (List<EditDetail> edits) => assertEdit(
+            edit: edits.single,
+            offset: content.indexOf(textToRemove),
+            length: textToRemove.length,
+            replacement: ''));
+  }
+
   Future<void> test_compound_assignment_nullable_result() async {
     var unit = await buildInfoForSingleTestFile('''
 abstract class C {
diff --git a/pkg/nnbd_migration/test/front_end/instrumentation_renderer_test.dart b/pkg/nnbd_migration/test/front_end/instrumentation_renderer_test.dart
index 5c456f8..452d4d0 100644
--- a/pkg/nnbd_migration/test/front_end/instrumentation_renderer_test.dart
+++ b/pkg/nnbd_migration/test/front_end/instrumentation_renderer_test.dart
@@ -19,44 +19,36 @@
 @reflectiveTest
 class InstrumentationRendererTest extends NnbdMigrationTestBase {
   /// Render the instrumentation view for [files].
-  Future<String> renderViewForTestFiles(Map<String, String> files,
+  Future<String> renderViewForTestFiles(
       {bool applied = false, bool needsRerun = false}) async {
-    var packageRoot = convertPath('/project');
-    await buildInfoForTestFiles(files, includedRoot: packageRoot);
+    var files = {convertPath('$projectPath/lib/a.dart'): 'int a = null;'};
+    await buildInfoForTestFiles(files, includedRoot: projectPath);
     var migrationInfo =
-        MigrationInfo(infos, {}, resourceProvider.pathContext, packageRoot);
+        MigrationInfo(infos, {}, resourceProvider.pathContext, projectPath);
     var instrumentationRenderer = InstrumentationRenderer(
         migrationInfo, PathMapper(resourceProvider), applied, needsRerun);
     return instrumentationRenderer.render();
   }
 
   Future<void> test_appliedStyle() async {
-    var renderedView = await renderViewForTestFiles(
-        {convertPath('/project/lib/a.dart'): 'int a = null;'},
-        applied: true);
+    var renderedView = await renderViewForTestFiles(applied: true);
     // harmless space in class list due to other potential classes here.
     expect(renderedView, contains('<body class="applied ">'));
   }
 
   Future<void> test_navigation_containsRoot() async {
-    var renderedView = await renderViewForTestFiles(
-        {convertPath('/project/lib/a.dart'): 'int a = null;'});
-    var expectedPath = convertPath('/project');
+    var renderedView = await renderViewForTestFiles();
     // harmless space in class list due to other potential classes here.
-    expect(renderedView, contains('<p class="root">$expectedPath</p>'));
+    expect(renderedView, contains('<p class="root">$projectPath</p>'));
   }
 
   Future<void> test_needsRerunStyle() async {
-    var renderedView = await renderViewForTestFiles(
-        {convertPath('/project/lib/a.dart'): 'int a = null;'},
-        needsRerun: true);
+    var renderedView = await renderViewForTestFiles(needsRerun: true);
     expect(renderedView, contains('<body class="proposed needs-rerun">'));
   }
 
   Future<void> test_notAppliedStyle() async {
-    var renderedView = await renderViewForTestFiles(
-        {convertPath('/project/lib/a.dart'): 'int a = null;'},
-        applied: false);
+    var renderedView = await renderViewForTestFiles(applied: false);
     // harmless space in class list due to other potential classes here.
     expect(renderedView, contains('<body class="proposed ">'));
   }
diff --git a/pkg/nnbd_migration/test/front_end/navigation_tree_renderer_test.dart b/pkg/nnbd_migration/test/front_end/navigation_tree_renderer_test.dart
index 77ca56e..2781783 100644
--- a/pkg/nnbd_migration/test/front_end/navigation_tree_renderer_test.dart
+++ b/pkg/nnbd_migration/test/front_end/navigation_tree_renderer_test.dart
@@ -26,19 +26,18 @@
   /// Render the navigation tree view for [files].
   Future<List<NavigationTreeNode>> renderNavigationTree(
       Map<String, String> files) async {
-    var packageRoot = convertPath('/project');
-    await buildInfoForTestFiles(files, includedRoot: packageRoot);
+    await buildInfoForTestFiles(files, includedRoot: projectPath);
     var migrationInfo =
-        MigrationInfo(infos, {}, resourceProvider.pathContext, packageRoot);
+        MigrationInfo(infos, {}, resourceProvider.pathContext, projectPath);
     pathMapper = PathMapper(resourceProvider);
     return NavigationTreeRenderer(migrationInfo, pathMapper).render();
   }
 
   Future<void> test_containsEditCounts() async {
     var response = await renderNavigationTree({
-      convertPath('/project/lib/a.dart'): 'int a = 1;',
-      convertPath('/project/lib/b.dart'): 'int b = null;',
-      convertPath('/project/lib/c.dart'): 'int c = null;\nint d = null;',
+      convertPath('$projectPath/lib/a.dart'): 'int a = 1;',
+      convertPath('$projectPath/lib/b.dart'): 'int b = null;',
+      convertPath('$projectPath/lib/c.dart'): 'int c = null;\nint d = null;',
     });
 
     var libNode = response[0];
@@ -53,9 +52,9 @@
 
   Future<void> test_containsHrefs() async {
     var response = await renderNavigationTree({
-      convertPath('/project/lib/a.dart'): 'int a = null;',
-      convertPath('/project/lib/src/b.dart'): 'int b = null;',
-      convertPath('/project/tool.dart'): 'int c = null;',
+      convertPath('$projectPath/lib/a.dart'): 'int a = null;',
+      convertPath('$projectPath/lib/src/b.dart'): 'int b = null;',
+      convertPath('$projectPath/tool.dart'): 'int c = null;',
     });
 
     var libNode = response[0];
@@ -64,20 +63,21 @@
         isNavigationTreeNode.named('lib').havingSubtree([
           isNavigationTreeNode.named('src').havingSubtree([
             isNavigationTreeNode.havingHref(
-                '/project/lib/src/b.dart', pathMapper)
+                '$projectPath/lib/src/b.dart', pathMapper)
           ]),
-          isNavigationTreeNode.havingHref('/project/lib/a.dart', pathMapper)
+          isNavigationTreeNode.havingHref('$projectPath/lib/a.dart', pathMapper)
         ]));
 
     var toolNode = response[1];
-    expect(toolNode.href, pathMapper.map(convertPath('/project/tool.dart')));
+    expect(
+        toolNode.href, pathMapper.map(convertPath('$projectPath/tool.dart')));
   }
 
   Future<void> test_containsMultipleLinks_multipleDepths() async {
     var response = await renderNavigationTree({
-      convertPath('/project/lib/a.dart'): 'int a = null;',
-      convertPath('/project/lib/src/b.dart'): 'int b = null;',
-      convertPath('/project/tool.dart'): 'int c = null;',
+      convertPath('$projectPath/lib/a.dart'): 'int a = null;',
+      convertPath('$projectPath/lib/src/b.dart'): 'int b = null;',
+      convertPath('$projectPath/tool.dart'): 'int c = null;',
     });
     expect(response, hasLength(2));
 
@@ -97,8 +97,8 @@
 
   Future<void> test_containsMultipleLinks_multipleRoots() async {
     var response = await renderNavigationTree({
-      convertPath('/project/bin/bin.dart'): 'int c = null;',
-      convertPath('/project/lib/a.dart'): 'int a = null;',
+      convertPath('$projectPath/bin/bin.dart'): 'int c = null;',
+      convertPath('$projectPath/lib/a.dart'): 'int a = null;',
     });
     expect(response, hasLength(2));
 
@@ -115,8 +115,8 @@
 
   Future<void> test_containsMultipleLinks_sameDepth() async {
     var response = await renderNavigationTree({
-      convertPath('/project/lib/a.dart'): 'int a = null;',
-      convertPath('/project/lib/b.dart'): 'int b = null;',
+      convertPath('$projectPath/lib/a.dart'): 'int a = null;',
+      convertPath('$projectPath/lib/b.dart'): 'int b = null;',
     });
     expect(response, hasLength(1));
 
@@ -127,19 +127,19 @@
           isNavigationTreeNode
               .named('a.dart')
               .havingPath(convertPath('lib/a.dart'))
-              .havingHref('/project/lib/a.dart', pathMapper),
+              .havingHref('$projectPath/lib/a.dart', pathMapper),
           isNavigationTreeNode
               .named('b.dart')
               .havingPath(convertPath('lib/b.dart'))
-              .havingHref('/project/lib/b.dart', pathMapper)
+              .havingHref('$projectPath/lib/b.dart', pathMapper)
         ]));
   }
 
   Future<void> test_containsPaths() async {
     var response = await renderNavigationTree({
-      convertPath('/project/lib/a.dart'): 'int a = null;',
-      convertPath('/project/lib/src/b.dart'): 'int b = null;',
-      convertPath('/project/tool.dart'): 'int c = null;',
+      convertPath('$projectPath/lib/a.dart'): 'int a = null;',
+      convertPath('$projectPath/lib/src/b.dart'): 'int b = null;',
+      convertPath('$projectPath/tool.dart'): 'int c = null;',
     });
 
     var libNode = response[0];
@@ -157,7 +157,7 @@
 
   Future<void> test_containsSingleLink_deep() async {
     var response = await renderNavigationTree({
-      convertPath('/project/lib/src/a.dart'): 'int a = null;',
+      convertPath('$projectPath/lib/src/a.dart'): 'int a = null;',
     });
     expect(response, hasLength(1));
 
@@ -169,21 +169,21 @@
             isNavigationTreeNode
                 .named('a.dart')
                 .havingPath(convertPath('lib/src/a.dart'))
-                .havingHref('/project/lib/src/a.dart', pathMapper)
+                .havingHref('$projectPath/lib/src/a.dart', pathMapper)
           ])
         ]));
   }
 
   Future<void> test_containsSingleLink_shallow() async {
     var response = await renderNavigationTree({
-      convertPath('/project/a.dart'): 'int a = null;',
+      convertPath('$projectPath/a.dart'): 'int a = null;',
     });
     expect(response, hasLength(1));
 
     var aNode = response[0];
     expect(aNode.name, 'a.dart');
     expect(aNode.path, 'a.dart');
-    expect(aNode.href, pathMapper.map(convertPath('/project/a.dart')));
+    expect(aNode.href, pathMapper.map(convertPath('$projectPath/a.dart')));
   }
 }
 
diff --git a/pkg/nnbd_migration/test/front_end/nnbd_migration_test_base.dart b/pkg/nnbd_migration/test/front_end/nnbd_migration_test_base.dart
index 972c478..3b31e90 100644
--- a/pkg/nnbd_migration/test/front_end/nnbd_migration_test_base.dart
+++ b/pkg/nnbd_migration/test/front_end/nnbd_migration_test_base.dart
@@ -167,10 +167,9 @@
     return unit;
   }
 
-  /// Uses the InfoBuilder to build information for test files.
+  /// Uses the [InfoBuilder] to build information for test files.
   ///
-  /// Returns
-  /// the singular UnitInfo which was built.
+  /// Returns the singular [UnitInfo] which was built.
   Future<List<UnitInfo>> buildInfoForTestFiles(Map<String, String> files,
       {String includedRoot}) async {
     var testPaths = <String>[];
diff --git a/pkg/nnbd_migration/test/front_end/unit_renderer_test.dart b/pkg/nnbd_migration/test/front_end/unit_renderer_test.dart
index e7f297a..3148db3 100644
--- a/pkg/nnbd_migration/test/front_end/unit_renderer_test.dart
+++ b/pkg/nnbd_migration/test/front_end/unit_renderer_test.dart
@@ -350,19 +350,18 @@
     // addition of a `?`, but at different offsets.  We make sure the `?`s get
     // added at the correct locations in each file.
     var files = {
-      convertPath('/project/lib/a.dart'): '''
+      convertPath('$projectPath/lib/a.dart'): '''
 part 'b.dart';
 
 int f() => null;
 ''',
-      convertPath('/project/lib/b.dart'): '''
+      convertPath('$projectPath/lib/b.dart'): '''
 part of 'a.dart';
 
 int g() => null;
 ''',
     };
-    var packageRoot = convertPath('/project');
-    await buildInfoForTestFiles(files, includedRoot: packageRoot);
+    await buildInfoForTestFiles(files, includedRoot: projectPath);
     var output = renderUnits();
     expect(output[0].sourceCode, contains('int?'));
     expect(output[1].sourceCode, contains('int?'));
diff --git a/pkg/nnbd_migration/test/instrumentation_test.dart b/pkg/nnbd_migration/test/instrumentation_test.dart
index 19cfacf..3a3856c 100644
--- a/pkg/nnbd_migration/test/instrumentation_test.dart
+++ b/pkg/nnbd_migration/test/instrumentation_test.dart
@@ -140,7 +140,8 @@
 
   Future<void> analyze(String content,
       {bool removeViaComments = false, bool warnOnWeakCode = true}) async {
-    var sourcePath = convertPath('/home/test/lib/test.dart');
+    var sourcePath =
+        convertPath('${AbstractContextTest.testsPath}/lib/test.dart');
     newFile(sourcePath, content: content);
     var listener = TestMigrationListener();
     var migration = NullabilityMigration(listener, getLineInfo,
diff --git a/pkg/nnbd_migration/test/migration_cli_test.dart b/pkg/nnbd_migration/test/migration_cli_test.dart
index febc90b..27af5aa 100644
--- a/pkg/nnbd_migration/test/migration_cli_test.dart
+++ b/pkg/nnbd_migration/test/migration_cli_test.dart
@@ -6,6 +6,7 @@
 import 'dart:convert';
 import 'dart:io';
 
+import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/file_system/file_system.dart' show ResourceProvider;
 import 'package:analyzer/file_system/memory_file_system.dart';
@@ -209,6 +210,9 @@
 
   final urlStartRegexp = RegExp('https?:');
 
+  final dartVersionIsNullSafeByDefault =
+      Feature.non_nullable.releaseVersion != null;
+
   String assertDecodeArgsFailure(List<String> args) {
     var cli = _createCli();
     try {
@@ -430,20 +434,8 @@
 environment:
   sdk: '${migrated ? '>=2.10.0 <2.12.0' : '>=2.6.0 <3.0.0'}'
 ''',
-      '.dart_tool/package_config.json': packageConfigText ??
-          '''
-{
-  "configVersion": 2,
-  "packages": [
-    {
-      "name": "test",
-      "rootUri": "../",
-      "packageUri": "lib/",
-      "languageVersion": "${migrated ? '2.10' : '2.6'}"
-    }
-  ]
-}
-''',
+      '.dart_tool/package_config.json':
+          packageConfigText ?? _getPackageConfigText(migrated: migrated),
       'lib/test.dart': sourceText ??
           '''
 int${migrated ? '?' : ''} f() => null;
@@ -1735,20 +1727,29 @@
     var projectContents = simpleProject()
       ..remove('.dart_tool/package_config.json');
     var projectDir = createProjectDir(projectContents);
-    var cliRunner = _createCli().decodeCommandLineArgs(
-        _parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
-    await cliRunner.run();
-    // The Dart source code should still be migrated.
-    assertProjectContents(
-        projectDir,
-        simpleProject(migrated: true)
-          ..remove('.dart_tool/package_config.json'));
+
+    if (dartVersionIsNullSafeByDefault) {
+      // The lack of a package config file means the test file is already opted
+      // in.
+      await assertRunFailure(
+          ['--no-web-preview', '--apply-changes', projectDir]);
+      _expectErrorIndicatingCodeIsAlreadyOptedIn();
+    } else {
+      var cliRunner = _createCli().decodeCommandLineArgs(
+          _parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
+      await cliRunner.run();
+      // 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,
+  "configVersion": 2,
   "packages": [
     {
       "name": "test",
@@ -1760,30 +1761,48 @@
 ''';
     var projectContents = simpleProject(packageConfigText: packageConfigText);
     var projectDir = createProjectDir(projectContents);
-    var cliRunner = _createCli().decodeCommandLineArgs(
-        _parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
-    await cliRunner.run();
-    // The Dart source code should still be migrated.
-    assertProjectContents(projectDir,
-        simpleProject(migrated: true, packageConfigText: packageConfigText));
+
+    if (dartVersionIsNullSafeByDefault) {
+      // An omitted languageVersion field means the code is opted in to null
+      // safety.
+      await assertRunFailure(
+          ['--no-web-preview', '--apply-changes', projectDir]);
+      _expectErrorIndicatingCodeIsAlreadyOptedIn();
+    } else {
+      var cliRunner = _createCli().decodeCommandLineArgs(
+          _parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
+      await cliRunner.run();
+      // 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,
+  "configVersion": 2,
   "packages": [
   ]
 }
 ''';
     var projectContents = simpleProject(packageConfigText: packageConfigText);
     var projectDir = createProjectDir(projectContents);
-    var cliRunner = _createCli().decodeCommandLineArgs(
-        _parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
-    await cliRunner.run();
-    // The Dart source code should still be migrated.
-    assertProjectContents(projectDir,
-        simpleProject(migrated: true, packageConfigText: packageConfigText));
+
+    if (dartVersionIsNullSafeByDefault) {
+      // An omitted entry in the package config means the code is opted in to null
+      // safety.
+      await assertRunFailure(
+          ['--no-web-preview', '--apply-changes', projectDir]);
+      _expectErrorIndicatingCodeIsAlreadyOptedIn();
+    } else {
+      var cliRunner = _createCli().decodeCommandLineArgs(
+          _parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
+      await cliRunner.run();
+      // The Dart source code should still be migrated.
+      assertProjectContents(projectDir,
+          simpleProject(migrated: true, packageConfigText: packageConfigText));
+    }
   }
 
   test_package_config_is_wrong_version() async {
@@ -1802,12 +1821,20 @@
 ''';
     var projectContents = simpleProject(packageConfigText: packageConfigText);
     var projectDir = createProjectDir(projectContents);
-    var cliRunner = _createCli().decodeCommandLineArgs(
-        _parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
-    await cliRunner.run();
-    // The Dart source code should still be migrated.
-    assertProjectContents(projectDir,
-        simpleProject(migrated: true, packageConfigText: packageConfigText));
+
+    if (dartVersionIsNullSafeByDefault) {
+      // An unreadable package config means the code is opted in to null safety.
+      await assertRunFailure(
+          ['--no-web-preview', '--apply-changes', projectDir]);
+      _expectErrorIndicatingCodeIsAlreadyOptedIn();
+    } else {
+      var cliRunner = _createCli().decodeCommandLineArgs(
+          _parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
+      await cliRunner.run();
+      // The Dart source code should still be migrated.
+      assertProjectContents(projectDir,
+          simpleProject(migrated: true, packageConfigText: packageConfigText));
+    }
   }
 
   test_pub_outdated_has_malformed_json() {
@@ -1939,9 +1966,7 @@
   }
 
   test_pubspec_does_not_exist() async {
-    var projectContents = simpleProject()
-      ..remove('pubspec.yaml')
-      ..remove('.dart_tool/package_config.json');
+    var projectContents = simpleProject()..remove('pubspec.yaml');
     var projectDir = createProjectDir(projectContents);
     var cliRunner = _createCli().decodeCommandLineArgs(
         _parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
@@ -1949,9 +1974,11 @@
     // The Dart source code should still be migrated.
     assertProjectContents(
         projectDir,
-        simpleProject(migrated: true)
-          ..remove('pubspec.yaml')
-          ..remove('.dart_tool/package_config.json'));
+        simpleProject(
+            migrated: true,
+            // The package config file should not have been touched.
+            packageConfigText: _getPackageConfigText(migrated: false))
+          ..remove('pubspec.yaml'));
   }
 
   test_pubspec_environment_is_missing_sdk() async {
@@ -1995,8 +2022,7 @@
 environment:
   sdk: 1
 ''';
-    var projectContents = simpleProject(pubspecText: pubspecText)
-      ..remove('.dart_tool/package_config.json');
+    var projectContents = simpleProject(pubspecText: pubspecText);
     var projectDir = createProjectDir(projectContents);
     var cliRunner = _createCli().decodeCommandLineArgs(
         _parseArgs(['--no-web-preview', '--apply-changes', projectDir]));
@@ -2004,8 +2030,11 @@
     // The Dart source code should still be migrated.
     assertProjectContents(
         projectDir,
-        simpleProject(migrated: true, pubspecText: pubspecText)
-          ..remove('.dart_tool/package_config.json'));
+        simpleProject(
+            migrated: true,
+            pubspecText: pubspecText,
+            // The package config file should not have been touched.
+            packageConfigText: _getPackageConfigText(migrated: false)));
   }
 
   test_pubspec_is_missing_environment() async {
@@ -2055,6 +2084,15 @@
     return _MigrationCli(this);
   }
 
+  void _expectErrorIndicatingCodeIsAlreadyOptedIn() {
+    var errorOutput = logger.stdoutBuffer.toString();
+    expect(errorOutput, contains('1 analysis issue found:'));
+    expect(
+        errorOutput,
+        contains("A value of type 'Null' can't be returned from function 'f' "
+            "because it has a return type of 'int'"));
+  }
+
   String _getHelpText({@required bool verbose}) {
     var cliRunner = _createCli().decodeCommandLineArgs(_parseArgs(
         ['--${CommandLineOptions.helpFlag}', if (verbose) '--verbose']));
@@ -2066,6 +2104,20 @@
   ArgResults _parseArgs(List<String> args) {
     return MigrationCli.createParser().parse(args);
   }
+
+  static String _getPackageConfigText({@required bool migrated}) => '''
+{
+  "configVersion": 2,
+  "packages": [
+    {
+      "name": "test",
+      "rootUri": "../",
+      "packageUri": "lib/",
+      "languageVersion": "${migrated ? '2.10' : '2.6'}"
+    }
+  ]
+}
+''';
 }
 
 @reflectiveTest
diff --git a/pkg/vm/bin/dump_bytecode_ngrams.dart b/pkg/vm/bin/dump_bytecode_ngrams.dart
deleted file mode 100644
index 50ec2a4..0000000
--- a/pkg/vm/bin/dump_bytecode_ngrams.dart
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io' as io;
-
-import 'package:args/args.dart' show ArgParser, ArgResults;
-import 'package:vm/bytecode/ngrams.dart';
-
-final ArgParser _argParser = new ArgParser(allowTrailingOptions: true)
-  ..addFlag('basic-blocks',
-      help: 'Only allow control flow as the last instruction in a window',
-      defaultsTo: true)
-  ..addOption('output',
-      abbr: 'o', help: 'Path to output file', defaultsTo: null)
-  ..addFlag('merge-pushes',
-      help: 'Do not distinguish among different kinds of Push opcodes',
-      defaultsTo: false)
-  ..addFlag('sort',
-      abbr: 's', help: 'Sort the output by ngram frequency', defaultsTo: true)
-  ..addOption('threshold',
-      abbr: 't', help: 'Minimum ngram count threshold', defaultsTo: "1")
-  ..addOption('window', abbr: 'w', help: 'Window size', defaultsTo: "3");
-
-final String _usage = '''
-Usage: dump_bytecode_ngrams [options] input.trace
-
-Dumps stats about a dynamic bytecode instruction trace produced with the
-Dart VM option --interpreter-trace-file, e.g.:
-
-\$ dart --enable-interpreter --interpreter-trace-file=trace program.dart
-
-Options:
-${_argParser.usage}
-''';
-
-const int _badUsageExitCode = 1;
-
-void main(List<String> arguments) {
-  final ArgResults options = _argParser.parse(arguments);
-  if ((options.rest.length != 1) || (options['output'] == null)) {
-    print(_usage);
-    io.exit(_badUsageExitCode);
-  }
-
-  final basicBlocks = options['basic-blocks'];
-  final input = options.rest.single;
-  final output = options['output'];
-  final mergePushes = options['merge-pushes'];
-  final windowSize = int.parse(options['window']);
-  final sort = options['sort'];
-  final threshold = int.parse(options['threshold']);
-
-  if (!(new io.File(input).existsSync())) {
-    print("The file '$input' does not exist");
-    print(_usage);
-    io.exit(_badUsageExitCode);
-  }
-
-  NGramReader nGramReader = new NGramReader(input);
-  nGramReader.readAllNGrams(windowSize,
-      basicBlocks: basicBlocks, mergePushes: mergePushes);
-  nGramReader.writeNGramStats(output, sort: sort, minCount: threshold);
-}
diff --git a/pkg/vm/bin/dump_kernel.dart b/pkg/vm/bin/dump_kernel.dart
index 852c073..d41077f 100644
--- a/pkg/vm/bin/dump_kernel.dart
+++ b/pkg/vm/bin/dump_kernel.dart
@@ -8,7 +8,6 @@
 import 'package:kernel/binary/ast_from_binary.dart'
     show BinaryBuilderWithMetadata;
 
-import 'package:vm/metadata/bytecode.dart' show BytecodeMetadataRepository;
 import 'package:vm/metadata/direct_call.dart' show DirectCallMetadataRepository;
 import 'package:vm/metadata/inferred_type.dart'
     show InferredTypeMetadataRepository;
@@ -48,7 +47,6 @@
   component.addMetadataRepository(new TableSelectorMetadataRepository());
   component.addMetadataRepository(new UnboxingInfoMetadataRepository());
   component.addMetadataRepository(new UnreachableNodeMetadataRepository());
-  component.addMetadataRepository(new BytecodeMetadataRepository());
   component.addMetadataRepository(new CallSiteAttributesMetadataRepository());
   component.addMetadataRepository(new LoadingUnitsMetadataRepository());
 
diff --git a/pkg/vm/bin/kernel_service.dart b/pkg/vm/bin/kernel_service.dart
index b980799..778ccc0 100644
--- a/pkg/vm/bin/kernel_service.dart
+++ b/pkg/vm/bin/kernel_service.dart
@@ -39,15 +39,9 @@
 import 'package:kernel/core_types.dart' show CoreTypes;
 import 'package:kernel/kernel.dart' show Component, Library, Procedure;
 import 'package:kernel/target/targets.dart' show TargetFlags;
-import 'package:vm/bytecode/gen_bytecode.dart'
-    show createFreshComponentWithBytecode, generateBytecode;
-import 'package:vm/bytecode/options.dart' show BytecodeOptions;
 import 'package:vm/incremental_compiler.dart';
 import 'package:vm/kernel_front_end.dart'
-    show
-        autoDetectNullSafetyMode,
-        createLoadedLibrariesSet,
-        runWithFrontEndCompilerContext;
+    show autoDetectNullSafetyMode, createLoadedLibrariesSet;
 import 'package:vm/http_filesystem.dart';
 import 'package:vm/target/vm.dart' show VmTarget;
 import 'package:front_end/src/api_prototype/compiler_options.dart'
@@ -99,7 +93,6 @@
     bool enableAsserts,
     int nullSafety,
     List<String> experimentalFlags,
-    bool bytecode,
     Uri packagesUri,
     List<String> errors) {
   final expFlags = <String>[];
@@ -117,7 +110,6 @@
     ..sdkSummary = platformKernelPath
     ..verbose = verbose
     ..omitPlatform = true
-    ..bytecode = bytecode
     ..explicitExperimentalFlags = parseExperimentalFlags(
         parseExperimentalArguments(expFlags),
         onError: (msg) => errors.add(msg))
@@ -156,7 +148,6 @@
   final bool enableAsserts;
   final int nullSafety;
   final List<String> experimentalFlags;
-  final bool bytecode;
   final String packageConfig;
 
   // Code coverage and hot reload are only supported by incremental compiler,
@@ -173,7 +164,6 @@
       this.enableAsserts: false,
       this.nullSafety: kNullSafetyOptionUnspecified,
       this.experimentalFlags: null,
-      this.bytecode: false,
       this.supportCodeCoverage: false,
       this.supportHotReload: false,
       this.packageConfig: null}) {
@@ -198,67 +188,20 @@
         enableAsserts,
         nullSafety,
         experimentalFlags,
-        bytecode,
         packagesUri,
         errors);
   }
 
   Future<CompilerResult> compile(Uri script) {
     return runWithPrintToStderr(() async {
-      CompilerResult compilerResult = await compileInternal(script);
-      Component component = compilerResult.component;
+      final CompilerResult compilerResult = await compileInternal(script);
+      final Component component = compilerResult.component;
 
       if (errors.isEmpty) {
-        // Record dependencies only if compilation was error free, and before
-        // createFreshComponentWithBytecode drops the uriToSource table.
+        // Record dependencies only if compilation was error free.
         _recordDependencies(isolateId, component, options.packagesFileUri);
       }
 
-      if (options.bytecode && errors.isEmpty) {
-        final List<Library> libraries = new List<Library>();
-        final Set<Library> loadedLibraries = compilerResult.loadedLibraries;
-        for (Library library in component.libraries) {
-          if (loadedLibraries.contains(library)) continue;
-          libraries.add(library);
-        }
-
-        await runWithFrontEndCompilerContext(script, options, component, () {
-          // TODO(alexmarkov): disable local variables info,
-          //  debugger stops and source files in VM PRODUCT mode.
-          // TODO(rmacnak): disable annotations if mirrors are not enabled.
-          generateBytecode(component,
-              libraries: libraries,
-              coreTypes: compilerResult.coreTypes,
-              hierarchy: compilerResult.classHierarchy,
-              options: new BytecodeOptions(
-                enableAsserts: enableAsserts,
-                environmentDefines: options.environmentDefines,
-                // Needed both for stack traces and the debugger.
-                emitSourcePositions: true,
-                // Only needed when the debugger is available.
-                emitLocalVarInfo: true,
-                // Only needed when the debugger is available.
-                emitDebuggerStops: true,
-                // Only needed when the VM service is available.
-                emitSourceFiles: true,
-                // Only needed when reload is available.
-                emitInstanceFieldInitializers: supportHotReload,
-                // Only needed when mirrors are available.
-                emitAnnotations: true,
-                // Only needed when observatory (source report) is available.
-                keepUnreachableCode: supportCodeCoverage,
-                avoidClosureCallInstructions: supportCodeCoverage,
-              ));
-          Component freshComponent =
-              createFreshComponentWithBytecode(component);
-          compilerResult = new CompilerResult(
-              freshComponent,
-              compilerResult.loadedLibraries,
-              compilerResult.classHierarchy,
-              compilerResult.coreTypes);
-        });
-      }
-
       return compilerResult;
     });
   }
@@ -336,14 +279,12 @@
       bool enableAsserts: false,
       int nullSafety: kNullSafetyOptionUnspecified,
       List<String> experimentalFlags: null,
-      bool bytecode: false,
       String packageConfig: null})
       : super(isolateId, fileSystem, platformKernelPath,
             suppressWarnings: suppressWarnings,
             enableAsserts: enableAsserts,
             nullSafety: nullSafety,
             experimentalFlags: experimentalFlags,
-            bytecode: bytecode,
             supportHotReload: true,
             supportCodeCoverage: true,
             packageConfig: packageConfig);
@@ -356,14 +297,12 @@
       {bool suppressWarnings: false,
       bool enableAsserts: false,
       List<String> experimentalFlags: null,
-      bool bytecode: false,
       String packageConfig: null}) {
     IncrementalCompilerWrapper result = IncrementalCompilerWrapper(
         isolateId, fileSystem, platformKernelPath,
         suppressWarnings: suppressWarnings,
         enableAsserts: enableAsserts,
         experimentalFlags: experimentalFlags,
-        bytecode: bytecode,
         packageConfig: packageConfig);
     result.generator = new IncrementalCompiler.forExpressionCompilationOnly(
         component,
@@ -393,7 +332,6 @@
         enableAsserts: enableAsserts,
         nullSafety: nullSafety,
         experimentalFlags: experimentalFlags,
-        bytecode: bytecode,
         packageConfig: packageConfig);
 
     generator.resetDeltaState();
@@ -424,14 +362,12 @@
       bool enableAsserts: false,
       int nullSafety: kNullSafetyOptionUnspecified,
       List<String> experimentalFlags: null,
-      bool bytecode: false,
       String packageConfig: null})
       : super(isolateId, fileSystem, platformKernelPath,
             suppressWarnings: suppressWarnings,
             enableAsserts: enableAsserts,
             nullSafety: nullSafety,
             experimentalFlags: experimentalFlags,
-            bytecode: bytecode,
             packageConfig: packageConfig);
 
   @override
@@ -466,7 +402,6 @@
     bool enableAsserts: false,
     int nullSafety: kNullSafetyOptionUnspecified,
     List<String> experimentalFlags: null,
-    bool bytecode: false,
     String packageConfig: null,
     String multirootFilepaths,
     String multirootScheme}) async {
@@ -498,7 +433,6 @@
           enableAsserts: enableAsserts,
           nullSafety: nullSafety,
           experimentalFlags: experimentalFlags,
-          bytecode: bytecode,
           packageConfig: packageConfig);
     }
     isolateCompilers[isolateId] = compiler;
@@ -552,7 +486,6 @@
   final bool enableAsserts = request[13];
   final List<String> experimentalFlags =
       request[14] != null ? request[14].cast<String>() : null;
-  final bool bytecode = request[15];
 
   IncrementalCompilerWrapper compiler = isolateCompilers[isolateId];
 
@@ -635,7 +568,6 @@
             suppressWarnings: suppressWarnings,
             enableAsserts: enableAsserts,
             experimentalFlags: experimentalFlags,
-            bytecode: bytecode,
             packageConfig: dotPackagesFile);
         isolateCompilers[isolateId] = compiler;
         await compiler.compile(
@@ -678,19 +610,6 @@
       result = new CompilationResult.errors(compiler.errors, null);
     } else {
       Component component = createExpressionEvaluationComponent(procedure);
-      if (compiler.bytecode) {
-        await runWithFrontEndCompilerContext(
-            compiler.generator.entryPoint, compiler.options, component, () {
-          generateBytecode(component,
-              coreTypes: compiler.generator.getCoreTypes(),
-              hierarchy: compiler.generator.getClassHierarchy(),
-              options: new BytecodeOptions(
-                enableAsserts: compiler.enableAsserts,
-                environmentDefines: compiler.options.environmentDefines,
-              ));
-          component = createFreshComponentWithBytecode(component);
-        });
-      }
       result = new CompilationResult.ok(serializeComponent(component));
     }
   } catch (error, stack) {
@@ -813,7 +732,6 @@
   final bool enableAsserts = request[9];
   final List<String> experimentalFlags =
       request[10] != null ? request[10].cast<String>() : null;
-  final bool bytecode = request[11];
   final String packageConfig = request[12];
   final String multirootFilepaths = request[13];
   final String multirootScheme = request[14];
@@ -876,7 +794,7 @@
     }
     final List<String> errors = <String>[];
     var options = setupCompilerOptions(fileSystem, platformKernelPath, false,
-        false, nullSafety, experimentalFlags, false, packagesUri, errors);
+        false, nullSafety, experimentalFlags, packagesUri, errors);
 
     // script should only be null for kUpdateSourcesTag.
     assert(script != null);
@@ -900,7 +818,6 @@
         enableAsserts: enableAsserts,
         nullSafety: nullSafety,
         experimentalFlags: experimentalFlags,
-        bytecode: bytecode,
         packageConfig: packageConfig,
         multirootFilepaths: multirootFilepaths,
         multirootScheme: multirootScheme);
@@ -914,7 +831,6 @@
         enableAsserts: enableAsserts,
         nullSafety: nullSafety,
         experimentalFlags: experimentalFlags,
-        bytecode: bytecode,
         packageConfig: packageConfig);
   }
 
@@ -1016,9 +932,9 @@
   return fileSystem;
 }
 
-train(String scriptUri, String platformKernelPath, bool bytecode) async {
+train(String scriptUri, String platformKernelPath) async {
   // Train on program asked to train on.
-  await trainInternal(scriptUri, platformKernelPath, bytecode);
+  await trainInternal(scriptUri, platformKernelPath);
 
   // Also train a few times on a hello-world program to make sure we exercise
   // the startup sequence.
@@ -1032,16 +948,14 @@
           """);
   try {
     for (int i = 0; i < 10; i++) {
-      await trainInternal(
-          helloDart.uri.toString(), platformKernelPath, bytecode);
+      await trainInternal(helloDart.uri.toString(), platformKernelPath);
     }
   } finally {
     tmpDir.deleteSync(recursive: true);
   }
 }
 
-Future trainInternal(
-    String scriptUri, String platformKernelPath, bool bytecode) async {
+Future trainInternal(String scriptUri, String platformKernelPath) async {
   var tag = kTrainTag;
   var responsePort = new RawReceivePort();
   responsePort.handler = (response) {
@@ -1067,7 +981,7 @@
     false /* suppress warnings */,
     false /* enable asserts */,
     null /* experimental_flags */,
-    bytecode,
+    null /* unused */,
     null /* package_config */,
     null /* multirootFilepaths */,
     null /* multirootScheme */,
@@ -1081,17 +995,11 @@
     // This entry point is used when creating an app snapshot.
     // It takes the following extra arguments:
     // 1) Script to compile.
-    // 2) Optional '--bytecode' argument to train bytecode generation.
-    // 3) Optional platform kernel path.
+    // 2) Optional platform kernel path.
     int argIndex = 1;
     final String script = args[argIndex++];
-    bool bytecode = false;
-    if ((argIndex < args.length) && (args[argIndex] == '--bytecode')) {
-      bytecode = true;
-      ++argIndex;
-    }
     final String platform = (argIndex < args.length) ? args[argIndex] : null;
-    train(script, platform, bytecode);
+    train(script, platform);
   } else {
     // Entry point for the Kernel isolate.
     return new RawReceivePort()..handler = _processLoadRequest;
diff --git a/pkg/vm/bin/protobuf_aware_treeshaker.dart b/pkg/vm/bin/protobuf_aware_treeshaker.dart
index 143a4c6..d1fa2d1 100644
--- a/pkg/vm/bin/protobuf_aware_treeshaker.dart
+++ b/pkg/vm/bin/protobuf_aware_treeshaker.dart
@@ -52,9 +52,6 @@
         help: 'If set, produces kernel file for AOT compilation (enables '
             'global transformations). Otherwise, writes regular dill.',
         defaultsTo: false)
-    ..addFlag('gen-bytecode',
-        help:
-            'If true, the kernel file will be output in bytecode format. Defaults to true if --aot, false otherwise')
     ..addFlag('write-txt',
         help: 'Also write the result in kernel-text format as <out.dill>.txt',
         defaultsTo: false)
diff --git a/pkg/vm/lib/bytecode/assembler.dart b/pkg/vm/lib/bytecode/assembler.dart
deleted file mode 100644
index be95068..0000000
--- a/pkg/vm/lib/bytecode/assembler.dart
+++ /dev/null
@@ -1,759 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library vm.bytecode.assembler;
-
-import 'package:kernel/ast.dart' show TreeNode;
-import 'package:vm/bytecode/options.dart';
-
-import 'dbc.dart';
-import 'exceptions.dart' show ExceptionsTable;
-import 'local_variable_table.dart' show LocalVariableTable;
-import 'source_positions.dart' show SourcePositions;
-
-import 'dart:typed_data' show Uint8List;
-
-class Label {
-  final bool allowsBackwardJumps;
-  List<int> _jumps = <int>[];
-  int offset = -1;
-
-  Label({this.allowsBackwardJumps: false});
-
-  bool get isBound => offset >= 0;
-
-  int jumpOperand(int jumpOffset) {
-    if (isBound) {
-      if (offset <= jumpOffset && !allowsBackwardJumps) {
-        throw 'Backward jump to this label is not allowed';
-      }
-      // Jump instruction takes a relative offset.
-      return offset - jumpOffset;
-    }
-    _jumps.add(jumpOffset);
-    return 0;
-  }
-
-  List<int> bind(int offset) {
-    assert(!isBound);
-    this.offset = offset;
-    final jumps = _jumps;
-    _jumps = null;
-    return jumps;
-  }
-}
-
-class BytecodeAssembler {
-  static const int kByteMask = 0xFF;
-  static const int kUint32Mask = 0xFFFFFFFF;
-  static const int kMinInt8 = -0x80;
-  static const int kMaxInt8 = 0x7F;
-  static const int kMinInt24 = -0x800000;
-  static const int kMaxInt24 = 0x7FFFFF;
-  static const int kMinInt32 = -0x80000000;
-  static const int kMaxInt32 = 0x7FFFFFFF;
-
-  static const int kInitialCapacity = 32;
-
-  int _length = 0;
-  Uint8List _buffer = new Uint8List(kInitialCapacity);
-
-  final ExceptionsTable exceptionsTable = new ExceptionsTable();
-  final LocalVariableTable localVariableTable = new LocalVariableTable();
-  final SourcePositions sourcePositions = new SourcePositions();
-  final bool _emitSourcePositions;
-  bool isUnreachable = false;
-  int currentSourcePosition = TreeNode.noOffset;
-
-  BytecodeAssembler(BytecodeOptions options)
-      : _emitSourcePositions = options.emitSourcePositions;
-
-  int get offset => _length;
-
-  Uint8List get bytecode => new Uint8List.view(_buffer.buffer, 0, _length);
-
-  void bind(Label label) {
-    final List<int> jumps = label.bind(offset);
-    for (int jumpOffset in jumps) {
-      _patchJump(jumpOffset, label.jumpOperand(jumpOffset));
-    }
-    if (jumps.isNotEmpty || label.allowsBackwardJumps) {
-      isUnreachable = false;
-    }
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitSourcePosition() {
-    if (_emitSourcePositions &&
-        !isUnreachable &&
-        currentSourcePosition != TreeNode.noOffset) {
-      sourcePositions.add(offset, currentSourcePosition);
-    }
-  }
-
-  // TreeNode.noOffset (-1) source position on calls is used to mark synthetic
-  // calls without corresponding source position. Debugger uses the absence of
-  // source position to distinguish these calls and avoid stopping at them
-  // while single stepping.
-  @pragma('vm:prefer-inline')
-  void emitSourcePositionForCall() {
-    if (_emitSourcePositions && !isUnreachable) {
-      sourcePositions.add(
-          offset,
-          currentSourcePosition == TreeNode.noOffset
-              ? SourcePositions.syntheticCodeMarker
-              : currentSourcePosition);
-    }
-  }
-
-  void emitYieldPointSourcePosition(int yieldSourcePosition) {
-    if (!isUnreachable) {
-      sourcePositions.addYieldPoint(offset, yieldSourcePosition);
-    }
-  }
-
-  void _grow() {
-    final newSize = _buffer.length << 1;
-    final newBuffer = new Uint8List(newSize);
-    newBuffer.setRange(0, _buffer.length, _buffer);
-    _buffer = newBuffer;
-  }
-
-  void _growAndEmitBytes(int b0, [int b1, int b2, int b3, int b4, int b5]) {
-    _grow();
-    assert(_length + 6 < _buffer.length);
-    _buffer[_length] = b0;
-    ++_length;
-    if (b1 != null) {
-      _buffer[_length] = b1;
-      ++_length;
-      if (b2 != null) {
-        _buffer[_length] = b2;
-        ++_length;
-        if (b3 != null) {
-          _buffer[_length] = b3;
-          ++_length;
-          if (b4 != null) {
-            _buffer[_length] = b4;
-            ++_length;
-            if (b5 != null) {
-              _buffer[_length] = b5;
-              ++_length;
-            }
-          }
-        }
-      }
-    }
-  }
-
-  @pragma('vm:prefer-inline')
-  void _emitByte(int abyte) {
-    assert(_isUint8(abyte));
-    if (_length < _buffer.length) {
-      _buffer[_length] = abyte;
-      ++_length;
-    } else {
-      _growAndEmitBytes(abyte);
-    }
-  }
-
-  @pragma('vm:prefer-inline')
-  void _emitBytes2(int b0, int b1) {
-    assert(_isUint8(b0) && _isUint8(b1));
-    if (_length + 1 < _buffer.length) {
-      _buffer[_length] = b0;
-      _buffer[_length + 1] = b1;
-      _length += 2;
-    } else {
-      _growAndEmitBytes(b0, b1);
-    }
-  }
-
-  @pragma('vm:prefer-inline')
-  void _emitBytes3(int b0, int b1, int b2) {
-    assert(_isUint8(b0) && _isUint8(b1) && _isUint8(b2));
-    if (_length + 2 < _buffer.length) {
-      _buffer[_length] = b0;
-      _buffer[_length + 1] = b1;
-      _buffer[_length + 2] = b2;
-      _length += 3;
-    } else {
-      _growAndEmitBytes(b0, b1, b2);
-    }
-  }
-
-  @pragma('vm:prefer-inline')
-  void _emitBytes4(int b0, int b1, int b2, int b3) {
-    assert(_isUint8(b0) && _isUint8(b1) && _isUint8(b2) && _isUint8(b3));
-    if (_length + 3 < _buffer.length) {
-      _buffer[_length] = b0;
-      _buffer[_length + 1] = b1;
-      _buffer[_length + 2] = b2;
-      _buffer[_length + 3] = b3;
-      _length += 4;
-    } else {
-      _growAndEmitBytes(b0, b1, b2, b3);
-    }
-  }
-
-  void _emitBytes5(int b0, int b1, int b2, int b3, int b4) {
-    assert(_isUint8(b0) &&
-        _isUint8(b1) &&
-        _isUint8(b2) &&
-        _isUint8(b3) &&
-        _isUint8(b4));
-    if (_length + 4 < _buffer.length) {
-      _buffer[_length] = b0;
-      _buffer[_length + 1] = b1;
-      _buffer[_length + 2] = b2;
-      _buffer[_length + 3] = b3;
-      _buffer[_length + 4] = b4;
-      _length += 5;
-    } else {
-      _growAndEmitBytes(b0, b1, b2, b3, b4);
-    }
-  }
-
-  void _emitBytes6(int b0, int b1, int b2, int b3, int b4, int b5) {
-    assert(_isUint8(b0) &&
-        _isUint8(b1) &&
-        _isUint8(b2) &&
-        _isUint8(b3) &&
-        _isUint8(b4) &&
-        _isUint8(b5));
-    if (_length + 5 < _buffer.length) {
-      _buffer[_length] = b0;
-      _buffer[_length + 1] = b1;
-      _buffer[_length + 2] = b2;
-      _buffer[_length + 3] = b3;
-      _buffer[_length + 4] = b4;
-      _buffer[_length + 5] = b5;
-      _length += 6;
-    } else {
-      _growAndEmitBytes(b0, b1, b2, b3, b4, b5);
-    }
-  }
-
-  int _byteAt(int pos) {
-    return _buffer[pos];
-  }
-
-  void _setByteAt(int pos, int value) {
-    assert(_isUint8(value));
-    _buffer[pos] = value;
-  }
-
-  @pragma('vm:prefer-inline')
-  int _byte0(int v) => v & kByteMask;
-
-  @pragma('vm:prefer-inline')
-  int _byte1(int v) => (v >> 8) & kByteMask;
-
-  @pragma('vm:prefer-inline')
-  int _byte2(int v) => (v >> 16) & kByteMask;
-
-  @pragma('vm:prefer-inline')
-  int _byte3(int v) => (v >> 24) & kByteMask;
-
-  @pragma('vm:prefer-inline')
-  bool _isInt8(int v) => (kMinInt8 <= v) && (v <= kMaxInt8);
-
-  @pragma('vm:prefer-inline')
-  bool _isInt24(int v) => (kMinInt24 <= v) && (v <= kMaxInt24);
-
-  @pragma('vm:prefer-inline')
-  bool _isInt32(int v) => (kMinInt32 <= v) && (v <= kMaxInt32);
-
-  @pragma('vm:prefer-inline')
-  bool _isUint8(int v) => (v & kByteMask) == v;
-
-  @pragma('vm:prefer-inline')
-  bool _isUint32(int v) => (v & kUint32Mask) == v;
-
-  @pragma('vm:prefer-inline')
-  void _emitInstruction0(Opcode opcode) {
-    if (isUnreachable) {
-      return;
-    }
-    _emitByte(opcode.index);
-  }
-
-  @pragma('vm:prefer-inline')
-  void _emitInstructionA(Opcode opcode, int ra) {
-    if (isUnreachable) {
-      return;
-    }
-    _emitBytes2(opcode.index, ra);
-  }
-
-  @pragma('vm:prefer-inline')
-  void _emitInstructionD(Opcode opcode, int rd) {
-    if (isUnreachable) {
-      return;
-    }
-    if (_isUint8(rd)) {
-      _emitBytes2(opcode.index, rd);
-    } else {
-      assert(_isUint32(rd));
-      _emitBytes5(opcode.index + kWideModifier, _byte0(rd), _byte1(rd),
-          _byte2(rd), _byte3(rd));
-    }
-  }
-
-  @pragma('vm:prefer-inline')
-  void _emitInstructionX(Opcode opcode, int rx) {
-    if (isUnreachable) {
-      return;
-    }
-    if (_isInt8(rx)) {
-      _emitBytes2(opcode.index, rx & kByteMask);
-    } else {
-      assert(_isInt32(rx));
-      _emitBytes5(opcode.index + kWideModifier, _byte0(rx), _byte1(rx),
-          _byte2(rx), _byte3(rx));
-    }
-  }
-
-  @pragma('vm:prefer-inline')
-  void _emitInstructionAE(Opcode opcode, int ra, int re) {
-    if (isUnreachable) {
-      return;
-    }
-    if (_isUint8(re)) {
-      _emitBytes3(opcode.index, ra, re);
-    } else {
-      assert(_isUint32(re));
-      _emitBytes6(opcode.index + kWideModifier, ra, _byte0(re), _byte1(re),
-          _byte2(re), _byte3(re));
-    }
-  }
-
-  @pragma('vm:prefer-inline')
-  void _emitInstructionAY(Opcode opcode, int ra, int ry) {
-    if (isUnreachable) {
-      return;
-    }
-    if (_isInt8(ry)) {
-      _emitBytes3(opcode.index, ra, ry & kByteMask);
-    } else {
-      assert(_isInt32(ry));
-      _emitBytes6(opcode.index + kWideModifier, ra, _byte0(ry), _byte1(ry),
-          _byte2(ry), _byte3(ry));
-    }
-  }
-
-  @pragma('vm:prefer-inline')
-  void _emitInstructionDF(Opcode opcode, int rd, int rf) {
-    if (isUnreachable) {
-      return;
-    }
-    if (_isUint8(rd)) {
-      _emitBytes3(opcode.index, rd, rf);
-    } else {
-      assert(_isUint32(rd));
-      _emitBytes6(opcode.index + kWideModifier, _byte0(rd), _byte1(rd),
-          _byte2(rd), _byte3(rd), rf);
-    }
-  }
-
-  @pragma('vm:prefer-inline')
-  void _emitInstructionABC(Opcode opcode, int ra, int rb, int rc) {
-    if (isUnreachable) {
-      return;
-    }
-    _emitBytes4(opcode.index, ra, rb, rc);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitSpecializedBytecode(Opcode opcode) {
-    assert(BytecodeFormats[opcode].encoding == Encoding.k0);
-    emitSourcePosition();
-    _emitInstruction0(opcode);
-  }
-
-  @pragma('vm:prefer-inline')
-  void _emitJumpInstruction(Opcode opcode, Label label) {
-    assert(isJump(opcode));
-    if (isUnreachable) {
-      return;
-    }
-    final int target = label.jumpOperand(offset);
-    // Use compact representation only for backwards jumps.
-    // TODO(alexmarkov): generate compact forward jumps as well.
-    if (label.isBound && _isInt8(target)) {
-      _emitBytes2(opcode.index, target & kByteMask);
-    } else {
-      assert(_isInt24(target));
-      _emitBytes4(opcode.index + kWideModifier, _byte0(target), _byte1(target),
-          _byte2(target));
-    }
-  }
-
-  void _patchJump(int pos, int rt) {
-    final Opcode opcode = Opcode.values[_byteAt(pos) - kWideModifier];
-    assert(hasWideVariant(opcode));
-    assert(isJump(opcode));
-    assert(_isInt24(rt));
-    _setByteAt(pos + 1, _byte0(rt));
-    _setByteAt(pos + 2, _byte1(rt));
-    _setByteAt(pos + 3, _byte2(rt));
-  }
-
-  void emitTrap() {
-    _emitInstruction0(Opcode.kTrap);
-    isUnreachable = true;
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitDrop1() {
-    _emitInstruction0(Opcode.kDrop1);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitJump(Label label) {
-    _emitJumpInstruction(Opcode.kJump, label);
-    isUnreachable = true;
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitJumpIfNoAsserts(Label label) {
-    _emitJumpInstruction(Opcode.kJumpIfNoAsserts, label);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitJumpIfNotZeroTypeArgs(Label label) {
-    _emitJumpInstruction(Opcode.kJumpIfNotZeroTypeArgs, label);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitJumpIfEqStrict(Label label) {
-    _emitJumpInstruction(Opcode.kJumpIfEqStrict, label);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitJumpIfNeStrict(Label label) {
-    _emitJumpInstruction(Opcode.kJumpIfNeStrict, label);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitJumpIfTrue(Label label) {
-    _emitJumpInstruction(Opcode.kJumpIfTrue, label);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitJumpIfFalse(Label label) {
-    _emitJumpInstruction(Opcode.kJumpIfFalse, label);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitJumpIfNull(Label label) {
-    _emitJumpInstruction(Opcode.kJumpIfNull, label);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitJumpIfNotNull(Label label) {
-    _emitJumpInstruction(Opcode.kJumpIfNotNull, label);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitJumpIfUnchecked(Label label) {
-    _emitJumpInstruction(Opcode.kJumpIfUnchecked, label);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitReturnTOS() {
-    emitSourcePosition();
-    _emitInstruction0(Opcode.kReturnTOS);
-    isUnreachable = true;
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitPush(int rx) {
-    _emitInstructionX(Opcode.kPush, rx);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitLoadConstant(int ra, int re) {
-    _emitInstructionAE(Opcode.kLoadConstant, ra, re);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitPushConstant(int rd) {
-    _emitInstructionD(Opcode.kPushConstant, rd);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitPushNull() {
-    _emitInstruction0(Opcode.kPushNull);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitPushTrue() {
-    _emitInstruction0(Opcode.kPushTrue);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitPushFalse() {
-    _emitInstruction0(Opcode.kPushFalse);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitPushInt(int rx) {
-    _emitInstructionX(Opcode.kPushInt, rx);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitStoreLocal(int rx) {
-    _emitInstructionX(Opcode.kStoreLocal, rx);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitPopLocal(int rx) {
-    _emitInstructionX(Opcode.kPopLocal, rx);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitDirectCall(int rd, int rf) {
-    emitSourcePositionForCall();
-    _emitInstructionDF(Opcode.kDirectCall, rd, rf);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitUncheckedDirectCall(int rd, int rf) {
-    emitSourcePositionForCall();
-    _emitInstructionDF(Opcode.kUncheckedDirectCall, rd, rf);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitInterfaceCall(int rd, int rf) {
-    emitSourcePositionForCall();
-    _emitInstructionDF(Opcode.kInterfaceCall, rd, rf);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitInstantiatedInterfaceCall(int rd, int rf) {
-    emitSourcePositionForCall();
-    _emitInstructionDF(Opcode.kInstantiatedInterfaceCall, rd, rf);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitUncheckedClosureCall(int rd, int rf) {
-    emitSourcePositionForCall();
-    _emitInstructionDF(Opcode.kUncheckedClosureCall, rd, rf);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitUncheckedInterfaceCall(int rd, int rf) {
-    emitSourcePositionForCall();
-    _emitInstructionDF(Opcode.kUncheckedInterfaceCall, rd, rf);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitDynamicCall(int rd, int rf) {
-    emitSourcePositionForCall();
-    _emitInstructionDF(Opcode.kDynamicCall, rd, rf);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitNativeCall(int rd) {
-    _emitInstructionD(Opcode.kNativeCall, rd);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitLoadStatic(int rd) {
-    _emitInstructionD(Opcode.kLoadStatic, rd);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitStoreStaticTOS(int rd) {
-    emitSourcePosition();
-    _emitInstructionD(Opcode.kStoreStaticTOS, rd);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitCreateArrayTOS() {
-    _emitInstruction0(Opcode.kCreateArrayTOS);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitAllocate(int rd) {
-    emitSourcePosition();
-    _emitInstructionD(Opcode.kAllocate, rd);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitAllocateT() {
-    emitSourcePosition();
-    _emitInstruction0(Opcode.kAllocateT);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitStoreIndexedTOS() {
-    _emitInstruction0(Opcode.kStoreIndexedTOS);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitStoreFieldTOS(int rd) {
-    emitSourcePosition();
-    _emitInstructionD(Opcode.kStoreFieldTOS, rd);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitStoreContextParent() {
-    _emitInstruction0(Opcode.kStoreContextParent);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitStoreContextVar(int ra, int re) {
-    _emitInstructionAE(Opcode.kStoreContextVar, ra, re);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitLoadFieldTOS(int rd) {
-    _emitInstructionD(Opcode.kLoadFieldTOS, rd);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitLoadTypeArgumentsField(int rd) {
-    _emitInstructionD(Opcode.kLoadTypeArgumentsField, rd);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitLoadContextParent() {
-    _emitInstruction0(Opcode.kLoadContextParent);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitLoadContextVar(int ra, int re) {
-    _emitInstructionAE(Opcode.kLoadContextVar, ra, re);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitBooleanNegateTOS() {
-    _emitInstruction0(Opcode.kBooleanNegateTOS);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitThrow(int ra) {
-    emitSourcePosition();
-    _emitInstructionA(Opcode.kThrow, ra);
-    isUnreachable = true;
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitEntry(int rd) {
-    _emitInstructionD(Opcode.kEntry, rd);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitFrame(int rd) {
-    _emitInstructionD(Opcode.kFrame, rd);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitSetFrame(int ra) {
-    _emitInstructionA(Opcode.kSetFrame, ra);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitAllocateContext(int ra, int re) {
-    _emitInstructionAE(Opcode.kAllocateContext, ra, re);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitCloneContext(int ra, int re) {
-    _emitInstructionAE(Opcode.kCloneContext, ra, re);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitMoveSpecial(SpecialIndex ra, int ry) {
-    _emitInstructionAY(Opcode.kMoveSpecial, ra.index, ry);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitInstantiateType(int rd) {
-    emitSourcePosition();
-    _emitInstructionD(Opcode.kInstantiateType, rd);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitInstantiateTypeArgumentsTOS(int ra, int re) {
-    emitSourcePosition();
-    _emitInstructionAE(Opcode.kInstantiateTypeArgumentsTOS, ra, re);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitAssertAssignable(int ra, int re) {
-    emitSourcePosition();
-    _emitInstructionAE(Opcode.kAssertAssignable, ra, re);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitAssertSubtype() {
-    emitSourcePosition();
-    _emitInstruction0(Opcode.kAssertSubtype);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitAssertBoolean(int ra) {
-    emitSourcePosition();
-    _emitInstructionA(Opcode.kAssertBoolean, ra);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitCheckStack(int ra) {
-    emitSourcePosition();
-    _emitInstructionA(Opcode.kCheckStack, ra);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitDebugCheck() {
-    emitSourcePosition();
-    _emitInstruction0(Opcode.kDebugCheck);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitCheckFunctionTypeArgs(int ra, int re) {
-    emitSourcePosition();
-    _emitInstructionAE(Opcode.kCheckFunctionTypeArgs, ra, re);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitEntryFixed(int ra, int re) {
-    _emitInstructionAE(Opcode.kEntryFixed, ra, re);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitEntryOptional(int ra, int rb, int rc) {
-    _emitInstructionABC(Opcode.kEntryOptional, ra, rb, rc);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitAllocateClosure(int rd) {
-    emitSourcePosition();
-    _emitInstructionD(Opcode.kAllocateClosure, rd);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitNullCheck(int rd) {
-    emitSourcePosition();
-    _emitInstructionD(Opcode.kNullCheck, rd);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitInitLateField(int rd) {
-    emitSourcePosition();
-    _emitInstructionD(Opcode.kInitLateField, rd);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitPushUninitializedSentinel() {
-    _emitInstruction0(Opcode.kPushUninitializedSentinel);
-  }
-
-  @pragma('vm:prefer-inline')
-  void emitJumpIfInitialized(Label label) {
-    _emitJumpInstruction(Opcode.kJumpIfInitialized, label);
-  }
-}
diff --git a/pkg/vm/lib/bytecode/bytecode_serialization.dart b/pkg/vm/lib/bytecode/bytecode_serialization.dart
deleted file mode 100644
index 671cf16..0000000
--- a/pkg/vm/lib/bytecode/bytecode_serialization.dart
+++ /dev/null
@@ -1,690 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library vm.bytecode.bytecode_serialization;
-
-import 'package:kernel/ast.dart' show BinarySink;
-import 'dart:typed_data' show ByteData, Endian, Uint8List, Uint16List;
-
-abstract class StringWriter {
-  int put(String string);
-}
-
-abstract class StringReader {
-  String get(int ref);
-}
-
-abstract class BytecodeObject {}
-
-abstract class ObjectWriter {
-  void writeObject(BytecodeObject object, BufferedWriter writer);
-}
-
-abstract class ObjectReader {
-  BytecodeObject readObject(BufferedReader reader);
-}
-
-class BufferedWriter {
-  /// Initial size of the buffer in BufferedWriter.
-  static const int initialSize = 1024;
-
-  /// Lists less than this size are copied into the buffer.
-  /// Larger lists are appended without copying.
-  static const int avoidCopyingSize = 1024;
-
-  /// Keep buffers with this remaining bytes or more, instead of
-  /// creating a new buffer.
-  static const int minRemainderToKeep = 256;
-
-  final int formatVersion;
-  final StringWriter stringWriter;
-  final ObjectWriter objectWriter;
-  final LinkWriter linkWriter;
-
-  // Prefix of the data stored in this writer.
-  // List of pairs Uint8List buffer, int length.
-  List<dynamic> _buffers;
-  // Total length of data in [_buffers].
-  int _buffersLength = 0;
-
-  Uint8List _currentBuffer = new Uint8List(initialSize);
-  int _currentLength = 0;
-  int _nextBufferSize = initialSize << 1;
-
-  BufferedWriter(this.formatVersion, this.stringWriter, this.objectWriter,
-      this.linkWriter);
-
-  factory BufferedWriter.fromWriter(BufferedWriter writer) =>
-      new BufferedWriter(writer.formatVersion, writer.stringWriter,
-          writer.objectWriter, writer.linkWriter);
-
-  Uint8List getContents() {
-    if (_buffers == null) {
-      return new Uint8List.view(
-          _currentBuffer.buffer, _currentBuffer.offsetInBytes, _currentLength);
-    }
-    final Uint8List result = new Uint8List(_buffersLength + _currentLength);
-    int position = 0;
-    for (int i = 0; i < _buffers.length; i += 2) {
-      final Uint8List buf = _buffers[i];
-      final int len = _buffers[i + 1];
-      result.setRange(position, position + len, buf);
-      position += len;
-    }
-    assert(position == _buffersLength);
-    result.setRange(position, position + _currentLength, _currentBuffer);
-    return result;
-  }
-
-  void writeContentsToBinarySink(BinarySink sink) {
-    if (_buffers != null) {
-      for (int i = 0; i < _buffers.length; i += 2) {
-        Uint8List buf = _buffers[i];
-        final int len = _buffers[i + 1];
-        if (len != buf.length) {
-          buf = new Uint8List.view(buf.buffer, buf.offsetInBytes, len);
-        }
-        sink.writeBytes(buf);
-      }
-    }
-    Uint8List buf = _currentBuffer;
-    if (_currentLength != buf.length) {
-      buf = new Uint8List.view(buf.buffer, buf.offsetInBytes, _currentLength);
-    }
-    sink.writeBytes(buf);
-  }
-
-  int get offset => _buffersLength + _currentLength;
-
-  @pragma('vm:prefer-inline')
-  void _addByte(int value) {
-    assert((value >> 8) == 0);
-    _currentBuffer[_currentLength] = value;
-    ++_currentLength;
-  }
-
-  void _flushBuffer(Uint8List buf, int len) {
-    _buffers ??= <dynamic>[];
-    _buffers.add(buf);
-    _buffers.add(len);
-    _buffersLength += len;
-  }
-
-  void _flushCurrentBuffer() {
-    _flushBuffer(_currentBuffer, _currentLength);
-    _currentBuffer = null;
-    _currentLength = 0;
-  }
-
-  @pragma('vm:never-inline')
-  void _grow() {
-    _flushCurrentBuffer();
-    // Callers of _grow() expect up to avoidCopyingSize bytes to be available.
-    assert(_nextBufferSize >= avoidCopyingSize);
-    _currentBuffer = new Uint8List(_nextBufferSize);
-    _nextBufferSize = _nextBufferSize << 1;
-  }
-
-  @pragma('vm:prefer-inline')
-  void writeByte(int value) {
-    if (_currentLength == _currentBuffer.length) {
-      _grow();
-    }
-    _addByte(value);
-  }
-
-  void appendUint8List(Uint8List src) {
-    if (src.length < avoidCopyingSize) {
-      if (_currentLength > _currentBuffer.length - src.length) {
-        _grow();
-      }
-      _currentBuffer.setRange(_currentLength, _currentLength + src.length, src);
-      _currentLength += src.length;
-    } else {
-      final int remainingBytes = _currentBuffer.length - _currentLength;
-      if (remainingBytes >= minRemainderToKeep) {
-        final Uint8List remainder = new Uint8List.view(_currentBuffer.buffer,
-            _currentBuffer.offsetInBytes + _currentLength, remainingBytes);
-        _flushCurrentBuffer();
-        _flushBuffer(src, src.length);
-        _currentBuffer = remainder;
-        _currentLength = 0;
-      } else {
-        _flushCurrentBuffer();
-        _currentBuffer = src;
-        _currentLength = src.length;
-      }
-    }
-  }
-
-  void appendWriter(BufferedWriter other) {
-    final int remainingBytes = _currentBuffer.length - _currentLength;
-    Uint8List remainder;
-    if (remainingBytes >= minRemainderToKeep &&
-        remainingBytes > (other._currentBuffer.length - other._currentLength)) {
-      remainder = new Uint8List.view(_currentBuffer.buffer,
-          _currentBuffer.offsetInBytes + _currentLength, remainingBytes);
-    }
-    _flushCurrentBuffer();
-    if (other._buffers != null) {
-      _buffers.addAll(other._buffers);
-      _buffersLength += other._buffersLength;
-    }
-    if (remainder != null) {
-      _flushBuffer(other._currentBuffer, other._currentLength);
-      _currentBuffer = remainder;
-      _currentLength = 0;
-    } else {
-      _currentBuffer = other._currentBuffer;
-      _currentLength = other._currentLength;
-    }
-    // Reset [other] to make sure it is no longer used.
-    other._buffers = null;
-    other._buffersLength = 0;
-    other._currentBuffer = null;
-    other._currentLength = 0;
-  }
-
-  @pragma('vm:prefer-inline')
-  void writeUInt32(int value) {
-    if ((value >> 32) != 0) {
-      throw 'Unable to write $value as 32-bit unsigned integer';
-    }
-    if (_currentLength > _currentBuffer.length - 4) {
-      _grow();
-    }
-    // TODO(alexmarkov): consider using native byte order
-    _addByte((value >> 24) & 0xFF);
-    _addByte((value >> 16) & 0xFF);
-    _addByte((value >> 8) & 0xFF);
-    _addByte(value & 0xFF);
-  }
-
-  @pragma('vm:prefer-inline')
-  void writePackedUInt30(int value) {
-    if ((value >> 30) != 0) {
-      throw 'Unable to write $value as 30-bit unsigned integer';
-    }
-    if (value < 0x80) {
-      writeByte(value);
-    } else if (value < 0x4000) {
-      if (_currentLength > _currentBuffer.length - 2) {
-        _grow();
-      }
-      _addByte((value >> 8) | 0x80);
-      _addByte(value & 0xFF);
-    } else {
-      if (_currentLength > _currentBuffer.length - 4) {
-        _grow();
-      }
-      _addByte((value >> 24) | 0xC0);
-      _addByte((value >> 16) & 0xFF);
-      _addByte((value >> 8) & 0xFF);
-      _addByte(value & 0xFF);
-    }
-  }
-
-  @pragma('vm:prefer-inline')
-  void writeSLEB128(int value) {
-    bool last = false;
-    do {
-      int part = value & 0x7f;
-      value >>= 7;
-      if ((value == 0 && (part & 0x40) == 0) ||
-          (value == -1 && (part & 0x40) != 0)) {
-        last = true;
-      } else {
-        part |= 0x80;
-      }
-      writeByte(part);
-    } while (!last);
-  }
-
-  @pragma('vm:prefer-inline')
-  void writePackedStringReference(String value) {
-    writePackedUInt30(stringWriter.put(value));
-  }
-
-  @pragma('vm:prefer-inline')
-  void writePackedObject(BytecodeObject object) {
-    objectWriter.writeObject(object, this);
-  }
-
-  @pragma('vm:prefer-inline')
-  void writePackedList(List<BytecodeObject> objects) {
-    writePackedUInt30(objects.length);
-    for (var obj in objects) {
-      writePackedObject(obj);
-    }
-  }
-
-  @pragma('vm:prefer-inline')
-  void writeLinkOffset(Object target) {
-    final offset = linkWriter.getOffset(target);
-    writePackedUInt30(offset);
-  }
-}
-
-class BufferedReader {
-  int formatVersion;
-  StringReader stringReader;
-  ObjectReader objectReader;
-  LinkReader linkReader;
-  final List<int> bytes;
-  final int baseOffset;
-
-  /// Position within [bytes], already includes [baseOffset].
-  int _pos;
-
-  BufferedReader(this.formatVersion, this.stringReader, this.objectReader,
-      this.linkReader, this.bytes,
-      {this.baseOffset: 0})
-      : _pos = baseOffset {
-    assert((0 <= _pos) && (_pos <= bytes.length));
-  }
-
-  int get offset => _pos - baseOffset;
-
-  set offset(int offs) {
-    _pos = baseOffset + offs;
-    assert((0 <= _pos) && (_pos <= bytes.length));
-  }
-
-  int readByte() => bytes[_pos++];
-
-  int readUInt32() {
-    return (readByte() << 24) |
-        (readByte() << 16) |
-        (readByte() << 8) |
-        readByte();
-  }
-
-  int readPackedUInt30() {
-    var byte = readByte();
-    if (byte & 0x80 == 0) {
-      // 0xxxxxxx
-      return byte;
-    } else if (byte & 0x40 == 0) {
-      // 10xxxxxx
-      return ((byte & 0x3F) << 8) | readByte();
-    } else {
-      // 11xxxxxx
-      return ((byte & 0x3F) << 24) |
-          (readByte() << 16) |
-          (readByte() << 8) |
-          readByte();
-    }
-  }
-
-  int readSLEB128() {
-    int value = 0;
-    int shift = 0;
-    int part = 0;
-    do {
-      part = readByte();
-      value |= (part & 0x7f) << shift;
-      shift += 7;
-    } while ((part & 0x80) != 0);
-    const int kBitsPerInt = 64;
-    if ((shift < kBitsPerInt) && ((part & 0x40) != 0)) {
-      value |= (-1) << shift;
-    }
-    return value;
-  }
-
-  String readPackedStringReference() {
-    return stringReader.get(readPackedUInt30());
-  }
-
-  BytecodeObject readPackedObject() {
-    return objectReader.readObject(this);
-  }
-
-  List<T> readPackedList<T extends BytecodeObject>() {
-    final int len = readPackedUInt30();
-    final list = new List<T>(len);
-    for (int i = 0; i < len; ++i) {
-      list[i] = readPackedObject();
-    }
-    return list;
-  }
-
-  Uint8List readBytesAsUint8List(int count) {
-    final Uint8List result = new Uint8List(count);
-    result.setRange(0, result.length, bytes, _pos);
-    _pos += count;
-    return result;
-  }
-
-  Uint16List readBytesAsUint16List(int count) {
-    final Uint16List result = new Uint16List(count);
-    int pos = _pos;
-    for (int i = 0; i < count; ++i) {
-      result[i] = bytes[pos] | (bytes[pos + 1] << 8);
-      pos += 2;
-    }
-    _pos += count << 1;
-    return result;
-  }
-
-  T readLinkOffset<T extends BytecodeDeclaration>() {
-    final offset = readPackedUInt30();
-    return linkReader.get<T>(offset);
-  }
-
-  ForwardReference<T>
-      readLinkOffsetAsForwardReference<T extends BytecodeDeclaration>() {
-    final offset = readPackedUInt30();
-    return new ForwardReference<T>(offset, linkReader);
-  }
-
-  void align(int alignment) {
-    assert(alignment & (alignment - 1) == 0);
-    _pos = ((_pos + alignment - 1) & -alignment);
-  }
-}
-
-class StringTable implements StringWriter, StringReader {
-  // Bit 0 in string reference is set for two-byte strings.
-  static const int flagTwoByteString = 1;
-
-  Map<String, int> _map = <String, int>{};
-  List<String> _oneByteStrings = <String>[];
-  List<String> _twoByteStrings = <String>[];
-  bool _written = false;
-
-  StringTable();
-
-  @override
-  int put(String string) {
-    int ref = _map[string];
-    if (ref == null) {
-      if (_written) {
-        throw 'Unable to add a string to string table after it was written';
-      }
-      if (isOneByteString(string)) {
-        ref = (_oneByteStrings.length << 1);
-        _oneByteStrings.add(string);
-      } else {
-        ref = (_twoByteStrings.length << 1) | flagTwoByteString;
-        _twoByteStrings.add(string);
-      }
-      _map[string] = ref;
-    }
-    return ref;
-  }
-
-  @override
-  String get(int ref) {
-    if ((ref & flagTwoByteString) == 0) {
-      return _oneByteStrings[ref >> 1];
-    } else {
-      return _twoByteStrings[ref >> 1];
-    }
-  }
-
-  bool isOneByteString(String value) {
-    const int maxLatin1 = 0xff;
-    for (int i = 0; i < value.length; ++i) {
-      if (value.codeUnitAt(i) > maxLatin1) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  void write(BufferedWriter writer) {
-    final start = writer.offset;
-    writer.writeUInt32(_oneByteStrings.length);
-    writer.writeUInt32(_twoByteStrings.length);
-    int endOffset = 0;
-    for (var str in _oneByteStrings) {
-      endOffset += str.length;
-      writer.writeUInt32(endOffset);
-    }
-    for (var str in _twoByteStrings) {
-      endOffset += str.length << 1;
-      writer.writeUInt32(endOffset);
-    }
-    for (var str in _oneByteStrings) {
-      for (int i = 0; i < str.length; ++i) {
-        writer.writeByte(str.codeUnitAt(i));
-      }
-    }
-    for (var str in _twoByteStrings) {
-      for (int i = 0; i < str.length; ++i) {
-        int utf16codeUnit = str.codeUnitAt(i);
-        writer.writeByte(utf16codeUnit & 0xFF);
-        writer.writeByte(utf16codeUnit >> 8);
-      }
-    }
-    _written = true;
-    BytecodeSizeStatistics.stringTableSize += (writer.offset - start);
-  }
-
-  StringTable.read(BufferedReader reader) {
-    final int numOneByteStrings = reader.readUInt32();
-    final int numTwoByteStrings = reader.readUInt32();
-    final List<int> oneByteEndOffsets = new List<int>(numOneByteStrings);
-    for (int i = 0; i < oneByteEndOffsets.length; ++i) {
-      oneByteEndOffsets[i] = reader.readUInt32();
-    }
-    List<int> twoByteEndOffsets = new List<int>(numTwoByteStrings);
-    for (int i = 0; i < twoByteEndOffsets.length; ++i) {
-      twoByteEndOffsets[i] = reader.readUInt32();
-    }
-    int start = 0;
-    if (numOneByteStrings > 0) {
-      _oneByteStrings = new List<String>(numOneByteStrings);
-      final charCodes = reader.readBytesAsUint8List(oneByteEndOffsets.last);
-      for (int i = 0; i < _oneByteStrings.length; ++i) {
-        final end = oneByteEndOffsets[i];
-        final str = new String.fromCharCodes(charCodes, start, end);
-        _oneByteStrings[i] = str;
-        _map[str] = i << 1;
-        start = end;
-      }
-    }
-    final int twoByteBaseOffset = start;
-    if (numTwoByteStrings > 0) {
-      int start = 0;
-      _twoByteStrings = new List<String>(numTwoByteStrings);
-      final charCodes = reader.readBytesAsUint16List(
-          (twoByteEndOffsets.last - twoByteBaseOffset) >> 1);
-      for (int i = 0; i < _twoByteStrings.length; ++i) {
-        final end = (twoByteEndOffsets[i] - twoByteBaseOffset) >> 1;
-        final str = new String.fromCharCodes(charCodes, start, end);
-        _twoByteStrings[i] = str;
-        _map[str] = (i << 1) | flagTwoByteString;
-        start = end;
-      }
-    }
-  }
-
-  @override
-  String toString() {
-    StringBuffer sb = new StringBuffer();
-    sb.writeln('StringTable {');
-    sb.writeln('  // One Byte Strings');
-    for (String str in _oneByteStrings) {
-      sb.writeln('  "$str"');
-    }
-    sb.writeln('  // Two Byte Strings');
-    for (String str in _twoByteStrings) {
-      sb.writeln('  "$str"');
-    }
-    sb.writeln('}');
-    return sb.toString();
-  }
-}
-
-int doubleToIntBits(double value) {
-  final buf = new ByteData(8);
-  buf.setFloat64(0, value, Endian.little);
-  return buf.getInt64(0, Endian.little);
-}
-
-double intBitsToDouble(int bits) {
-  final buf = new ByteData(8);
-  buf.setInt64(0, bits, Endian.little);
-  return buf.getFloat64(0, Endian.little);
-}
-
-class PackedUInt30DeltaEncoder {
-  int _last = 0;
-
-  void write(BufferedWriter write, int value) {
-    write.writePackedUInt30(value - _last);
-    _last = value;
-  }
-}
-
-class PackedUInt30DeltaDecoder {
-  int _last = 0;
-
-  int read(BufferedReader reader) {
-    int value = reader.readPackedUInt30() + _last;
-    _last = value;
-    return value;
-  }
-}
-
-class SLEB128DeltaEncoder {
-  int _last = 0;
-
-  void write(BufferedWriter writer, int value) {
-    writer.writeSLEB128(value - _last);
-    _last = value;
-  }
-}
-
-class SLEB128DeltaDecoder {
-  int _last = 0;
-
-  int read(BufferedReader reader) {
-    int value = reader.readSLEB128() + _last;
-    _last = value;
-    return value;
-  }
-}
-
-class BytecodeDeclaration {
-  int _offset;
-}
-
-class LinkWriter {
-  void put(BytecodeDeclaration target, int offset) {
-    target._offset = offset;
-  }
-
-  int getOffset(BytecodeDeclaration target) {
-    return target._offset ??
-        (throw 'Offset of ${target.runtimeType} $target is not set');
-  }
-}
-
-class LinkReader {
-  final _map = <Type, Map<int, BytecodeDeclaration>>{};
-
-  void setOffset<T extends BytecodeDeclaration>(T target, int offset) {
-    final offsetToObject = (_map[T] ??= <int, BytecodeDeclaration>{});
-    final previous = offsetToObject[offset];
-    if (previous != null) {
-      throw 'Unable to associate offset $T/$offset with ${target.runtimeType} $target.'
-          ' It is already associated with ${previous.runtimeType} $previous';
-    }
-    offsetToObject[offset] = target;
-  }
-
-  T get<T extends BytecodeDeclaration>(int offset) {
-    return _map[T][offset] ?? (throw 'No object at offset $T/$offset');
-  }
-}
-
-// Placeholder for an object which will be read in future.
-class ForwardReference<T extends BytecodeDeclaration> {
-  final int offset;
-  final LinkReader linkReader;
-
-  ForwardReference(this.offset, this.linkReader);
-
-  T get() => linkReader.get<T>(offset);
-}
-
-class NamedEntryStatistics {
-  final String name;
-  int size = 0;
-  int count = 0;
-
-  NamedEntryStatistics(this.name);
-
-  String toString() => "${name.padRight(40)}:    ${size.toString().padLeft(10)}"
-      "  (count: ${count.toString().padLeft(8)})";
-}
-
-class BytecodeSizeStatistics {
-  static int componentSize = 0;
-  static int objectTableSize = 0;
-  static int objectTableEntriesCount = 0;
-  static int stringTableSize = 0;
-  static int librariesSize = 0;
-  static int classesSize = 0;
-  static int membersSize = 0;
-  static int codeSize = 0;
-  static int sourcePositionsSize = 0;
-  static int sourceFilesSize = 0;
-  static int lineStartsSize = 0;
-  static int localVariablesSize = 0;
-  static int annotationsSize = 0;
-  static int constantPoolSize = 0;
-  static int instructionsSize = 0;
-  static List<NamedEntryStatistics> constantPoolStats =
-      <NamedEntryStatistics>[];
-  static List<NamedEntryStatistics> objectTableStats = <NamedEntryStatistics>[];
-
-  static void reset() {
-    componentSize = 0;
-    objectTableSize = 0;
-    objectTableEntriesCount = 0;
-    stringTableSize = 0;
-    librariesSize = 0;
-    classesSize = 0;
-    membersSize = 0;
-    codeSize = 0;
-    sourcePositionsSize = 0;
-    sourceFilesSize = 0;
-    lineStartsSize = 0;
-    localVariablesSize = 0;
-    annotationsSize = 0;
-    constantPoolSize = 0;
-    instructionsSize = 0;
-    constantPoolStats = <NamedEntryStatistics>[];
-    objectTableStats = <NamedEntryStatistics>[];
-  }
-
-  static void dump() {
-    print("Bytecode size statistics:");
-    print("  Bytecode component:  $componentSize");
-    print(
-        "   - object table:     $objectTableSize   (count: $objectTableEntriesCount)");
-    for (var entry in objectTableStats) {
-      print("       - $entry");
-    }
-    print("   - string table:     $stringTableSize");
-    print("  Libraries:           $librariesSize");
-    print("  Classes:             $classesSize");
-    print("  Members:             $membersSize");
-    print("  Source positions:    $sourcePositionsSize");
-    print("  Source files:        $sourceFilesSize");
-    print("  Line starts:         $lineStartsSize");
-    print("  Local variables:     $localVariablesSize");
-    print("  Annotations:         $annotationsSize");
-    print("  Code:                $codeSize");
-    print("   - constant pool:    $constantPoolSize");
-    for (var entry in constantPoolStats) {
-      print("       - $entry");
-    }
-    print("   - instructions:     $instructionsSize");
-  }
-}
diff --git a/pkg/vm/lib/bytecode/constant_pool.dart b/pkg/vm/lib/bytecode/constant_pool.dart
deleted file mode 100644
index ee869ec..0000000
--- a/pkg/vm/lib/bytecode/constant_pool.dart
+++ /dev/null
@@ -1,911 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library vm.bytecode.constant_pool;
-
-import 'package:kernel/ast.dart' hide MapEntry;
-
-import 'dbc.dart' show constantPoolIndexLimit, BytecodeLimitExceededException;
-import 'bytecode_serialization.dart'
-    show
-        BufferedWriter,
-        BufferedReader,
-        BytecodeSizeStatistics,
-        NamedEntryStatistics,
-        StringTable;
-import 'object_table.dart' show ObjectHandle, ObjectTable;
-
-/*
-
-In kernel binary, constant pool is encoded in the following way
-(using notation from pkg/kernel/binary.md):
-
-type ConstantPool {
-  List<ConstantPoolEntry>
-}
-
-type ConstantIndex = UInt;
-
-abstract type ConstantPoolEntry {
-  Byte tag;
-}
-
-type ConstantStaticField extends ConstantPoolEntry {
-  Byte tag = 9;
-  PackedObject field;
-}
-
-// Occupies 2 entries in the constant pool.
-type ConstantInstanceField extends ConstantPoolEntry {
-  Byte tag = 10;
-  PackedObject field;
-}
-
-type ConstantClass extends ConstantPoolEntry {
-  Byte tag = 11;
-  PackedObject class;
-}
-
-type ConstantTypeArgumentsField extends ConstantPoolEntry {
-  Byte tag = 12;
-  PackedObject class;
-}
-
-type ConstantType extends ConstantPoolEntry {
-  Byte tag = 14;
-  PackedObject type;
-}
-
-type ConstantClosureFunction extends ConstantPoolEntry {
-  Byte tag = 19;
-  UInt closureIndex;
-}
-
-type ConstantEndClosureFunctionScope extends ConstantPoolEntry {
-  Byte tag = 20;
-}
-
-type ConstantNativeEntry extends ConstantPoolEntry {
-  Byte tag = 21;
-  PackedString nativeName;
-}
-
-type ConstantSubtypeTestCache extends ConstantPoolEntry {
-  Byte tag = 22;
-}
-
-type ConstantEmptyTypeArguments extends ConstantPoolEntry {
-  Byte tag = 24;
-}
-
-type ConstantObjectRef extends ConstantPoolEntry {
-  Byte tag = 27;
-  PackedObject object;
-}
-
-// Occupies 2 entries in the constant pool.
-type ConstantDirectCall extends ConstantPoolEntry {
-  Byte tag = 28;
-  PackedObject target;
-  PackedObject argDesc;
-}
-
-// Occupies 2 entries in the constant pool.
-type ConstantInterfaceCall extends ConstantPoolEntry {
-  Byte tag = 29;
-  PackedObject target;
-  PackedObject argDesc;
-}
-
-// Occupies 3 entries in the constant pool.
-type ConstantInstantiatedInterfaceCall extends ConstantPoolEntry {
-  Byte tag = 30;
-  PackedObject target;
-  PackedObject argDesc;
-  PackedObject staticReceiverType;
-}
-
-// Occupies 2 entries in the constant pool
-type ConstantDynamicCall extends ConstantPoolEntry {
-  Byte tag = 31;
-  PackedObject selectorName;
-  PackedObject argDesc;
-}
-
-// Occupies 2 entries in the constant pool.
-type ConstantDirectCallViaDynamicForwarder extends ConstantPoolEntry {
-  Byte tag = 32;
-  PackedObject target;
-  PackedObject argDesc;
-}
-
-*/
-
-enum ConstantTag {
-  kInvalid,
-  kUnused1,
-  kUnused2,
-  kUnused3,
-  kUnused4,
-  kUnused5,
-  kUnused6,
-  kUnused6a,
-  kUnused7,
-  kStaticField,
-  kInstanceField,
-  kClass,
-  kTypeArgumentsField,
-  kUnused8,
-  kType,
-  kUnused9,
-  kUnused10,
-  kUnused11,
-  kUnused12,
-  kClosureFunction,
-  kEndClosureFunctionScope,
-  kNativeEntry,
-  kSubtypeTestCache,
-  kUnused13,
-  kEmptyTypeArguments,
-  kUnused14,
-  kUnused15,
-  kObjectRef,
-  kDirectCall,
-  kInterfaceCall,
-  kInstantiatedInterfaceCall,
-  kDynamicCall,
-  kDirectCallViaDynamicForwarder,
-}
-
-String constantTagToString(ConstantTag tag) =>
-    tag.toString().substring('ConstantTag.k'.length);
-
-abstract class ConstantPoolEntry {
-  const ConstantPoolEntry();
-
-  ConstantTag get tag;
-
-  // Returns number of extra reserved constant pool entries
-  // following this entry.
-  int get numReservedEntries => 0;
-
-  void write(BufferedWriter writer) {
-    writer.writeByte(tag.index);
-    writeValue(writer);
-  }
-
-  void writeValue(BufferedWriter writer);
-
-  factory ConstantPoolEntry.read(BufferedReader reader) {
-    ConstantTag tag = ConstantTag.values[reader.readByte()];
-    switch (tag) {
-      case ConstantTag.kInvalid:
-        break;
-      case ConstantTag.kStaticField:
-        return new ConstantStaticField.read(reader);
-      case ConstantTag.kInstanceField:
-        return new ConstantInstanceField.read(reader);
-      case ConstantTag.kClass:
-        return new ConstantClass.read(reader);
-      case ConstantTag.kTypeArgumentsField:
-        return new ConstantTypeArgumentsField.read(reader);
-      case ConstantTag.kType:
-        return new ConstantType.read(reader);
-      case ConstantTag.kClosureFunction:
-        return new ConstantClosureFunction.read(reader);
-      case ConstantTag.kEndClosureFunctionScope:
-        return new ConstantEndClosureFunctionScope.read(reader);
-      case ConstantTag.kNativeEntry:
-        return new ConstantNativeEntry.read(reader);
-      case ConstantTag.kSubtypeTestCache:
-        return new ConstantSubtypeTestCache.read(reader);
-      case ConstantTag.kEmptyTypeArguments:
-        return new ConstantEmptyTypeArguments.read(reader);
-      case ConstantTag.kObjectRef:
-        return new ConstantObjectRef.read(reader);
-      case ConstantTag.kDirectCall:
-        return new ConstantDirectCall.read(reader);
-      case ConstantTag.kInterfaceCall:
-        return new ConstantInterfaceCall.read(reader);
-      case ConstantTag.kInstantiatedInterfaceCall:
-        return new ConstantInstantiatedInterfaceCall.read(reader);
-      case ConstantTag.kDynamicCall:
-        return new ConstantDynamicCall.read(reader);
-      case ConstantTag.kDirectCallViaDynamicForwarder:
-        return new ConstantDirectCallViaDynamicForwarder.read(reader);
-      // Make analyzer happy.
-      case ConstantTag.kUnused1:
-      case ConstantTag.kUnused2:
-      case ConstantTag.kUnused3:
-      case ConstantTag.kUnused4:
-      case ConstantTag.kUnused5:
-      case ConstantTag.kUnused6:
-      case ConstantTag.kUnused6a:
-      case ConstantTag.kUnused7:
-      case ConstantTag.kUnused8:
-      case ConstantTag.kUnused9:
-      case ConstantTag.kUnused10:
-      case ConstantTag.kUnused11:
-      case ConstantTag.kUnused12:
-      case ConstantTag.kUnused13:
-      case ConstantTag.kUnused14:
-      case ConstantTag.kUnused15:
-        break;
-    }
-    throw 'Unexpected constant tag $tag';
-  }
-}
-
-enum InvocationKind {
-  method, // x.foo(...) or foo(...)
-  getter, // x.foo
-  setter // x.foo = ...
-}
-
-class ConstantStaticField extends ConstantPoolEntry {
-  final ObjectHandle field;
-
-  ConstantStaticField(this.field);
-
-  @override
-  ConstantTag get tag => ConstantTag.kStaticField;
-
-  @override
-  void writeValue(BufferedWriter writer) {
-    writer.writePackedObject(field);
-  }
-
-  ConstantStaticField.read(BufferedReader reader)
-      : field = reader.readPackedObject();
-
-  @override
-  String toString() => 'StaticField $field';
-
-  @override
-  int get hashCode => field.hashCode;
-
-  @override
-  bool operator ==(other) =>
-      other is ConstantStaticField && this.field == other.field;
-}
-
-class ConstantInstanceField extends ConstantPoolEntry {
-  final ObjectHandle field;
-
-  int get numReservedEntries => 1;
-
-  ConstantInstanceField(this.field);
-
-  @override
-  ConstantTag get tag => ConstantTag.kInstanceField;
-
-  @override
-  void writeValue(BufferedWriter writer) {
-    writer.writePackedObject(field);
-  }
-
-  ConstantInstanceField.read(BufferedReader reader)
-      : field = reader.readPackedObject();
-
-  @override
-  String toString() => 'InstanceField $field';
-
-  @override
-  int get hashCode => field.hashCode;
-
-  @override
-  bool operator ==(other) =>
-      other is ConstantInstanceField && this.field == other.field;
-}
-
-class ConstantClass extends ConstantPoolEntry {
-  final ObjectHandle classHandle;
-
-  ConstantClass(this.classHandle);
-
-  @override
-  ConstantTag get tag => ConstantTag.kClass;
-
-  @override
-  void writeValue(BufferedWriter writer) {
-    writer.writePackedObject(classHandle);
-  }
-
-  ConstantClass.read(BufferedReader reader)
-      : classHandle = reader.readPackedObject();
-
-  @override
-  String toString() => 'Class $classHandle';
-
-  @override
-  int get hashCode => classHandle.hashCode;
-
-  @override
-  bool operator ==(other) =>
-      other is ConstantClass && this.classHandle == other.classHandle;
-}
-
-class ConstantTypeArgumentsField extends ConstantPoolEntry {
-  final ObjectHandle classHandle;
-
-  ConstantTypeArgumentsField(this.classHandle);
-
-  @override
-  ConstantTag get tag => ConstantTag.kTypeArgumentsField;
-
-  @override
-  void writeValue(BufferedWriter writer) {
-    writer.writePackedObject(classHandle);
-  }
-
-  ConstantTypeArgumentsField.read(BufferedReader reader)
-      : classHandle = reader.readPackedObject();
-
-  @override
-  String toString() => 'TypeArgumentsField $classHandle';
-
-  @override
-  int get hashCode => classHandle.hashCode;
-
-  @override
-  bool operator ==(other) =>
-      other is ConstantTypeArgumentsField &&
-      this.classHandle == other.classHandle;
-}
-
-class ConstantType extends ConstantPoolEntry {
-  final ObjectHandle type;
-
-  ConstantType(this.type);
-
-  @override
-  ConstantTag get tag => ConstantTag.kType;
-
-  @override
-  void writeValue(BufferedWriter writer) {
-    writer.writePackedObject(type);
-  }
-
-  ConstantType.read(BufferedReader reader) : type = reader.readPackedObject();
-
-  @override
-  String toString() => 'Type $type';
-
-  @override
-  int get hashCode => type.hashCode;
-
-  @override
-  bool operator ==(other) => other is ConstantType && this.type == other.type;
-}
-
-class ConstantClosureFunction extends ConstantPoolEntry {
-  final int closureIndex;
-
-  ConstantClosureFunction(this.closureIndex);
-
-  @override
-  ConstantTag get tag => ConstantTag.kClosureFunction;
-
-  @override
-  void writeValue(BufferedWriter writer) {
-    writer.writePackedUInt30(closureIndex);
-  }
-
-  ConstantClosureFunction.read(BufferedReader reader)
-      : closureIndex = reader.readPackedUInt30();
-
-  @override
-  String toString() {
-    return 'ClosureFunction $closureIndex';
-  }
-
-  @override
-  int get hashCode => closureIndex;
-
-  @override
-  bool operator ==(other) =>
-      other is ConstantClosureFunction &&
-      this.closureIndex == other.closureIndex;
-}
-
-class ConstantEndClosureFunctionScope extends ConstantPoolEntry {
-  ConstantEndClosureFunctionScope();
-
-  @override
-  ConstantTag get tag => ConstantTag.kEndClosureFunctionScope;
-
-  @override
-  void writeValue(BufferedWriter writer) {}
-
-  ConstantEndClosureFunctionScope.read(BufferedReader reader) {}
-
-  @override
-  String toString() => 'EndClosureFunctionScope';
-
-  // ConstantEndClosureFunctionScope entries are created per closure and should
-  // not be merged, so ConstantEndClosureFunctionScope class uses identity
-  // [hashCode] and [operator ==].
-}
-
-class ConstantNativeEntry extends ConstantPoolEntry {
-  final String nativeName;
-
-  ConstantNativeEntry(this.nativeName);
-
-  @override
-  ConstantTag get tag => ConstantTag.kNativeEntry;
-
-  @override
-  void writeValue(BufferedWriter writer) {
-    writer.writePackedStringReference(nativeName);
-  }
-
-  ConstantNativeEntry.read(BufferedReader reader)
-      : nativeName = reader.readPackedStringReference();
-
-  @override
-  String toString() => 'NativeEntry $nativeName';
-
-  @override
-  int get hashCode => nativeName.hashCode;
-
-  @override
-  bool operator ==(other) =>
-      other is ConstantNativeEntry && this.nativeName == other.nativeName;
-}
-
-class ConstantSubtypeTestCache extends ConstantPoolEntry {
-  ConstantSubtypeTestCache();
-
-  @override
-  ConstantTag get tag => ConstantTag.kSubtypeTestCache;
-
-  @override
-  void writeValue(BufferedWriter writer) {}
-
-  ConstantSubtypeTestCache.read(BufferedReader reader);
-
-  @override
-  String toString() => 'SubtypeTestCache';
-
-  // ConstantSubtypeTestCache entries are created per subtype test site and
-  // should not be merged, so ConstantSubtypeTestCache class uses identity
-  // [hashCode] and [operator ==].
-
-  @override
-  int get hashCode => identityHashCode(this);
-
-  @override
-  bool operator ==(other) => identical(this, other);
-}
-
-class ConstantEmptyTypeArguments extends ConstantPoolEntry {
-  const ConstantEmptyTypeArguments();
-
-  @override
-  ConstantTag get tag => ConstantTag.kEmptyTypeArguments;
-
-  @override
-  void writeValue(BufferedWriter writer) {}
-
-  ConstantEmptyTypeArguments.read(BufferedReader reader);
-
-  @override
-  String toString() => 'EmptyTypeArguments';
-
-  @override
-  int get hashCode => 997;
-
-  @override
-  bool operator ==(other) => other is ConstantEmptyTypeArguments;
-}
-
-class ConstantObjectRef extends ConstantPoolEntry {
-  final ObjectHandle object;
-
-  ConstantObjectRef(this.object);
-
-  @override
-  ConstantTag get tag => ConstantTag.kObjectRef;
-
-  @override
-  void writeValue(BufferedWriter writer) {
-    writer.writePackedObject(object);
-  }
-
-  ConstantObjectRef.read(BufferedReader reader)
-      : object = reader.readPackedObject();
-
-  @override
-  String toString() => 'ObjectRef $object';
-
-  @override
-  int get hashCode => object.hashCode;
-
-  @override
-  bool operator ==(other) =>
-      other is ConstantObjectRef && this.object == other.object;
-}
-
-class ConstantDirectCall extends ConstantPoolEntry {
-  final ObjectHandle target;
-  final ObjectHandle argDesc;
-
-  ConstantDirectCall(this.target, this.argDesc);
-
-  // Reserve 1 extra slot for arguments descriptor, following target slot.
-  int get numReservedEntries => 1;
-
-  @override
-  ConstantTag get tag => ConstantTag.kDirectCall;
-
-  @override
-  void writeValue(BufferedWriter writer) {
-    writer.writePackedObject(target);
-    writer.writePackedObject(argDesc);
-  }
-
-  ConstantDirectCall.read(BufferedReader reader)
-      : target = reader.readPackedObject(),
-        argDesc = reader.readPackedObject();
-
-  @override
-  String toString() => "DirectCall '$target', $argDesc";
-
-  @override
-  int get hashCode => _combineHashes(target.hashCode, argDesc.hashCode);
-
-  @override
-  bool operator ==(other) =>
-      other is ConstantDirectCall &&
-      this.target == other.target &&
-      this.argDesc == other.argDesc;
-}
-
-class ConstantDirectCallViaDynamicForwarder extends ConstantPoolEntry {
-  final ObjectHandle target;
-  final ObjectHandle argDesc;
-
-  ConstantDirectCallViaDynamicForwarder(this.target, this.argDesc);
-
-  // Reserve 1 extra slot for arguments descriptor, following target slot.
-  int get numReservedEntries => 1;
-
-  @override
-  ConstantTag get tag => ConstantTag.kDirectCallViaDynamicForwarder;
-
-  @override
-  void writeValue(BufferedWriter writer) {
-    writer.writePackedObject(target);
-    writer.writePackedObject(argDesc);
-  }
-
-  ConstantDirectCallViaDynamicForwarder.read(BufferedReader reader)
-      : target = reader.readPackedObject(),
-        argDesc = reader.readPackedObject();
-
-  @override
-  String toString() => "DirectCallViaDynamicForwarder '$target', $argDesc";
-
-  @override
-  int get hashCode => _combineHashes(target.hashCode, argDesc.hashCode);
-
-  @override
-  bool operator ==(other) =>
-      other is ConstantDirectCallViaDynamicForwarder &&
-      this.target == other.target &&
-      this.argDesc == other.argDesc;
-}
-
-class ConstantInterfaceCall extends ConstantPoolEntry {
-  final ObjectHandle target;
-  final ObjectHandle argDesc;
-
-  ConstantInterfaceCall(this.target, this.argDesc);
-
-  // Reserve 1 extra slot for arguments descriptor, following target slot.
-  int get numReservedEntries => 1;
-
-  @override
-  ConstantTag get tag => ConstantTag.kInterfaceCall;
-
-  @override
-  void writeValue(BufferedWriter writer) {
-    writer.writePackedObject(target);
-    writer.writePackedObject(argDesc);
-  }
-
-  ConstantInterfaceCall.read(BufferedReader reader)
-      : target = reader.readPackedObject(),
-        argDesc = reader.readPackedObject();
-
-  @override
-  String toString() => "InterfaceCall '$target', $argDesc";
-
-  @override
-  int get hashCode => _combineHashes(target.hashCode, argDesc.hashCode);
-
-  @override
-  bool operator ==(other) =>
-      other is ConstantInterfaceCall &&
-      this.target == other.target &&
-      this.argDesc == other.argDesc;
-}
-
-class ConstantInstantiatedInterfaceCall extends ConstantPoolEntry {
-  final ObjectHandle target;
-  final ObjectHandle argDesc;
-  final ObjectHandle staticReceiverType;
-
-  ConstantInstantiatedInterfaceCall(
-      this.target, this.argDesc, this.staticReceiverType);
-
-  // Reserve 2 extra slots (3 slots total).
-  int get numReservedEntries => 2;
-
-  @override
-  ConstantTag get tag => ConstantTag.kInstantiatedInterfaceCall;
-
-  @override
-  void writeValue(BufferedWriter writer) {
-    writer.writePackedObject(target);
-    writer.writePackedObject(argDesc);
-    writer.writePackedObject(staticReceiverType);
-  }
-
-  ConstantInstantiatedInterfaceCall.read(BufferedReader reader)
-      : target = reader.readPackedObject(),
-        argDesc = reader.readPackedObject(),
-        staticReceiverType = reader.readPackedObject();
-
-  @override
-  String toString() =>
-      "InstantiatedInterfaceCall '$target', $argDesc, receiver $staticReceiverType";
-
-  @override
-  int get hashCode => _combineHashes(
-      _combineHashes(target.hashCode, argDesc.hashCode),
-      staticReceiverType.hashCode);
-
-  @override
-  bool operator ==(other) =>
-      other is ConstantInstantiatedInterfaceCall &&
-      this.target == other.target &&
-      this.argDesc == other.argDesc &&
-      this.staticReceiverType == other.staticReceiverType;
-}
-
-class ConstantDynamicCall extends ConstantPoolEntry {
-  final ObjectHandle selectorName;
-  final ObjectHandle argDesc;
-
-  ConstantDynamicCall(this.selectorName, this.argDesc);
-
-  // Reserve 1 extra slot for arguments descriptor, following selector slot.
-  int get numReservedEntries => 1;
-
-  @override
-  ConstantTag get tag => ConstantTag.kDynamicCall;
-
-  @override
-  void writeValue(BufferedWriter writer) {
-    writer.writePackedObject(selectorName);
-    writer.writePackedObject(argDesc);
-  }
-
-  ConstantDynamicCall.read(BufferedReader reader)
-      : selectorName = reader.readPackedObject(),
-        argDesc = reader.readPackedObject();
-
-  @override
-  String toString() => 'DynamicCall $selectorName, $argDesc';
-
-  @override
-  int get hashCode => _combineHashes(selectorName.hashCode, argDesc.hashCode);
-
-  @override
-  bool operator ==(other) =>
-      other is ConstantDynamicCall &&
-      this.selectorName == other.selectorName &&
-      this.argDesc == other.argDesc;
-}
-
-/// Reserved constant pool entry.
-class _ReservedConstantPoolEntry extends ConstantPoolEntry {
-  const _ReservedConstantPoolEntry();
-
-  ConstantTag get tag => throw 'This constant pool entry is reserved';
-  void writeValue(BufferedWriter writer) =>
-      throw 'This constant pool entry is reserved';
-
-  @override
-  String toString() => 'Reserved';
-}
-
-class ConstantPool {
-  final StringTable stringTable;
-  final ObjectTable objectTable;
-  final List<ConstantPoolEntry> entries = <ConstantPoolEntry>[];
-  final Map<ConstantPoolEntry, int> _canonicalizationCache =
-      <ConstantPoolEntry, int>{};
-
-  ConstantPool(this.stringTable, this.objectTable);
-
-  int addString(String value) => addObjectRef(new StringConstant(value));
-
-  int addName(String name) =>
-      _add(new ConstantObjectRef(objectTable.getPublicNameHandle(name)));
-
-  int addArgDesc(int numArguments,
-          {int numTypeArgs = 0, List<String> argNames = const <String>[]}) =>
-      _add(new ConstantObjectRef(
-          objectTable.getArgDescHandle(numArguments, numTypeArgs, argNames)));
-
-  int addArgDescByArguments(Arguments args,
-          {bool hasReceiver: false, bool isFactory: false}) =>
-      _add(new ConstantObjectRef(objectTable.getArgDescHandleByArguments(args,
-          hasReceiver: hasReceiver, isFactory: isFactory)));
-
-  int addDirectCall(
-      InvocationKind invocationKind, Member target, ObjectHandle argDesc,
-      [bool isDynamicForwarder = false]) {
-    final targetHandle = objectTable.getMemberHandle(target,
-        isGetter: invocationKind == InvocationKind.getter,
-        isSetter: invocationKind == InvocationKind.setter);
-    return _add(isDynamicForwarder
-        ? new ConstantDirectCallViaDynamicForwarder(targetHandle, argDesc)
-        : new ConstantDirectCall(targetHandle, argDesc));
-  }
-
-  int addInterfaceCall(
-          InvocationKind invocationKind, Member target, ObjectHandle argDesc) =>
-      _add(new ConstantInterfaceCall(
-          objectTable.getMemberHandle(target,
-              isGetter: invocationKind == InvocationKind.getter,
-              isSetter: invocationKind == InvocationKind.setter),
-          argDesc));
-
-  int addInstantiatedInterfaceCall(InvocationKind invocationKind, Member target,
-          ObjectHandle argDesc, DartType staticReceiverType) =>
-      _add(new ConstantInstantiatedInterfaceCall(
-          objectTable.getMemberHandle(target,
-              isGetter: invocationKind == InvocationKind.getter,
-              isSetter: invocationKind == InvocationKind.setter),
-          argDesc,
-          objectTable.getHandle(staticReceiverType)));
-
-  int addDynamicCall(
-          InvocationKind invocationKind, Name selector, ObjectHandle argDesc) =>
-      _add(new ConstantDynamicCall(
-          objectTable.getSelectorNameHandle(selector,
-              isGetter: invocationKind == InvocationKind.getter,
-              isSetter: invocationKind == InvocationKind.setter),
-          argDesc));
-
-  int addInstanceCall(InvocationKind invocationKind, Member target,
-          Name targetName, ObjectHandle argDesc) =>
-      (target == null)
-          ? addDynamicCall(invocationKind, targetName, argDesc)
-          : addInterfaceCall(invocationKind, target, argDesc);
-
-  int addStaticField(Field field) =>
-      _add(new ConstantStaticField(objectTable.getHandle(field)));
-
-  int addInstanceField(Field field) =>
-      _add(new ConstantInstanceField(objectTable.getHandle(field)));
-
-  int addClass(Class node) =>
-      _add(new ConstantClass(objectTable.getHandle(node)));
-
-  int addTypeArgumentsField(Class node) =>
-      _add(new ConstantTypeArgumentsField(objectTable.getHandle(node)));
-
-  int addType(DartType type) =>
-      _add(new ConstantType(objectTable.getHandle(type)));
-
-  int addTypeArguments(List<DartType> typeArgs) =>
-      _add(new ConstantObjectRef(objectTable.getTypeArgumentsHandle(typeArgs)));
-
-  int addClosureFunction(int closureIndex) =>
-      _add(new ConstantClosureFunction(closureIndex));
-
-  int addEndClosureFunctionScope() =>
-      _add(new ConstantEndClosureFunctionScope());
-
-  int addNativeEntry(String nativeName) =>
-      _add(new ConstantNativeEntry(_indexString(nativeName)));
-
-  int addSubtypeTestCache() => _add(new ConstantSubtypeTestCache());
-
-  int addEmptyTypeArguments() => _add(const ConstantEmptyTypeArguments());
-
-  int addObjectRef(Node node) =>
-      _add(new ConstantObjectRef(objectTable.getHandle(node)));
-
-  int addSelectorName(Name name, InvocationKind invocationKind) =>
-      _add(new ConstantObjectRef(objectTable.getSelectorNameHandle(name,
-          isGetter: invocationKind == InvocationKind.getter,
-          isSetter: invocationKind == InvocationKind.setter)));
-
-  int _add(ConstantPoolEntry entry) {
-    int index = _canonicalizationCache[entry];
-    if (index == null) {
-      index = entries.length;
-      if (index >= constantPoolIndexLimit) {
-        throw new ConstantPoolIndexOverflowException();
-      }
-      _addEntry(entry);
-      _canonicalizationCache[entry] = index;
-    }
-    return index;
-  }
-
-  void _addEntry(ConstantPoolEntry entry) {
-    entries.add(entry);
-    for (int i = 0; i < entry.numReservedEntries; ++i) {
-      entries.add(const _ReservedConstantPoolEntry());
-    }
-  }
-
-  // Currently, string table is written as a part of Component's metadata
-  // *before* constant pools are written.
-  // So we need to index all strings when filling up constant pools.
-  String _indexString(String str) {
-    stringTable.put(str);
-    return str;
-  }
-
-  void write(BufferedWriter writer) {
-    final start = writer.offset;
-    if (BytecodeSizeStatistics.constantPoolStats.isEmpty) {
-      for (var tag in ConstantTag.values) {
-        BytecodeSizeStatistics.constantPoolStats
-            .add(new NamedEntryStatistics(constantTagToString(tag)));
-      }
-    }
-    writer.writePackedUInt30(entries.length);
-    entries.forEach((e) {
-      if (e is _ReservedConstantPoolEntry) {
-        return;
-      }
-
-      final entryStart = writer.offset;
-
-      e.write(writer);
-
-      final entryStat = BytecodeSizeStatistics.constantPoolStats[e.tag.index];
-      entryStat.size += (writer.offset - entryStart);
-      ++entryStat.count;
-    });
-    BytecodeSizeStatistics.constantPoolSize += (writer.offset - start);
-  }
-
-  ConstantPool.read(BufferedReader reader)
-      : stringTable = reader.stringReader,
-        objectTable = reader.objectReader {
-    int len = reader.readPackedUInt30();
-    for (int i = 0; i < len; i++) {
-      final e = new ConstantPoolEntry.read(reader);
-      _addEntry(e);
-      i += e.numReservedEntries;
-    }
-  }
-
-  @override
-  String toString() {
-    StringBuffer sb = new StringBuffer();
-    sb.writeln('ConstantPool {');
-    for (int i = 0; i < entries.length; i++) {
-      sb.writeln('  [$i] = ${entries[i]}');
-    }
-    sb.writeln('}');
-    return sb.toString();
-  }
-}
-
-int _combineHashes(int hash1, int hash2) =>
-    (((hash1 * 31) & 0x3fffffff) + hash2) & 0x3fffffff;
-
-class ConstantPoolIndexOverflowException
-    extends BytecodeLimitExceededException {}
diff --git a/pkg/vm/lib/bytecode/dbc.dart b/pkg/vm/lib/bytecode/dbc.dart
deleted file mode 100644
index 39ae12a..0000000
--- a/pkg/vm/lib/bytecode/dbc.dart
+++ /dev/null
@@ -1,677 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// Dart kernel bytecode instructions (described in runtime/vm/constants_kbc.h).
-
-library vm.bytecode.dbc;
-
-/// Version of bytecode format, produced by default.
-/// Before bumping current bytecode version format, make sure that
-/// all users have switched to a VM which is able to consume new
-/// version of bytecode.
-const int currentBytecodeFormatVersion = 28;
-
-enum Opcode {
-  kUnusedOpcode000,
-  kUnusedOpcode001,
-  kUnusedOpcode002,
-  kUnusedOpcode003,
-  kUnusedOpcode004,
-  kUnusedOpcode005,
-  kUnusedOpcode006,
-  kUnusedOpcode007,
-  kUnusedOpcode008,
-  kUnusedOpcode009,
-  kUnusedOpcode010,
-  kUnusedOpcode011,
-  kUnusedOpcode012,
-  kUnusedOpcode013,
-  kUnusedOpcode014,
-  kUnusedOpcode015,
-  kUnusedOpcode016,
-  kUnusedOpcode017,
-  kUnusedOpcode018,
-  kUnusedOpcode019,
-  kUnusedOpcode020,
-  kUnusedOpcode021,
-  kUnusedOpcode022,
-  kUnusedOpcode023,
-  kUnusedOpcode024,
-  kUnusedOpcode025,
-  kUnusedOpcode026,
-  kUnusedOpcode027,
-  kUnusedOpcode028,
-  kUnusedOpcode029,
-  kUnusedOpcode030,
-  kUnusedOpcode031,
-  kUnusedOpcode032,
-  kUnusedOpcode033,
-  kUnusedOpcode034,
-  kUnusedOpcode035,
-  kUnusedOpcode036,
-  kUnusedOpcode037,
-  kUnusedOpcode038,
-  kUnusedOpcode039,
-  kUnusedOpcode040,
-  kUnusedOpcode041,
-  kUnusedOpcode042,
-  kUnusedOpcode043,
-  kUnusedOpcode044,
-  kUnusedOpcode045,
-  kUnusedOpcode046,
-  kUnusedOpcode047,
-  kUnusedOpcode048,
-  kUnusedOpcode049,
-  kUnusedOpcode050,
-  kUnusedOpcode051,
-  kUnusedOpcode052,
-  kUnusedOpcode053,
-  kUnusedOpcode054,
-  kUnusedOpcode055,
-  kUnusedOpcode056,
-  kUnusedOpcode057,
-  kUnusedOpcode058,
-  kUnusedOpcode059,
-  kUnusedOpcode060,
-  kUnusedOpcode061,
-  kUnusedOpcode062,
-  kUnusedOpcode063,
-  kUnusedOpcode064,
-  kUnusedOpcode065,
-  kUnusedOpcode066,
-  kUnusedOpcode067,
-  kUnusedOpcode068,
-  kUnusedOpcode069,
-  kUnusedOpcode070,
-  kUnusedOpcode071,
-  kUnusedOpcode072,
-  kUnusedOpcode073,
-  kUnusedOpcode074,
-  kUnusedOpcode075,
-  kUnusedOpcode076,
-  kUnusedOpcode077,
-  kUnusedOpcode078,
-  kUnusedOpcode079,
-  kUnusedOpcode080,
-  kUnusedOpcode081,
-
-  // Late variables.
-  kJumpIfInitialized,
-  kJumpIfInitialized_Wide,
-  kPushUninitializedSentinel,
-
-  kTrap,
-
-  // Prologue and stack management.
-  kEntry,
-  kEntry_Wide,
-  // TODO(alexmarkov): cleanup now unused EntryFixed instruction.
-  kEntryFixed,
-  kEntryFixed_Wide,
-  kEntryOptional,
-  kUnused00, // Reserved for EntryNoLocals.
-  kLoadConstant,
-  kLoadConstant_Wide,
-  kFrame,
-  kFrame_Wide,
-  kCheckFunctionTypeArgs,
-  kCheckFunctionTypeArgs_Wide,
-  kCheckStack,
-  kDebugCheck,
-  kJumpIfUnchecked,
-  kJumpIfUnchecked_Wide,
-
-  // Object allocation.
-  kAllocate,
-  kAllocate_Wide,
-  kAllocateT,
-  kCreateArrayTOS,
-  kAllocateClosure,
-  kAllocateClosure_Wide,
-
-  // Context allocation and access.
-  kAllocateContext,
-  kAllocateContext_Wide,
-  kCloneContext,
-  kCloneContext_Wide,
-  kLoadContextParent,
-  kStoreContextParent,
-  kLoadContextVar,
-  kLoadContextVar_Wide,
-  kUnused04, // Reserved for LoadContextVar0
-  kUnused05,
-  kStoreContextVar,
-  kStoreContextVar_Wide,
-
-  // Constants.
-  kPushConstant,
-  kPushConstant_Wide,
-  kUnused06, // Reserved for PushConstant0
-  kUnused07,
-  kPushTrue,
-  kPushFalse,
-  kPushInt,
-  kPushInt_Wide,
-  kUnused08, // Reserved for PushInt0
-  kUnused09, // Reserved for PushInt1
-  kUnused10, // Reserved for PushInt2
-  kUnused11,
-  kPushNull,
-
-  // Locals and expression stack.
-  kDrop1,
-  kPush,
-  kPush_Wide,
-  kUnused12, // Reserved for PushLocal0
-  kUnused13, // Reserved for PushLocal1
-  kUnused14, // Reserved for PushLocal2
-  kUnused15, // Reserved for PushLocal3
-  kUnused16, // Reserved for PushParamLast0
-  kUnused17, // Reserved for PushParamLast1
-  kPopLocal,
-  kPopLocal_Wide,
-  kLoadStatic,
-  kLoadStatic_Wide,
-  kStoreLocal,
-  kStoreLocal_Wide,
-
-  // Instance fields and arrays.
-  kLoadFieldTOS,
-  kLoadFieldTOS_Wide,
-  kStoreFieldTOS,
-  kStoreFieldTOS_Wide,
-  kStoreIndexedTOS,
-  kUnused20,
-
-  // Late fields.
-  kInitLateField,
-  kInitLateField_Wide,
-
-  // Static fields.
-  kStoreStaticTOS,
-  kStoreStaticTOS_Wide,
-
-  // Jumps.
-  kJump,
-  kJump_Wide,
-  kJumpIfNoAsserts,
-  kJumpIfNoAsserts_Wide,
-  kJumpIfNotZeroTypeArgs,
-  kJumpIfNotZeroTypeArgs_Wide,
-  kJumpIfEqStrict,
-  kJumpIfEqStrict_Wide,
-  kJumpIfNeStrict,
-  kJumpIfNeStrict_Wide,
-  kJumpIfTrue,
-  kJumpIfTrue_Wide,
-  kJumpIfFalse,
-  kJumpIfFalse_Wide,
-  kJumpIfNull,
-  kJumpIfNull_Wide,
-  kJumpIfNotNull,
-  kJumpIfNotNull_Wide,
-
-  // Calls.
-  kDirectCall,
-  kDirectCall_Wide,
-  kUncheckedDirectCall,
-  kUncheckedDirectCall_Wide,
-  kInterfaceCall,
-  kInterfaceCall_Wide,
-  kUnused23, // Reserved for InterfaceCall1
-  kUnused24, // Reserved for InterfaceCall1_Wide
-  kInstantiatedInterfaceCall,
-  kInstantiatedInterfaceCall_Wide,
-  kUncheckedClosureCall,
-  kUncheckedClosureCall_Wide,
-  kUncheckedInterfaceCall,
-  kUncheckedInterfaceCall_Wide,
-  kDynamicCall,
-  kDynamicCall_Wide,
-  kNativeCall,
-  kNativeCall_Wide,
-  kReturnTOS,
-  kUnused29,
-
-  // Types and type checks.
-  kAssertAssignable,
-  kAssertAssignable_Wide,
-  kUnused30, // Reserved for AsSimpleType
-  kUnused31, // Reserved for AsSimpleType_Wide
-  kAssertBoolean,
-  kAssertSubtype,
-  kLoadTypeArgumentsField,
-  kLoadTypeArgumentsField_Wide,
-  kInstantiateType,
-  kInstantiateType_Wide,
-  kInstantiateTypeArgumentsTOS,
-  kInstantiateTypeArgumentsTOS_Wide,
-  kUnused32, // Reserved for IsType
-  kUnused33, // Reserved for IsType_Wide
-  kUnused34, // Reserved for IsSimpleType
-  kUnused35, // Reserved for IsSimpleType_Wide
-
-  // Exception handling.
-  kThrow,
-  kSetFrame,
-  kMoveSpecial,
-  kMoveSpecial_Wide,
-
-  // Bool operations.
-  kBooleanNegateTOS,
-
-  // Null operations.
-  kEqualsNull,
-  kNullCheck,
-  kNullCheck_Wide,
-
-  // Int operations.
-  kNegateInt,
-  kAddInt,
-  kSubInt,
-  kMulInt,
-  kTruncDivInt,
-  kModInt,
-  kBitAndInt,
-  kBitOrInt,
-  kBitXorInt,
-  kShlInt,
-  kShrInt,
-  kCompareIntEq,
-  kCompareIntGt,
-  kCompareIntLt,
-  kCompareIntGe,
-  kCompareIntLe,
-
-  // Double operations.
-  kNegateDouble,
-  kAddDouble,
-  kSubDouble,
-  kMulDouble,
-  kDivDouble,
-  kCompareDoubleEq,
-  kCompareDoubleGt,
-  kCompareDoubleLt,
-  kCompareDoubleGe,
-  kCompareDoubleLe,
-}
-
-/// Compact variants of opcodes are always even.
-/// Wide variant = opcode + kWideModifier.
-const int kWideModifier = 1;
-
-/// Opcode should fit into 1 byte.
-const int kMaxOpcodes = 256;
-
-enum Encoding {
-  k0, // No operands.
-  kA, // 1 operand: A = 8-bit unsigned.
-  kD, // 1 operand: D = 8/32-bit unsigned.
-  kX, // 1 operand: X = 8/32-bit signed.
-  kT, // 1 operand: T = 8/24-bit signed.
-  kAE, // 2 operands: A = 8-bit unsigned, E = 8/32-bit unsigned
-  kAY, // 2 operands: A = 8-bit unsigned, Y = 8/32-bit signed
-  kDF, // 2 operands: D = 8/32-bit unsigned, F = 8-bit unsigned
-  kABC, // 3 operands: A, B, C - 8-bit unsigned.
-}
-
-int instructionSize(Encoding encoding, bool isWide) {
-  switch (encoding) {
-    case Encoding.k0:
-      return 1;
-    case Encoding.kA:
-      return 2;
-    case Encoding.kD:
-      return isWide ? 5 : 2;
-    case Encoding.kX:
-      return isWide ? 5 : 2;
-    case Encoding.kT:
-      return isWide ? 4 : 2;
-    case Encoding.kAE:
-      return isWide ? 6 : 3;
-    case Encoding.kAY:
-      return isWide ? 6 : 3;
-    case Encoding.kDF:
-      return isWide ? 6 : 3;
-    case Encoding.kABC:
-      return 4;
-  }
-  throw 'Unexpected instruction encoding $encoding';
-}
-
-enum Operand {
-  none, // ignored / non-existent operand
-  imm, // immediate operand
-  lit, // constant literal from object pool
-  reg, // register (unsigned FP relative local)
-  xeg, // x-register (signed FP relative local)
-  tgt, // jump target relative to the PC of the current instruction
-  spe, // SpecialIndex
-}
-
-class Format {
-  final Encoding encoding;
-  final List<Operand> operands;
-  const Format(this.encoding, this.operands);
-}
-
-const Map<Opcode, Format> BytecodeFormats = const {
-  Opcode.kTrap: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kEntry: const Format(
-      Encoding.kD, const [Operand.imm, Operand.none, Operand.none]),
-  Opcode.kEntryFixed: const Format(
-      Encoding.kAE, const [Operand.imm, Operand.imm, Operand.none]),
-  Opcode.kEntryOptional: const Format(
-      Encoding.kABC, const [Operand.imm, Operand.imm, Operand.imm]),
-  Opcode.kLoadConstant: const Format(
-      Encoding.kAE, const [Operand.reg, Operand.lit, Operand.none]),
-  Opcode.kFrame: const Format(
-      Encoding.kD, const [Operand.imm, Operand.none, Operand.none]),
-  Opcode.kCheckFunctionTypeArgs: const Format(
-      Encoding.kAE, const [Operand.imm, Operand.reg, Operand.none]),
-  Opcode.kCheckStack: const Format(
-      Encoding.kA, const [Operand.imm, Operand.none, Operand.none]),
-  Opcode.kDebugCheck: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kAllocate: const Format(
-      Encoding.kD, const [Operand.lit, Operand.none, Operand.none]),
-  Opcode.kAllocateT: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kCreateArrayTOS: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kAllocateContext: const Format(
-      Encoding.kAE, const [Operand.imm, Operand.imm, Operand.none]),
-  Opcode.kCloneContext: const Format(
-      Encoding.kAE, const [Operand.imm, Operand.imm, Operand.none]),
-  Opcode.kLoadContextParent: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kStoreContextParent: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kLoadContextVar: const Format(
-      Encoding.kAE, const [Operand.imm, Operand.imm, Operand.none]),
-  Opcode.kStoreContextVar: const Format(
-      Encoding.kAE, const [Operand.imm, Operand.imm, Operand.none]),
-  Opcode.kPushConstant: const Format(
-      Encoding.kD, const [Operand.lit, Operand.none, Operand.none]),
-  Opcode.kPushNull: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kPushTrue: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kPushFalse: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kPushInt: const Format(
-      Encoding.kX, const [Operand.imm, Operand.none, Operand.none]),
-  Opcode.kDrop1: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kPush: const Format(
-      Encoding.kX, const [Operand.xeg, Operand.none, Operand.none]),
-  Opcode.kPopLocal: const Format(
-      Encoding.kX, const [Operand.xeg, Operand.none, Operand.none]),
-  Opcode.kStoreLocal: const Format(
-      Encoding.kX, const [Operand.xeg, Operand.none, Operand.none]),
-  Opcode.kLoadFieldTOS: const Format(
-      Encoding.kD, const [Operand.lit, Operand.none, Operand.none]),
-  Opcode.kStoreFieldTOS: const Format(
-      Encoding.kD, const [Operand.lit, Operand.none, Operand.none]),
-  Opcode.kStoreIndexedTOS: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kInitLateField: const Format(
-      Encoding.kD, const [Operand.lit, Operand.none, Operand.none]),
-  Opcode.kPushUninitializedSentinel: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kJumpIfInitialized: const Format(
-      Encoding.kT, const [Operand.tgt, Operand.none, Operand.none]),
-  Opcode.kLoadStatic: const Format(
-      Encoding.kD, const [Operand.lit, Operand.none, Operand.none]),
-  Opcode.kStoreStaticTOS: const Format(
-      Encoding.kD, const [Operand.lit, Operand.none, Operand.none]),
-  Opcode.kJump: const Format(
-      Encoding.kT, const [Operand.tgt, Operand.none, Operand.none]),
-  Opcode.kJumpIfNoAsserts: const Format(
-      Encoding.kT, const [Operand.tgt, Operand.none, Operand.none]),
-  Opcode.kJumpIfNotZeroTypeArgs: const Format(
-      Encoding.kT, const [Operand.tgt, Operand.none, Operand.none]),
-  Opcode.kJumpIfEqStrict: const Format(
-      Encoding.kT, const [Operand.tgt, Operand.none, Operand.none]),
-  Opcode.kJumpIfNeStrict: const Format(
-      Encoding.kT, const [Operand.tgt, Operand.none, Operand.none]),
-  Opcode.kJumpIfTrue: const Format(
-      Encoding.kT, const [Operand.tgt, Operand.none, Operand.none]),
-  Opcode.kJumpIfFalse: const Format(
-      Encoding.kT, const [Operand.tgt, Operand.none, Operand.none]),
-  Opcode.kJumpIfNull: const Format(
-      Encoding.kT, const [Operand.tgt, Operand.none, Operand.none]),
-  Opcode.kJumpIfNotNull: const Format(
-      Encoding.kT, const [Operand.tgt, Operand.none, Operand.none]),
-  Opcode.kJumpIfUnchecked: const Format(
-      Encoding.kT, const [Operand.tgt, Operand.none, Operand.none]),
-  Opcode.kInterfaceCall: const Format(
-      Encoding.kDF, const [Operand.lit, Operand.imm, Operand.none]),
-  Opcode.kInstantiatedInterfaceCall: const Format(
-      Encoding.kDF, const [Operand.lit, Operand.imm, Operand.none]),
-  Opcode.kDynamicCall: const Format(
-      Encoding.kDF, const [Operand.lit, Operand.imm, Operand.none]),
-  Opcode.kNativeCall: const Format(
-      Encoding.kD, const [Operand.lit, Operand.none, Operand.none]),
-  Opcode.kReturnTOS: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kAssertAssignable: const Format(
-      Encoding.kAE, const [Operand.imm, Operand.lit, Operand.none]),
-  Opcode.kAssertBoolean: const Format(
-      Encoding.kA, const [Operand.imm, Operand.none, Operand.none]),
-  Opcode.kAssertSubtype: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kLoadTypeArgumentsField: const Format(
-      Encoding.kD, const [Operand.lit, Operand.none, Operand.none]),
-  Opcode.kInstantiateType: const Format(
-      Encoding.kD, const [Operand.lit, Operand.none, Operand.none]),
-  Opcode.kInstantiateTypeArgumentsTOS: const Format(
-      Encoding.kAE, const [Operand.imm, Operand.lit, Operand.none]),
-  Opcode.kThrow: const Format(
-      Encoding.kA, const [Operand.imm, Operand.none, Operand.none]),
-  Opcode.kMoveSpecial: const Format(
-      Encoding.kAY, const [Operand.spe, Operand.xeg, Operand.none]),
-  Opcode.kSetFrame: const Format(
-      Encoding.kA, const [Operand.imm, Operand.none, Operand.none]),
-  Opcode.kBooleanNegateTOS: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kEqualsNull: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kNullCheck: const Format(
-      Encoding.kD, const [Operand.lit, Operand.none, Operand.none]),
-  Opcode.kNegateInt: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kAddInt: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kSubInt: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kMulInt: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kTruncDivInt: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kModInt: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kBitAndInt: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kBitOrInt: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kBitXorInt: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kShlInt: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kShrInt: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kCompareIntEq: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kCompareIntGt: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kCompareIntLt: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kCompareIntGe: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kCompareIntLe: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kDirectCall: const Format(
-      Encoding.kDF, const [Operand.lit, Operand.imm, Operand.none]),
-  Opcode.kUncheckedDirectCall: const Format(
-      Encoding.kDF, const [Operand.lit, Operand.imm, Operand.none]),
-  Opcode.kAllocateClosure: const Format(
-      Encoding.kD, const [Operand.lit, Operand.none, Operand.none]),
-  Opcode.kUncheckedClosureCall: const Format(
-      Encoding.kDF, const [Operand.lit, Operand.imm, Operand.none]),
-  Opcode.kUncheckedInterfaceCall: const Format(
-      Encoding.kDF, const [Operand.lit, Operand.imm, Operand.none]),
-  Opcode.kNegateDouble: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kAddDouble: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kSubDouble: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kMulDouble: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kDivDouble: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kCompareDoubleEq: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kCompareDoubleGt: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kCompareDoubleLt: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kCompareDoubleGe: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-  Opcode.kCompareDoubleLe: const Format(
-      Encoding.k0, const [Operand.none, Operand.none, Operand.none]),
-};
-
-// Should match constant in runtime/vm/stack_frame_kbc.h.
-const int kParamEndSlotFromFp = 4;
-
-enum SpecialIndex {
-  exception,
-  stackTrace,
-}
-
-/// Returns [true] if there is a wide variant for the given opcode.
-bool hasWideVariant(Opcode opcode) {
-  final encoding = BytecodeFormats[opcode].encoding;
-  switch (encoding) {
-    case Encoding.k0:
-    case Encoding.kA:
-    case Encoding.kABC:
-      return false;
-    case Encoding.kD:
-    case Encoding.kX:
-    case Encoding.kT:
-    case Encoding.kAE:
-    case Encoding.kAY:
-    case Encoding.kDF:
-      return true;
-  }
-  throw 'Unexpected instruction encoding $encoding';
-}
-
-bool isWideOpcode(Opcode opcode) {
-  return (BytecodeFormats[opcode] == null) &&
-      hasWideVariant(Opcode.values[opcode.index - kWideModifier]);
-}
-
-Opcode fromWideOpcode(Opcode opcode) {
-  assert(isWideOpcode(opcode));
-  return Opcode.values[opcode.index - kWideModifier];
-}
-
-void verifyBytecodeInstructionDeclarations() {
-  const String kWideSuffix = '_Wide';
-  for (Opcode opcode in Opcode.values) {
-    final format = BytecodeFormats[opcode];
-    if (opcode.toString().endsWith(kWideSuffix)) {
-      if (format != null) {
-        throw 'Bytecode format should not be defined for wide opcode $opcode.';
-      }
-      final Opcode compact = Opcode.values[opcode.index - kWideModifier];
-      if (compact.toString() + kWideSuffix != opcode.toString()) {
-        throw 'Wide opcode $opcode should immediately follow its compact opcode (previous opcode is $compact).';
-      }
-      if (!hasWideVariant(compact)) {
-        throw 'Wide opcode $opcode should not be defined for opcode $compact with encoding ${BytecodeFormats[compact].encoding}.';
-      }
-    }
-    if (format == null) {
-      continue;
-    }
-    if (hasWideVariant(opcode)) {
-      if (Opcode.values[opcode.index + kWideModifier].toString() !=
-          opcode.toString() + kWideSuffix) {
-        throw 'Opcode $opcode$kWideSuffix should immedialy follow $opcode.';
-      }
-      if (opcode.index.isOdd) {
-        throw 'Opcode $opcode (${format.encoding}) has a wide variant and should be even';
-      }
-    }
-  }
-  if (Opcode.values.length > kMaxOpcodes) {
-    throw 'Too many opcodes';
-  }
-}
-
-bool isJump(Opcode opcode) => BytecodeFormats[opcode].encoding == Encoding.kT;
-
-bool isThrow(Opcode opcode) => opcode == Opcode.kThrow;
-
-bool isCall(Opcode opcode) {
-  switch (opcode) {
-    case Opcode.kDirectCall:
-    case Opcode.kUncheckedDirectCall:
-    case Opcode.kInterfaceCall:
-    case Opcode.kInstantiatedInterfaceCall:
-    case Opcode.kUncheckedClosureCall:
-    case Opcode.kUncheckedInterfaceCall:
-    case Opcode.kDynamicCall:
-    case Opcode.kNativeCall:
-      return true;
-    default:
-      return false;
-  }
-}
-
-bool isReturn(Opcode opcode) => opcode == Opcode.kReturnTOS;
-
-bool isControlFlow(Opcode opcode) =>
-    isJump(opcode) || isThrow(opcode) || isCall(opcode) || isReturn(opcode);
-
-bool isPush(Opcode opcode) {
-  switch (opcode) {
-    case Opcode.kPush:
-    case Opcode.kPushConstant:
-    case Opcode.kPushNull:
-    case Opcode.kPushTrue:
-    case Opcode.kPushFalse:
-    case Opcode.kPushInt:
-    case Opcode.kPushUninitializedSentinel:
-      return true;
-    default:
-      return false;
-  }
-}
-
-// Bytecode instructions reference constant pool indices using
-// unsigned 32-bit operands.
-const int constantPoolIndexLimit = 1 << 32;
-
-// Local variables are referenced using 32-bit signed operands.
-const int localVariableIndexLimit = 1 << 31;
-
-// Captured variables are referenced using 32-bit unsigned operands.
-const int capturedVariableIndexLimit = 1 << 32;
-
-// Context IDs are referenced using 8-bit unsigned operands.
-const int contextIdLimit = 1 << 8;
-
-// Number of arguments is encoded as 8-bit unsigned operand.
-const int argumentsLimit = 1 << 8;
-
-// Base class for exceptions thrown when certain limit of bytecode
-// format is exceeded.
-abstract class BytecodeLimitExceededException {}
diff --git a/pkg/vm/lib/bytecode/declarations.dart b/pkg/vm/lib/bytecode/declarations.dart
deleted file mode 100644
index 9b247c9..0000000
--- a/pkg/vm/lib/bytecode/declarations.dart
+++ /dev/null
@@ -1,1659 +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.
-
-library vm.bytecode.declarations;
-
-import 'package:kernel/ast.dart' show TreeNode, listHashCode, listEquals;
-import 'package:kernel/core_types.dart' show CoreTypes;
-import 'bytecode_serialization.dart'
-    show
-        BufferedWriter,
-        BufferedReader,
-        BytecodeDeclaration,
-        BytecodeSizeStatistics,
-        StringTable;
-import 'constant_pool.dart' show ConstantPool;
-import 'dbc.dart' show currentBytecodeFormatVersion;
-import 'disassembler.dart' show BytecodeDisassembler;
-import 'exceptions.dart' show ExceptionsTable;
-import 'local_variable_table.dart' show LocalVariableTable;
-import 'object_table.dart' show ObjectTable, ObjectHandle, NameAndType;
-import 'source_positions.dart' show LineStarts, SourcePositions;
-
-import 'dart:typed_data' show Uint8List;
-
-class LibraryDeclaration extends BytecodeDeclaration {
-  static const usesDartMirrorsFlag = 1 << 0;
-  static const usesDartFfiFlag = 1 << 1;
-  static const hasExtensionsFlag = 1 << 2;
-  static const isNonNullableByDefaultFlag = 1 << 3;
-
-  ObjectHandle importUri;
-  final int flags;
-  final ObjectHandle name;
-  final ObjectHandle script;
-  final List<ObjectHandle> extensionUris;
-  final List<ClassDeclaration> classes;
-
-  LibraryDeclaration(this.importUri, this.flags, this.name, this.script,
-      this.extensionUris, this.classes);
-
-  void write(BufferedWriter writer) {
-    final start = writer.offset;
-    writer.writePackedUInt30(flags);
-    writer.writePackedObject(name);
-    writer.writePackedObject(script);
-    if ((flags & hasExtensionsFlag) != 0) {
-      writer.writePackedList(extensionUris);
-    }
-    writer.writePackedUInt30(classes.length);
-    for (var cls in classes) {
-      writer.writePackedObject(cls.name);
-      writer.writeLinkOffset(cls);
-    }
-    BytecodeSizeStatistics.librariesSize += (writer.offset - start);
-  }
-
-  factory LibraryDeclaration.read(BufferedReader reader) {
-    final flags = reader.readPackedUInt30();
-    final name = reader.readPackedObject();
-    final script = reader.readPackedObject();
-    final classes =
-        List<ClassDeclaration>.generate(reader.readPackedUInt30(), (_) {
-      final className = reader.readPackedObject();
-      return reader.readLinkOffset<ClassDeclaration>()..name = className;
-    });
-    final extensionUris = ((flags & hasExtensionsFlag) != 0)
-        ? reader.readPackedList<ObjectHandle>()
-        : const <ObjectHandle>[];
-    return new LibraryDeclaration(
-        null, flags, name, script, extensionUris, classes);
-  }
-
-  @override
-  String toString() {
-    final StringBuffer sb = new StringBuffer();
-    sb.writeln('Library $importUri');
-    sb.writeln('    name $name');
-    sb.writeln('    script $script');
-    if ((flags & usesDartMirrorsFlag) != 0) {
-      sb.writeln('    uses dart:mirrors');
-    }
-    if ((flags & usesDartFfiFlag) != 0) {
-      sb.writeln('    uses dart:ffi');
-    }
-    if ((flags & hasExtensionsFlag) != 0) {
-      sb.writeln('    extensions: $extensionUris');
-    }
-    if ((flags & isNonNullableByDefaultFlag) != 0) {
-      sb.writeln('    is nnbd');
-    }
-    sb.writeln();
-    for (var cls in classes) {
-      sb.write(cls);
-    }
-    return sb.toString();
-  }
-}
-
-class ClassDeclaration extends BytecodeDeclaration {
-  static const isAbstractFlag = 1 << 0;
-  static const isEnumFlag = 1 << 1;
-  static const hasTypeParamsFlag = 1 << 2;
-  static const hasTypeArgumentsFlag = 1 << 3;
-  static const isTransformedMixinApplicationFlag = 1 << 4;
-  static const hasSourcePositionsFlag = 1 << 5;
-  static const hasAnnotationsFlag = 1 << 6;
-  static const hasPragmaFlag = 1 << 7;
-
-  ObjectHandle name;
-  final int flags;
-  final ObjectHandle script;
-  final int position;
-  final int endPosition;
-  final TypeParametersDeclaration typeParameters;
-  final int numTypeArguments;
-  final ObjectHandle superType;
-  final List<ObjectHandle> interfaces;
-  final Members members;
-  final AnnotationsDeclaration annotations;
-
-  ClassDeclaration(
-      this.name,
-      this.flags,
-      this.script,
-      this.position,
-      this.endPosition,
-      this.typeParameters,
-      this.numTypeArguments,
-      this.superType,
-      this.interfaces,
-      this.members,
-      this.annotations);
-
-  void write(BufferedWriter writer) {
-    final start = writer.offset;
-    writer.writePackedUInt30(flags);
-    writer.writePackedObject(script);
-
-    if ((flags & hasSourcePositionsFlag) != 0) {
-      writer.writePackedUInt30(position + 1);
-      writer.writePackedUInt30(endPosition + 1);
-    }
-    if ((flags & hasTypeArgumentsFlag) != 0) {
-      writer.writePackedUInt30(numTypeArguments);
-    }
-    if ((flags & hasTypeParamsFlag) != 0) {
-      typeParameters.write(writer);
-    }
-    writer.writePackedObject(superType);
-    writer.writePackedList(interfaces);
-    if ((flags & hasAnnotationsFlag) != 0) {
-      writer.writeLinkOffset(annotations);
-    }
-    writer.writeLinkOffset(members);
-    BytecodeSizeStatistics.classesSize += (writer.offset - start);
-  }
-
-  factory ClassDeclaration.read(BufferedReader reader) {
-    final flags = reader.readPackedUInt30();
-    final script = reader.readPackedObject();
-    final position = ((flags & hasSourcePositionsFlag) != 0)
-        ? reader.readPackedUInt30() - 1
-        : TreeNode.noOffset;
-    final endPosition = ((flags & hasSourcePositionsFlag) != 0)
-        ? reader.readPackedUInt30() - 1
-        : TreeNode.noOffset;
-    final numTypeArguments =
-        ((flags & hasTypeArgumentsFlag) != 0) ? reader.readPackedUInt30() : 0;
-    final typeParameters = ((flags & hasTypeParamsFlag) != 0)
-        ? new TypeParametersDeclaration.read(reader)
-        : null;
-    final superType = reader.readPackedObject();
-    final interfaces = reader.readPackedList<ObjectHandle>();
-    final annotations = ((flags & hasAnnotationsFlag) != 0)
-        ? reader.readLinkOffset<AnnotationsDeclaration>()
-        : null;
-    final members = reader.readLinkOffset<Members>();
-    return new ClassDeclaration(
-        null,
-        flags,
-        script,
-        position,
-        endPosition,
-        typeParameters,
-        numTypeArguments,
-        superType,
-        interfaces,
-        members,
-        annotations);
-  }
-
-  @override
-  String toString() {
-    final StringBuffer sb = new StringBuffer();
-    sb.write('Class $name, script = $script');
-    if ((flags & isAbstractFlag) != 0) {
-      sb.write(', abstract');
-    }
-    if ((flags & isEnumFlag) != 0) {
-      sb.write(', enum');
-    }
-    if ((flags & isTransformedMixinApplicationFlag) != 0) {
-      sb.write(', mixin-application');
-    }
-    if ((flags & hasPragmaFlag) != 0) {
-      sb.write(', has-pragma');
-    }
-    if ((flags & hasSourcePositionsFlag) != 0) {
-      sb.write(', pos = $position, end-pos = $endPosition');
-    }
-    sb.writeln();
-    if ((flags & hasTypeParamsFlag) != 0) {
-      sb.write('    type-params $typeParameters (args: $numTypeArguments)\n');
-    }
-    if (superType != null) {
-      sb.write('    extends $superType\n');
-    }
-    if (interfaces.isNotEmpty) {
-      sb.write('    implements $interfaces\n');
-    }
-    if ((flags & hasAnnotationsFlag) != 0) {
-      sb.write('    annotations $annotations\n');
-    }
-    sb.writeln();
-    sb.write(members.toString());
-    return sb.toString();
-  }
-}
-
-class SourceFile extends BytecodeDeclaration {
-  static const hasLineStartsFlag = 1 << 0;
-  static const hasSourceFlag = 1 << 1;
-
-  final ObjectHandle importUri;
-  LineStarts lineStarts;
-  String source;
-
-  SourceFile(this.importUri, [this.lineStarts, this.source]);
-
-  void write(BufferedWriter writer) {
-    int flags = 0;
-    if (lineStarts != null) {
-      flags |= hasLineStartsFlag;
-    }
-    if (source != null && source != '') {
-      flags |= hasSourceFlag;
-    }
-    writer.writePackedUInt30(flags);
-    writer.writePackedObject(importUri);
-    if ((flags & hasLineStartsFlag) != 0) {
-      writer.writeLinkOffset(lineStarts);
-    }
-    if ((flags & hasSourceFlag) != 0) {
-      writer.writePackedStringReference(source);
-    }
-  }
-
-  factory SourceFile.read(BufferedReader reader) {
-    final flags = reader.readPackedUInt30();
-    final importUri = reader.readPackedObject();
-    final lineStarts = ((flags & hasLineStartsFlag) != 0)
-        ? reader.readLinkOffset<LineStarts>()
-        : null;
-    final source = ((flags & hasSourceFlag) != 0)
-        ? reader.readPackedStringReference()
-        : null;
-    return new SourceFile(importUri, lineStarts, source);
-  }
-
-  @override
-  String toString() {
-    final StringBuffer sb = new StringBuffer();
-    sb.write('source: import-uri $importUri');
-    if (source != null && source != '') {
-      sb.write(', ${source.length} text chars');
-    }
-    if (lineStarts != null) {
-      sb.write(', ${lineStarts.lineStarts.length} line starts');
-    }
-    return sb.toString();
-  }
-}
-
-class Members extends BytecodeDeclaration {
-  final List<FieldDeclaration> fields;
-  final List<FunctionDeclaration> functions;
-
-  Members(this.fields, this.functions);
-
-  int countFunctions() {
-    int count = functions.length;
-    for (var field in fields) {
-      if ((field.flags & FieldDeclaration.hasGetterFlag) != 0) {
-        ++count;
-      }
-      if ((field.flags & FieldDeclaration.hasSetterFlag) != 0) {
-        ++count;
-      }
-    }
-    return count;
-  }
-
-  void write(BufferedWriter writer) {
-    final start = writer.offset;
-    writer.writePackedUInt30(countFunctions());
-    writer.writePackedUInt30(fields.length);
-    for (var field in fields) {
-      field.write(writer);
-    }
-    writer.writePackedUInt30(functions.length);
-    for (var func in functions) {
-      func.write(writer);
-    }
-    BytecodeSizeStatistics.membersSize += (writer.offset - start);
-  }
-
-  factory Members.read(BufferedReader reader) {
-    reader.readPackedUInt30(); // numFunctions
-    final fields = new List<FieldDeclaration>.generate(
-        reader.readPackedUInt30(), (_) => new FieldDeclaration.read(reader));
-    final functions = new List<FunctionDeclaration>.generate(
-        reader.readPackedUInt30(), (_) => new FunctionDeclaration.read(reader));
-    return new Members(fields, functions);
-  }
-
-  @override
-  String toString() => "${fields.join('\n')}\n"
-      "${functions.join('\n')}";
-}
-
-class FieldDeclaration {
-  static const hasNontrivialInitializerFlag = 1 << 0;
-  static const hasGetterFlag = 1 << 1;
-  static const hasSetterFlag = 1 << 2;
-  static const isReflectableFlag = 1 << 3;
-  static const isStaticFlag = 1 << 4;
-  static const isConstFlag = 1 << 5;
-  static const isFinalFlag = 1 << 6;
-  static const isCovariantFlag = 1 << 7;
-  static const isGenericCovariantImplFlag = 1 << 8;
-  static const hasSourcePositionsFlag = 1 << 9;
-  static const hasAnnotationsFlag = 1 << 10;
-  static const hasPragmaFlag = 1 << 11;
-  static const hasCustomScriptFlag = 1 << 12;
-  static const hasInitializerCodeFlag = 1 << 13;
-  static const hasAttributesFlag = 1 << 14;
-  static const isLateFlag = 1 << 15;
-  static const isExtensionMemberFlag = 1 << 16;
-  static const hasInitializerFlag = 1 << 17;
-
-  final int flags;
-  final ObjectHandle name;
-  final ObjectHandle type;
-  final ObjectHandle value;
-  final ObjectHandle script;
-  final int position;
-  final int endPosition;
-  final ObjectHandle getterName;
-  final ObjectHandle setterName;
-  final Code initializerCode;
-  final AnnotationsDeclaration annotations;
-  final ObjectHandle attributes;
-
-  FieldDeclaration(
-      this.flags,
-      this.name,
-      this.type,
-      this.value,
-      this.script,
-      this.position,
-      this.endPosition,
-      this.getterName,
-      this.setterName,
-      this.initializerCode,
-      this.annotations,
-      this.attributes);
-
-  void write(BufferedWriter writer) {
-    writer.writePackedUInt30(flags);
-    writer.writePackedObject(name);
-    writer.writePackedObject(type);
-
-    if ((flags & hasCustomScriptFlag) != 0) {
-      writer.writePackedObject(script);
-    }
-    if ((flags & hasSourcePositionsFlag) != 0) {
-      writer.writePackedUInt30(position + 1);
-      writer.writePackedUInt30(endPosition + 1);
-    }
-    if ((flags & hasInitializerCodeFlag) != 0) {
-      writer.writeLinkOffset(initializerCode);
-    }
-    if ((flags & hasNontrivialInitializerFlag) == 0) {
-      writer.writePackedObject(value);
-    }
-    if ((flags & hasGetterFlag) != 0) {
-      writer.writePackedObject(getterName);
-    }
-    if ((flags & hasSetterFlag) != 0) {
-      writer.writePackedObject(setterName);
-    }
-    if ((flags & hasAnnotationsFlag) != 0) {
-      writer.writeLinkOffset(annotations);
-    }
-    if ((flags & hasAttributesFlag) != 0) {
-      writer.writePackedObject(attributes);
-    }
-  }
-
-  factory FieldDeclaration.read(BufferedReader reader) {
-    final flags = reader.readPackedUInt30();
-    final name = reader.readPackedObject();
-    final type = reader.readPackedObject();
-    final script =
-        ((flags & hasCustomScriptFlag) != 0) ? reader.readPackedObject() : null;
-    final position = ((flags & hasSourcePositionsFlag) != 0)
-        ? reader.readPackedUInt30() - 1
-        : TreeNode.noOffset;
-    final endPosition = ((flags & hasSourcePositionsFlag) != 0)
-        ? reader.readPackedUInt30() - 1
-        : TreeNode.noOffset;
-    final initializerCode = ((flags & hasInitializerCodeFlag) != 0)
-        ? reader.readLinkOffset<Code>()
-        : null;
-    final value = ((flags & hasNontrivialInitializerFlag) == 0)
-        ? reader.readPackedObject()
-        : null;
-    final getterName =
-        ((flags & hasGetterFlag) != 0) ? reader.readPackedObject() : null;
-    final setterName =
-        ((flags & hasSetterFlag) != 0) ? reader.readPackedObject() : null;
-    final annotations = ((flags & hasAnnotationsFlag) != 0)
-        ? reader.readLinkOffset<AnnotationsDeclaration>()
-        : null;
-    final attributes =
-        ((flags & hasAttributesFlag) != 0) ? reader.readPackedObject() : null;
-    return new FieldDeclaration(
-        flags,
-        name,
-        type,
-        value,
-        script,
-        position,
-        endPosition,
-        getterName,
-        setterName,
-        initializerCode,
-        annotations,
-        attributes);
-  }
-
-  @override
-  String toString() {
-    final StringBuffer sb = new StringBuffer();
-    sb.write('Field $name, type = $type');
-    if ((flags & hasGetterFlag) != 0) {
-      sb.write(', getter = $getterName');
-    }
-    if ((flags & hasSetterFlag) != 0) {
-      sb.write(', setter = $setterName');
-    }
-    if ((flags & isReflectableFlag) != 0) {
-      sb.write(', reflectable');
-    }
-    if ((flags & isStaticFlag) != 0) {
-      sb.write(', static');
-    }
-    if ((flags & isConstFlag) != 0) {
-      sb.write(', const');
-    }
-    if ((flags & isFinalFlag) != 0) {
-      sb.write(', final');
-    }
-    if ((flags & isLateFlag) != 0) {
-      sb.write(', is-late');
-    }
-    if ((flags & isExtensionMemberFlag) != 0) {
-      sb.write(', extension-member');
-    }
-    if ((flags & hasPragmaFlag) != 0) {
-      sb.write(', has-pragma');
-    }
-    if ((flags & hasCustomScriptFlag) != 0) {
-      sb.write(', custom-script = $script');
-    }
-    if ((flags & hasSourcePositionsFlag) != 0) {
-      sb.write(', pos = $position, end-pos = $endPosition');
-    }
-    if ((flags & hasInitializerFlag) != 0) {
-      sb.write(', has-initializer');
-    }
-    sb.writeln();
-    if ((flags & hasInitializerCodeFlag) != 0) {
-      sb.write('    initializer\n$initializerCode\n');
-    }
-    if ((flags & hasNontrivialInitializerFlag) == 0) {
-      sb.write('    value = $value\n');
-    }
-    if ((flags & hasAnnotationsFlag) != 0) {
-      sb.write('    annotations $annotations\n');
-    }
-    if ((flags & hasAttributesFlag) != 0) {
-      sb.write('    attributes $attributes\n');
-    }
-    return sb.toString();
-  }
-}
-
-class FunctionDeclaration {
-  static const isConstructorFlag = 1 << 0;
-  static const isGetterFlag = 1 << 1;
-  static const isSetterFlag = 1 << 2;
-  static const isFactoryFlag = 1 << 3;
-  static const isStaticFlag = 1 << 4;
-  static const isAbstractFlag = 1 << 5;
-  static const isConstFlag = 1 << 6;
-  static const hasOptionalPositionalParamsFlag = 1 << 7;
-  static const hasOptionalNamedParamsFlag = 1 << 8;
-  static const hasTypeParamsFlag = 1 << 9;
-  static const isReflectableFlag = 1 << 10;
-  static const isDebuggableFlag = 1 << 11;
-  static const isAsyncFlag = 1 << 12;
-  static const isAsyncStarFlag = 1 << 13;
-  static const isSyncStarFlag = 1 << 14;
-  static const isForwardingStubFlag = 1 << 15;
-  static const isNoSuchMethodForwarderFlag = 1 << 16;
-  static const isNativeFlag = 1 << 17;
-  static const isExternalFlag = 1 << 18;
-  static const hasSourcePositionsFlag = 1 << 19;
-  static const hasAnnotationsFlag = 1 << 20;
-  static const hasPragmaFlag = 1 << 21;
-  static const hasCustomScriptFlag = 1 << 22;
-  static const hasAttributesFlag = 1 << 23;
-  static const isExtensionMemberFlag = 1 << 24;
-  static const hasParameterFlagsFlag = 1 << 25;
-
-  final int flags;
-  final ObjectHandle name;
-  final ObjectHandle script;
-  final int position;
-  final int endPosition;
-  final TypeParametersDeclaration typeParameters;
-  final int numRequiredParameters;
-  final List<ParameterDeclaration> parameters;
-  // Only contains the required flag for parameters when present.
-  final List<int> parameterFlags;
-  final ObjectHandle returnType;
-  final ObjectHandle nativeName;
-  final Code code;
-  final AnnotationsDeclaration annotations;
-  final ObjectHandle attributes;
-
-  FunctionDeclaration(
-      this.flags,
-      this.name,
-      this.script,
-      this.position,
-      this.endPosition,
-      this.typeParameters,
-      this.numRequiredParameters,
-      this.parameters,
-      this.parameterFlags,
-      this.returnType,
-      this.nativeName,
-      this.code,
-      this.annotations,
-      this.attributes);
-
-  void write(BufferedWriter writer) {
-    writer.writePackedUInt30(flags);
-    writer.writePackedObject(name);
-    if ((flags & hasCustomScriptFlag) != 0) {
-      writer.writePackedObject(script);
-    }
-    if ((flags & hasSourcePositionsFlag) != 0) {
-      writer.writePackedUInt30(position + 1);
-      writer.writePackedUInt30(endPosition + 1);
-    }
-    if ((flags & hasTypeParamsFlag) != 0) {
-      typeParameters.write(writer);
-    }
-    writer.writePackedUInt30(parameters.length);
-    if ((flags & hasOptionalPositionalParamsFlag) != 0 ||
-        (flags & hasOptionalNamedParamsFlag) != 0) {
-      writer.writePackedUInt30(numRequiredParameters);
-    }
-    for (var param in parameters) {
-      param.write(writer);
-    }
-    if ((flags & hasParameterFlagsFlag) != 0) {
-      writer.writePackedUInt30(parameterFlags.length);
-      parameterFlags.forEach((flags) => writer.writePackedUInt30(flags));
-    }
-    writer.writePackedObject(returnType);
-    if ((flags & isNativeFlag) != 0) {
-      writer.writePackedObject(nativeName);
-    }
-    if ((flags & isAbstractFlag) == 0) {
-      writer.writeLinkOffset(code);
-    }
-    if ((flags & hasAnnotationsFlag) != 0) {
-      writer.writeLinkOffset(annotations);
-    }
-    if ((flags & hasAttributesFlag) != 0) {
-      writer.writePackedObject(attributes);
-    }
-  }
-
-  factory FunctionDeclaration.read(BufferedReader reader) {
-    final flags = reader.readPackedUInt30();
-    final name = reader.readPackedObject();
-
-    final script =
-        ((flags & hasCustomScriptFlag) != 0) ? reader.readPackedObject() : null;
-    final position = ((flags & hasSourcePositionsFlag) != 0)
-        ? reader.readPackedUInt30() - 1
-        : TreeNode.noOffset;
-    final endPosition = ((flags & hasSourcePositionsFlag) != 0)
-        ? reader.readPackedUInt30() - 1
-        : TreeNode.noOffset;
-    final typeParameters = ((flags & hasTypeParamsFlag) != 0)
-        ? new TypeParametersDeclaration.read(reader)
-        : null;
-
-    final numParameters = reader.readPackedUInt30();
-    final numRequiredParameters =
-        ((flags & hasOptionalPositionalParamsFlag) != 0 ||
-                (flags & hasOptionalNamedParamsFlag) != 0)
-            ? reader.readPackedUInt30()
-            : numParameters;
-
-    final parameters = new List<ParameterDeclaration>.generate(
-        numParameters, (_) => new ParameterDeclaration.read(reader));
-    final parameterFlags = ((flags & hasParameterFlagsFlag) != 0)
-        ? List<int>.generate(
-            reader.readPackedUInt30(), (_) => reader.readPackedUInt30())
-        : null;
-    final returnType = reader.readPackedObject();
-    final nativeName =
-        ((flags & isNativeFlag) != 0) ? reader.readPackedObject() : null;
-    final code =
-        ((flags & isAbstractFlag) == 0) ? reader.readLinkOffset<Code>() : null;
-    final annotations = ((flags & hasAnnotationsFlag) != 0)
-        ? reader.readLinkOffset<AnnotationsDeclaration>()
-        : null;
-    final attributes =
-        ((flags & hasAttributesFlag) != 0) ? reader.readPackedObject() : null;
-    return new FunctionDeclaration(
-        flags,
-        name,
-        script,
-        position,
-        endPosition,
-        typeParameters,
-        numRequiredParameters,
-        parameters,
-        parameterFlags,
-        returnType,
-        nativeName,
-        code,
-        annotations,
-        attributes);
-  }
-
-  @override
-  String toString() {
-    final StringBuffer sb = new StringBuffer();
-    sb.write('Function $name');
-    if ((flags & isConstructorFlag) != 0) {
-      sb.write(', constructor');
-    }
-    if ((flags & isGetterFlag) != 0) {
-      sb.write(', getter');
-    }
-    if ((flags & isSetterFlag) != 0) {
-      sb.write(', setter');
-    }
-    if ((flags & isFactoryFlag) != 0) {
-      sb.write(', factory');
-    }
-    if ((flags & isStaticFlag) != 0) {
-      sb.write(', static');
-    }
-    if ((flags & isAbstractFlag) != 0) {
-      sb.write(', abstract');
-    }
-    if ((flags & isConstFlag) != 0) {
-      sb.write(', const');
-    }
-    if ((flags & isExtensionMemberFlag) != 0) {
-      sb.write(', extension-member');
-    }
-    if ((flags & hasOptionalPositionalParamsFlag) != 0) {
-      sb.write(', has-optional-positional-params');
-    }
-    if ((flags & hasOptionalNamedParamsFlag) != 0) {
-      sb.write(', has-optional-named-params');
-    }
-    if ((flags & isReflectableFlag) != 0) {
-      sb.write(', reflectable');
-    }
-    if ((flags & isDebuggableFlag) != 0) {
-      sb.write(', debuggable');
-    }
-    if ((flags & isAsyncFlag) != 0) {
-      sb.write(', async');
-    }
-    if ((flags & isAsyncStarFlag) != 0) {
-      sb.write(', async*');
-    }
-    if ((flags & isSyncStarFlag) != 0) {
-      sb.write(', sync*');
-    }
-    if ((flags & isForwardingStubFlag) != 0) {
-      sb.write(', forwarding-stub');
-    }
-    if ((flags & isNoSuchMethodForwarderFlag) != 0) {
-      sb.write(', no-such-method-forwarder');
-    }
-    if ((flags & isNativeFlag) != 0) {
-      sb.write(', native $nativeName');
-    }
-    if ((flags & isExternalFlag) != 0) {
-      sb.write(', external');
-    }
-    if ((flags & hasPragmaFlag) != 0) {
-      sb.write(', has-pragma');
-    }
-    if ((flags & hasCustomScriptFlag) != 0) {
-      sb.write(', custom-script = $script');
-    }
-    if ((flags & hasSourcePositionsFlag) != 0) {
-      sb.write(', pos = $position, end-pos = $endPosition');
-    }
-    sb.writeln();
-    if ((flags & hasTypeParamsFlag) != 0) {
-      sb.write('    type-params $typeParameters\n');
-    }
-    sb.write('    parameters $parameters (required: $numRequiredParameters)\n');
-    if ((flags & hasParameterFlagsFlag) != 0) {
-      sb.write('    parameter-flags $parameterFlags\n');
-    }
-    sb.write('    return-type $returnType\n');
-    if ((flags & hasAnnotationsFlag) != 0) {
-      sb.write('    annotations $annotations\n');
-    }
-    if ((flags & hasAttributesFlag) != 0) {
-      sb.write('    attributes $attributes\n');
-    }
-    if ((flags & isAbstractFlag) == 0 && (flags & isExternalFlag) == 0) {
-      sb.write('\n$code\n');
-    }
-    return sb.toString();
-  }
-}
-
-class TypeParametersDeclaration {
-  final List<NameAndType> typeParams;
-
-  TypeParametersDeclaration(this.typeParams);
-
-  void write(BufferedWriter writer) {
-    writer.writePackedUInt30(typeParams.length);
-    for (var tp in typeParams) {
-      writer.writePackedObject(tp.name);
-    }
-    for (var tp in typeParams) {
-      writer.writePackedObject(tp.type);
-    }
-  }
-
-  factory TypeParametersDeclaration.read(BufferedReader reader) {
-    final int numTypeParams = reader.readPackedUInt30();
-    List<ObjectHandle> names = new List<ObjectHandle>.generate(
-        numTypeParams, (_) => reader.readPackedObject());
-    List<ObjectHandle> bounds = new List<ObjectHandle>.generate(
-        numTypeParams, (_) => reader.readPackedObject());
-    return new TypeParametersDeclaration(new List<NameAndType>.generate(
-        numTypeParams, (int i) => new NameAndType(names[i], bounds[i])));
-  }
-
-  @override
-  int get hashCode => listHashCode(typeParams);
-
-  @override
-  bool operator ==(other) =>
-      other is TypeParametersDeclaration &&
-      listEquals(this.typeParams, other.typeParams);
-
-  @override
-  String toString() => '<${typeParams.join(', ')}>';
-}
-
-class ParameterDeclaration {
-  // Parameter flags are written separately (in Code).
-  static const isCovariantFlag = 1 << 0;
-  static const isGenericCovariantImplFlag = 1 << 1;
-  static const isFinalFlag = 1 << 2;
-  static const isRequiredFlag = 1 << 3;
-
-  final ObjectHandle name;
-  final ObjectHandle type;
-
-  ParameterDeclaration(this.name, this.type);
-
-  void write(BufferedWriter writer) {
-    writer.writePackedObject(name);
-    writer.writePackedObject(type);
-  }
-
-  factory ParameterDeclaration.read(BufferedReader reader) {
-    final name = reader.readPackedObject();
-    final type = reader.readPackedObject();
-    return new ParameterDeclaration(name, type);
-  }
-
-  @override
-  String toString() => '$type $name';
-}
-
-class Code extends BytecodeDeclaration {
-  static const hasExceptionsTableFlag = 1 << 0;
-  static const hasSourcePositionsFlag = 1 << 1;
-  static const hasNullableFieldsFlag = 1 << 2;
-  static const hasClosuresFlag = 1 << 3;
-  static const hasParameterFlagsFlag = 1 << 4;
-  static const hasForwardingStubTargetFlag = 1 << 5;
-  static const hasDefaultFunctionTypeArgsFlag = 1 << 6;
-  static const hasLocalVariablesFlag = 1 << 7;
-
-  final ConstantPool constantPool;
-  final Uint8List bytecodes;
-  final ExceptionsTable exceptionsTable;
-  final SourcePositions sourcePositions;
-  final LocalVariableTable localVariables;
-  final List<ObjectHandle> nullableFields;
-  final List<ClosureDeclaration> closures;
-  // Contains all parameter flags except for the required flags, which are
-  // kept instead in the FunctionDeclaration and ClosureDeclaration.
-  final List<int> parameterFlags;
-  final int forwardingStubTargetCpIndex;
-  final int defaultFunctionTypeArgsCpIndex;
-
-  bool get hasExceptionsTable => exceptionsTable.blocks.isNotEmpty;
-  bool get hasSourcePositions =>
-      sourcePositions != null && sourcePositions.isNotEmpty;
-  bool get hasLocalVariables =>
-      localVariables != null && localVariables.isNotEmpty;
-  bool get hasNullableFields => nullableFields.isNotEmpty;
-  bool get hasClosures => closures.isNotEmpty;
-
-  int get flags =>
-      (hasExceptionsTable ? hasExceptionsTableFlag : 0) |
-      (hasSourcePositions ? hasSourcePositionsFlag : 0) |
-      (hasNullableFields ? hasNullableFieldsFlag : 0) |
-      (hasClosures ? hasClosuresFlag : 0) |
-      (parameterFlags != null ? hasParameterFlagsFlag : 0) |
-      (forwardingStubTargetCpIndex != null ? hasForwardingStubTargetFlag : 0) |
-      (defaultFunctionTypeArgsCpIndex != null
-          ? hasDefaultFunctionTypeArgsFlag
-          : 0) |
-      (hasLocalVariables ? hasLocalVariablesFlag : 0);
-
-  Code(
-      this.constantPool,
-      this.bytecodes,
-      this.exceptionsTable,
-      this.sourcePositions,
-      this.localVariables,
-      this.nullableFields,
-      this.closures,
-      this.parameterFlags,
-      this.forwardingStubTargetCpIndex,
-      this.defaultFunctionTypeArgsCpIndex);
-
-  void write(BufferedWriter writer) {
-    final start = writer.offset;
-    writer.writePackedUInt30(flags);
-    if (parameterFlags != null) {
-      writer.writePackedUInt30(parameterFlags.length);
-      parameterFlags.forEach((flags) => writer.writePackedUInt30(flags));
-    }
-    if (forwardingStubTargetCpIndex != null) {
-      writer.writePackedUInt30(forwardingStubTargetCpIndex);
-    }
-    if (defaultFunctionTypeArgsCpIndex != null) {
-      writer.writePackedUInt30(defaultFunctionTypeArgsCpIndex);
-    }
-    if (hasClosures) {
-      writer.writePackedUInt30(closures.length);
-      closures.forEach((c) => c.write(writer));
-    }
-    constantPool.write(writer);
-    _writeBytecodeInstructions(writer, bytecodes);
-    if (hasExceptionsTable) {
-      exceptionsTable.write(writer);
-    }
-    if (hasSourcePositions) {
-      writer.writeLinkOffset(sourcePositions);
-    }
-    if (hasLocalVariables) {
-      writer.writeLinkOffset(localVariables);
-    }
-    if (hasNullableFields) {
-      writer.writePackedList(nullableFields);
-    }
-    if (hasClosures) {
-      closures.forEach((c) => c.code.write(writer));
-    }
-    BytecodeSizeStatistics.codeSize += (writer.offset - start);
-  }
-
-  factory Code.read(BufferedReader reader) {
-    int flags = reader.readPackedUInt30();
-    final parameterFlags = ((flags & hasParameterFlagsFlag) != 0)
-        ? new List<int>.generate(
-            reader.readPackedUInt30(), (_) => reader.readPackedUInt30())
-        : null;
-    final forwardingStubTargetCpIndex =
-        ((flags & hasForwardingStubTargetFlag) != 0)
-            ? reader.readPackedUInt30()
-            : null;
-    final defaultFunctionTypeArgsCpIndex =
-        ((flags & hasDefaultFunctionTypeArgsFlag) != 0)
-            ? reader.readPackedUInt30()
-            : null;
-    final List<ClosureDeclaration> closures = ((flags & hasClosuresFlag) != 0)
-        ? new List<ClosureDeclaration>.generate(reader.readPackedUInt30(),
-            (_) => new ClosureDeclaration.read(reader))
-        : const <ClosureDeclaration>[];
-    final ConstantPool constantPool = new ConstantPool.read(reader);
-    final Uint8List bytecodes = _readBytecodeInstructions(reader);
-    final exceptionsTable = ((flags & hasExceptionsTableFlag) != 0)
-        ? new ExceptionsTable.read(reader)
-        : new ExceptionsTable();
-    final sourcePositions = ((flags & hasSourcePositionsFlag) != 0)
-        ? reader.readLinkOffset<SourcePositions>()
-        : null;
-    final localVariables = ((flags & hasLocalVariablesFlag) != 0)
-        ? reader.readLinkOffset<LocalVariableTable>()
-        : null;
-    final List<ObjectHandle> nullableFields =
-        ((flags & hasNullableFieldsFlag) != 0)
-            ? reader.readPackedList<ObjectHandle>()
-            : const <ObjectHandle>[];
-    for (var c in closures) {
-      c.code = new ClosureCode.read(reader);
-    }
-    return new Code(
-        constantPool,
-        bytecodes,
-        exceptionsTable,
-        sourcePositions,
-        localVariables,
-        nullableFields,
-        closures,
-        parameterFlags,
-        forwardingStubTargetCpIndex,
-        defaultFunctionTypeArgsCpIndex);
-  }
-
-  // TODO(alexmarkov): Consider printing constant pool before bytecode.
-  @override
-  String toString() => "Bytecode {\n"
-      "${new BytecodeDisassembler().disassemble(bytecodes, exceptionsTable, annotations: [
-        hasSourcePositions
-            ? sourcePositions.getBytecodeAnnotations()
-            : const <int, String>{},
-        hasLocalVariables
-            ? localVariables.getBytecodeAnnotations()
-            : const <int, String>{}
-      ])}}\n"
-      "$exceptionsTable"
-      "${nullableFields.isEmpty ? '' : 'Nullable fields: $nullableFields\n'}"
-      "${parameterFlags == null ? '' : 'Parameter flags: $parameterFlags\n'}"
-      "${forwardingStubTargetCpIndex == null ? '' : 'Forwarding stub target: CP#$forwardingStubTargetCpIndex\n'}"
-      "${defaultFunctionTypeArgsCpIndex == null ? '' : 'Default function type arguments: CP#$defaultFunctionTypeArgsCpIndex\n'}"
-      "$constantPool"
-      "${closures.join('\n')}";
-}
-
-class ClosureDeclaration {
-  static const hasOptionalPositionalParamsFlag = 1 << 0;
-  static const hasOptionalNamedParamsFlag = 1 << 1;
-  static const hasTypeParamsFlag = 1 << 2;
-  static const hasSourcePositionsFlag = 1 << 3;
-  static const isAsyncFlag = 1 << 4;
-  static const isAsyncStarFlag = 1 << 5;
-  static const isSyncStarFlag = 1 << 6;
-  static const isDebuggableFlag = 1 << 7;
-  static const hasAttributesFlag = 1 << 8;
-  static const hasParameterFlagsFlag = 1 << 9;
-
-  int flags;
-  final ObjectHandle parent;
-  final ObjectHandle name;
-  final int position;
-  final int endPosition;
-  final List<NameAndType> typeParams;
-  final int numRequiredParams;
-  final int numNamedParams;
-  final List<NameAndType> parameters;
-  // Only contains the required flag for parameters when present.
-  final List<int> parameterFlags;
-  final ObjectHandle returnType;
-  ObjectHandle attributes;
-  ClosureCode code;
-
-  ClosureDeclaration(
-      this.flags,
-      this.parent,
-      this.name,
-      this.position,
-      this.endPosition,
-      this.typeParams,
-      this.numRequiredParams,
-      this.numNamedParams,
-      this.parameters,
-      this.parameterFlags,
-      this.returnType,
-      [this.attributes]);
-
-  void write(BufferedWriter writer) {
-    writer.writePackedUInt30(flags);
-    writer.writePackedObject(parent);
-    writer.writePackedObject(name);
-
-    if (flags & hasSourcePositionsFlag != 0) {
-      writer.writePackedUInt30(position + 1);
-      writer.writePackedUInt30(endPosition + 1);
-    }
-
-    if (flags & hasTypeParamsFlag != 0) {
-      writer.writePackedUInt30(typeParams.length);
-      for (var tp in typeParams) {
-        writer.writePackedObject(tp.name);
-      }
-      for (var tp in typeParams) {
-        writer.writePackedObject(tp.type);
-      }
-    }
-    writer.writePackedUInt30(parameters.length);
-    if (flags &
-            (hasOptionalPositionalParamsFlag | hasOptionalNamedParamsFlag) !=
-        0) {
-      writer.writePackedUInt30(numRequiredParams);
-    }
-    for (var param in parameters) {
-      writer.writePackedObject(param.name);
-      writer.writePackedObject(param.type);
-    }
-    if ((flags & hasParameterFlagsFlag) != 0) {
-      writer.writePackedUInt30(parameterFlags.length);
-      for (var pf in parameterFlags) {
-        writer.writePackedUInt30(pf);
-      }
-    }
-    writer.writePackedObject(returnType);
-    if ((flags & hasAttributesFlag) != 0) {
-      writer.writePackedObject(attributes);
-    }
-  }
-
-  factory ClosureDeclaration.read(BufferedReader reader) {
-    final int flags = reader.readPackedUInt30();
-    final parent = reader.readPackedObject();
-    final name = reader.readPackedObject();
-    final position = ((flags & hasSourcePositionsFlag) != 0)
-        ? reader.readPackedUInt30() - 1
-        : TreeNode.noOffset;
-    final endPosition = ((flags & hasSourcePositionsFlag) != 0)
-        ? reader.readPackedUInt30() - 1
-        : TreeNode.noOffset;
-    List<NameAndType> typeParams;
-    if ((flags & hasTypeParamsFlag) != 0) {
-      final int numTypeParams = reader.readPackedUInt30();
-      List<ObjectHandle> names = new List<ObjectHandle>.generate(
-          numTypeParams, (_) => reader.readPackedObject());
-      List<ObjectHandle> bounds = new List<ObjectHandle>.generate(
-          numTypeParams, (_) => reader.readPackedObject());
-      typeParams = new List<NameAndType>.generate(
-          numTypeParams, (int i) => new NameAndType(names[i], bounds[i]));
-    } else {
-      typeParams = const <NameAndType>[];
-    }
-    final numParams = reader.readPackedUInt30();
-    final numRequiredParams = (flags &
-                (hasOptionalPositionalParamsFlag |
-                    hasOptionalNamedParamsFlag) !=
-            0)
-        ? reader.readPackedUInt30()
-        : numParams;
-    final numNamedParams = (flags & hasOptionalNamedParamsFlag != 0)
-        ? (numParams - numRequiredParams)
-        : 0;
-    final List<NameAndType> parameters = new List<NameAndType>.generate(
-        numParams,
-        (_) => new NameAndType(
-            reader.readPackedObject(), reader.readPackedObject()));
-    List<int> parameterFlags;
-    if ((flags & hasParameterFlagsFlag) != 0) {
-      final int numParameterFlags = reader.readPackedUInt30();
-      new List<int>.generate(
-          numParameterFlags, (_) => reader.readPackedUInt30());
-    } else {
-      parameterFlags = const <int>[];
-    }
-    final returnType = reader.readPackedObject();
-    final attributes =
-        ((flags & hasAttributesFlag) != 0) ? reader.readPackedObject() : null;
-    return new ClosureDeclaration(
-        flags,
-        parent,
-        name,
-        position,
-        endPosition,
-        typeParams,
-        numRequiredParams,
-        numNamedParams,
-        parameters,
-        parameterFlags,
-        returnType,
-        attributes);
-  }
-
-  void _writeParamsToBuffer(
-      StringBuffer sb, List<NameAndType> params, List<int> flags) {
-    assert(flags == null || (params.length == flags.length));
-    for (int i = 0; i < params.length; i++) {
-      if (i != 0) {
-        sb.write(', ');
-      }
-      // We only store the required flag for ClosureDeclarations.
-      if (flags != null && flags[i] != 0) {
-        sb.write('required ');
-      }
-      sb.write(params[i]);
-    }
-  }
-
-  @override
-  String toString() {
-    final StringBuffer sb = new StringBuffer();
-    sb.write('Closure $parent::$name');
-    if ((flags & isAsyncFlag) != 0) {
-      sb.write(' async');
-    }
-    if ((flags & isAsyncStarFlag) != 0) {
-      sb.write(' async*');
-    }
-    if ((flags & isSyncStarFlag) != 0) {
-      sb.write(' sync*');
-    }
-    if (position != TreeNode.noOffset) {
-      sb.write(' pos = $position, end-pos = $endPosition');
-    }
-    if (typeParams.isNotEmpty) {
-      sb.write(' <${typeParams.join(', ')}>');
-    }
-    sb.write(' (');
-    final requiredFlags = (flags & hasParameterFlagsFlag) != 0
-        ? parameterFlags.sublist(0, numRequiredParams)
-        : null;
-    _writeParamsToBuffer(
-        sb, parameters.sublist(0, numRequiredParams), requiredFlags);
-    if (numRequiredParams != parameters.length) {
-      if (numRequiredParams > 0) {
-        sb.write(', ');
-      }
-      sb.write(numNamedParams > 0 ? '{ ' : '[ ');
-      final optionalFlags = (flags & hasParameterFlagsFlag) != 0
-          ? parameterFlags.sublist(numRequiredParams)
-          : null;
-      _writeParamsToBuffer(
-          sb, parameters.sublist(numRequiredParams), optionalFlags);
-      sb.write(numNamedParams > 0 ? ' }' : ' ]');
-    }
-    sb.write(') -> ');
-    sb.writeln(returnType);
-    if ((flags & hasAttributesFlag) != 0) {
-      sb.write('    attributes $attributes\n');
-    }
-    if (code != null) {
-      sb.write(code.toString());
-    }
-    return sb.toString();
-  }
-}
-
-/// Bytecode of a nested function (closure).
-/// Closures share the constant pool of a top-level member.
-class ClosureCode {
-  static const hasExceptionsTableFlag = 1 << 0;
-  static const hasSourcePositionsFlag = 1 << 1;
-  static const hasLocalVariablesFlag = 1 << 2;
-
-  final Uint8List bytecodes;
-  final ExceptionsTable exceptionsTable;
-  final SourcePositions sourcePositions;
-  final LocalVariableTable localVariables;
-
-  bool get hasExceptionsTable => exceptionsTable.blocks.isNotEmpty;
-  bool get hasSourcePositions =>
-      sourcePositions != null && sourcePositions.isNotEmpty;
-  bool get hasLocalVariables =>
-      localVariables != null && localVariables.isNotEmpty;
-
-  int get flags =>
-      (hasExceptionsTable ? hasExceptionsTableFlag : 0) |
-      (hasSourcePositions ? hasSourcePositionsFlag : 0) |
-      (hasLocalVariables ? hasLocalVariablesFlag : 0);
-
-  ClosureCode(this.bytecodes, this.exceptionsTable, this.sourcePositions,
-      this.localVariables);
-
-  void write(BufferedWriter writer) {
-    writer.writePackedUInt30(flags);
-    _writeBytecodeInstructions(writer, bytecodes);
-    if (hasExceptionsTable) {
-      exceptionsTable.write(writer);
-    }
-    if (hasSourcePositions) {
-      writer.writeLinkOffset(sourcePositions);
-    }
-    if (hasLocalVariables) {
-      writer.writeLinkOffset(localVariables);
-    }
-  }
-
-  factory ClosureCode.read(BufferedReader reader) {
-    final int flags = reader.readPackedUInt30();
-    final Uint8List bytecodes = _readBytecodeInstructions(reader);
-    final exceptionsTable = ((flags & hasExceptionsTableFlag) != 0)
-        ? new ExceptionsTable.read(reader)
-        : new ExceptionsTable();
-    final sourcePositions = ((flags & hasSourcePositionsFlag) != 0)
-        ? reader.readLinkOffset<SourcePositions>()
-        : null;
-    final localVariables = ((flags & hasLocalVariablesFlag) != 0)
-        ? reader.readLinkOffset<LocalVariableTable>()
-        : null;
-    return new ClosureCode(
-        bytecodes, exceptionsTable, sourcePositions, localVariables);
-  }
-
-  @override
-  String toString() {
-    StringBuffer sb = new StringBuffer();
-    sb.writeln('ClosureCode {');
-    sb.write(new BytecodeDisassembler()
-        .disassemble(bytecodes, exceptionsTable, annotations: [
-      hasSourcePositions
-          ? sourcePositions.getBytecodeAnnotations()
-          : const <int, String>{},
-      hasLocalVariables
-          ? localVariables.getBytecodeAnnotations()
-          : const <int, String>{}
-    ]));
-    sb.writeln('}');
-    return sb.toString();
-  }
-}
-
-class AnnotationsDeclaration extends BytecodeDeclaration {
-  final ObjectHandle object;
-
-  AnnotationsDeclaration(this.object);
-
-  void write(BufferedWriter writer) {
-    writer.writePackedObject(object);
-  }
-
-  factory AnnotationsDeclaration.read(BufferedReader reader) {
-    return new AnnotationsDeclaration(reader.readPackedObject());
-  }
-
-  @override
-  String toString() => object.toString();
-}
-
-class _Section {
-  int numItems;
-  int offset;
-  BufferedWriter writer;
-
-  _Section(this.numItems, this.writer);
-
-  int get size => writer.offset;
-}
-
-class Component {
-  static const int magicValue = 0x44424332; // 'DBC2'
-  static const int numSections = 14;
-  static const int sectionAlignment = 4;
-
-  //  UInt32 magic, version, numSections x (numItems, offset)
-  static const int headerSize = (2 + numSections * 2) * 4;
-
-  int version;
-  StringTable stringTable;
-  ObjectTable objectTable;
-  final List<LibraryDeclaration> libraries = <LibraryDeclaration>[];
-  final List<ClassDeclaration> classes = <ClassDeclaration>[];
-  final List<Members> members = <Members>[];
-  final List<Code> codes = <Code>[];
-  final List<SourcePositions> sourcePositions = <SourcePositions>[];
-  final List<LineStarts> lineStarts = <LineStarts>[];
-  final List<SourceFile> sourceFiles = <SourceFile>[];
-  final Map<Uri, SourceFile> uriToSource = <Uri, SourceFile>{};
-  final List<LocalVariableTable> localVariables = <LocalVariableTable>[];
-  final List<AnnotationsDeclaration> annotations = <AnnotationsDeclaration>[];
-  Set<String> protectedNames;
-  ObjectHandle mainLibrary;
-
-  Component(this.version, CoreTypes coreTypes)
-      : stringTable = new StringTable(),
-        objectTable = new ObjectTable(coreTypes);
-
-  void write(BufferedWriter writer) {
-    objectTable.allocateIndexTable();
-
-    // Write sections to their own buffers in reverse order as section may
-    // reference data structures from successor sections by offsets.
-
-    final protectedNamesWriter = new BufferedWriter.fromWriter(writer);
-    if (protectedNames != null && protectedNames.isNotEmpty) {
-      for (var name in protectedNames) {
-        protectedNamesWriter.writePackedStringReference(name);
-      }
-    }
-
-    final annotationsWriter = new BufferedWriter.fromWriter(writer);
-    for (var annot in annotations) {
-      writer.linkWriter.put(annot, annotationsWriter.offset);
-      annot.write(annotationsWriter);
-    }
-    BytecodeSizeStatistics.annotationsSize += annotationsWriter.offset;
-
-    final localVariablesWriter = new BufferedWriter.fromWriter(writer);
-    for (var lv in localVariables) {
-      writer.linkWriter.put(lv, localVariablesWriter.offset);
-      lv.write(localVariablesWriter);
-    }
-    BytecodeSizeStatistics.localVariablesSize += localVariablesWriter.offset;
-
-    final lineStartsWriter = new BufferedWriter.fromWriter(writer);
-    for (var ls in lineStarts) {
-      writer.linkWriter.put(ls, lineStartsWriter.offset);
-      ls.write(lineStartsWriter);
-    }
-    BytecodeSizeStatistics.lineStartsSize += lineStartsWriter.offset;
-
-    final sourceFilesWriter = new BufferedWriter.fromWriter(writer);
-    for (var sf in sourceFiles) {
-      writer.linkWriter.put(sf, sourceFilesWriter.offset);
-      sf.write(sourceFilesWriter);
-    }
-    BytecodeSizeStatistics.sourceFilesSize += sourceFilesWriter.offset;
-
-    final sourcePositionsWriter = new BufferedWriter.fromWriter(writer);
-    for (var sp in sourcePositions) {
-      writer.linkWriter.put(sp, sourcePositionsWriter.offset);
-      sp.write(sourcePositionsWriter);
-    }
-    BytecodeSizeStatistics.sourcePositionsSize += sourcePositionsWriter.offset;
-
-    final codesWriter = new BufferedWriter.fromWriter(writer);
-    for (var code in codes) {
-      writer.linkWriter.put(code, codesWriter.offset);
-      code.write(codesWriter);
-    }
-
-    final membersWriter = new BufferedWriter.fromWriter(writer);
-    for (var m in members) {
-      writer.linkWriter.put(m, membersWriter.offset);
-      m.write(membersWriter);
-    }
-
-    final classesWriter = new BufferedWriter.fromWriter(writer);
-    for (var cls in classes) {
-      writer.linkWriter.put(cls, classesWriter.offset);
-      cls.write(classesWriter);
-    }
-
-    final librariesWriter = new BufferedWriter.fromWriter(writer);
-    for (var library in libraries) {
-      writer.linkWriter.put(library, librariesWriter.offset);
-      library.write(librariesWriter);
-    }
-
-    final libraryIndexWriter = new BufferedWriter.fromWriter(writer);
-    for (var library in libraries) {
-      libraryIndexWriter.writePackedObject(library.importUri);
-      libraryIndexWriter.writeLinkOffset(library);
-    }
-    BytecodeSizeStatistics.librariesSize += libraryIndexWriter.offset;
-
-    BufferedWriter mainWriter;
-    if (mainLibrary != null) {
-      mainWriter = new BufferedWriter.fromWriter(writer);
-      mainWriter.writePackedObject(mainLibrary);
-    }
-
-    final objectsWriter = new BufferedWriter.fromWriter(writer);
-    objectTable.write(objectsWriter);
-
-    final stringsWriter = new BufferedWriter.fromWriter(writer);
-    stringTable.write(stringsWriter);
-
-    List<_Section> sections = [
-      new _Section(0, stringsWriter),
-      new _Section(0, objectsWriter),
-      new _Section(0, mainWriter),
-      new _Section(libraries.length, libraryIndexWriter),
-      new _Section(libraries.length, librariesWriter),
-      new _Section(classes.length, classesWriter),
-      new _Section(members.length, membersWriter),
-      new _Section(codes.length, codesWriter),
-      new _Section(sourcePositions.length, sourcePositionsWriter),
-      new _Section(sourceFiles.length, sourceFilesWriter),
-      new _Section(lineStarts.length, lineStartsWriter),
-      new _Section(localVariables.length, localVariablesWriter),
-      new _Section(annotations.length, annotationsWriter),
-      new _Section(protectedNames != null ? protectedNames.length : 0,
-          protectedNamesWriter),
-    ];
-    assert(sections.length == numSections);
-
-    int offset = headerSize;
-    for (var section in sections) {
-      if (section.writer != null) {
-        section.offset = offset;
-        offset += section.size;
-      } else {
-        section.offset = 0;
-      }
-    }
-
-    final start = writer.offset;
-
-    writer.writeUInt32(magicValue);
-    writer.writeUInt32(version);
-    for (var section in sections) {
-      writer.writeUInt32(section.numItems);
-      writer.writeUInt32(section.offset);
-    }
-    assert(writer.offset - start == headerSize);
-    for (var section in sections) {
-      if (section.writer != null) {
-        assert(writer.offset - start == section.offset);
-        writer.appendWriter(section.writer);
-      }
-    }
-
-    BytecodeSizeStatistics.componentSize += (writer.offset - start);
-  }
-
-  Component.read(BufferedReader reader) {
-    final int start = reader.offset;
-
-    final int magic = reader.readUInt32();
-    if (magic != magicValue) {
-      throw 'Error: unexpected bytecode magic $magic';
-    }
-
-    version = reader.readUInt32();
-    if (version != currentBytecodeFormatVersion) {
-      throw 'Error: unexpected bytecode format version $version';
-    }
-
-    reader.formatVersion = version;
-
-    reader.readUInt32();
-    final stringTableOffset = reader.readUInt32();
-
-    reader.readUInt32();
-    final objectTableOffset = reader.readUInt32();
-
-    reader.readUInt32();
-    final mainOffset = reader.readUInt32();
-
-    final librariesNum = reader.readUInt32();
-    final libraryIndexOffset = reader.readUInt32();
-
-    reader.readUInt32();
-    final librariesOffset = reader.readUInt32();
-
-    final classesNum = reader.readUInt32();
-    final classesOffset = reader.readUInt32();
-
-    final membersNum = reader.readUInt32();
-    final membersOffset = reader.readUInt32();
-
-    final codesNum = reader.readUInt32();
-    final codesOffset = reader.readUInt32();
-
-    final sourcePositionsNum = reader.readUInt32();
-    final sourcePositionsOffset = reader.readUInt32();
-
-    final sourceFilesNum = reader.readUInt32();
-    final sourceFilesOffset = reader.readUInt32();
-
-    final lineStartsNum = reader.readUInt32();
-    final lineStartsOffset = reader.readUInt32();
-
-    final localVariablesNum = reader.readUInt32();
-    final localVariablesOffset = reader.readUInt32();
-
-    final annotationsNum = reader.readUInt32();
-    final annotationsOffset = reader.readUInt32();
-
-    final protectedNamesNum = reader.readUInt32();
-    final protectedNamesOffset = reader.readUInt32();
-
-    reader.offset = start + stringTableOffset;
-    stringTable = new StringTable.read(reader);
-    reader.stringReader = stringTable;
-
-    reader.offset = start + objectTableOffset;
-    objectTable = new ObjectTable.read(reader);
-    reader.objectReader = objectTable;
-
-    // Read sections in the reverse order as section may reference
-    // successor sections by offsets.
-
-    if (protectedNamesNum != 0) {
-      protectedNames = new Set<String>();
-      reader.offset = start + protectedNamesOffset;
-      for (int i = 0; i < protectedNamesNum; ++i) {
-        protectedNames.add(reader.readPackedStringReference());
-      }
-    }
-
-    final annotationsStart = start + annotationsOffset;
-    reader.offset = annotationsStart;
-    for (int i = 0; i < annotationsNum; ++i) {
-      int offset = reader.offset - annotationsStart;
-      AnnotationsDeclaration annot = new AnnotationsDeclaration.read(reader);
-      reader.linkReader.setOffset(annot, offset);
-      annotations.add(annot);
-    }
-
-    final lineStartsStart = start + lineStartsOffset;
-    reader.offset = lineStartsStart;
-    for (int i = 0; i < lineStartsNum; ++i) {
-      int offset = reader.offset - lineStartsStart;
-      LineStarts ls = new LineStarts.read(reader);
-      reader.linkReader.setOffset(ls, offset);
-      lineStarts.add(ls);
-    }
-
-    final sourceFilesStart = start + sourceFilesOffset;
-    reader.offset = sourceFilesStart;
-    for (int i = 0; i < sourceFilesNum; ++i) {
-      int offset = reader.offset - sourceFilesStart;
-      SourceFile sf = new SourceFile.read(reader);
-      reader.linkReader.setOffset(sf, offset);
-      sourceFiles.add(sf);
-    }
-
-    final sourcePositionsStart = start + sourcePositionsOffset;
-    reader.offset = sourcePositionsStart;
-    for (int i = 0; i < sourcePositionsNum; ++i) {
-      int offset = reader.offset - sourcePositionsStart;
-      SourcePositions sp = new SourcePositions.read(reader);
-      reader.linkReader.setOffset(sp, offset);
-      sourcePositions.add(sp);
-    }
-
-    final localVariablesStart = start + localVariablesOffset;
-    reader.offset = localVariablesStart;
-    for (int i = 0; i < localVariablesNum; ++i) {
-      int offset = reader.offset - localVariablesStart;
-      LocalVariableTable lv = new LocalVariableTable.read(reader);
-      reader.linkReader.setOffset(lv, offset);
-      localVariables.add(lv);
-    }
-
-    final codesStart = start + codesOffset;
-    reader.offset = codesStart;
-    for (int i = 0; i < codesNum; ++i) {
-      int offset = reader.offset - codesStart;
-      Code code = new Code.read(reader);
-      reader.linkReader.setOffset(code, offset);
-      codes.add(code);
-    }
-
-    final membersStart = start + membersOffset;
-    reader.offset = membersStart;
-    for (int i = 0; i < membersNum; ++i) {
-      int offset = reader.offset - membersStart;
-      Members m = new Members.read(reader);
-      reader.linkReader.setOffset(m, offset);
-      members.add(m);
-    }
-
-    final classesStart = start + classesOffset;
-    reader.offset = classesStart;
-    for (int i = 0; i < classesNum; ++i) {
-      int offset = reader.offset - classesStart;
-      ClassDeclaration cls = new ClassDeclaration.read(reader);
-      reader.linkReader.setOffset(cls, offset);
-      classes.add(cls);
-    }
-
-    final librariesStart = start + librariesOffset;
-    reader.offset = librariesStart;
-    for (int i = 0; i < librariesNum; ++i) {
-      int offset = reader.offset - librariesStart;
-      LibraryDeclaration library = new LibraryDeclaration.read(reader);
-      reader.linkReader.setOffset(library, offset);
-      libraries.add(library);
-    }
-
-    final libraryIndexStart = start + libraryIndexOffset;
-    reader.offset = libraryIndexStart;
-    for (int i = 0; i < librariesNum; ++i) {
-      final importUri = reader.readPackedObject();
-      final library = reader.readLinkOffset<LibraryDeclaration>();
-      library.importUri = importUri;
-    }
-
-    if (mainOffset != 0) {
-      reader.offset = start + mainOffset;
-      mainLibrary = reader.readPackedObject();
-    }
-  }
-
-  @override
-  String toString() {
-    final StringBuffer sb = new StringBuffer();
-    sb.write("Bytecode (version: ");
-    if (version == currentBytecodeFormatVersion) {
-      sb.write("stable");
-    } else {
-      sb.write("v$version");
-    }
-    sb.writeln(")");
-    if (mainLibrary != null) {
-      sb.writeln("Main library: $mainLibrary");
-    }
-    for (var library in libraries) {
-      sb.write(library);
-    }
-    return sb.toString();
-  }
-}
-
-void _writeBytecodeInstructions(BufferedWriter writer, Uint8List bytecodes) {
-  writer.writePackedUInt30(bytecodes.length);
-  writer.appendUint8List(bytecodes);
-  BytecodeSizeStatistics.instructionsSize += bytecodes.length;
-}
-
-Uint8List _readBytecodeInstructions(BufferedReader reader) {
-  int len = reader.readPackedUInt30();
-  return reader.readBytesAsUint8List(len);
-}
diff --git a/pkg/vm/lib/bytecode/disassembler.dart b/pkg/vm/lib/bytecode/disassembler.dart
deleted file mode 100644
index 5d53446..0000000
--- a/pkg/vm/lib/bytecode/disassembler.dart
+++ /dev/null
@@ -1,242 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library vm.bytecode.disassembler;
-
-import 'dart:typed_data';
-
-import 'package:kernel/ast.dart' show listEquals, listHashCode;
-
-import 'dbc.dart';
-import 'exceptions.dart';
-
-class Instruction {
-  final Opcode opcode;
-  final bool isWide;
-  final List<int> operands;
-  final int pc;
-
-  Instruction(this.opcode, this.isWide, this.operands, this.pc);
-
-  Format get format => BytecodeFormats[opcode];
-
-  int get length => instructionSize(format.encoding, isWide);
-
-  @override
-  int get hashCode => opcode.index.hashCode ^ listHashCode(operands);
-
-  @override
-  bool operator ==(other) {
-    return (other is Instruction) &&
-        (opcode == other.opcode) &&
-        listEquals(operands, other.operands);
-  }
-}
-
-class BytecodeDisassembler {
-  Uint8List _bytecode;
-  List<Instruction> _instructions;
-  int _labelCount;
-  Map<int, String> _labels;
-  Map<int, List<String>> _markers;
-
-  String disassemble(List<int> bytecode, ExceptionsTable exceptionsTable,
-      {List<Map<int, String>> annotations}) {
-    _init(bytecode);
-    _scanForJumpTargets();
-    _markTryBlocks(exceptionsTable);
-    if (annotations != null) {
-      _markAnnotations(annotations);
-    }
-    return _disasm();
-  }
-
-  List<Instruction> decode(Uint8List bytecode) {
-    _init(bytecode);
-    return _instructions;
-  }
-
-  void _init(List<int> bytecode) {
-    _bytecode = new Uint8List.fromList(bytecode);
-
-    _instructions = new List<Instruction>();
-    for (int pos = 0; pos < _bytecode.length;) {
-      final instr = decodeInstructionAt(pos);
-      _instructions.add(instr);
-      pos += instr.length;
-    }
-
-    _labelCount = 0;
-    _labels = <int, String>{};
-    _markers = <int, List<String>>{};
-  }
-
-  Instruction decodeInstructionAt(int pos) {
-    Opcode opcode = Opcode.values[_bytecode[pos]];
-    bool isWide = isWideOpcode(opcode);
-    if (isWide) {
-      opcode = fromWideOpcode(opcode);
-    }
-
-    final format = BytecodeFormats[opcode];
-    final operands = _decodeOperands(format, pos, isWide);
-    return new Instruction(opcode, isWide, operands, pos);
-  }
-
-  List<int> _decodeOperands(Format format, int pos, bool isWide) {
-    switch (format.encoding) {
-      case Encoding.k0:
-        return const [];
-      case Encoding.kA:
-        return [_bytecode[pos + 1]];
-      case Encoding.kD:
-        return isWide ? [_decodeUint32At(pos + 1)] : [_bytecode[pos + 1]];
-      case Encoding.kX:
-        return isWide
-            ? [_decodeUint32At(pos + 1).toSigned(32)]
-            : [_bytecode[pos + 1].toSigned(8)];
-      case Encoding.kT:
-        return isWide
-            ? [
-                (_bytecode[pos + 1] +
-                        (_bytecode[pos + 2] << 8) +
-                        (_bytecode[pos + 3] << 16))
-                    .toSigned(24)
-              ]
-            : [_bytecode[pos + 1].toSigned(8)];
-      case Encoding.kAE:
-        return [
-          _bytecode[pos + 1],
-          isWide ? _decodeUint32At(pos + 2) : _bytecode[pos + 2],
-        ];
-      case Encoding.kAY:
-        return [
-          _bytecode[pos + 1],
-          isWide
-              ? _decodeUint32At(pos + 2).toSigned(32)
-              : _bytecode[pos + 2].toSigned(8)
-        ];
-      case Encoding.kDF:
-        return isWide
-            ? [_decodeUint32At(pos + 1), _bytecode[pos + 5]]
-            : [_bytecode[pos + 1], _bytecode[pos + 2]];
-      case Encoding.kABC:
-        return [_bytecode[pos + 1], _bytecode[pos + 2], _bytecode[pos + 3]];
-    }
-    throw 'Unexpected format $format';
-  }
-
-  _decodeUint32At(int pos) =>
-      _bytecode[pos] +
-      (_bytecode[pos + 1] << 8) +
-      (_bytecode[pos + 2] << 16) +
-      (_bytecode[pos + 3] << 24);
-
-  void _scanForJumpTargets() {
-    for (int i = 0; i < _instructions.length; i++) {
-      final instr = _instructions[i];
-      if (isJump(instr.opcode)) {
-        final target = instr.pc + instr.operands[0];
-        assert(0 <= target && target < _bytecode.length);
-        if (!_labels.containsKey(target)) {
-          final label = 'L${++_labelCount}';
-          _labels[target] = label;
-          _addMarker(target, '$label:');
-        }
-      }
-    }
-  }
-
-  void _markTryBlocks(ExceptionsTable exceptionsTable) {
-    for (var tryBlock in exceptionsTable.blocks) {
-      final int tryIndex = tryBlock.tryIndex;
-      _addMarker(tryBlock.startPC, 'Try #$tryIndex start:');
-      _addMarker(tryBlock.endPC, 'Try #$tryIndex end:');
-      _addMarker(tryBlock.handlerPC, 'Try #$tryIndex handler:');
-    }
-  }
-
-  void _markAnnotations(List<Map<int, String>> annotations) {
-    for (var map in annotations) {
-      map.forEach((int pc, String annotation) {
-        _addMarker(pc, '# $annotation');
-      });
-    }
-  }
-
-  void _addMarker(int pc, String marker) {
-    final markers = (_markers[pc] ??= <String>[]);
-    markers.add(marker);
-  }
-
-  String _disasm() {
-    StringBuffer out = new StringBuffer();
-    for (Instruction instr in _instructions) {
-      List<String> markers = _markers[instr.pc];
-      if (markers != null) {
-        markers.forEach(out.writeln);
-      }
-      writeInstruction(out, instr);
-    }
-    return out.toString();
-  }
-
-  void writeInstruction(StringBuffer out, Instruction instr) {
-    final format = BytecodeFormats[instr.opcode];
-    assert(format != null);
-
-    out.write('  ');
-
-    const int kOpcodeWidth = 20;
-    const String kOpcodePrefix = 'Opcode.k';
-
-    String opcode = instr.opcode.toString();
-    assert(opcode.startsWith(kOpcodePrefix));
-    opcode = opcode.substring(kOpcodePrefix.length);
-
-    if (instr.operands.isEmpty) {
-      out.writeln(opcode);
-      return;
-    }
-
-    out.write(opcode.padRight(kOpcodeWidth));
-
-    for (int i = 0; i < instr.operands.length; i++) {
-      if (i == 0) {
-        out.write(' ');
-      } else {
-        out.write(', ');
-      }
-      final operand =
-          _formatOperand(instr.pc, format.operands[i], instr.operands[i]);
-      out.write(operand);
-    }
-
-    out.writeln();
-  }
-
-  String _formatOperand(int pc, Operand fmt, int value) {
-    switch (fmt) {
-      case Operand.none:
-        break;
-      case Operand.imm:
-        return '$value';
-      case Operand.lit:
-        return 'CP#$value';
-      case Operand.reg:
-        return 'r$value';
-      case Operand.xeg:
-        return (value < 0) ? 'FP[$value]' : 'r$value';
-      case Operand.tgt:
-        return (_labels == null)
-            ? value.toString()
-            : _labels[pc + value] ?? (throw 'Label not found');
-      case Operand.spe:
-        return SpecialIndex.values[value]
-            .toString()
-            .substring('SpecialIndex.'.length);
-    }
-    throw 'Unexpected operand format $fmt';
-  }
-}
diff --git a/pkg/vm/lib/bytecode/exceptions.dart b/pkg/vm/lib/bytecode/exceptions.dart
deleted file mode 100644
index 3ae6e1c..0000000
--- a/pkg/vm/lib/bytecode/exceptions.dart
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library vm.bytecode.exceptions;
-
-import 'bytecode_serialization.dart' show BufferedWriter, BufferedReader;
-
-/*
-
-In kernel binary, try blocks are encoded in the following way
-(using notation from pkg/kernel/binary.md):
-
-// Offset of a bytecode instruction.
-type BytecodeOffset = UInt;
-
-type TryBlock {
-  UInt outerTryIndexPlus1;
-  BytecodeOffset startPC; // Inclusive.
-  BytecodeOffset endPC; // Exclusive.
-  BytecodeOffset handlerPC;
-  Byte flags (needsStackTrace, isSynthetic);
-  List<ConstantIndex> types;
-}
-
-type ExceptionsTable {
-  // Ordered by startPC, then by nesting (outer precedes inner).
-  // Try blocks are properly nested. It means there are no partially
-  // overlapping try blocks - each pair of try block regions either
-  // has no intersection or one try block region encloses another.
-  List<TryBlock> tryBlocks;
-}
-
-*/
-
-class TryBlock {
-  static const int flagNeedsStackTrace = 1 << 0;
-  static const int flagIsSynthetic = 1 << 1;
-
-  final int tryIndex;
-  final int outerTryIndex;
-  final int startPC;
-  int endPC;
-  int handlerPC;
-  int flags = 0;
-  List<int> types = <int>[];
-
-  TryBlock._(this.tryIndex, this.outerTryIndex, this.startPC);
-
-  bool get needsStackTrace => (flags & flagNeedsStackTrace) != 0;
-
-  void set needsStackTrace(bool value) {
-    flags = (flags & ~flagNeedsStackTrace) | (value ? flagNeedsStackTrace : 0);
-  }
-
-  bool get isSynthetic => (flags & flagIsSynthetic) != 0;
-
-  void set isSynthetic(bool value) {
-    flags = (flags & ~flagIsSynthetic) | (value ? flagIsSynthetic : 0);
-  }
-
-  void write(BufferedWriter writer) {
-    writer.writePackedUInt30(outerTryIndex + 1);
-    writer.writePackedUInt30(startPC);
-    writer.writePackedUInt30(endPC);
-    writer.writePackedUInt30(handlerPC);
-    writer.writeByte(flags);
-    writer.writePackedUInt30(types.length);
-    types.forEach(writer.writePackedUInt30);
-  }
-
-  factory TryBlock.read(BufferedReader reader, int tryIndex) {
-    final outerTryIndex = reader.readPackedUInt30() - 1;
-    final startPC = reader.readPackedUInt30();
-    final tryBlock = new TryBlock._(tryIndex, outerTryIndex, startPC);
-
-    tryBlock.endPC = reader.readPackedUInt30();
-    tryBlock.handlerPC = reader.readPackedUInt30();
-    tryBlock.flags = reader.readByte();
-    tryBlock.types = new List<int>.generate(
-        reader.readPackedUInt30(), (_) => reader.readPackedUInt30());
-
-    return tryBlock;
-  }
-
-  @override
-  String toString() => 'try-index $tryIndex, outer $outerTryIndex, '
-      'start $startPC, end $endPC, handler $handlerPC, '
-      '${needsStackTrace ? 'needs-stack-trace, ' : ''}'
-      '${isSynthetic ? 'synthetic, ' : ''}'
-      'types ${types.map((t) => 'CP#$t').toList()}';
-}
-
-class ExceptionsTable {
-  List<TryBlock> blocks = <TryBlock>[];
-
-  ExceptionsTable();
-
-  TryBlock enterTryBlock(int startPC) {
-    assert(blocks.isEmpty || blocks.last.startPC <= startPC);
-    final tryBlock =
-        new TryBlock._(blocks.length, _outerTryBlockIndex(startPC), startPC);
-    blocks.add(tryBlock);
-    return tryBlock;
-  }
-
-  int _outerTryBlockIndex(int startPC) {
-    for (int i = blocks.length - 1; i >= 0; --i) {
-      final tryBlock = blocks[i];
-      if (tryBlock.endPC == null || tryBlock.endPC > startPC) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  void write(BufferedWriter writer) {
-    writer.writePackedUInt30(blocks.length);
-    blocks.forEach((b) => b.write(writer));
-  }
-
-  ExceptionsTable.read(BufferedReader reader)
-      : blocks = new List<TryBlock>.generate(reader.readPackedUInt30(),
-            (int index) => new TryBlock.read(reader, index));
-
-  @override
-  String toString() {
-    if (blocks.isEmpty) {
-      return '';
-    }
-    StringBuffer sb = new StringBuffer();
-    sb.writeln('ExceptionsTable {');
-    for (var tryBlock in blocks) {
-      sb.writeln('  $tryBlock');
-    }
-    sb.writeln('}');
-    return sb.toString();
-  }
-}
diff --git a/pkg/vm/lib/bytecode/gen_bytecode.dart b/pkg/vm/lib/bytecode/gen_bytecode.dart
deleted file mode 100644
index 189bc39..0000000
--- a/pkg/vm/lib/bytecode/gen_bytecode.dart
+++ /dev/null
@@ -1,4659 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library vm.bytecode.gen_bytecode;
-
-import 'package:front_end/src/api_unstable/vm.dart'
-    show
-        CompilerContext,
-        Severity,
-        isRedirectingFactoryField,
-        messageBytecodeLimitExceededTooManyArguments,
-        noLength,
-        templateIllegalRecursiveType;
-
-import 'package:kernel/ast.dart' hide MapEntry, Component, FunctionDeclaration;
-import 'package:kernel/ast.dart' as ast show Component, FunctionDeclaration;
-import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
-import 'package:kernel/core_types.dart' show CoreTypes;
-import 'package:kernel/external_name.dart'
-    show getExternalName, getNativeExtensionUris;
-import 'package:kernel/library_index.dart' show LibraryIndex;
-import 'package:kernel/text/ast_to_text.dart'
-    show globalDebuggingNames, NameSystem;
-import 'package:kernel/type_algebra.dart'
-    show Substitution, containsTypeVariable;
-import 'package:kernel/type_environment.dart'
-    show StatefulStaticTypeContext, SubtypeCheckMode, TypeEnvironment;
-import 'assembler.dart';
-import 'bytecode_serialization.dart' show StringTable;
-import 'constant_pool.dart';
-import 'dbc.dart';
-import 'declarations.dart';
-import 'exceptions.dart';
-import 'generics.dart'
-    show
-        flattenInstantiatorTypeArguments,
-        getDefaultFunctionTypeArguments,
-        getInstantiatorTypeArguments,
-        getStaticType,
-        getTypeParameterTypes,
-        hasFreeTypeParameters,
-        hasInstantiatorTypeArguments,
-        isAllDynamic,
-        isInstantiatedInterfaceCall,
-        isUncheckedCall,
-        isUncheckedClosureCall;
-import 'local_variable_table.dart' show LocalVariableTable;
-import 'local_vars.dart' show LocalVariables;
-import 'nullability_detector.dart' show NullabilityDetector;
-import 'object_table.dart'
-    show ObjectHandle, ObjectTable, NameAndType, topLevelClassName;
-import 'options.dart' show BytecodeOptions;
-import 'recognized_methods.dart' show RecognizedMethods;
-import 'recursive_types_validator.dart' show IllegalRecursiveTypeException;
-import 'source_positions.dart' show LineStarts, SourcePositions;
-import '../metadata/bytecode.dart';
-import '../metadata/direct_call.dart'
-    show DirectCallMetadata, DirectCallMetadataRepository;
-import '../metadata/inferred_type.dart'
-    show InferredType, InferredTypeMetadataRepository;
-import '../metadata/obfuscation_prohibitions.dart'
-    show ObfuscationProhibitionsMetadataRepository;
-import '../metadata/procedure_attributes.dart'
-    show ProcedureAttributesMetadata, ProcedureAttributesMetadataRepository;
-
-import 'dart:convert' show utf8;
-import 'dart:developer';
-import 'dart:math' as math;
-
-// This symbol is used as the name in assert assignable's to indicate it comes
-// from an explicit 'as' check.  This will cause the runtime to throw the right
-// exception.
-const String symbolForTypeCast = ' in type cast';
-
-void generateBytecode(
-  ast.Component component, {
-  BytecodeOptions options,
-  List<Library> libraries,
-  CoreTypes coreTypes,
-  ClassHierarchy hierarchy,
-}) {
-  Timeline.timeSync("generateBytecode", () {
-    options ??= new BytecodeOptions();
-    verifyBytecodeInstructionDeclarations();
-    coreTypes ??= new CoreTypes(component);
-    void ignoreAmbiguousSupertypes(Class cls, Supertype a, Supertype b) {}
-    hierarchy ??= new ClassHierarchy(component, coreTypes,
-        onAmbiguousSupertypes: ignoreAmbiguousSupertypes);
-    final typeEnvironment = new TypeEnvironment(coreTypes, hierarchy);
-    libraries ??= component.libraries;
-
-    // Save/restore global NameSystem to avoid accumulating garbage.
-    // NameSystem holds the whole AST as it is strongly connected due to
-    // parent pointers. Objects are added to NameSystem when toString()
-    // is called from AST nodes.  Bytecode generator widely uses
-    // Expression.getStaticType, which calls Expression.getStaticTypeAsInstanceOf,
-    // which uses toString() when it crashes due to http://dartbug.com/34496.
-    final savedGlobalDebuggingNames = globalDebuggingNames;
-    globalDebuggingNames = new NameSystem();
-
-    Library library;
-    try {
-      final bytecodeGenerator = new BytecodeGenerator(
-          component, coreTypes, hierarchy, typeEnvironment, options);
-      for (library in libraries) {
-        bytecodeGenerator.visitLibrary(library);
-      }
-    } on IllegalRecursiveTypeException catch (e) {
-      CompilerContext.current.options.report(
-          templateIllegalRecursiveType
-              .withArguments(e.type, library.isNonNullableByDefault)
-              .withoutLocation(),
-          Severity.error);
-    } finally {
-      globalDebuggingNames = savedGlobalDebuggingNames;
-    }
-  });
-}
-
-class BytecodeGenerator extends RecursiveVisitor<Null> {
-  static final Name callName = new Name('call');
-  static final Name noSuchMethodName = new Name('noSuchMethod');
-
-  final CoreTypes coreTypes;
-  final ClassHierarchy hierarchy;
-  final TypeEnvironment typeEnvironment;
-  final StatefulStaticTypeContext staticTypeContext;
-  final BytecodeOptions options;
-  final BytecodeMetadataRepository metadata = new BytecodeMetadataRepository();
-  final RecognizedMethods recognizedMethods;
-  final int formatVersion;
-  final Map<Uri, Source> astUriToSource;
-  StringTable stringTable;
-  ObjectTable objectTable;
-  Component bytecodeComponent;
-  NullabilityDetector nullabilityDetector;
-  Map<TreeNode, DirectCallMetadata> directCallMetadata;
-  ProcedureAttributesMetadataRepository procedureAttributesMetadataRepository;
-  ProcedureAttributesMetadata procedureAttributesMetadata;
-  Map<TreeNode, InferredType> inferredTypeMetadata;
-  List<Constant> inferredTypesAttribute;
-
-  List<ClassDeclaration> classDeclarations;
-  List<FieldDeclaration> fieldDeclarations;
-  List<FunctionDeclaration> functionDeclarations;
-  Class enclosingClass;
-  Member enclosingMember;
-  FunctionNode enclosingFunction;
-  FunctionNode parentFunction;
-  bool isClosure;
-  Set<TypeParameter> classTypeParameters;
-  List<TypeParameter> functionTypeParameters;
-  Set<TypeParameter> functionTypeParametersSet;
-  List<DartType> instantiatorTypeArguments;
-  LocalVariables locals;
-  Map<LabeledStatement, Label> labeledStatements;
-  Map<SwitchCase, Label> switchCases;
-  Map<TryCatch, TryBlock> tryCatches;
-  Map<TryFinally, List<FinallyBlock>> finallyBlocks;
-  List<Label> yieldPoints;
-  Map<TreeNode, int> contextLevels;
-  List<ClosureDeclaration> closures;
-  Set<Field> initializedFields;
-  List<ObjectHandle> nullableFields;
-  ConstantPool cp;
-  BytecodeAssembler asm;
-  List<BytecodeAssembler> savedAssemblers;
-  bool hasErrors;
-  int currentLoopDepth;
-  List<int> savedMaxSourcePositions;
-  int maxSourcePosition;
-
-  BytecodeGenerator(
-      ast.Component component,
-      CoreTypes coreTypes,
-      ClassHierarchy hierarchy,
-      TypeEnvironment typeEnvironment,
-      BytecodeOptions options)
-      : this._internal(component, coreTypes, hierarchy, typeEnvironment,
-            options, new StatefulStaticTypeContext.flat(typeEnvironment));
-
-  BytecodeGenerator._internal(
-      ast.Component component,
-      this.coreTypes,
-      this.hierarchy,
-      this.typeEnvironment,
-      this.options,
-      this.staticTypeContext)
-      : recognizedMethods = new RecognizedMethods(staticTypeContext),
-        formatVersion = currentBytecodeFormatVersion,
-        astUriToSource = component.uriToSource {
-    nullabilityDetector = new NullabilityDetector(recognizedMethods);
-    component.addMetadataRepository(metadata);
-
-    bytecodeComponent = new Component(formatVersion, coreTypes);
-    metadata.mapping[component] = new BytecodeMetadata(bytecodeComponent);
-
-    stringTable = bytecodeComponent.stringTable;
-    objectTable = bytecodeComponent.objectTable;
-
-    if (component.mainMethod != null) {
-      bytecodeComponent.mainLibrary =
-          objectTable.getHandle(component.mainMethod.enclosingLibrary);
-    }
-
-    directCallMetadata =
-        component.metadata[DirectCallMetadataRepository.repositoryTag]?.mapping;
-
-    procedureAttributesMetadataRepository =
-        component.metadata[ProcedureAttributesMetadataRepository.repositoryTag];
-
-    inferredTypeMetadata = component
-        .metadata[InferredTypeMetadataRepository.repositoryTag]?.mapping;
-
-    final obfuscationProhibitionsMetadataRepository = component
-        .metadata[ObfuscationProhibitionsMetadataRepository.repositoryTag];
-    if (obfuscationProhibitionsMetadataRepository != null) {
-      bytecodeComponent.protectedNames =
-          obfuscationProhibitionsMetadataRepository
-              .mapping[component]?.protectedNames;
-    }
-  }
-
-  @override
-  visitLibrary(Library node) {
-    staticTypeContext.enterLibrary(node);
-
-    startMembers();
-    visitList(node.procedures, this);
-    visitList(node.fields, this);
-    final members = endMembers(node);
-
-    classDeclarations = <ClassDeclaration>[
-      getTopLevelClassDeclaration(node, members)
-    ];
-
-    visitList(node.classes, this);
-
-    bytecodeComponent.libraries
-        .add(getLibraryDeclaration(node, classDeclarations));
-    classDeclarations = null;
-    staticTypeContext.leaveLibrary(node);
-  }
-
-  @override
-  visitClass(Class node) {
-    startMembers();
-    visitList(node.constructors, this);
-    visitList(node.procedures, this);
-    visitList(node.fields, this);
-    final members = endMembers(node);
-
-    classDeclarations.add(getClassDeclaration(node, members));
-  }
-
-  void startMembers() {
-    fieldDeclarations = <FieldDeclaration>[];
-    functionDeclarations = <FunctionDeclaration>[];
-  }
-
-  Members endMembers(TreeNode node) {
-    final members = new Members(fieldDeclarations, functionDeclarations);
-    bytecodeComponent.members.add(members);
-    fieldDeclarations = null;
-    functionDeclarations = null;
-    return members;
-  }
-
-  ObjectHandle getScript(Uri uri, bool includeSourceInfo) {
-    SourceFile source;
-    if (options.emitSourceFiles || options.emitSourcePositions) {
-      final astSource = astUriToSource[uri];
-      if (astSource != null) {
-        source = bytecodeComponent.uriToSource[uri];
-        if (source == null) {
-          final importUri =
-              objectTable.getConstStringHandle(astSource.importUri.toString());
-          source = new SourceFile(importUri);
-          bytecodeComponent.sourceFiles.add(source);
-          bytecodeComponent.uriToSource[uri] = source;
-        }
-        if (options.emitSourcePositions &&
-            includeSourceInfo &&
-            source.lineStarts == null) {
-          LineStarts lineStarts = new LineStarts(astSource.lineStarts);
-          bytecodeComponent.lineStarts.add(lineStarts);
-          source.lineStarts = lineStarts;
-        }
-        if (options.emitSourceFiles &&
-            includeSourceInfo &&
-            source.source == null) {
-          String text = astSource.cachedText ??
-              utf8.decode(astSource.source, allowMalformed: true);
-          source.source = text;
-        }
-      }
-    }
-    return objectTable.getScriptHandle(uri, source);
-  }
-
-  LibraryDeclaration getLibraryDeclaration(
-      Library library, List<ClassDeclaration> classes) {
-    final importUri =
-        objectTable.getConstStringHandle(library.importUri.toString());
-    int flags = 0;
-    for (var dependency in library.dependencies) {
-      final targetLibrary = dependency.targetLibrary;
-      assert(targetLibrary != null);
-      if (targetLibrary == coreTypes.mirrorsLibrary) {
-        flags |= LibraryDeclaration.usesDartMirrorsFlag;
-      } else if (targetLibrary == dartFfiLibrary) {
-        flags |= LibraryDeclaration.usesDartFfiFlag;
-      }
-    }
-    final name = objectTable.getPublicNameHandle(library.name ?? '');
-    final script = getScript(library.fileUri, true);
-    final extensionUris =
-        objectTable.getConstStringHandles(getNativeExtensionUris(library));
-    if (extensionUris.isNotEmpty) {
-      flags |= LibraryDeclaration.hasExtensionsFlag;
-    }
-    if (library.isNonNullableByDefault) {
-      flags |= LibraryDeclaration.isNonNullableByDefaultFlag;
-    }
-    return new LibraryDeclaration(
-        importUri, flags, name, script, extensionUris, classes);
-  }
-
-  ClassDeclaration getClassDeclaration(Class cls, Members members) {
-    int flags = 0;
-    if (cls.isAbstract) {
-      flags |= ClassDeclaration.isAbstractFlag;
-    }
-    if (cls.isEnum) {
-      flags |= ClassDeclaration.isEnumFlag;
-    }
-    int numTypeArguments = 0;
-    TypeParametersDeclaration typeParameters;
-    if (hasInstantiatorTypeArguments(cls)) {
-      flags |= ClassDeclaration.hasTypeArgumentsFlag;
-      numTypeArguments = flattenInstantiatorTypeArguments(
-              cls, getTypeParameterTypes(cls.typeParameters))
-          .length;
-      assert(numTypeArguments > 0);
-      if (cls.typeParameters.isNotEmpty) {
-        flags |= ClassDeclaration.hasTypeParamsFlag;
-        typeParameters = getTypeParametersDeclaration(cls.typeParameters);
-      }
-    }
-    if (cls.isEliminatedMixin) {
-      flags |= ClassDeclaration.isTransformedMixinApplicationFlag;
-    }
-    int position = TreeNode.noOffset;
-    int endPosition = TreeNode.noOffset;
-    if (options.emitSourcePositions && cls.fileOffset != TreeNode.noOffset) {
-      flags |= ClassDeclaration.hasSourcePositionsFlag;
-      position = cls.startFileOffset;
-      endPosition = cls.fileEndOffset;
-    }
-    Annotations annotations = getAnnotations(cls.annotations);
-    if (annotations.object != null) {
-      flags |= ClassDeclaration.hasAnnotationsFlag;
-      if (annotations.hasPragma) {
-        flags |= ClassDeclaration.hasPragmaFlag;
-      }
-    }
-
-    final nameHandle = objectTable.getNameHandle(
-        cls.name.startsWith('_') ? cls.enclosingLibrary : null, cls.name);
-    final script = getScript(cls.fileUri, !cls.isAnonymousMixin);
-    final superType = objectTable.getHandle(cls.supertype?.asInterfaceType);
-    final interfaces = objectTable.getHandles(
-        cls.implementedTypes.map((t) => t.asInterfaceType).toList());
-
-    final classDeclaration = new ClassDeclaration(
-        nameHandle,
-        flags,
-        script,
-        position,
-        endPosition,
-        typeParameters,
-        numTypeArguments,
-        superType,
-        interfaces,
-        members,
-        annotations.object);
-    bytecodeComponent.classes.add(classDeclaration);
-    return classDeclaration;
-  }
-
-  ClassDeclaration getTopLevelClassDeclaration(
-      Library library, Members members) {
-    int flags = 0;
-    int position = TreeNode.noOffset;
-    if (options.emitSourcePositions &&
-        library.fileOffset != TreeNode.noOffset) {
-      flags |= ClassDeclaration.hasSourcePositionsFlag;
-      position = library.fileOffset;
-    }
-    Annotations annotations = getLibraryAnnotations(library);
-    if (annotations.object != null) {
-      flags |= ClassDeclaration.hasAnnotationsFlag;
-      if (annotations.hasPragma) {
-        flags |= ClassDeclaration.hasPragmaFlag;
-      }
-    }
-
-    final nameHandle = objectTable.getPublicNameHandle(topLevelClassName);
-    final script = getScript(library.fileUri, true);
-
-    final classDeclaration = new ClassDeclaration(
-        nameHandle,
-        flags,
-        script,
-        position,
-        /* endPosition */ TreeNode.noOffset,
-        /* typeParameters */ null,
-        /* numTypeArguments */ 0,
-        /* superType */ null,
-        /* interfaces */ const <ObjectHandle>[],
-        members,
-        annotations.object);
-    bytecodeComponent.classes.add(classDeclaration);
-    return classDeclaration;
-  }
-
-  bool _isPragma(Constant annotation) =>
-      annotation is InstanceConstant &&
-      annotation.classNode == coreTypes.pragmaClass;
-
-  Annotations getAnnotations(List<Expression> nodes) {
-    if (nodes.isEmpty) {
-      return const Annotations(null, false);
-    }
-    List<Constant> constants = nodes.map(_getConstant).toList();
-    bool hasPragma = constants.any(_isPragma);
-    if (!options.emitAnnotations) {
-      if (hasPragma) {
-        constants = constants.where(_isPragma).toList();
-      } else {
-        return const Annotations(null, false);
-      }
-    }
-    final object =
-        objectTable.getHandle(new ListConstant(const DynamicType(), constants));
-    final decl = new AnnotationsDeclaration(object);
-    bytecodeComponent.annotations.add(decl);
-    return new Annotations(decl, hasPragma);
-  }
-
-  ObjectHandle getMemberAttributes() {
-    if (procedureAttributesMetadata == null && inferredTypesAttribute == null) {
-      return null;
-    }
-    // List of pairs (tag, value).
-    final attrs = <Constant>[];
-    if (procedureAttributesMetadata != null) {
-      final attribute = procedureAttributesMetadataRepository
-          .getBytecodeAttribute(procedureAttributesMetadata);
-      attrs.add(
-          StringConstant(ProcedureAttributesMetadataRepository.repositoryTag));
-      attrs.add(attribute);
-    }
-    if (inferredTypesAttribute != null) {
-      attrs.add(StringConstant(InferredTypeMetadataRepository.repositoryTag));
-      attrs.add(ListConstant(const DynamicType(), inferredTypesAttribute));
-    }
-    return objectTable.getHandle(ListConstant(const DynamicType(), attrs));
-  }
-
-  ObjectHandle getClosureAttributes() {
-    if (inferredTypesAttribute == null) {
-      return null;
-    }
-    final attrs = <Constant>[
-      StringConstant(InferredTypeMetadataRepository.repositoryTag),
-      ListConstant(const DynamicType(), inferredTypesAttribute),
-    ];
-    return objectTable.getHandle(ListConstant(const DynamicType(), attrs));
-  }
-
-  // Insert annotations for the function and its parameters into the annotations
-  // section. Return the annotations for the function only. The bytecode reader
-  // will implicitly find the parameter annotations by reading N packed objects
-  // after reading the function's annotations, one for each parameter.
-  Annotations getFunctionAnnotations(Member member) {
-    final functionNodes = member.annotations;
-    final parameterNodeLists = new List<List<Expression>>();
-    for (VariableDeclaration variable in member.function.positionalParameters) {
-      parameterNodeLists.add(variable.annotations);
-    }
-    for (VariableDeclaration variable in member.function.namedParameters) {
-      parameterNodeLists.add(variable.annotations);
-    }
-
-    if (functionNodes.isEmpty &&
-        parameterNodeLists.every((nodes) => nodes.isEmpty)) {
-      return const Annotations(null, false);
-    }
-
-    List<Constant> functionConstants = functionNodes.map(_getConstant).toList();
-    bool hasPragma = functionConstants.any(_isPragma);
-    if (!options.emitAnnotations && !hasPragma) {
-      return const Annotations(null, false);
-    }
-
-    final functionObject = objectTable
-        .getHandle(new ListConstant(const DynamicType(), functionConstants));
-    final functionDecl = new AnnotationsDeclaration(functionObject);
-    bytecodeComponent.annotations.add(functionDecl);
-
-    for (final parameterNodes in parameterNodeLists) {
-      List<Constant> parameterConstants =
-          parameterNodes.map(_getConstant).toList();
-      final parameterObject = objectTable
-          .getHandle(new ListConstant(const DynamicType(), parameterConstants));
-      final parameterDecl = new AnnotationsDeclaration(parameterObject);
-      bytecodeComponent.annotations.add(parameterDecl);
-    }
-
-    return new Annotations(functionDecl, hasPragma);
-  }
-
-  // Insert annotations for library and its dependencies into the
-  // annotations section. Returns annotations for the library only.
-  // Bytecode reader will implicitly find library dependencies by reading
-  // an extra object after reading library annotations.
-  Annotations getLibraryAnnotations(Library library) {
-    Annotations annotations = getAnnotations(library.annotations);
-    final bool emitDependencies =
-        options.emitAnnotations && library.dependencies.isNotEmpty;
-    if (annotations.object == null && !emitDependencies) {
-      return annotations;
-    }
-
-    // We need to emit both annotations and dependencies objects, appending
-    // null if an object is missing.
-    if (annotations.object == null) {
-      final annotationsDecl = new AnnotationsDeclaration(null);
-      bytecodeComponent.annotations.add(annotationsDecl);
-      annotations = new Annotations(annotationsDecl, false);
-    }
-    if (!emitDependencies) {
-      bytecodeComponent.annotations.add(new AnnotationsDeclaration(null));
-      return annotations;
-    }
-
-    // Create a constant object representing library dependencies.
-    // These objects are used by dart:mirrors and vm-service implementation.
-    final deps = <Constant>[];
-    for (var dependency in library.dependencies) {
-      final prefix = dependency.name != null
-          ? StringConstant(dependency.name)
-          : NullConstant();
-      final showNames = dependency.combinators
-          .where((c) => c.isShow)
-          .expand((c) => c.names)
-          .map((name) => StringConstant(name))
-          .toList();
-      final hideNames = dependency.combinators
-          .where((c) => c.isHide)
-          .expand((c) => c.names)
-          .map((name) => StringConstant(name))
-          .toList();
-      final depAnnots = dependency.annotations.map(_getConstant).toList();
-      deps.add(ListConstant(const DynamicType(), <Constant>[
-        StringConstant(dependency.targetLibrary.importUri.toString()),
-        BoolConstant(dependency.isExport),
-        BoolConstant(dependency.isDeferred),
-        prefix,
-        ListConstant(const DynamicType(), showNames),
-        ListConstant(const DynamicType(), hideNames),
-        ListConstant(const DynamicType(), depAnnots),
-      ]));
-    }
-    final ObjectHandle dependenciesObject =
-        objectTable.getHandle(ListConstant(const DynamicType(), deps));
-    final dependenciesDecl = new AnnotationsDeclaration(dependenciesObject);
-    bytecodeComponent.annotations.add(dependenciesDecl);
-
-    return annotations;
-  }
-
-  FieldDeclaration getFieldDeclaration(Field field, Code initializer) {
-    int flags = 0;
-    Constant value;
-    if (_hasNonTrivialInitializer(field)) {
-      flags |= FieldDeclaration.hasNontrivialInitializerFlag;
-    } else if (field.initializer != null) {
-      value = _getConstant(field.initializer);
-    }
-    if (initializer != null) {
-      flags |= FieldDeclaration.hasInitializerCodeFlag;
-    }
-    if (field.initializer != null) {
-      flags |= FieldDeclaration.hasInitializerFlag;
-    }
-    final name = objectTable.getNameHandle(
-        field.name.library, objectTable.mangleMemberName(field, false, false));
-    ObjectHandle getterName;
-    ObjectHandle setterName;
-    if (_needsGetter(field)) {
-      flags |= FieldDeclaration.hasGetterFlag;
-      getterName = objectTable.getNameHandle(
-          field.name.library, objectTable.mangleMemberName(field, true, false));
-    }
-    if (_needsSetter(field)) {
-      flags |= FieldDeclaration.hasSetterFlag;
-      setterName = objectTable.getNameHandle(
-          field.name.library, objectTable.mangleMemberName(field, false, true));
-    }
-    if (isReflectable(field)) {
-      flags |= FieldDeclaration.isReflectableFlag;
-    }
-    if (field.isStatic) {
-      flags |= FieldDeclaration.isStaticFlag;
-    }
-    if (field.isConst) {
-      flags |= FieldDeclaration.isConstFlag;
-    }
-    // Const fields are implicitly final.
-    if (field.isConst || field.isFinal) {
-      flags |= FieldDeclaration.isFinalFlag;
-    }
-    if (field.isCovariant) {
-      flags |= FieldDeclaration.isCovariantFlag;
-    }
-    if (field.isGenericCovariantImpl) {
-      flags |= FieldDeclaration.isGenericCovariantImplFlag;
-    }
-    if (field.isExtensionMember) {
-      flags |= FieldDeclaration.isExtensionMemberFlag;
-    }
-    // In NNBD libraries, static fields with initializers are implicitly late.
-    if (field.isLate ||
-        (field.isStatic &&
-            field.initializer != null &&
-            field.isNonNullableByDefault)) {
-      flags |= FieldDeclaration.isLateFlag;
-    }
-    int position = TreeNode.noOffset;
-    int endPosition = TreeNode.noOffset;
-    if (options.emitSourcePositions && field.fileOffset != TreeNode.noOffset) {
-      flags |= FieldDeclaration.hasSourcePositionsFlag;
-      position = field.fileOffset;
-      endPosition = field.fileEndOffset;
-    }
-    Annotations annotations = getAnnotations(field.annotations);
-    if (annotations.object != null) {
-      flags |= FieldDeclaration.hasAnnotationsFlag;
-      if (annotations.hasPragma) {
-        flags |= FieldDeclaration.hasPragmaFlag;
-      }
-    }
-    final ObjectHandle attributes = getMemberAttributes();
-    if (attributes != null) {
-      flags |= FieldDeclaration.hasAttributesFlag;
-    }
-    ObjectHandle script;
-    if (field.fileUri != null &&
-        field.fileUri != (field.parent as FileUriNode).fileUri) {
-      final isInAnonymousMixin =
-          enclosingClass != null && enclosingClass.isAnonymousMixin;
-      script = getScript(field.fileUri, !isInAnonymousMixin);
-      flags |= FieldDeclaration.hasCustomScriptFlag;
-    }
-    return new FieldDeclaration(
-        flags,
-        name,
-        objectTable.getHandle(field.type),
-        objectTable.getHandle(value),
-        script,
-        position,
-        endPosition,
-        getterName,
-        setterName,
-        initializer,
-        annotations.object,
-        attributes);
-  }
-
-  FunctionDeclaration getFunctionDeclaration(Member member, Code code) {
-    int flags = 0;
-    if (member is Constructor) {
-      flags |= FunctionDeclaration.isConstructorFlag;
-    }
-    if (member is Procedure) {
-      if (member.isGetter) {
-        flags |= FunctionDeclaration.isGetterFlag;
-      } else if (member.isSetter) {
-        flags |= FunctionDeclaration.isSetterFlag;
-      } else if (member.isFactory) {
-        flags |= FunctionDeclaration.isFactoryFlag;
-      }
-      if (member.isStatic) {
-        flags |= FunctionDeclaration.isStaticFlag;
-      }
-      if (member.isForwardingStub) {
-        flags |= FunctionDeclaration.isForwardingStubFlag;
-      }
-      if (member.isNoSuchMethodForwarder) {
-        flags |= FunctionDeclaration.isNoSuchMethodForwarderFlag;
-      }
-    }
-    if (member.isAbstract && !_hasCode(member)) {
-      flags |= FunctionDeclaration.isAbstractFlag;
-    }
-    if (member.isConst) {
-      flags |= FunctionDeclaration.isConstFlag;
-    }
-    if (member.isExtensionMember) {
-      flags |= FunctionDeclaration.isExtensionMemberFlag;
-    }
-
-    FunctionNode function = member.function;
-    if (function.requiredParameterCount !=
-        function.positionalParameters.length) {
-      flags |= FunctionDeclaration.hasOptionalPositionalParamsFlag;
-    }
-    if (function.namedParameters.isNotEmpty) {
-      flags |= FunctionDeclaration.hasOptionalNamedParamsFlag;
-    }
-    TypeParametersDeclaration typeParameters;
-    if (function.typeParameters.isNotEmpty) {
-      flags |= FunctionDeclaration.hasTypeParamsFlag;
-      typeParameters = getTypeParametersDeclaration(function.typeParameters);
-    }
-    if (isReflectable(member)) {
-      flags |= FunctionDeclaration.isReflectableFlag;
-    }
-    if (isDebuggable(member)) {
-      flags |= FunctionDeclaration.isDebuggableFlag;
-    }
-    switch (function.dartAsyncMarker) {
-      case AsyncMarker.Async:
-        flags |= FunctionDeclaration.isAsyncFlag;
-        break;
-      case AsyncMarker.AsyncStar:
-        flags |= FunctionDeclaration.isAsyncStarFlag;
-        break;
-      case AsyncMarker.SyncStar:
-        flags |= FunctionDeclaration.isSyncStarFlag;
-        break;
-      default:
-        break;
-    }
-    ObjectHandle nativeName;
-    if (member.isExternal) {
-      final String externalName = getExternalName(member);
-      if (externalName == null) {
-        flags |= FunctionDeclaration.isExternalFlag;
-      } else {
-        flags |= FunctionDeclaration.isNativeFlag;
-        nativeName = objectTable.getConstStringHandle(externalName);
-      }
-    }
-    int position = TreeNode.noOffset;
-    int endPosition = TreeNode.noOffset;
-    if (options.emitSourcePositions && member.fileOffset != TreeNode.noOffset) {
-      flags |= FunctionDeclaration.hasSourcePositionsFlag;
-      position = (member as dynamic).startFileOffset;
-      endPosition = member.fileEndOffset;
-    }
-    final Annotations annotations = getFunctionAnnotations(member);
-    if (annotations.object != null) {
-      flags |= FunctionDeclaration.hasAnnotationsFlag;
-      if (annotations.hasPragma) {
-        flags |= FunctionDeclaration.hasPragmaFlag;
-      }
-    }
-    final ObjectHandle attributes = getMemberAttributes();
-    if (attributes != null) {
-      flags |= FunctionDeclaration.hasAttributesFlag;
-    }
-    ObjectHandle script;
-    if (member.fileUri != null &&
-        member.fileUri != (member.parent as FileUriNode).fileUri) {
-      final isInAnonymousMixin =
-          enclosingClass != null && enclosingClass.isAnonymousMixin;
-      final isSynthetic = member is Procedure &&
-          (member.isNoSuchMethodForwarder || member.isSyntheticForwarder);
-      script = getScript(member.fileUri, !isInAnonymousMixin && !isSynthetic);
-      flags |= FunctionDeclaration.hasCustomScriptFlag;
-    }
-
-    final name = objectTable.getNameHandle(member.name.library,
-        objectTable.mangleMemberName(member, false, false));
-
-    final parameters = <ParameterDeclaration>[];
-    for (var param in function.positionalParameters) {
-      parameters.add(getParameterDeclaration(param));
-    }
-    for (var param in function.namedParameters) {
-      parameters.add(getParameterDeclaration(param));
-    }
-    // We only need the required flags when loading the function declaration.
-    final parameterFlags =
-        getParameterFlags(function, mask: ParameterDeclaration.isRequiredFlag);
-    if (parameterFlags != null) {
-      flags |= FunctionDeclaration.hasParameterFlagsFlag;
-    }
-
-    return new FunctionDeclaration(
-        flags,
-        name,
-        script,
-        position,
-        endPosition,
-        typeParameters,
-        function.requiredParameterCount,
-        parameters,
-        parameterFlags,
-        objectTable.getHandle(function.returnType),
-        nativeName,
-        code,
-        annotations.object,
-        attributes);
-  }
-
-  bool isReflectable(Member member) {
-    if (member is Field && member.fileOffset == TreeNode.noOffset) {
-      return false;
-    }
-    final library = member.enclosingLibrary;
-    if (library.importUri.scheme == 'dart' && member.name.isPrivate) {
-      return false;
-    }
-    if (member is Procedure &&
-        member.isStatic &&
-        library.importUri.toString() == 'dart:_internal') {
-      return false;
-    }
-    if (member is Procedure && member.isMemberSignature) {
-      return false;
-    }
-    return true;
-  }
-
-  bool isDebuggable(Member member) {
-    if (member is Constructor && member.isSynthetic) {
-      return false;
-    }
-    if (member.function.dartAsyncMarker != AsyncMarker.Sync) {
-      return false;
-    }
-    if (member == asyncAwaitCompleterGetFuture) {
-      return false;
-    }
-    return true;
-  }
-
-  TypeParametersDeclaration getTypeParametersDeclaration(
-      List<TypeParameter> typeParams) {
-    return new TypeParametersDeclaration(
-        objectTable.getTypeParameterHandles(typeParams));
-  }
-
-  ParameterDeclaration getParameterDeclaration(VariableDeclaration variable) {
-    final name = variable.name;
-    final lib = name.startsWith('_') ? enclosingMember.enclosingLibrary : null;
-    final nameHandle = objectTable.getNameHandle(lib, name);
-    final typeHandle = objectTable.getHandle(variable.type);
-    return new ParameterDeclaration(nameHandle, typeHandle);
-  }
-
-  // Most uses of parameter flags in the VM only nee a subset of the flags,
-  // so the optional [mask] argument allows the caller to specify the subset
-  // that should be retained.
-  List<int> getParameterFlags(FunctionNode function, {int mask = -1}) {
-    int getFlags(VariableDeclaration variable, int mask) {
-      int flags = 0;
-      if (variable.isCovariant) {
-        flags |= ParameterDeclaration.isCovariantFlag;
-      }
-      if (variable.isGenericCovariantImpl) {
-        flags |= ParameterDeclaration.isGenericCovariantImplFlag;
-      }
-      if (variable.isFinal) {
-        flags |= ParameterDeclaration.isFinalFlag;
-      }
-      if (variable.isRequired) {
-        flags |= ParameterDeclaration.isRequiredFlag;
-      }
-      return flags & mask;
-    }
-
-    final List<int> paramFlags = <int>[];
-    for (var param in function.positionalParameters) {
-      paramFlags.add(getFlags(param, mask));
-    }
-    for (var param in function.namedParameters) {
-      paramFlags.add(getFlags(param, mask));
-    }
-
-    for (int flags in paramFlags) {
-      if (flags != 0) {
-        return paramFlags;
-      }
-    }
-    return null;
-  }
-
-  @override
-  defaultMember(Member node) {
-    if (node is Procedure && node.isRedirectingFactoryConstructor) {
-      return;
-    }
-    try {
-      final bool hasCode = _hasCode(node);
-      start(node, hasCode);
-      if (node is Field) {
-        if (hasCode) {
-          if (node.isConst) {
-            _genPushConstExpr(node.initializer);
-          } else {
-            _generateNode(node.initializer);
-          }
-          _genReturnTOS();
-        }
-      } else if ((node is Procedure && !node.isRedirectingFactoryConstructor) ||
-          (node is Constructor)) {
-        if (hasCode) {
-          if (node is Constructor) {
-            _genConstructorInitializers(node);
-          }
-          if (node.isExternal) {
-            final String nativeName = getExternalName(node);
-            if (nativeName != null) {
-              _genNativeCall(nativeName);
-            } else {
-              // TODO(alexmarkov): generate throwing UnimplementedError
-              //  ("No definition given for external method Foo.bar").
-              asm.emitPushNull();
-            }
-          } else {
-            _generateNode(node.function?.body);
-            // BytecodeAssembler eliminates this bytecode if it is unreachable.
-            asm.emitPushNull();
-          }
-          if (node.function != null) {
-            _recordSourcePosition(node.function.fileEndOffset);
-          }
-          _genReturnTOS();
-        }
-      } else {
-        throw 'Unexpected member ${node.runtimeType} $node';
-      }
-      end(node, hasCode);
-    } on TooManyArgumentsException catch (e) {
-      CompilerContext.current.options.report(
-          messageBytecodeLimitExceededTooManyArguments.withLocation(
-              node.fileUri, e.fileOffset, noLength),
-          Severity.error);
-      hasErrors = true;
-      end(node, false);
-    }
-  }
-
-  bool _hasCode(Member member) {
-    if (member is Procedure && member.isRedirectingFactoryConstructor) {
-      return false;
-    }
-    // Front-end might set abstract flag on static external procedures,
-    // but they can be called and should have a body.
-    if (member is Procedure && member.isStatic && member.isExternal) {
-      return true;
-    }
-    if (member.isAbstract) {
-      return false;
-    }
-    if (member is Field) {
-      // TODO(dartbug.com/34277)
-      // Front-end inserts synthetic static fields "_redirecting#" to record
-      // information about redirecting constructors in kernel.
-      // The problem is that initializers of these synthetic static fields
-      // contain incorrect kernel AST, e.g. StaticGet which takes tear-off
-      // of a constructor. Do not generate bytecode for them, as they should
-      // never be used.
-      if (isRedirectingFactoryField(member)) {
-        return false;
-      }
-      return hasInitializerCode(member);
-    }
-    return true;
-  }
-
-  bool hasInitializerCode(Field field) =>
-      (field.isStatic ||
-          field.isLate ||
-          options.emitInstanceFieldInitializers) &&
-      _hasNonTrivialInitializer(field);
-
-  bool _needsGetter(Field field) {
-    // All instance fields need a getter.
-    if (!field.isStatic) return true;
-
-    // Static fields also need a getter if they have a non-trivial initializer,
-    // because it needs to be initialized lazily.
-    if (_hasNonTrivialInitializer(field)) return true;
-
-    // Static late fields with no initializer also need a getter, to check if
-    // it's been initialized.
-    return field.isLate && field.initializer == null;
-  }
-
-  bool _needsSetter(Field field) {
-    // Late fields always need a setter, unless they're static and non-final, or
-    // final with an initializer.
-    if (field.isLate) {
-      if (field.isStatic && !field.isFinal) return false;
-      if (field.isFinal && field.initializer != null) return false;
-      return true;
-    }
-
-    // Non-late static fields never need a setter.
-    if (field.isStatic) return false;
-
-    // Otherwise, the field only needs a setter if it isn't final.
-    return !field.isFinal;
-  }
-
-  void _genNativeCall(String nativeName) {
-    final function = enclosingMember.function;
-    assert(function != null);
-
-    if (locals.hasFactoryTypeArgsVar) {
-      asm.emitPush(locals.getVarIndexInFrame(locals.factoryTypeArgsVar));
-    } else if (locals.hasFunctionTypeArgsVar) {
-      asm.emitPush(locals.functionTypeArgsVarIndexInFrame);
-    }
-    if (locals.hasReceiver) {
-      asm.emitPush(locals.getVarIndexInFrame(locals.receiverVar));
-    }
-    for (var param in function.positionalParameters) {
-      asm.emitPush(locals.getVarIndexInFrame(param));
-    }
-    // Native methods access their parameters by indices, so
-    // native wrappers should pass arguments in the original declaration
-    // order instead of sorted order.
-    for (var param in locals.originalNamedParameters) {
-      asm.emitPush(locals.getVarIndexInFrame(param));
-    }
-
-    final nativeEntryCpIndex = cp.addNativeEntry(nativeName);
-    asm.emitNativeCall(nativeEntryCpIndex);
-  }
-
-  LibraryIndex get libraryIndex => coreTypes.index;
-
-  Procedure _listFromLiteral;
-  Procedure get listFromLiteral => _listFromLiteral ??=
-      libraryIndex.getMember('dart:core', 'List', '_fromLiteral');
-
-  Procedure _mapFromLiteral;
-  Procedure get mapFromLiteral => _mapFromLiteral ??=
-      libraryIndex.getMember('dart:core', 'Map', '_fromLiteral');
-
-  Procedure _interpolateSingle;
-  Procedure get interpolateSingle => _interpolateSingle ??=
-      libraryIndex.getMember('dart:core', '_StringBase', '_interpolateSingle');
-
-  Procedure _interpolate;
-  Procedure get interpolate => _interpolate ??=
-      libraryIndex.getMember('dart:core', '_StringBase', '_interpolate');
-
-  Class _closureClass;
-  Class get closureClass =>
-      _closureClass ??= libraryIndex.getClass('dart:core', '_Closure');
-
-  Procedure _objectInstanceOf;
-  Procedure get objectInstanceOf => _objectInstanceOf ??=
-      libraryIndex.getMember('dart:core', 'Object', '_instanceOf');
-
-  Procedure _objectSimpleInstanceOf;
-  Procedure get objectSimpleInstanceOf => _objectSimpleInstanceOf ??=
-      libraryIndex.getMember('dart:core', 'Object', '_simpleInstanceOf');
-
-  Field _closureInstantiatorTypeArguments;
-  Field get closureInstantiatorTypeArguments =>
-      _closureInstantiatorTypeArguments ??= libraryIndex.getMember(
-          'dart:core', '_Closure', '_instantiator_type_arguments');
-
-  Field _closureFunctionTypeArguments;
-  Field get closureFunctionTypeArguments =>
-      _closureFunctionTypeArguments ??= libraryIndex.getMember(
-          'dart:core', '_Closure', '_function_type_arguments');
-
-  Field _closureDelayedTypeArguments;
-  Field get closureDelayedTypeArguments =>
-      _closureDelayedTypeArguments ??= libraryIndex.getMember(
-          'dart:core', '_Closure', '_delayed_type_arguments');
-
-  Field _closureFunction;
-  Field get closureFunction => _closureFunction ??=
-      libraryIndex.getMember('dart:core', '_Closure', '_function');
-
-  Field _closureContext;
-  Field get closureContext => _closureContext ??=
-      libraryIndex.getMember('dart:core', '_Closure', '_context');
-
-  Procedure _prependTypeArguments;
-  Procedure get prependTypeArguments => _prependTypeArguments ??=
-      libraryIndex.getTopLevelMember('dart:_internal', '_prependTypeArguments');
-
-  Procedure _boundsCheckForPartialInstantiation;
-  Procedure get boundsCheckForPartialInstantiation =>
-      _boundsCheckForPartialInstantiation ??= libraryIndex.getTopLevelMember(
-          'dart:_internal', '_boundsCheckForPartialInstantiation');
-
-  Procedure _futureValue;
-  Procedure get futureValue =>
-      _futureValue ??= libraryIndex.getMember('dart:async', 'Future', 'value');
-
-  Procedure _throwNewLateInitializationError;
-  Procedure get throwNewLateInitializationError =>
-      _throwNewLateInitializationError ??= libraryIndex.getMember(
-          'dart:core', '_LateInitializationError', '_throwNew');
-
-  Procedure _throwNewAssertionError;
-  Procedure get throwNewAssertionError => _throwNewAssertionError ??=
-      libraryIndex.getMember('dart:core', '_AssertionError', '_throwNew');
-
-  Procedure _allocateInvocationMirror;
-  Procedure get allocateInvocationMirror =>
-      _allocateInvocationMirror ??= libraryIndex.getMember(
-          'dart:core', '_InvocationMirror', '_allocateInvocationMirror');
-
-  Procedure _unsafeCast;
-  Procedure get unsafeCast => _unsafeCast ??=
-      libraryIndex.getTopLevelMember('dart:_internal', 'unsafeCast');
-
-  Procedure _iterableIterator;
-  Procedure get iterableIterator => _iterableIterator ??=
-      libraryIndex.getMember('dart:core', 'Iterable', 'get:iterator');
-
-  Procedure _iteratorMoveNext;
-  Procedure get iteratorMoveNext => _iteratorMoveNext ??=
-      libraryIndex.getMember('dart:core', 'Iterator', 'moveNext');
-
-  Procedure _iteratorCurrent;
-  Procedure get iteratorCurrent => _iteratorCurrent ??=
-      libraryIndex.getMember('dart:core', 'Iterator', 'get:current');
-
-  Procedure _asyncAwaitCompleterGetFuture;
-  Procedure get asyncAwaitCompleterGetFuture =>
-      _asyncAwaitCompleterGetFuture ??= libraryIndex.tryGetMember(
-          'dart:async', '_AsyncAwaitCompleter', 'get:future');
-
-  Procedure _setAsyncThreadStackTrace;
-  Procedure get setAsyncThreadStackTrace => _setAsyncThreadStackTrace ??=
-      libraryIndex.getTopLevelMember('dart:async', '_setAsyncThreadStackTrace');
-
-  Procedure _clearAsyncThreadStackTrace;
-  Procedure get clearAsyncThreadStackTrace =>
-      _clearAsyncThreadStackTrace ??= libraryIndex.getTopLevelMember(
-          'dart:async', '_clearAsyncThreadStackTrace');
-
-  Library _dartFfiLibrary;
-  Library get dartFfiLibrary =>
-      _dartFfiLibrary ??= libraryIndex.tryGetLibrary('dart:ffi');
-
-  void _recordSourcePosition(int fileOffset) {
-    asm.currentSourcePosition = fileOffset;
-    maxSourcePosition = math.max(maxSourcePosition, fileOffset);
-  }
-
-  void _generateNode(TreeNode node) {
-    if (node == null) {
-      return;
-    }
-    final savedSourcePosition = asm.currentSourcePosition;
-    _recordSourcePosition(node.fileOffset);
-    node.accept(this);
-    asm.currentSourcePosition = savedSourcePosition;
-  }
-
-  void _generateNodeList(List<TreeNode> nodes) {
-    nodes.forEach(_generateNode);
-  }
-
-  void _genConstructorInitializers(Constructor node) {
-    bool isRedirecting = false;
-    Set<Field> initializedInInitializersList = new Set<Field>();
-    for (var initializer in node.initializers) {
-      if (initializer is RedirectingInitializer) {
-        isRedirecting = true;
-      } else if (initializer is FieldInitializer) {
-        initializedInInitializersList.add(initializer.field);
-      }
-    }
-
-    if (!isRedirecting) {
-      initializedFields = new Set<Field>();
-      for (var field in node.enclosingClass.fields) {
-        if (!field.isStatic) {
-          if (field.isLate) {
-            if (!initializedInInitializersList.contains(field)) {
-              _genLateFieldInitializer(field);
-            }
-          } else if (field.initializer != null) {
-            if (initializedInInitializersList.contains(field)) {
-              // Do not store a value into the field as it is going to be
-              // overwritten by initializers list.
-              _generateNode(field.initializer);
-              asm.emitDrop1();
-            } else {
-              _genFieldInitializer(field, field.initializer);
-            }
-          }
-        }
-      }
-    }
-
-    _generateNodeList(node.initializers);
-
-    if (!isRedirecting) {
-      nullableFields = <ObjectHandle>[];
-      for (var field in node.enclosingClass.fields) {
-        if (!field.isStatic &&
-            !field.isLate &&
-            !initializedFields.contains(field)) {
-          nullableFields.add(objectTable.getHandle(field));
-        }
-      }
-      initializedFields = null; // No more initialized fields, please.
-    }
-  }
-
-  void _genFieldInitializer(Field field, Expression initializer) {
-    assert(!field.isStatic);
-
-    if (initializer is NullLiteral && !initializedFields.contains(field)) {
-      return;
-    }
-
-    _genPushReceiver();
-    _generateNode(initializer);
-
-    final int cpIndex = cp.addInstanceField(field);
-    asm.emitStoreFieldTOS(cpIndex);
-
-    initializedFields.add(field);
-  }
-
-  void _genLateFieldInitializer(Field field) {
-    assert(!field.isStatic);
-
-    if (_isTrivialInitializer(field.initializer)) {
-      _genFieldInitializer(field, field.initializer);
-      return;
-    }
-
-    _genPushReceiver();
-
-    final int cpIndex = cp.addInstanceField(field);
-    asm.emitInitLateField(cpIndex);
-
-    initializedFields.add(field);
-  }
-
-  void _genArguments(Expression receiver, Arguments arguments,
-      {int storeReceiverToLocal}) {
-    if (arguments.types.isNotEmpty) {
-      _genTypeArguments(arguments.types);
-    }
-    _generateNode(receiver);
-    if (storeReceiverToLocal != null) {
-      asm.emitStoreLocal(storeReceiverToLocal);
-    }
-    _generateNodeList(arguments.positional);
-    arguments.named.forEach((NamedExpression ne) => _generateNode(ne.value));
-  }
-
-  void _genPushBool(bool value) {
-    if (value) {
-      asm.emitPushTrue();
-    } else {
-      asm.emitPushFalse();
-    }
-  }
-
-  void _genPushInt(int value) {
-    // TODO(alexmarkov): relax this constraint as PushInt instruction can
-    // hold up to 32-bit signed operand (note that interpreter assumes
-    // it is Smi).
-    if (value.bitLength + 1 <= 16) {
-      asm.emitPushInt(value);
-    } else {
-      asm.emitPushConstant(cp.addObjectRef(new IntConstant(value)));
-    }
-  }
-
-  Constant _getConstant(Expression expr) {
-    if (expr is ConstantExpression) {
-      return expr.constant;
-    }
-
-    // Literals outside of const expressions are not transformed by the
-    // constant transformer, but they need to be treated as constants here.
-    if (expr is BoolLiteral) return new BoolConstant(expr.value);
-    if (expr is DoubleLiteral) return new DoubleConstant(expr.value);
-    if (expr is IntLiteral) return new IntConstant(expr.value);
-    if (expr is NullLiteral) return new NullConstant();
-    if (expr is StringLiteral) return new StringConstant(expr.value);
-
-    throw 'Expected constant, got ${expr.runtimeType}';
-  }
-
-  void _genPushConstant(Constant constant) {
-    if (constant is NullConstant) {
-      asm.emitPushNull();
-    } else if (constant is BoolConstant) {
-      _genPushBool(constant.value);
-    } else if (constant is IntConstant) {
-      _genPushInt(constant.value);
-    } else {
-      asm.emitPushConstant(cp.addObjectRef(constant));
-    }
-  }
-
-  void _genPushConstExpr(Expression expr) {
-    if (expr is ConstantExpression) {
-      _genPushConstant(expr.constant);
-    } else if (expr is NullLiteral) {
-      asm.emitPushNull();
-    } else if (expr is BoolLiteral) {
-      _genPushBool(expr.value);
-    } else if (expr is IntLiteral) {
-      _genPushInt(expr.value);
-    } else {
-      _genPushConstant(_getConstant(expr));
-    }
-  }
-
-  void _genReturnTOS([int yieldSourcePosition = null]) {
-    if (options.causalAsyncStacks &&
-        parentFunction != null &&
-        (parentFunction.dartAsyncMarker == AsyncMarker.Async ||
-            parentFunction.dartAsyncMarker == AsyncMarker.AsyncStar)) {
-      final savedSourcePosition = asm.currentSourcePosition;
-      _recordSourcePosition(TreeNode.noOffset);
-      _genDirectCall(
-          clearAsyncThreadStackTrace, objectTable.getArgDescHandle(0), 0);
-      asm.emitDrop1();
-      asm.currentSourcePosition = savedSourcePosition;
-    }
-
-    if (yieldSourcePosition != null && options.emitSourcePositions) {
-      asm.emitYieldPointSourcePosition(yieldSourcePosition);
-    }
-    asm.emitReturnTOS();
-  }
-
-  void _genDirectCall(Member target, ObjectHandle argDesc, int totalArgCount,
-      {bool isGet: false,
-      bool isSet: false,
-      bool isDynamicForwarder: false,
-      bool isUnchecked: false,
-      TreeNode node}) {
-    assert(!isGet || !isSet);
-    final kind = isGet
-        ? InvocationKind.getter
-        : (isSet ? InvocationKind.setter : InvocationKind.method);
-    final cpIndex = cp.addDirectCall(kind, target, argDesc, isDynamicForwarder);
-
-    if (totalArgCount >= argumentsLimit) {
-      throw new TooManyArgumentsException(node.fileOffset);
-    }
-    if (inferredTypeMetadata != null && node != null) {
-      _appendInferredType(node, asm.offset);
-    }
-    if (isUnchecked) {
-      asm.emitUncheckedDirectCall(cpIndex, totalArgCount);
-    } else {
-      asm.emitDirectCall(cpIndex, totalArgCount);
-    }
-    if (inferredTypeMetadata != null && node != null) {
-      _replaceWithConstantValue(node);
-    }
-  }
-
-  void _genDirectCallWithArgs(Member target, Arguments args,
-      {bool hasReceiver: false,
-      bool isFactory: false,
-      bool isUnchecked: false,
-      TreeNode node}) {
-    final argDesc = objectTable.getArgDescHandleByArguments(args,
-        hasReceiver: hasReceiver, isFactory: isFactory);
-
-    int totalArgCount = args.positional.length + args.named.length;
-    if (hasReceiver) {
-      totalArgCount++;
-    }
-    if (args.types.isNotEmpty || isFactory) {
-      // VM needs type arguments for every invocation of a factory constructor.
-      // TODO(alexmarkov): Clean this up.
-      totalArgCount++;
-    }
-
-    _genDirectCall(target, argDesc, totalArgCount,
-        isUnchecked: isUnchecked, node: node);
-  }
-
-  void _genTypeArguments(List<DartType> typeArgs, {Class instantiatingClass}) {
-    int typeArgsCPIndex() {
-      if (instantiatingClass != null) {
-        typeArgs = getInstantiatorTypeArguments(instantiatingClass, typeArgs);
-      }
-      return cp.addTypeArguments(typeArgs);
-    }
-
-    if (typeArgs.isEmpty || !hasFreeTypeParameters(typeArgs)) {
-      asm.emitPushConstant(typeArgsCPIndex());
-    } else {
-      final flattenedTypeArgs = (instantiatingClass != null &&
-              (instantiatorTypeArguments != null ||
-                  functionTypeParameters != null))
-          ? flattenInstantiatorTypeArguments(instantiatingClass, typeArgs)
-          : typeArgs;
-      if (_canReuseInstantiatorTypeArguments(flattenedTypeArgs)) {
-        _genPushInstantiatorTypeArguments();
-      } else if (_canReuseFunctionTypeArguments(flattenedTypeArgs)) {
-        _genPushFunctionTypeArguments();
-      } else {
-        _genPushInstantiatorAndFunctionTypeArguments(typeArgs);
-        // TODO(alexmarkov): Optimize type arguments instantiation
-        // by passing rA = 1 in InstantiateTypeArgumentsTOS.
-        // For this purpose, we need to detect if type arguments
-        // would be all-dynamic in case of all-dynamic instantiator and
-        // function type arguments.
-        // Corresponding check is implemented in VM in
-        // TypeArguments::IsRawWhenInstantiatedFromRaw.
-        asm.emitInstantiateTypeArgumentsTOS(0, typeArgsCPIndex());
-      }
-    }
-  }
-
-  void _genPushInstantiatorAndFunctionTypeArguments(List<DartType> types) {
-    if (classTypeParameters != null &&
-        types.any((t) => containsTypeVariable(t, classTypeParameters))) {
-      assert(instantiatorTypeArguments != null);
-      _genPushInstantiatorTypeArguments();
-    } else {
-      asm.emitPushNull();
-    }
-    if (functionTypeParametersSet != null &&
-        types.any((t) => containsTypeVariable(t, functionTypeParametersSet))) {
-      _genPushFunctionTypeArguments();
-    } else {
-      asm.emitPushNull();
-    }
-  }
-
-  void _genPushInstantiatorTypeArguments() {
-    if (instantiatorTypeArguments != null) {
-      if (locals.hasFactoryTypeArgsVar) {
-        assert(enclosingMember is Procedure &&
-            (enclosingMember as Procedure).isFactory);
-        _genLoadVar(locals.factoryTypeArgsVar);
-      } else {
-        _genPushReceiver();
-        final int cpIndex = cp.addTypeArgumentsField(enclosingClass);
-        asm.emitLoadTypeArgumentsField(cpIndex);
-      }
-    } else {
-      asm.emitPushNull();
-    }
-  }
-
-  bool _canReuseInstantiatorTypeArguments(List<DartType> typeArgs) {
-    if (instantiatorTypeArguments == null) {
-      return false;
-    }
-
-    if (typeArgs.length > instantiatorTypeArguments.length) {
-      return false;
-    }
-
-    for (int i = 0; i < typeArgs.length; ++i) {
-      if (typeArgs[i] != instantiatorTypeArguments[i]) {
-        return false;
-      }
-    }
-
-    return true;
-  }
-
-  bool _canReuseFunctionTypeArguments(List<DartType> typeArgs) {
-    if (functionTypeParameters == null) {
-      return false;
-    }
-
-    if (typeArgs.length > functionTypeParameters.length) {
-      return false;
-    }
-
-    for (int i = 0; i < typeArgs.length; ++i) {
-      final typeArg = typeArgs[i];
-      if (!(typeArg is TypeParameterType &&
-          typeArg.parameter == functionTypeParameters[i] &&
-          (typeArg.nullability == Nullability.nonNullable ||
-              typeArg.nullability == Nullability.undetermined))) {
-        return false;
-      }
-    }
-
-    return true;
-  }
-
-  void _genPushFunctionTypeArguments() {
-    if (locals.hasFunctionTypeArgsVar) {
-      asm.emitPush(locals.functionTypeArgsVarIndexInFrame);
-    } else {
-      asm.emitPushNull();
-    }
-  }
-
-  void _genPushContextForVariable(VariableDeclaration variable,
-      {int currentContextLevel}) {
-    currentContextLevel ??= locals.currentContextLevel;
-    int depth = currentContextLevel - locals.getContextLevelOfVar(variable);
-    assert(depth >= 0);
-
-    asm.emitPush(locals.contextVarIndexInFrame);
-    if (depth > 0) {
-      for (; depth > 0; --depth) {
-        asm.emitLoadContextParent();
-      }
-    }
-  }
-
-  void _genPushContextIfCaptured(VariableDeclaration variable) {
-    if (locals.isCaptured(variable)) {
-      _genPushContextForVariable(variable);
-    }
-  }
-
-  void _genLoadVar(VariableDeclaration v, {int currentContextLevel}) {
-    if (locals.isCaptured(v)) {
-      _genPushContextForVariable(v, currentContextLevel: currentContextLevel);
-      asm.emitLoadContextVar(
-          locals.getVarContextId(v), locals.getVarIndexInContext(v));
-    } else {
-      asm.emitPush(locals.getVarIndexInFrame(v));
-    }
-  }
-
-  void _genPushReceiver() {
-    // TODO(alexmarkov): generate more efficient access to receiver
-    // even if it is captured.
-    _genLoadVar(locals.receiverVar);
-  }
-
-  // Stores value into variable.
-  // If variable is captured, context should be pushed before value.
-  void _genStoreVar(VariableDeclaration variable) {
-    if (locals.isCaptured(variable)) {
-      asm.emitStoreContextVar(locals.getVarContextId(variable),
-          locals.getVarIndexInContext(variable));
-    } else {
-      asm.emitPopLocal(locals.getVarIndexInFrame(variable));
-    }
-  }
-
-  /// Generates bool condition. Returns `true` if condition is negated.
-  bool _genCondition(Expression condition) {
-    bool negated = false;
-    if (condition is Not) {
-      condition = (condition as Not).operand;
-      negated = true;
-    }
-    _generateNode(condition);
-    if (nullabilityDetector.isNullable(condition)) {
-      asm.emitAssertBoolean(0);
-    }
-    return negated;
-  }
-
-  /// Returns value of the given expression if it is a bool constant.
-  /// Otherwise, returns `null`.
-  bool _constantConditionValue(Expression condition) {
-    if (options.keepUnreachableCode) {
-      return null;
-    }
-    // TODO(dartbug.com/34585): use constant evaluator to evaluate
-    // expressions in a non-constant context.
-    if (condition is Not) {
-      final operand = _constantConditionValue(condition.operand);
-      return (operand != null) ? !operand : null;
-    }
-    if (condition is BoolLiteral) {
-      return condition.value;
-    }
-    if (condition is ConstantExpression) {
-      Constant constant = condition.constant;
-      if (constant is BoolConstant) {
-        return constant.value;
-      }
-    }
-    return null;
-  }
-
-  void _genConditionAndJumpIf(Expression condition, bool value, Label dest) {
-    final bool constantValue = _constantConditionValue(condition);
-    if (constantValue != null) {
-      if (constantValue == value) {
-        asm.emitJump(dest);
-      }
-      return;
-    }
-    if (condition is MethodInvocation &&
-        condition.name.text == '==' &&
-        (condition.receiver is NullLiteral ||
-            condition.arguments.positional.single is NullLiteral)) {
-      if (condition.receiver is NullLiteral) {
-        _generateNode(condition.arguments.positional.single);
-      } else {
-        _generateNode(condition.receiver);
-      }
-      if (options.emitDebuggerStops &&
-          condition.fileOffset != TreeNode.noOffset) {
-        final savedSourcePosition = asm.currentSourcePosition;
-        _recordSourcePosition(condition.fileOffset);
-        asm.emitDebugCheck();
-        asm.currentSourcePosition = savedSourcePosition;
-      }
-      if (value) {
-        asm.emitJumpIfNull(dest);
-      } else {
-        asm.emitJumpIfNotNull(dest);
-      }
-      return;
-    }
-    if (condition is Not) {
-      _genConditionAndJumpIf(condition.operand, !value, dest);
-    } else if (condition is LogicalExpression) {
-      final isOR = (condition.operatorEnum == LogicalExpressionOperator.OR);
-
-      Label shortCircuit, done;
-      if (isOR == value) {
-        shortCircuit = dest;
-      } else {
-        shortCircuit = done = new Label();
-      }
-      _genConditionAndJumpIf(condition.left, isOR, shortCircuit);
-      _genConditionAndJumpIf(condition.right, value, dest);
-      if (done != null) {
-        asm.bind(done);
-      }
-    } else {
-      bool negated = _genCondition(condition);
-      if (negated) {
-        value = !value;
-      }
-      if (value) {
-        asm.emitJumpIfTrue(dest);
-      } else {
-        asm.emitJumpIfFalse(dest);
-      }
-    }
-  }
-
-  int _getDefaultParamConstIndex(VariableDeclaration param) {
-    if (param.initializer == null) {
-      return cp.addObjectRef(null);
-    }
-    final constant = _getConstant(param.initializer);
-    return cp.addObjectRef(constant);
-  }
-
-  // Duplicates value on top of the stack using temporary variable with
-  // given index.
-  void _genDupTOS(int tempIndexInFrame) {
-    // TODO(alexmarkov): Consider introducing Dup bytecode or keeping track of
-    // expression stack depth.
-    asm.emitStoreLocal(tempIndexInFrame);
-    asm.emitPush(tempIndexInFrame);
-  }
-
-  /// Generates is-test for the value at TOS.
-  void _genInstanceOf(DartType type) {
-    if (typeEnvironment.isTop(type)) {
-      asm.emitDrop1();
-      asm.emitPushTrue();
-      return;
-    }
-
-    if (type is InterfaceType &&
-        (type.typeArguments.isEmpty || isAllDynamic(type.typeArguments))) {
-      asm.emitPushConstant(cp.addType(type));
-      final argDesc = objectTable.getArgDescHandle(2);
-      final cpIndex = cp.addInterfaceCall(
-          InvocationKind.method, objectSimpleInstanceOf, argDesc);
-      asm.emitInterfaceCall(cpIndex, 2);
-      return;
-    }
-
-    if (hasFreeTypeParameters([type])) {
-      _genPushInstantiatorAndFunctionTypeArguments([type]);
-    } else {
-      asm.emitPushNull(); // Instantiator type arguments.
-      asm.emitPushNull(); // Function type arguments.
-    }
-    asm.emitPushConstant(cp.addType(type));
-    final argDesc = objectTable.getArgDescHandle(4);
-    final cpIndex =
-        cp.addInterfaceCall(InvocationKind.method, objectInstanceOf, argDesc);
-    asm.emitInterfaceCall(cpIndex, 4);
-  }
-
-  void start(Member node, bool hasCode) {
-    enclosingClass = node.enclosingClass;
-    enclosingMember = node;
-    enclosingFunction = node.function;
-    parentFunction = null;
-    isClosure = false;
-    hasErrors = false;
-    staticTypeContext.enterMember(node);
-    final isFactory = node is Procedure && node.isFactory;
-    if (node.isInstanceMember || node is Constructor || isFactory) {
-      if (enclosingClass.typeParameters.isNotEmpty) {
-        classTypeParameters =
-            new Set<TypeParameter>.from(enclosingClass.typeParameters);
-        // Treat type arguments of factory constructors as class
-        // type parameters.
-        if (isFactory) {
-          classTypeParameters.addAll(node.function.typeParameters);
-        }
-      }
-      if (hasInstantiatorTypeArguments(enclosingClass)) {
-        final typeParameters = getTypeParameterTypes(isFactory
-            ? node.function.typeParameters
-            : enclosingClass.typeParameters);
-        instantiatorTypeArguments =
-            flattenInstantiatorTypeArguments(enclosingClass, typeParameters);
-      }
-    }
-    if (enclosingFunction != null &&
-        enclosingFunction.typeParameters.isNotEmpty) {
-      functionTypeParameters =
-          new List<TypeParameter>.from(enclosingFunction.typeParameters);
-      functionTypeParametersSet = functionTypeParameters.toSet();
-    }
-    procedureAttributesMetadata = procedureAttributesMetadataRepository != null
-        ? procedureAttributesMetadataRepository.mapping[node]
-        : null;
-
-    if (inferredTypeMetadata != null) {
-      if (node is Field) {
-        // Field type is at PC = -1.
-        _appendInferredType(node, -1);
-      } else if (enclosingFunction != null && hasCode) {
-        assert(node is Procedure || node is Constructor);
-        // Parameter types are at PC = -N,..,-1 where N - number of declared
-        // (explicit) parameters.
-        int i = -(enclosingFunction.positionalParameters.length +
-            enclosingFunction.namedParameters.length);
-        for (var v in enclosingFunction.positionalParameters) {
-          _appendInferredType(v, i);
-          ++i;
-        }
-        for (var v in enclosingFunction.namedParameters) {
-          _appendInferredType(v, i);
-          ++i;
-        }
-      }
-    }
-
-    if (!hasCode) {
-      return;
-    }
-
-    labeledStatements = null;
-    switchCases = null;
-    tryCatches = null;
-    finallyBlocks = null;
-    yieldPoints = null; // Initialized when entering sync-yielding closure.
-    contextLevels = null;
-    closures = null;
-    initializedFields = null; // Tracked for constructors only.
-    nullableFields = const <ObjectHandle>[];
-    cp = new ConstantPool(stringTable, objectTable);
-    asm = new BytecodeAssembler(options);
-    savedAssemblers = null;
-    currentLoopDepth = 0;
-    savedMaxSourcePositions = <int>[];
-    maxSourcePosition = node.fileOffset;
-
-    locals = new LocalVariables(
-        node, options, staticTypeContext, directCallMetadata);
-    locals.enterScope(node);
-    assert(!locals.isSyncYieldingFrame);
-
-    int position;
-    if (node is Procedure) {
-      position = node.startFileOffset;
-    } else if (node is Constructor) {
-      position = node.startFileOffset;
-    } else {
-      position = node.fileOffset;
-    }
-    _recordSourcePosition(position);
-    _genPrologue(node, node.function);
-    _setupInitialContext(node.function);
-    _emitFirstDebugCheck(node.function);
-    if (node is Procedure && node.isInstanceMember) {
-      _checkArguments(node.function);
-    }
-    _genEqualsOperatorNullHandling(node);
-  }
-
-  void _appendInferredType(TreeNode node, int pc) {
-    final InferredType md = inferredTypeMetadata[node];
-    if (md == null || (pc >= 0 && asm.isUnreachable)) {
-      return;
-    }
-    inferredTypesAttribute ??= <Constant>[];
-    // List of triplets (PC, concreteClass, flags).
-    // Verify that PCs are monotonically increasing.
-    assert(inferredTypesAttribute.isEmpty ||
-        (inferredTypesAttribute[inferredTypesAttribute.length - 3]
-                    as IntConstant)
-                .value <
-            pc);
-    inferredTypesAttribute.add(IntConstant(pc));
-    Class concreteClass = md.concreteClass;
-    // VM uses more specific function type and doesn't expect to
-    // see inferred _Closure class.
-    if (concreteClass != null && concreteClass != closureClass) {
-      inferredTypesAttribute.add(TypeLiteralConstant(coreTypes.rawType(
-          concreteClass,
-          (concreteClass == coreTypes.nullClass)
-              ? Nullability.nullable
-              : staticTypeContext.nonNullable)));
-    } else {
-      inferredTypesAttribute.add(NullConstant());
-    }
-    // Inferred constant values are handled in bytecode generator
-    // (_replaceWithConstantValue, _initConstantParameters) and
-    // not propagated to VM.
-    final flags = md.flags & ~InferredType.flagConstant;
-    inferredTypesAttribute.add(IntConstant(flags));
-  }
-
-  void _replaceWithConstantValue(TreeNode node) {
-    final InferredType md = inferredTypeMetadata[node];
-    if (md == null || md.constantValue == null || asm.isUnreachable) {
-      return;
-    }
-    asm.emitDrop1();
-    _genPushConstant(md.constantValue);
-  }
-
-  // Generate additional code for 'operator ==' to handle nulls.
-  void _genEqualsOperatorNullHandling(Member member) {
-    if (member.name.text != '==' ||
-        locals.numParameters != 2 ||
-        member.enclosingClass == coreTypes.objectClass) {
-      return;
-    }
-
-    Label done = new Label();
-
-    _genLoadVar(member.function.positionalParameters[0]);
-    asm.emitJumpIfNotNull(done);
-
-    asm.emitPushFalse();
-    _genReturnTOS();
-
-    asm.bind(done);
-  }
-
-  void end(Member node, bool hasCode) {
-    if (!hasErrors) {
-      Code code;
-      if (hasCode) {
-        if (options.emitLocalVarInfo) {
-          // Leave the scopes which were entered in _genPrologue and
-          // _setupInitialContext.
-          asm.localVariableTable.leaveAllScopes(
-              asm.offset,
-              node.function != null
-                  ? node.function.fileEndOffset
-                  : node.fileEndOffset);
-        }
-
-        List<int> parameterFlags = null;
-        int forwardingStubTargetCpIndex = null;
-        int defaultFunctionTypeArgsCpIndex = null;
-
-        // We don't need the required flag when loading the code, but do need
-        // all other parameter flags.
-        final parameterFlagMask = ~ParameterDeclaration.isRequiredFlag;
-
-        if (node is Constructor) {
-          parameterFlags =
-              getParameterFlags(node.function, mask: parameterFlagMask);
-        } else if (node is Procedure) {
-          parameterFlags =
-              getParameterFlags(node.function, mask: parameterFlagMask);
-
-          if (node.isForwardingStub) {
-            forwardingStubTargetCpIndex =
-                cp.addObjectRef(node.forwardingStubSuperTarget);
-          }
-
-          final defaultTypes = getDefaultFunctionTypeArguments(node.function);
-          if (defaultTypes != null) {
-            defaultFunctionTypeArgsCpIndex = cp.addTypeArguments(defaultTypes);
-          }
-        }
-        code = new Code(
-            cp,
-            asm.bytecode,
-            asm.exceptionsTable,
-            finalizeSourcePositions(),
-            finalizeLocalVariables(),
-            nullableFields,
-            closures ?? const <ClosureDeclaration>[],
-            parameterFlags,
-            forwardingStubTargetCpIndex,
-            defaultFunctionTypeArgsCpIndex);
-        bytecodeComponent.codes.add(code);
-      }
-      if (node is Field) {
-        fieldDeclarations.add(getFieldDeclaration(node, code));
-      } else {
-        functionDeclarations.add(getFunctionDeclaration(node, code));
-      }
-    }
-
-    staticTypeContext.leaveMember(node);
-    enclosingClass = null;
-    enclosingMember = null;
-    enclosingFunction = null;
-    parentFunction = null;
-    isClosure = null;
-    classTypeParameters = null;
-    functionTypeParameters = null;
-    functionTypeParametersSet = null;
-    instantiatorTypeArguments = null;
-    locals = null;
-    labeledStatements = null;
-    switchCases = null;
-    tryCatches = null;
-    finallyBlocks = null;
-    yieldPoints = null;
-    contextLevels = null;
-    closures = null;
-    initializedFields = null;
-    nullableFields = null;
-    cp = null;
-    asm = null;
-    savedAssemblers = null;
-    hasErrors = false;
-    procedureAttributesMetadata = null;
-    inferredTypesAttribute = null;
-  }
-
-  SourcePositions finalizeSourcePositions() {
-    if (asm.sourcePositions.isEmpty) {
-      return null;
-    }
-    bytecodeComponent.sourcePositions.add(asm.sourcePositions);
-    return asm.sourcePositions;
-  }
-
-  LocalVariableTable finalizeLocalVariables() {
-    final localVariables = asm.localVariableTable;
-    assert(!localVariables.hasActiveScopes);
-    if (localVariables.isEmpty) {
-      return null;
-    }
-    bytecodeComponent.localVariables.add(localVariables);
-    return localVariables;
-  }
-
-  void _genPrologue(Node node, FunctionNode function) {
-    if (locals.hasOptionalParameters) {
-      final int numOptionalPositional = function.positionalParameters.length -
-          function.requiredParameterCount;
-      final int numOptionalNamed = function.namedParameters.length;
-      final int numFixed =
-          locals.numParameters - (numOptionalPositional + numOptionalNamed);
-
-      asm.emitEntryOptional(numFixed, numOptionalPositional, numOptionalNamed);
-
-      if (numOptionalPositional != 0) {
-        assert(numOptionalNamed == 0);
-        for (int i = 0; i < numOptionalPositional; i++) {
-          final param = function
-              .positionalParameters[function.requiredParameterCount + i];
-          asm.emitLoadConstant(numFixed + i, _getDefaultParamConstIndex(param));
-        }
-      } else {
-        assert(numOptionalNamed != 0);
-        for (int i = 0; i < numOptionalNamed; i++) {
-          final param = locals.sortedNamedParameters[i];
-          asm.emitLoadConstant(numFixed + i, cp.addName(param.name));
-          asm.emitLoadConstant(numFixed + i, _getDefaultParamConstIndex(param));
-        }
-      }
-
-      asm.emitFrame(locals.frameSize - locals.numParameters);
-    } else {
-      asm.emitEntry(locals.frameSize);
-    }
-
-    if (isClosure) {
-      asm.emitPush(locals.closureVarIndexInFrame);
-      asm.emitLoadFieldTOS(cp.addInstanceField(closureContext));
-      asm.emitPopLocal(locals.contextVarIndexInFrame);
-    }
-
-    if (locals.hasFunctionTypeArgsVar && function.typeParameters.isNotEmpty) {
-      assert(!(node is Procedure && node.isFactory));
-
-      Label done = new Label();
-
-      if (isClosure) {
-        _handleDelayedTypeArguments(done);
-      }
-
-      asm.emitCheckFunctionTypeArgs(function.typeParameters.length,
-          locals.functionTypeArgsVarIndexInFrame);
-
-      _handleDefaultTypeArguments(function, done);
-
-      asm.bind(done);
-    }
-
-    // Open initial scope before the first CheckStack, as VM might
-    // need to know context level.
-    if (options.emitLocalVarInfo && function != null) {
-      asm.localVariableTable.enterScope(
-          asm.offset,
-          isClosure ? locals.contextLevelAtEntry : locals.currentContextLevel,
-          function.fileOffset);
-      if (locals.hasContextVar) {
-        asm.localVariableTable
-            .recordContextVariable(asm.offset, locals.contextVarIndexInFrame);
-      }
-      if (locals.hasReceiver &&
-          (!isClosure || locals.isCaptured(locals.receiverVar))) {
-        _declareLocalVariable(locals.receiverVar, function.fileOffset);
-      }
-      for (var v in function.positionalParameters) {
-        if (!locals.isCaptured(v)) {
-          _declareLocalVariable(v, function.fileOffset);
-        }
-      }
-      for (var v in locals.sortedNamedParameters) {
-        if (!locals.isCaptured(v)) {
-          _declareLocalVariable(v, function.fileOffset);
-        }
-      }
-      if (locals.hasFunctionTypeArgsVar) {
-        _declareLocalVariable(locals.functionTypeArgsVar, function.fileOffset);
-      }
-    }
-
-    // CheckStack must see a properly initialized context when stress-testing
-    // stack trace collection.
-    asm.emitCheckStack(0);
-
-    if (locals.hasFunctionTypeArgsVar && isClosure) {
-      if (function.typeParameters.isNotEmpty) {
-        final int numParentTypeArgs = locals.numParentTypeArguments;
-        asm.emitPush(locals.functionTypeArgsVarIndexInFrame);
-        asm.emitPush(locals.closureVarIndexInFrame);
-        asm.emitLoadFieldTOS(cp.addInstanceField(closureFunctionTypeArguments));
-        _genPushInt(numParentTypeArgs);
-        _genPushInt(numParentTypeArgs + function.typeParameters.length);
-        _genDirectCall(
-            prependTypeArguments, objectTable.getArgDescHandle(4), 4);
-        asm.emitPopLocal(locals.functionTypeArgsVarIndexInFrame);
-      } else {
-        asm.emitPush(locals.closureVarIndexInFrame);
-        asm.emitLoadFieldTOS(cp.addInstanceField(closureFunctionTypeArguments));
-        asm.emitPopLocal(locals.functionTypeArgsVarIndexInFrame);
-      }
-    }
-
-    if (inferredTypeMetadata != null && function != null) {
-      _initConstantParameters(function);
-    }
-  }
-
-  void _handleDelayedTypeArguments(Label doneCheckingTypeArguments) {
-    Label noDelayedTypeArgs = new Label();
-
-    asm.emitPush(locals.closureVarIndexInFrame);
-    asm.emitLoadFieldTOS(cp.addInstanceField(closureDelayedTypeArguments));
-    asm.emitStoreLocal(locals.functionTypeArgsVarIndexInFrame);
-    asm.emitPushConstant(cp.addEmptyTypeArguments());
-    asm.emitJumpIfEqStrict(noDelayedTypeArgs);
-
-    // There are non-empty delayed type arguments, and they are stored
-    // into function type args variable already.
-    // Just verify that there are no passed type arguments.
-    asm.emitCheckFunctionTypeArgs(0, locals.scratchVarIndexInFrame);
-    asm.emitJump(doneCheckingTypeArguments);
-
-    asm.bind(noDelayedTypeArgs);
-  }
-
-  void _handleDefaultTypeArguments(
-      FunctionNode function, Label doneCheckingTypeArguments) {
-    List<DartType> defaultTypes = getDefaultFunctionTypeArguments(function);
-    if (defaultTypes == null) {
-      return;
-    }
-
-    asm.emitJumpIfNotZeroTypeArgs(doneCheckingTypeArguments);
-
-    // Load parent function type arguments if they are used to
-    // instantiate default types.
-    if (isClosure &&
-        defaultTypes
-            .any((t) => containsTypeVariable(t, functionTypeParametersSet))) {
-      asm.emitPush(locals.closureVarIndexInFrame);
-      asm.emitLoadFieldTOS(cp.addInstanceField(closureFunctionTypeArguments));
-      asm.emitPopLocal(locals.functionTypeArgsVarIndexInFrame);
-    }
-
-    _genTypeArguments(defaultTypes);
-    asm.emitPopLocal(locals.functionTypeArgsVarIndexInFrame);
-  }
-
-  void _initConstantParameters(FunctionNode function) {
-    function.positionalParameters.forEach(_initParameterIfConstant);
-    locals.sortedNamedParameters.forEach(_initParameterIfConstant);
-  }
-
-  void _initParameterIfConstant(VariableDeclaration variable) {
-    final md = inferredTypeMetadata[variable];
-    if (md != null && md.constantValue != null) {
-      _genPushConstant(md.constantValue);
-      asm.emitPopLocal(locals.isCaptured(variable)
-          ? locals.getOriginalParamSlotIndex(variable)
-          : locals.getVarIndexInFrame(variable));
-    }
-  }
-
-  void _setupInitialContext(FunctionNode function) {
-    _allocateContextIfNeeded();
-
-    if (options.emitLocalVarInfo && locals.currentContextSize > 0) {
-      // Open a new scope after allocating context.
-      asm.localVariableTable.enterScope(asm.offset, locals.currentContextLevel,
-          function != null ? function.fileOffset : enclosingMember.fileOffset);
-    }
-
-    if (locals.hasCapturedParameters) {
-      // Copy captured parameters to their respective locations in the context.
-      if (!isClosure) {
-        if (locals.hasFactoryTypeArgsVar) {
-          _copyParamIfCaptured(locals.factoryTypeArgsVar);
-        }
-        if (locals.hasCapturedReceiverVar) {
-          _genPushContextForVariable(locals.capturedReceiverVar);
-          asm.emitPush(locals.getVarIndexInFrame(locals.receiverVar));
-          _genStoreVar(locals.capturedReceiverVar);
-        }
-      }
-      if (function != null) {
-        function.positionalParameters.forEach(_copyParamIfCaptured);
-        locals.sortedNamedParameters.forEach(_copyParamIfCaptured);
-      }
-    }
-  }
-
-  void _emitFirstDebugCheck(FunctionNode function) {
-    if (options.emitDebuggerStops) {
-      // DebugCheck instruction should be emitted after parameter variables
-      // are declared and copied into context.
-      // The debugger expects the source position to correspond to the
-      // declaration position of the last parameter, if any, or of the function.
-      // The DebugCheck must be encountered each time an async op is reentered.
-      if (options.emitSourcePositions && function != null) {
-        var pos = TreeNode.noOffset;
-        if (function.namedParameters.isNotEmpty) {
-          pos = function.namedParameters.last.fileOffset;
-        } else if (function.positionalParameters.isNotEmpty) {
-          pos = function.positionalParameters.last.fileOffset;
-        }
-        if (pos == TreeNode.noOffset) {
-          pos = function.fileOffset;
-        }
-        _recordSourcePosition(pos);
-      }
-      asm.emitDebugCheck();
-    }
-  }
-
-  void _copyParamIfCaptured(VariableDeclaration variable) {
-    if (locals.isCaptured(variable)) {
-      if (options.emitLocalVarInfo) {
-        _declareLocalVariable(variable, enclosingFunction.fileOffset);
-      }
-      _genPushContextForVariable(variable);
-      asm.emitPush(locals.getOriginalParamSlotIndex(variable));
-      _genStoreVar(variable);
-      // TODO(alexmarkov): We need to store null at the original parameter
-      // location, because the original value may need to be GC'ed.
-    }
-  }
-
-  void _declareLocalVariable(
-      VariableDeclaration variable, int initializedPosition) {
-    assert(variable.name != null);
-    bool isCaptured = locals.isCaptured(variable);
-    asm.localVariableTable.declareVariable(
-        asm.offset,
-        isCaptured,
-        isCaptured
-            ? locals.getVarIndexInContext(variable)
-            : locals.getVarIndexInFrame(variable),
-        cp.addName(variable.name),
-        cp.addType(variable.type),
-        variable.fileOffset,
-        initializedPosition);
-  }
-
-  // TODO(dartbug.com/40813): Remove the closure case when we move the
-  // type checks out of closure bodies.
-  bool get canSkipTypeChecksForNonCovariantArguments => !isClosure;
-
-  bool get skipTypeChecksForGenericCovariantImplArguments =>
-      procedureAttributesMetadata != null &&
-      !procedureAttributesMetadata.hasNonThisUses &&
-      // TODO(alexmarkov): fix building of flow graph for implicit closures so
-      // it would include missing checks and remove this condition.
-      !procedureAttributesMetadata.hasTearOffUses;
-
-  Member _getForwardingStubSuperTarget() {
-    if (!isClosure) {
-      final member = enclosingMember;
-      if (member.isInstanceMember &&
-          member is Procedure &&
-          member.isForwardingStub) {
-        return member.forwardingStubSuperTarget;
-      }
-    }
-    return null;
-  }
-
-  // Types in a target of a forwarding stub are encoded in terms of target type
-  // parameters. Substitute them with host type parameters to be able
-  // to use them (e.g. instantiate) in the context of host.
-  Substitution _getForwardingSubstitution(
-      FunctionNode host, Member forwardingTarget) {
-    if (forwardingTarget == null) {
-      return null;
-    }
-    final Class targetClass = forwardingTarget.enclosingClass;
-    final Supertype instantiatedTargetClass =
-        hierarchy.getClassAsInstanceOf(enclosingClass, targetClass);
-    if (instantiatedTargetClass == null) {
-      throw 'Class $targetClass is not found among implemented interfaces of'
-          ' $enclosingClass (for forwarding stub $enclosingMember)';
-    }
-    assert(instantiatedTargetClass.classNode == targetClass);
-    assert(instantiatedTargetClass.typeArguments.length ==
-        targetClass.typeParameters.length);
-    final Map<TypeParameter, DartType> map =
-        new Map<TypeParameter, DartType>.fromIterables(
-            targetClass.typeParameters, instantiatedTargetClass.typeArguments);
-    if (forwardingTarget.function != null) {
-      final targetTypeParameters = forwardingTarget.function.typeParameters;
-      assert(host.typeParameters.length == targetTypeParameters.length);
-      for (int i = 0; i < targetTypeParameters.length; ++i) {
-        map[targetTypeParameters[i]] =
-            new TypeParameterType(host.typeParameters[i], Nullability.legacy);
-      }
-    }
-    return Substitution.fromMap(map);
-  }
-
-  /// If member being compiled is a forwarding stub, then returns type
-  /// parameter bounds to check for the forwarding stub target.
-  Map<TypeParameter, DartType> _getForwardingBounds(FunctionNode function,
-      Member forwardingTarget, Substitution forwardingSubstitution) {
-    if (function.typeParameters.isEmpty || forwardingTarget == null) {
-      return null;
-    }
-    final forwardingBounds = <TypeParameter, DartType>{};
-    for (int i = 0; i < function.typeParameters.length; ++i) {
-      DartType bound = forwardingSubstitution
-          .substituteType(forwardingTarget.function.typeParameters[i].bound);
-      forwardingBounds[function.typeParameters[i]] = bound;
-    }
-    return forwardingBounds;
-  }
-
-  /// If member being compiled is a forwarding stub, then returns parameter
-  /// types to check for the forwarding stub target.
-  Map<VariableDeclaration, DartType> _getForwardingParameterTypes(
-      FunctionNode function,
-      Member forwardingTarget,
-      Substitution forwardingSubstitution) {
-    if (forwardingTarget == null) {
-      return null;
-    }
-
-    if (forwardingTarget is Field) {
-      if ((enclosingMember as Procedure).isGetter) {
-        return const <VariableDeclaration, DartType>{};
-      } else {
-        // Forwarding stub for a covariant field setter.
-        assert((enclosingMember as Procedure).isSetter);
-        assert(function.typeParameters.isEmpty &&
-            function.positionalParameters.length == 1 &&
-            function.namedParameters.length == 0);
-        return <VariableDeclaration, DartType>{
-          function.positionalParameters.single:
-              forwardingSubstitution.substituteType(forwardingTarget.type)
-        };
-      }
-    }
-
-    final forwardingParams = <VariableDeclaration, DartType>{};
-    for (int i = 0; i < function.positionalParameters.length; ++i) {
-      DartType type = forwardingSubstitution.substituteType(
-          forwardingTarget.function.positionalParameters[i].type);
-      forwardingParams[function.positionalParameters[i]] = type;
-    }
-    for (var hostParam in function.namedParameters) {
-      VariableDeclaration targetParam = forwardingTarget
-          .function.namedParameters
-          .firstWhere((p) => p.name == hostParam.name);
-      forwardingParams[hostParam] =
-          forwardingSubstitution.substituteType(targetParam.type);
-    }
-    return forwardingParams;
-  }
-
-  void _checkArguments(FunctionNode function) {
-    // When checking arguments of a forwarding stub, we need to use parameter
-    // types (and bounds of type parameters) from stub's target.
-    // These more accurate type checks is the sole purpose of a forwarding stub.
-    final forwardingTarget = _getForwardingStubSuperTarget();
-    final forwardingSubstitution =
-        _getForwardingSubstitution(function, forwardingTarget);
-    final forwardingBounds = _getForwardingBounds(
-        function, forwardingTarget, forwardingSubstitution);
-    final forwardingParamTypes = _getForwardingParameterTypes(
-        function, forwardingTarget, forwardingSubstitution);
-
-    if (_hasSkippableTypeChecks(
-        function, forwardingBounds, forwardingParamTypes)) {
-      final Label skipChecks = new Label();
-      asm.emitJumpIfUnchecked(skipChecks);
-
-      // We can skip bounds checks of type parameter and type checks of
-      // non-covariant parameters if function is called via unchecked call.
-
-      for (var typeParam in function.typeParameters) {
-        if (_typeParameterNeedsBoundCheck(typeParam, forwardingBounds)) {
-          _genTypeParameterBoundCheck(typeParam, forwardingBounds);
-        }
-      }
-      for (var param in function.positionalParameters) {
-        if (!param.isCovariant &&
-            _parameterNeedsTypeCheck(param, forwardingParamTypes)) {
-          _genArgumentTypeCheck(param, forwardingParamTypes);
-        }
-      }
-      for (var param in locals.sortedNamedParameters) {
-        if (!param.isCovariant &&
-            _parameterNeedsTypeCheck(param, forwardingParamTypes)) {
-          _genArgumentTypeCheck(param, forwardingParamTypes);
-        }
-      }
-
-      asm.bind(skipChecks);
-    }
-
-    // Covariant parameters need to be checked even if function is called
-    // via unchecked call, so they are generated outside of JumpIfUnchecked.
-
-    for (var param in function.positionalParameters) {
-      if (param.isCovariant &&
-          _parameterNeedsTypeCheck(param, forwardingParamTypes)) {
-        _genArgumentTypeCheck(param, forwardingParamTypes);
-      }
-    }
-    for (var param in locals.sortedNamedParameters) {
-      if (param.isCovariant &&
-          _parameterNeedsTypeCheck(param, forwardingParamTypes)) {
-        _genArgumentTypeCheck(param, forwardingParamTypes);
-      }
-    }
-  }
-
-  /// Returns true if bound of [typeParam] should be checked.
-  bool _typeParameterNeedsBoundCheck(TypeParameter typeParam,
-      Map<TypeParameter, DartType> forwardingTypeParameterBounds) {
-    if (canSkipTypeChecksForNonCovariantArguments &&
-        (!typeParam.isGenericCovariantImpl ||
-            skipTypeChecksForGenericCovariantImplArguments)) {
-      return false;
-    }
-    final DartType bound = (forwardingTypeParameterBounds != null)
-        ? forwardingTypeParameterBounds[typeParam]
-        : typeParam.bound;
-    if (typeEnvironment.isTop(bound)) {
-      return false;
-    }
-    return true;
-  }
-
-  /// Returns true if type of [param] should be checked.
-  bool _parameterNeedsTypeCheck(VariableDeclaration param,
-      Map<VariableDeclaration, DartType> forwardingParameterTypes) {
-    if (canSkipTypeChecksForNonCovariantArguments &&
-        !param.isCovariant &&
-        (!param.isGenericCovariantImpl ||
-            skipTypeChecksForGenericCovariantImplArguments)) {
-      return false;
-    }
-    final DartType type = (forwardingParameterTypes != null)
-        ? forwardingParameterTypes[param]
-        : param.type;
-    if (typeEnvironment.isTop(type)) {
-      return false;
-    }
-    return true;
-  }
-
-  /// Returns true if there are parameter type/bound checks which can
-  /// be skipped on unchecked call.
-  bool _hasSkippableTypeChecks(
-      FunctionNode function,
-      Map<TypeParameter, DartType> forwardingBounds,
-      Map<VariableDeclaration, DartType> forwardingParamTypes) {
-    for (var typeParam in function.typeParameters) {
-      if (_typeParameterNeedsBoundCheck(typeParam, forwardingBounds)) {
-        return true;
-      }
-    }
-    for (var param in function.positionalParameters) {
-      if (!param.isCovariant &&
-          _parameterNeedsTypeCheck(param, forwardingParamTypes)) {
-        return true;
-      }
-    }
-    for (var param in locals.sortedNamedParameters) {
-      if (!param.isCovariant &&
-          _parameterNeedsTypeCheck(param, forwardingParamTypes)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  void _genTypeParameterBoundCheck(TypeParameter typeParam,
-      Map<TypeParameter, DartType> forwardingTypeParameterBounds) {
-    final DartType bound = (forwardingTypeParameterBounds != null)
-        ? forwardingTypeParameterBounds[typeParam]
-        : typeParam.bound;
-    final DartType type = new TypeParameterType(typeParam, Nullability.legacy);
-    _genPushInstantiatorAndFunctionTypeArguments([type, bound]);
-    asm.emitPushConstant(cp.addType(type));
-    asm.emitPushConstant(cp.addType(bound));
-    asm.emitPushConstant(cp.addName(typeParam.name));
-    asm.emitAssertSubtype();
-  }
-
-  void _genArgumentTypeCheck(VariableDeclaration variable,
-      Map<VariableDeclaration, DartType> forwardingParameterTypes) {
-    final DartType type = (forwardingParameterTypes != null)
-        ? forwardingParameterTypes[variable]
-        : variable.type;
-    if (locals.isCaptured(variable)) {
-      asm.emitPush(locals.getOriginalParamSlotIndex(variable));
-    } else {
-      asm.emitPush(locals.getVarIndexInFrame(variable));
-    }
-    _genAssertAssignable(type, name: variable.name);
-    asm.emitDrop1();
-  }
-
-  void _genAssertAssignable(DartType type, {String name, String message}) {
-    assert(!typeEnvironment.isTop(type));
-    asm.emitPushConstant(cp.addType(type));
-    _genPushInstantiatorAndFunctionTypeArguments([type]);
-    asm.emitPushConstant(
-        name != null ? cp.addName(name) : cp.addString(message));
-    bool isIntOk = typeEnvironment.isSubtypeOf(
-        typeEnvironment.coreTypes.intLegacyRawType,
-        type,
-        SubtypeCheckMode.ignoringNullabilities);
-    int subtypeTestCacheCpIndex = cp.addSubtypeTestCache();
-    asm.emitAssertAssignable(isIntOk ? 1 : 0, subtypeTestCacheCpIndex);
-  }
-
-  void _pushAssemblerState() {
-    savedAssemblers ??= <BytecodeAssembler>[];
-    savedAssemblers.add(asm);
-    asm = new BytecodeAssembler(options);
-  }
-
-  void _popAssemblerState() {
-    asm = savedAssemblers.removeLast();
-  }
-
-  int _genClosureBytecode(
-      LocalFunction node, String name, FunctionNode function) {
-    _pushAssemblerState();
-
-    locals.enterScope(node);
-
-    final savedParentFunction = parentFunction;
-    parentFunction = enclosingFunction;
-    final savedIsClosure = isClosure;
-    isClosure = true;
-    enclosingFunction = function;
-    final savedLoopDepth = currentLoopDepth;
-    currentLoopDepth = 0;
-    final savedInferredTypesAttribute = inferredTypesAttribute;
-    inferredTypesAttribute = null;
-
-    if (function.typeParameters.isNotEmpty) {
-      functionTypeParameters ??= new List<TypeParameter>();
-      functionTypeParameters.addAll(function.typeParameters);
-      functionTypeParametersSet = functionTypeParameters.toSet();
-    }
-
-    List<Label> savedYieldPoints = yieldPoints;
-    yieldPoints = locals.isSyncYieldingFrame ? <Label>[] : null;
-
-    closures ??= <ClosureDeclaration>[];
-    final int closureIndex = closures.length;
-    final closure = getClosureDeclaration(node, function, name, closureIndex,
-        savedIsClosure ? parentFunction : enclosingMember);
-    closures.add(closure);
-
-    final int closureFunctionIndex = cp.addClosureFunction(closureIndex);
-
-    _recordSourcePosition(function.fileOffset);
-    _genPrologue(node, function);
-
-    if (options.causalAsyncStacks &&
-        parentFunction != null &&
-        (parentFunction.dartAsyncMarker == AsyncMarker.Async ||
-            parentFunction.dartAsyncMarker == AsyncMarker.AsyncStar)) {
-      final savedSourcePosition = asm.currentSourcePosition;
-      _recordSourcePosition(TreeNode.noOffset);
-      _genLoadVar(locals.asyncStackTraceVar,
-          currentContextLevel: locals.contextLevelAtEntry);
-      _genDirectCall(
-          setAsyncThreadStackTrace, objectTable.getArgDescHandle(1), 1);
-      asm.emitDrop1();
-      asm.currentSourcePosition = savedSourcePosition;
-    }
-
-    Label continuationSwitchLabel;
-    int continuationSwitchVar;
-    if (locals.isSyncYieldingFrame) {
-      continuationSwitchLabel = new Label();
-      continuationSwitchVar = locals.scratchVarIndexInFrame;
-      _genSyncYieldingPrologue(
-          function, continuationSwitchLabel, continuationSwitchVar);
-    } else {
-      _setupInitialContext(function);
-      _emitFirstDebugCheck(function);
-    }
-    _checkArguments(function);
-
-    _generateNode(function.body);
-
-    // BytecodeAssembler eliminates this bytecode if it is unreachable.
-    _recordSourcePosition(function.fileEndOffset);
-    asm.emitPushNull();
-    _genReturnTOS();
-
-    if (locals.isSyncYieldingFrame) {
-      _genSyncYieldingEpilogue(
-          function, continuationSwitchLabel, continuationSwitchVar);
-    }
-
-    if (options.emitLocalVarInfo) {
-      // Leave the scopes which were entered in _genPrologue and
-      // _setupInitialContext.
-      asm.localVariableTable.leaveAllScopes(asm.offset, function.fileEndOffset);
-    }
-
-    cp.addEndClosureFunctionScope();
-
-    if (function.typeParameters.isNotEmpty) {
-      functionTypeParameters.length -= function.typeParameters.length;
-      functionTypeParametersSet = functionTypeParameters.toSet();
-    }
-
-    enclosingFunction = parentFunction;
-    parentFunction = savedParentFunction;
-    isClosure = savedIsClosure;
-    currentLoopDepth = savedLoopDepth;
-
-    final attributes = getClosureAttributes();
-    if (attributes != null) {
-      closure.attributes = attributes;
-      closure.flags |= ClosureDeclaration.hasAttributesFlag;
-    }
-    inferredTypesAttribute = savedInferredTypesAttribute;
-
-    locals.leaveScope();
-
-    closure.code = new ClosureCode(asm.bytecode, asm.exceptionsTable,
-        finalizeSourcePositions(), finalizeLocalVariables());
-
-    _popAssemblerState();
-    yieldPoints = savedYieldPoints;
-
-    return closureFunctionIndex;
-  }
-
-  ClosureDeclaration getClosureDeclaration(LocalFunction node,
-      FunctionNode function, String name, int closureIndex, TreeNode parent) {
-    objectTable.declareClosure(function, enclosingMember, closureIndex);
-
-    int flags = 0;
-    int position = TreeNode.noOffset;
-    int endPosition = TreeNode.noOffset;
-    if (options.emitSourcePositions) {
-      position = (node is ast.FunctionDeclaration)
-          ? node.fileOffset
-          : function.fileOffset;
-      endPosition = function.fileEndOffset;
-      if (position != TreeNode.noOffset) {
-        flags |= ClosureDeclaration.hasSourcePositionsFlag;
-      }
-    }
-
-    switch (function.dartAsyncMarker) {
-      case AsyncMarker.Async:
-        flags |= ClosureDeclaration.isAsyncFlag;
-        break;
-      case AsyncMarker.AsyncStar:
-        flags |= ClosureDeclaration.isAsyncStarFlag;
-        break;
-      case AsyncMarker.SyncStar:
-        flags |= ClosureDeclaration.isSyncStarFlag;
-        break;
-      default:
-        flags |= ClosureDeclaration.isDebuggableFlag;
-        break;
-    }
-
-    final List<NameAndType> parameters = <NameAndType>[];
-    for (var v in function.positionalParameters) {
-      parameters.add(new NameAndType(objectTable.getPublicNameHandle(v.name),
-          objectTable.getHandle(v.type)));
-    }
-    for (var v in function.namedParameters) {
-      parameters.add(new NameAndType(objectTable.getPublicNameHandle(v.name),
-          objectTable.getHandle(v.type)));
-    }
-    if (function.requiredParameterCount != parameters.length) {
-      if (function.namedParameters.isNotEmpty) {
-        flags |= ClosureDeclaration.hasOptionalNamedParamsFlag;
-      } else {
-        flags |= ClosureDeclaration.hasOptionalPositionalParamsFlag;
-      }
-    }
-
-    final typeParams =
-        objectTable.getTypeParameterHandles(function.typeParameters);
-    if (typeParams.isNotEmpty) {
-      flags |= ClosureDeclaration.hasTypeParamsFlag;
-    }
-
-    // We only need the required flags when loading the closure declaration.
-    final parameterFlags =
-        getParameterFlags(function, mask: ParameterDeclaration.isRequiredFlag);
-    if (parameterFlags != null) {
-      flags |= ClosureDeclaration.hasParameterFlagsFlag;
-    }
-
-    return new ClosureDeclaration(
-        flags,
-        objectTable.getHandle(parent),
-        objectTable.getPublicNameHandle(name),
-        position,
-        endPosition,
-        typeParams,
-        function.requiredParameterCount,
-        function.namedParameters.length,
-        parameters,
-        parameterFlags,
-        objectTable.getHandle(function.returnType));
-  }
-
-  void _genSyncYieldingPrologue(FunctionNode function, Label continuationLabel,
-      int switchVarIndexInFrame) {
-    Label debugCheckLabel = new Label();
-
-    // switch_var = :await_jump_var
-    _genLoadVar(locals.awaitJumpVar);
-    asm.emitStoreLocal(switchVarIndexInFrame);
-
-    _genPushInt(0);
-
-    if (options.emitDebuggerStops) {
-      // if (switch_var != 0) goto debugCheckLabel
-      asm.emitJumpIfNeStrict(debugCheckLabel);
-
-      _setupInitialContext(function);
-
-      asm.bind(debugCheckLabel);
-      // The debugger may set a breakpoint on this DebugCheck opcode and it
-      // expects to hit it on the first entry to the async op, as well as on
-      // each subsequent reentry.
-      _emitFirstDebugCheck(function);
-
-      _genLoadVar(locals.awaitJumpVar);
-
-      // if (switch_var != 0) goto continuationLabel
-      _genPushInt(0);
-      asm.emitJumpIfNeStrict(continuationLabel);
-    } else {
-      // if (switch_var != 0) goto continuationLabel
-      asm.emitJumpIfNeStrict(continuationLabel);
-
-      _setupInitialContext(function);
-    }
-
-    // Proceed to normal entry.
-  }
-
-  void _genSyncYieldingEpilogue(FunctionNode function, Label continuationLabel,
-      int switchVarIndexInFrame) {
-    asm.bind(continuationLabel);
-
-    if (yieldPoints.isEmpty) {
-      asm.emitTrap();
-      return;
-    }
-
-    // context = :await_ctx_var
-    _genLoadVar(locals.awaitContextVar);
-    asm.emitPopLocal(locals.contextVarIndexInFrame);
-
-    for (int i = 0; i < yieldPoints.length; i++) {
-      // 0 is reserved for normal entry, yield points are counted from 1.
-      final int index = i + 1;
-
-      // if (switch_var == #index) goto yieldPoints[i]
-      // There is no need to test switch_var for the last yield statement.
-      if (i != yieldPoints.length - 1) {
-        asm.emitPush(switchVarIndexInFrame);
-        _genPushInt(index);
-        asm.emitJumpIfEqStrict(yieldPoints[i]);
-      } else {
-        asm.emitJump(yieldPoints[i]);
-      }
-    }
-  }
-
-  void _genAllocateClosureInstance(
-      TreeNode node, int closureFunctionIndex, FunctionNode function) {
-    asm.emitAllocateClosure(closureFunctionIndex);
-
-    final int temp = locals.tempIndexInFrame(node);
-    asm.emitStoreLocal(temp);
-
-    // TODO(alexmarkov): We need to fill _instantiator_type_arguments field
-    // only if function signature uses instantiator type arguments.
-    asm.emitPush(temp);
-    _genPushInstantiatorTypeArguments();
-    asm.emitStoreFieldTOS(
-        cp.addInstanceField(closureInstantiatorTypeArguments));
-
-    asm.emitPush(temp);
-    _genPushFunctionTypeArguments();
-    asm.emitStoreFieldTOS(cp.addInstanceField(closureFunctionTypeArguments));
-
-    // Delayed type arguments are only used by generic closures.
-    if (function.typeParameters.isNotEmpty) {
-      asm.emitPush(temp);
-      asm.emitPushConstant(cp.addEmptyTypeArguments());
-      asm.emitStoreFieldTOS(cp.addInstanceField(closureDelayedTypeArguments));
-    }
-
-    asm.emitPush(temp);
-    asm.emitPushConstant(closureFunctionIndex);
-    asm.emitStoreFieldTOS(cp.addInstanceField(closureFunction));
-
-    asm.emitPush(temp);
-    asm.emitPush(locals.contextVarIndexInFrame);
-    asm.emitStoreFieldTOS(cp.addInstanceField(closureContext));
-  }
-
-  void _genClosure(LocalFunction node, String name, FunctionNode function) {
-    final int closureFunctionIndex = _genClosureBytecode(node, name, function);
-    _genAllocateClosureInstance(node, closureFunctionIndex, function);
-  }
-
-  void _allocateContextIfNeeded() {
-    final int contextSize = locals.currentContextSize;
-    if (contextSize > 0) {
-      asm.emitAllocateContext(locals.currentContextId, contextSize);
-
-      if (locals.currentContextLevel > 0) {
-        _genDupTOS(locals.scratchVarIndexInFrame);
-        asm.emitPush(locals.contextVarIndexInFrame);
-        asm.emitStoreContextParent();
-      }
-
-      asm.emitPopLocal(locals.contextVarIndexInFrame);
-    }
-  }
-
-  void _enterScope(TreeNode node) {
-    locals.enterScope(node);
-    _allocateContextIfNeeded();
-    if (options.emitLocalVarInfo) {
-      asm.localVariableTable
-          .enterScope(asm.offset, locals.currentContextLevel, node.fileOffset);
-      _startRecordingMaxPosition(node.fileOffset);
-    }
-  }
-
-  void _leaveScope() {
-    if (options.emitLocalVarInfo) {
-      asm.localVariableTable.leaveScope(asm.offset, _endRecordingMaxPosition());
-    }
-    if (locals.currentContextSize > 0) {
-      _genUnwindContext(locals.currentContextLevel - 1);
-    }
-    locals.leaveScope();
-  }
-
-  void _startRecordingMaxPosition(int fileOffset) {
-    savedMaxSourcePositions.add(maxSourcePosition);
-    maxSourcePosition = fileOffset;
-  }
-
-  int _endRecordingMaxPosition() {
-    int localMax = maxSourcePosition;
-    maxSourcePosition =
-        math.max(localMax, savedMaxSourcePositions.removeLast());
-    return localMax;
-  }
-
-  void _genUnwindContext(int targetContextLevel) {
-    int currentContextLevel = locals.currentContextLevel;
-    assert(currentContextLevel >= targetContextLevel);
-    while (currentContextLevel > targetContextLevel) {
-      asm.emitPush(locals.contextVarIndexInFrame);
-      asm.emitLoadContextParent();
-      asm.emitPopLocal(locals.contextVarIndexInFrame);
-      --currentContextLevel;
-    }
-  }
-
-  /// Returns the list of try-finally blocks between [from] and [to],
-  /// ordered from inner to outer. If [to] is null, returns all enclosing
-  /// try-finally blocks up to the function boundary.
-  List<TryFinally> _getEnclosingTryFinallyBlocks(TreeNode from, TreeNode to) {
-    List<TryFinally> blocks = <TryFinally>[];
-    TreeNode node = from;
-    for (;;) {
-      if (node == to) {
-        return blocks;
-      }
-      if (node == null || node is FunctionNode || node is Member) {
-        if (to == null) {
-          return blocks;
-        } else {
-          throw 'Unable to find node $to up from $from';
-        }
-      }
-      // Inspect parent as we only need try-finally blocks enclosing [node]
-      // in the body, and not in the finally-block.
-      final parent = node.parent;
-      if (parent is TryFinally && parent.body == node) {
-        blocks.add(parent);
-      }
-      node = parent;
-    }
-  }
-
-  /// Appends chained [FinallyBlock]s to each try-finally in the given
-  /// list [tryFinallyBlocks] (ordered from inner to outer).
-  /// [continuation] is invoked to generate control transfer code following
-  /// the last finally block.
-  void _addFinallyBlocks(
-      List<TryFinally> tryFinallyBlocks, GenerateContinuation continuation) {
-    // Add finally blocks to all try-finally from outer to inner.
-    // The outermost finally block should generate continuation, each inner
-    // finally block should proceed to a corresponding outer block.
-    for (var tryFinally in tryFinallyBlocks.reversed) {
-      final finallyBlock = new FinallyBlock(continuation);
-      finallyBlocks[tryFinally].add(finallyBlock);
-
-      final Label nextFinally = finallyBlock.entry;
-      continuation = () {
-        asm.emitJump(nextFinally);
-      };
-    }
-
-    // Generate jump to the innermost finally (or to the original
-    // continuation if there are no try-finally blocks).
-    continuation();
-  }
-
-  /// Generates non-local transfer from inner node [from] into the outer
-  /// node, executing finally blocks on the way out. [to] can be null,
-  /// in such case all enclosing finally blocks are executed.
-  /// [continuation] is invoked to generate control transfer code following
-  /// the last finally block.
-  void _generateNonLocalControlTransfer(
-      TreeNode from, TreeNode to, GenerateContinuation continuation) {
-    if (options.emitDebuggerStops && from.fileOffset != TreeNode.noOffset) {
-      asm.emitDebugCheck(); // Before context is unwound.
-    }
-    List<TryFinally> tryFinallyBlocks = _getEnclosingTryFinallyBlocks(from, to);
-    _addFinallyBlocks(tryFinallyBlocks, continuation);
-  }
-
-  // For certain expressions wrapped into ExpressionStatement we can
-  // omit pushing result on the stack.
-  bool isExpressionWithoutResult(Expression expr) =>
-      expr.parent is ExpressionStatement &&
-      (expr is VariableSet ||
-          expr is PropertySet ||
-          expr is StaticSet ||
-          expr is SuperPropertySet);
-
-  void _createArgumentsArray(int temp, List<DartType> typeArgs,
-      List<Expression> args, bool storeLastArgumentToTemp) {
-    final int totalCount = (typeArgs.isNotEmpty ? 1 : 0) + args.length;
-
-    _genTypeArguments([const DynamicType()]);
-    _genPushInt(totalCount);
-    asm.emitCreateArrayTOS();
-
-    asm.emitStoreLocal(temp);
-
-    int index = 0;
-    if (typeArgs.isNotEmpty) {
-      asm.emitPush(temp);
-      _genPushInt(index++);
-      _genTypeArguments(typeArgs);
-      asm.emitStoreIndexedTOS();
-    }
-
-    for (Expression arg in args) {
-      asm.emitPush(temp);
-      _genPushInt(index++);
-      _generateNode(arg);
-      if (storeLastArgumentToTemp && index == totalCount) {
-        // Arguments array in 'temp' is replaced with the last argument
-        // in order to return result of RHS value in case of setter.
-        asm.emitStoreLocal(temp);
-      }
-      asm.emitStoreIndexedTOS();
-    }
-  }
-
-  void _genNoSuchMethodForSuperCall(String name, int temp, int argDescCpIndex,
-      List<DartType> typeArgs, List<Expression> args,
-      {bool storeLastArgumentToTemp: false}) {
-    // Receiver for noSuchMethod() call.
-    _genPushReceiver();
-
-    // Argument 0 for _allocateInvocationMirror(): function name.
-    asm.emitPushConstant(cp.addName(name));
-
-    // Argument 1 for _allocateInvocationMirror(): arguments descriptor.
-    asm.emitPushConstant(argDescCpIndex);
-
-    // Argument 2 for _allocateInvocationMirror(): list of arguments.
-    _createArgumentsArray(temp, typeArgs, args, storeLastArgumentToTemp);
-
-    // Argument 3 for _allocateInvocationMirror(): isSuperInvocation flag.
-    asm.emitPushTrue();
-
-    _genDirectCall(
-        allocateInvocationMirror, objectTable.getArgDescHandle(4), 4);
-
-    final Member target = hierarchy.getDispatchTarget(
-        enclosingClass.superclass, noSuchMethodName);
-    assert(target != null);
-    _genDirectCall(target, objectTable.getArgDescHandle(2), 2);
-  }
-
-  @override
-  defaultTreeNode(Node node) => throw new UnsupportedOperationError(
-      'Unsupported node ${node.runtimeType}');
-
-  @override
-  visitAsExpression(AsExpression node) {
-    _generateNode(node.operand);
-
-    final type = node.type;
-    if (typeEnvironment.isTop(type)) {
-      return;
-    }
-
-    _genAssertAssignable(type,
-        message: node.isTypeError ? '' : symbolForTypeCast);
-  }
-
-  @override
-  visitBoolLiteral(BoolLiteral node) {
-    _genPushBool(node.value);
-  }
-
-  @override
-  visitIntLiteral(IntLiteral node) {
-    _genPushInt(node.value);
-  }
-
-  @override
-  visitDoubleLiteral(DoubleLiteral node) {
-    final cpIndex = cp.addObjectRef(new DoubleConstant(node.value));
-    asm.emitPushConstant(cpIndex);
-  }
-
-  @override
-  visitConditionalExpression(ConditionalExpression node) {
-    final Label otherwisePart = new Label();
-    final Label done = new Label();
-    final int temp = locals.tempIndexInFrame(node);
-
-    _genConditionAndJumpIf(node.condition, false, otherwisePart);
-
-    _generateNode(node.then);
-    asm.emitPopLocal(temp);
-    asm.emitJump(done);
-
-    asm.bind(otherwisePart);
-    _generateNode(node.otherwise);
-    asm.emitPopLocal(temp);
-
-    asm.bind(done);
-    asm.emitPush(temp);
-  }
-
-  @override
-  visitConstructorInvocation(ConstructorInvocation node) {
-    if (node.isConst) {
-      _genPushConstExpr(node);
-      return;
-    }
-
-    final constructedClass = node.constructedType.classNode;
-    final classIndex = cp.addClass(constructedClass);
-
-    if (hasInstantiatorTypeArguments(constructedClass)) {
-      _genTypeArguments(node.arguments.types,
-          instantiatingClass: constructedClass);
-      asm.emitPushConstant(cp.addClass(constructedClass));
-      asm.emitAllocateT();
-    } else {
-      assert(node.arguments.types.isEmpty);
-      asm.emitAllocate(classIndex);
-    }
-
-    _genDupTOS(locals.tempIndexInFrame(node));
-
-    // Remove type arguments as they are only passed to instance allocation,
-    // and not passed to a constructor.
-    final args =
-        new Arguments(node.arguments.positional, named: node.arguments.named)
-          ..parent = node;
-    _genArguments(null, args);
-    _genDirectCallWithArgs(node.target, args, hasReceiver: true, node: node);
-    asm.emitDrop1();
-  }
-
-  @override
-  visitFunctionExpression(FunctionExpression node) {
-    _genClosure(node, '<anonymous closure>', node.function);
-  }
-
-  @override
-  visitInstantiation(Instantiation node) {
-    final int oldClosure = locals.tempIndexInFrame(node, tempIndex: 0);
-    final int newClosure = locals.tempIndexInFrame(node, tempIndex: 1);
-    final int typeArguments = locals.tempIndexInFrame(node, tempIndex: 2);
-
-    _generateNode(node.expression);
-    asm.emitStoreLocal(oldClosure);
-
-    _genTypeArguments(node.typeArguments);
-    asm.emitStoreLocal(typeArguments);
-
-    _genDirectCall(
-        boundsCheckForPartialInstantiation, objectTable.getArgDescHandle(2), 2);
-    asm.emitDrop1();
-
-    assert(closureClass.typeParameters.isEmpty);
-    asm.emitAllocate(cp.addClass(closureClass));
-    asm.emitStoreLocal(newClosure);
-
-    asm.emitPush(typeArguments);
-    asm.emitStoreFieldTOS(cp.addInstanceField(closureDelayedTypeArguments));
-
-    // Copy the rest of the fields from old closure to a new closure.
-    final fieldsToCopy = <Field>[
-      closureInstantiatorTypeArguments,
-      closureFunctionTypeArguments,
-      closureFunction,
-      closureContext,
-    ];
-
-    for (Field field in fieldsToCopy) {
-      final fieldOffsetCpIndex = cp.addInstanceField(field);
-      asm.emitPush(newClosure);
-      asm.emitPush(oldClosure);
-      asm.emitLoadFieldTOS(fieldOffsetCpIndex);
-      asm.emitStoreFieldTOS(fieldOffsetCpIndex);
-    }
-
-    asm.emitPush(newClosure);
-  }
-
-  @override
-  visitIsExpression(IsExpression node) {
-    _generateNode(node.operand);
-    _genInstanceOf(node.type);
-  }
-
-  @override
-  visitLet(Let node) {
-    _enterScope(node);
-    _generateNode(node.variable);
-    _generateNode(node.body);
-    _leaveScope();
-  }
-
-  @override
-  visitListLiteral(ListLiteral node) {
-    if (node.isConst) {
-      _genPushConstExpr(node);
-      return;
-    }
-
-    _genTypeArguments([node.typeArgument]);
-
-    if (node.expressions.isEmpty) {
-      asm.emitPushConstant(
-          cp.addObjectRef(new ListConstant(const DynamicType(), const [])));
-    } else {
-      _genDupTOS(locals.tempIndexInFrame(node));
-      _genPushInt(node.expressions.length);
-      asm.emitCreateArrayTOS();
-      final int temp = locals.tempIndexInFrame(node);
-      asm.emitStoreLocal(temp);
-
-      for (int i = 0; i < node.expressions.length; i++) {
-        asm.emitPush(temp);
-        _genPushInt(i);
-        _generateNode(node.expressions[i]);
-        asm.emitStoreIndexedTOS();
-      }
-    }
-
-    // List._fromLiteral is a factory constructor.
-    // Type arguments passed to a factory constructor are counted as a normal
-    // argument and not counted in number of type arguments.
-    assert(listFromLiteral.isFactory);
-    _genDirectCall(listFromLiteral, objectTable.getArgDescHandle(2), 2);
-  }
-
-  @override
-  visitLogicalExpression(LogicalExpression node) {
-    final Label shortCircuit = new Label();
-    final Label done = new Label();
-    final int temp = locals.tempIndexInFrame(node);
-    final isOR = (node.operatorEnum == LogicalExpressionOperator.OR);
-
-    _genConditionAndJumpIf(node.left, isOR, shortCircuit);
-
-    bool negated = _genCondition(node.right);
-    if (negated) {
-      asm.emitBooleanNegateTOS();
-    }
-    asm.emitPopLocal(temp);
-    asm.emitJump(done);
-
-    asm.bind(shortCircuit);
-    _genPushBool(isOR);
-    asm.emitPopLocal(temp);
-
-    asm.bind(done);
-    asm.emitPush(temp);
-  }
-
-  @override
-  visitMapLiteral(MapLiteral node) {
-    if (node.isConst) {
-      _genPushConstExpr(node);
-      return;
-    }
-
-    _genTypeArguments([node.keyType, node.valueType]);
-
-    if (node.entries.isEmpty) {
-      asm.emitPushConstant(
-          cp.addObjectRef(new ListConstant(const DynamicType(), const [])));
-    } else {
-      _genTypeArguments([const DynamicType()]);
-      _genPushInt(node.entries.length * 2);
-      asm.emitCreateArrayTOS();
-
-      final int temp = locals.tempIndexInFrame(node);
-      asm.emitStoreLocal(temp);
-
-      for (int i = 0; i < node.entries.length; i++) {
-        // key
-        asm.emitPush(temp);
-        _genPushInt(i * 2);
-        _generateNode(node.entries[i].key);
-        asm.emitStoreIndexedTOS();
-        // value
-        asm.emitPush(temp);
-        _genPushInt(i * 2 + 1);
-        _generateNode(node.entries[i].value);
-        asm.emitStoreIndexedTOS();
-      }
-    }
-
-    // Map._fromLiteral is a factory constructor.
-    // Type arguments passed to a factory constructor are counted as a normal
-    // argument and not counted in number of type arguments.
-    assert(mapFromLiteral.isFactory);
-    _genDirectCall(mapFromLiteral, objectTable.getArgDescHandle(2), 2);
-  }
-
-  void _genMethodInvocationUsingSpecializedBytecode(
-      Opcode opcode, MethodInvocation node) {
-    switch (opcode) {
-      case Opcode.kEqualsNull:
-        if (node.receiver is NullLiteral) {
-          _generateNode(node.arguments.positional.single);
-        } else {
-          _generateNode(node.receiver);
-        }
-        break;
-
-      case Opcode.kNegateInt:
-      case Opcode.kNegateDouble:
-        _generateNode(node.receiver);
-        break;
-
-      case Opcode.kAddInt:
-      case Opcode.kSubInt:
-      case Opcode.kMulInt:
-      case Opcode.kTruncDivInt:
-      case Opcode.kModInt:
-      case Opcode.kBitAndInt:
-      case Opcode.kBitOrInt:
-      case Opcode.kBitXorInt:
-      case Opcode.kShlInt:
-      case Opcode.kShrInt:
-      case Opcode.kCompareIntEq:
-      case Opcode.kCompareIntGt:
-      case Opcode.kCompareIntLt:
-      case Opcode.kCompareIntGe:
-      case Opcode.kCompareIntLe:
-      case Opcode.kAddDouble:
-      case Opcode.kSubDouble:
-      case Opcode.kMulDouble:
-      case Opcode.kDivDouble:
-      case Opcode.kCompareDoubleEq:
-      case Opcode.kCompareDoubleGt:
-      case Opcode.kCompareDoubleLt:
-      case Opcode.kCompareDoubleGe:
-      case Opcode.kCompareDoubleLe:
-        _generateNode(node.receiver);
-        _generateNode(node.arguments.positional.single);
-        break;
-
-      default:
-        throw 'Unexpected specialized bytecode $opcode';
-    }
-
-    asm.emitSpecializedBytecode(opcode);
-  }
-
-  bool _isUncheckedCall(
-          Node node, Member interfaceTarget, Expression receiver) =>
-      isUncheckedCall(interfaceTarget, receiver, staticTypeContext) ||
-      (inferredTypeMetadata != null &&
-          inferredTypeMetadata[node]?.skipCheck == true);
-
-  void _genInstanceCall(
-      Node node,
-      InvocationKind invocationKind,
-      Member interfaceTarget,
-      Name targetName,
-      Expression receiver,
-      int totalArgCount,
-      ObjectHandle argDesc) {
-    final isDynamic = interfaceTarget == null;
-    final isUnchecked = invocationKind != InvocationKind.getter &&
-        _isUncheckedCall(node, interfaceTarget, receiver);
-
-    if (inferredTypeMetadata != null && node != null) {
-      _appendInferredType(node, asm.offset);
-    }
-
-    bool generated = false;
-    if (invocationKind != InvocationKind.getter && !isDynamic && !isUnchecked) {
-      final staticReceiverType = getStaticType(receiver, staticTypeContext);
-      if (isInstantiatedInterfaceCall(interfaceTarget, staticReceiverType)) {
-        final callCpIndex = cp.addInstantiatedInterfaceCall(
-            invocationKind, interfaceTarget, argDesc, staticReceiverType);
-        asm.emitInstantiatedInterfaceCall(callCpIndex, totalArgCount);
-        generated = true;
-      }
-    }
-
-    if (!generated) {
-      final callCpIndex = cp.addInstanceCall(
-          invocationKind, interfaceTarget, targetName, argDesc);
-      if (isDynamic) {
-        assert(!isUnchecked);
-        asm.emitDynamicCall(callCpIndex, totalArgCount);
-      } else if (isUnchecked) {
-        asm.emitUncheckedInterfaceCall(callCpIndex, totalArgCount);
-      } else {
-        asm.emitInterfaceCall(callCpIndex, totalArgCount);
-      }
-    }
-
-    if (inferredTypeMetadata != null && node != null) {
-      _replaceWithConstantValue(node);
-    }
-  }
-
-  @override
-  visitMethodInvocation(MethodInvocation node) {
-    final directCall =
-        directCallMetadata != null ? directCallMetadata[node] : null;
-    final Opcode opcode = recognizedMethods.specializedBytecodeFor(node);
-    if (opcode != null && directCall == null) {
-      _genMethodInvocationUsingSpecializedBytecode(opcode, node);
-      return;
-    }
-    final args = node.arguments;
-    final totalArgCount = args.positional.length +
-        args.named.length +
-        1 /* receiver */ +
-        (args.types.isNotEmpty ? 1 : 0) /* type arguments */;
-    if (totalArgCount >= argumentsLimit) {
-      throw new TooManyArgumentsException(node.fileOffset);
-    }
-    // Front-end guarantees that all calls with known function type
-    // do not need any argument type checks.
-    if (isUncheckedClosureCall(node, staticTypeContext, options)) {
-      final int receiverTemp = locals.tempIndexInFrame(node);
-      _genArguments(node.receiver, args, storeReceiverToLocal: receiverTemp);
-      // Duplicate receiver (closure) for UncheckedClosureCall.
-      asm.emitPush(receiverTemp);
-      final argDescCpIndex = cp.addArgDescByArguments(args, hasReceiver: true);
-      asm.emitUncheckedClosureCall(argDescCpIndex, totalArgCount);
-      return;
-    }
-
-    final Member interfaceTarget = node.interfaceTarget;
-    if (!(interfaceTarget == null ||
-        interfaceTarget is Procedure && !interfaceTarget.isGetter)) {
-      throw new UnsupportedOperationError(
-          'Unsupported MethodInvocation with interface target ${interfaceTarget.runtimeType} $interfaceTarget');
-    }
-
-    if (directCall != null && directCall.checkReceiverForNull) {
-      final int receiverTemp = locals.tempIndexInFrame(node);
-      _genArguments(node.receiver, args, storeReceiverToLocal: receiverTemp);
-      asm.emitPush(receiverTemp);
-      asm.emitNullCheck(cp.addSelectorName(node.name, InvocationKind.method));
-    } else {
-      _genArguments(node.receiver, args);
-    }
-
-    final argDesc =
-        objectTable.getArgDescHandleByArguments(args, hasReceiver: true);
-
-    if (directCall != null) {
-      final isDynamicForwarder = (interfaceTarget == null);
-      final isUnchecked =
-          _isUncheckedCall(node, interfaceTarget, node.receiver);
-      _genDirectCall(directCall.target, argDesc, totalArgCount,
-          isDynamicForwarder: isDynamicForwarder,
-          isUnchecked: isUnchecked,
-          node: node);
-    } else {
-      _genInstanceCall(node, InvocationKind.method, interfaceTarget, node.name,
-          node.receiver, totalArgCount, argDesc);
-    }
-  }
-
-  @override
-  visitPropertyGet(PropertyGet node) {
-    _generateNode(node.receiver);
-    final argDesc = objectTable.getArgDescHandle(1);
-
-    final directCall =
-        directCallMetadata != null ? directCallMetadata[node] : null;
-    if (directCall != null) {
-      if (directCall.checkReceiverForNull) {
-        final int receiverTemp = locals.tempIndexInFrame(node);
-        asm.emitStoreLocal(receiverTemp);
-        asm.emitPush(receiverTemp);
-        asm.emitNullCheck(cp.addSelectorName(node.name, InvocationKind.getter));
-      }
-      _genDirectCall(directCall.target, argDesc, 1, isGet: true, node: node);
-    } else {
-      _genInstanceCall(node, InvocationKind.getter, node.interfaceTarget,
-          node.name, node.receiver, 1, argDesc);
-    }
-  }
-
-  @override
-  visitPropertySet(PropertySet node) {
-    final int temp = locals.tempIndexInFrame(node);
-    final bool hasResult = !isExpressionWithoutResult(node);
-
-    _generateNode(node.receiver);
-
-    final directCall =
-        directCallMetadata != null ? directCallMetadata[node] : null;
-    if (directCall != null && directCall.checkReceiverForNull) {
-      asm.emitStoreLocal(temp);
-      _generateNode(node.value);
-      asm.emitPush(temp);
-      asm.emitNullCheck(cp.addSelectorName(node.name, InvocationKind.setter));
-    } else {
-      _generateNode(node.value);
-    }
-
-    if (hasResult) {
-      asm.emitStoreLocal(temp);
-    }
-
-    const int numArguments = 2;
-    final argDesc = objectTable.getArgDescHandle(numArguments);
-
-    if (directCall != null) {
-      final isDynamicForwarder = (node.interfaceTarget == null);
-      final isUnchecked =
-          _isUncheckedCall(node, node.interfaceTarget, node.receiver);
-      _genDirectCall(directCall.target, argDesc, numArguments,
-          isSet: true,
-          isDynamicForwarder: isDynamicForwarder,
-          isUnchecked: isUnchecked,
-          node: node);
-    } else {
-      _genInstanceCall(node, InvocationKind.setter, node.interfaceTarget,
-          node.name, node.receiver, numArguments, argDesc);
-    }
-
-    asm.emitDrop1();
-
-    if (hasResult) {
-      asm.emitPush(temp);
-    }
-  }
-
-  @override
-  visitSuperMethodInvocation(SuperMethodInvocation node) {
-    final args = node.arguments;
-    final Member target =
-        hierarchy.getDispatchTarget(enclosingClass.superclass, node.name);
-    if (target == null) {
-      final int temp = locals.tempIndexInFrame(node);
-      _genNoSuchMethodForSuperCall(
-          node.name.text,
-          temp,
-          cp.addArgDescByArguments(args, hasReceiver: true),
-          args.types,
-          <Expression>[new ThisExpression()]
-            ..addAll(args.positional)
-            ..addAll(args.named.map((x) => x.value)));
-      return;
-    }
-    if (!(target is Procedure && !target.isGetter)) {
-      throw new UnsupportedOperationError(
-          'Unsupported SuperMethodInvocation with target ${target.runtimeType} $target');
-    }
-    _genArguments(new ThisExpression(), args);
-    _genDirectCallWithArgs(target, args,
-        hasReceiver: true, isUnchecked: true, node: node);
-  }
-
-  @override
-  visitSuperPropertyGet(SuperPropertyGet node) {
-    final Member target =
-        hierarchy.getDispatchTarget(enclosingClass.superclass, node.name);
-    if (target == null) {
-      final int temp = locals.tempIndexInFrame(node);
-      _genNoSuchMethodForSuperCall(node.name.text, temp, cp.addArgDesc(1), [],
-          <Expression>[new ThisExpression()]);
-      return;
-    }
-    _genPushReceiver();
-    _genDirectCall(target, objectTable.getArgDescHandle(1), 1,
-        isGet: true, node: node);
-  }
-
-  @override
-  visitSuperPropertySet(SuperPropertySet node) {
-    final int temp = locals.tempIndexInFrame(node);
-    final bool hasResult = !isExpressionWithoutResult(node);
-
-    final Member target = hierarchy
-        .getDispatchTarget(enclosingClass.superclass, node.name, setter: true);
-    if (target == null) {
-      _genNoSuchMethodForSuperCall(node.name.text, temp, cp.addArgDesc(2), [],
-          <Expression>[new ThisExpression(), node.value],
-          storeLastArgumentToTemp: hasResult);
-    } else {
-      _genPushReceiver();
-      _generateNode(node.value);
-
-      if (hasResult) {
-        asm.emitStoreLocal(temp);
-      }
-
-      assert(target is Field || (target is Procedure && target.isSetter));
-      _genDirectCall(target, objectTable.getArgDescHandle(2), 2,
-          isSet: true, isUnchecked: true, node: node);
-    }
-
-    asm.emitDrop1();
-
-    if (hasResult) {
-      asm.emitPush(temp);
-    }
-  }
-
-  @override
-  visitNot(Not node) {
-    bool negated = _genCondition(node.operand);
-    if (!negated) {
-      asm.emitBooleanNegateTOS();
-    }
-  }
-
-  @override
-  visitNullCheck(NullCheck node) {
-    _generateNode(node.operand);
-    final operandTemp = locals.tempIndexInFrame(node);
-    asm.emitStoreLocal(operandTemp);
-    asm.emitPush(operandTemp);
-    asm.emitNullCheck(cp.addObjectRef(null));
-  }
-
-  @override
-  visitNullLiteral(NullLiteral node) {
-    asm.emitPushNull();
-  }
-
-  @override
-  visitRethrow(Rethrow node) {
-    TryCatch tryCatch;
-    for (var parent = node.parent;; parent = parent.parent) {
-      if (parent is Catch) {
-        tryCatch = parent.parent as TryCatch;
-        break;
-      }
-      if (parent == null || parent is FunctionNode) {
-        throw 'Unable to find enclosing catch for $node';
-      }
-    }
-    tryCatches[tryCatch].needsStackTrace = true;
-
-    if (options.emitDebuggerStops) {
-      asm.emitDebugCheck(); // Allow breakpoint on explicit rethrow statement.
-    }
-    _genRethrow(tryCatch);
-  }
-
-  bool _hasNonTrivialInitializer(Field field) {
-    if (field.initializer == null) return false;
-    return !_isTrivialInitializer(field.initializer);
-  }
-
-  bool _isTrivialInitializer(Expression initializer) {
-    if (initializer == null) return false;
-    if (initializer is StringLiteral ||
-        initializer is BoolLiteral ||
-        initializer is IntLiteral ||
-        initializer is DoubleLiteral ||
-        initializer is NullLiteral) {
-      return true;
-    }
-    if (initializer is ConstantExpression &&
-        initializer.constant is PrimitiveConstant) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  visitStaticGet(StaticGet node) {
-    final target = node.target;
-    if (target is Field) {
-      if (target.isConst) {
-        _genPushConstExpr(target.initializer);
-      } else if (!_needsGetter(target)) {
-        if (inferredTypeMetadata != null) {
-          final InferredType md = inferredTypeMetadata[node];
-          if (md != null && md.constantValue != null) {
-            _genPushConstant(md.constantValue);
-            return;
-          }
-        }
-        asm.emitLoadStatic(cp.addStaticField(target));
-      } else {
-        _genDirectCall(target, objectTable.getArgDescHandle(0), 0,
-            isGet: true, node: node);
-      }
-    } else if (target is Procedure) {
-      if (target.isGetter) {
-        _genDirectCall(target, objectTable.getArgDescHandle(0), 0,
-            isGet: true, node: node);
-      } else if (target.isFactory || target.isRedirectingFactoryConstructor) {
-        throw 'Unexpected target for StaticGet: factory $target';
-      } else {
-        asm.emitPushConstant(cp.addObjectRef(new TearOffConstant(target)));
-      }
-    } else {
-      throw 'Unexpected target for StaticGet: ${target.runtimeType} $target';
-    }
-  }
-
-  @override
-  visitStaticInvocation(StaticInvocation node) {
-    if (node.isConst) {
-      _genPushConstExpr(node);
-      return;
-    }
-    Arguments args = node.arguments;
-    final target = node.target;
-    if (target == unsafeCast) {
-      // The result of the unsafeCast() intrinsic method is its sole argument,
-      // without any additional checks or type casts.
-      assert(args.named.isEmpty);
-      _generateNode(args.positional.single);
-      return;
-    }
-    if (!options.causalAsyncStacks &&
-        target == coreTypes.asyncStackTraceHelperProcedure) {
-      // Eliminate calls to _asyncStackTraceHelper as causal async stacks are
-      // disabled. These calls are inserted by async transformation
-      // (pkg/kernel/lib/transformations/continuation.dart), but they should be
-      // consistent with _setAsyncThreadStackTrace and
-      // _clearAsyncThreadStackTrace calls generated by bytecode generator.
-      //
-      // Push null as _asyncStackTraceHelper call should leave result
-      // on the stack.
-      asm.emitPushNull();
-      return;
-    }
-    if (target.isFactory) {
-      final constructedClass = target.enclosingClass;
-      if (hasInstantiatorTypeArguments(constructedClass)) {
-        _genTypeArguments(args.types, instantiatingClass: constructedClass);
-      } else {
-        assert(args.types.isEmpty);
-        // VM needs type arguments for every invocation of a factory
-        // constructor. TODO(alexmarkov): Clean this up.
-        asm.emitPushNull();
-      }
-      args =
-          new Arguments(node.arguments.positional, named: node.arguments.named)
-            ..parent = node;
-    }
-    _genArguments(null, args);
-    _genDirectCallWithArgs(target, args,
-        isFactory: target.isFactory, node: node);
-  }
-
-  @override
-  visitStaticSet(StaticSet node) {
-    final bool hasResult = !isExpressionWithoutResult(node);
-
-    _generateNode(node.value);
-
-    if (hasResult) {
-      _genDupTOS(locals.tempIndexInFrame(node));
-    }
-
-    final target = node.target;
-    if (target is Field && !_needsSetter(target)) {
-      if (options.emitDebuggerStops &&
-          _variableSetNeedsDebugCheck(node.value)) {
-        asm.emitDebugCheck();
-      }
-      int cpIndex = cp.addStaticField(target);
-      asm.emitStoreStaticTOS(cpIndex);
-    } else {
-      _genDirectCall(target, objectTable.getArgDescHandle(1), 1,
-          isSet: true, node: node);
-      asm.emitDrop1();
-    }
-  }
-
-  @override
-  visitStringConcatenation(StringConcatenation node) {
-    if (node.expressions.length == 1) {
-      _generateNode(node.expressions.single);
-      _genDirectCall(interpolateSingle, objectTable.getArgDescHandle(1), 1);
-    } else {
-      asm.emitPushNull();
-      _genPushInt(node.expressions.length);
-      asm.emitCreateArrayTOS();
-
-      final int temp = locals.tempIndexInFrame(node);
-      asm.emitStoreLocal(temp);
-
-      for (int i = 0; i < node.expressions.length; i++) {
-        asm.emitPush(temp);
-        _genPushInt(i);
-        _generateNode(node.expressions[i]);
-        asm.emitStoreIndexedTOS();
-      }
-
-      _genDirectCall(interpolate, objectTable.getArgDescHandle(1), 1);
-    }
-  }
-
-  @override
-  visitStringLiteral(StringLiteral node) {
-    final cpIndex = cp.addString(node.value);
-    asm.emitPushConstant(cpIndex);
-  }
-
-  @override
-  visitSymbolLiteral(SymbolLiteral node) {
-    _genPushConstExpr(node);
-  }
-
-  @override
-  visitThisExpression(ThisExpression node) {
-    _genPushReceiver();
-  }
-
-  @override
-  visitThrow(Throw node) {
-    _generateNode(node.expression);
-
-    if (options.emitDebuggerStops) {
-      asm.emitDebugCheck();
-    }
-    asm.emitThrow(0);
-  }
-
-  @override
-  visitTypeLiteral(TypeLiteral node) {
-    final DartType type = node.type;
-    final int typeCPIndex = cp.addType(type);
-    if (!hasFreeTypeParameters([type])) {
-      asm.emitPushConstant(typeCPIndex);
-    } else {
-      _genPushInstantiatorAndFunctionTypeArguments([type]);
-      asm.emitInstantiateType(typeCPIndex);
-    }
-  }
-
-  @override
-  visitVariableGet(VariableGet node) {
-    final v = node.variable;
-    if (v.isConst) {
-      _genPushConstExpr(v.initializer);
-    } else if (v.isLate) {
-      _genLoadVar(v);
-
-      final Label done = new Label();
-      asm.emitJumpIfInitialized(done);
-
-      if (v.initializer != null) {
-        final init = v.initializer;
-        _genPushContextIfCaptured(v);
-        // Late local variable initializers are transformed to wrap the
-        // initializer in a closure (see late_var_init_transformer.dart). The
-        // closure call needs one temporary, so withTemp lets us use this
-        // VariableGet's temporary when visiting the initializer.
-        assert(init is MethodInvocation &&
-            init.name.text == "call" &&
-            init.arguments.positional.length == 0);
-        locals.withTemp(
-            init, locals.tempIndexInFrame(node), () => _generateNode(init));
-        _genStoreVar(v);
-      } else {
-        asm.emitPushConstant(cp.addName(v.name));
-        _genDirectCall(throwNewLateInitializationError,
-            objectTable.getArgDescHandle(1), 1);
-        asm.emitDrop1();
-      }
-
-      asm.bind(done);
-      _genLoadVar(v);
-    } else {
-      _genLoadVar(v);
-    }
-  }
-
-  @override
-  visitVariableSet(VariableSet node) {
-    final v = node.variable;
-    final bool hasResult = !isExpressionWithoutResult(node);
-    final bool isLateFinal = v.isLate && v.isFinal;
-
-    if (!isLateFinal) {
-      _genPushContextIfCaptured(v);
-    }
-
-    _generateNode(node.value);
-
-    if (options.emitDebuggerStops && _variableSetNeedsDebugCheck(node.value)) {
-      asm.emitDebugCheck();
-    }
-
-    if (isLateFinal) {
-      final int temp = locals.tempIndexInFrame(node);
-      asm.emitPopLocal(temp);
-
-      final Label error = new Label();
-      final Label done = new Label();
-      _genLoadVar(v);
-      asm.emitJumpIfInitialized(error);
-
-      _genPushContextIfCaptured(v);
-      asm.emitPush(temp);
-      _genStoreVar(v);
-      asm.emitJump(done);
-
-      asm.bind(error);
-      asm.emitPushConstant(cp.addName(v.name));
-      _genDirectCall(
-          throwNewLateInitializationError, objectTable.getArgDescHandle(1), 1);
-      asm.emitDrop1();
-
-      asm.bind(done);
-
-      if (hasResult) {
-        asm.emitPush(temp);
-      }
-    } else if (locals.isCaptured(v)) {
-      final int temp = locals.tempIndexInFrame(node);
-      if (hasResult) {
-        asm.emitStoreLocal(temp);
-      }
-
-      _genStoreVar(v);
-
-      if (hasResult) {
-        asm.emitPush(temp);
-      }
-    } else {
-      final int localIndex = locals.getVarIndexInFrame(v);
-      if (hasResult) {
-        asm.emitStoreLocal(localIndex);
-      } else {
-        asm.emitPopLocal(localIndex);
-      }
-    }
-  }
-
-  bool _variableSetNeedsDebugCheck(Expression rhs) =>
-      rhs is BasicLiteral ||
-      rhs is ConstantExpression ||
-      rhs is StaticGet ||
-      rhs is FunctionExpression ||
-      rhs is VariableGet ||
-      rhs is AsExpression;
-
-  void _genFutureNull() {
-    asm.emitPushNull();
-    _genDirectCall(futureValue, objectTable.getArgDescHandle(1), 1);
-  }
-
-  @override
-  visitLoadLibrary(LoadLibrary node) {
-    _genFutureNull();
-  }
-
-  @override
-  visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
-    _genFutureNull();
-  }
-
-  @override
-  visitAssertStatement(AssertStatement node) {
-    if (!options.enableAsserts) {
-      return;
-    }
-
-    final Label done = new Label();
-    asm.emitJumpIfNoAsserts(done);
-
-    _genConditionAndJumpIf(node.condition, true, done);
-
-    _genPushInt(
-        options.omitAssertSourcePositions ? 0 : node.conditionStartOffset);
-    _genPushInt(
-        options.omitAssertSourcePositions ? 0 : node.conditionEndOffset);
-
-    if (node.message != null) {
-      _generateNode(node.message);
-    } else {
-      asm.emitPushNull();
-    }
-
-    _genDirectCall(throwNewAssertionError, objectTable.getArgDescHandle(3), 3);
-    asm.emitDrop1();
-
-    asm.bind(done);
-  }
-
-  @override
-  visitBlock(Block node) {
-    _enterScope(node);
-    _generateNodeList(node.statements);
-    _leaveScope();
-  }
-
-  @override
-  visitAssertBlock(AssertBlock node) {
-    if (!options.enableAsserts) {
-      return;
-    }
-
-    final Label done = new Label();
-    asm.emitJumpIfNoAsserts(done);
-
-    _enterScope(node);
-    _generateNodeList(node.statements);
-    _leaveScope();
-
-    asm.bind(done);
-  }
-
-  @override
-  visitBlockExpression(BlockExpression node) {
-    _enterScope(node);
-    _generateNodeList(node.body.statements);
-    _generateNode(node.value);
-    _leaveScope();
-  }
-
-  @override
-  visitBreakStatement(BreakStatement node) {
-    final targetLabel = labeledStatements[node.target] ??
-        (throw 'Target label ${node.target} was not registered for break $node');
-    final targetContextLevel = contextLevels[node.target];
-
-    _generateNonLocalControlTransfer(node, node.target, () {
-      _genUnwindContext(targetContextLevel);
-      asm.emitJump(targetLabel);
-    });
-  }
-
-  @override
-  visitContinueSwitchStatement(ContinueSwitchStatement node) {
-    final targetLabel = switchCases[node.target] ??
-        (throw 'Target label ${node.target} was not registered for continue-switch $node');
-    final targetContextLevel = contextLevels[node.target.parent];
-
-    _generateNonLocalControlTransfer(node, node.target.parent, () {
-      _genUnwindContext(targetContextLevel);
-      asm.emitJump(targetLabel);
-    });
-  }
-
-  @override
-  visitDoStatement(DoStatement node) {
-    if (asm.isUnreachable) {
-      // Bail out before binding a label which allows backward jumps,
-      // as it is not handled by local unreachable code elimination.
-      return;
-    }
-
-    final Label join = new Label(allowsBackwardJumps: true);
-    asm.bind(join);
-
-    asm.emitCheckStack(++currentLoopDepth);
-
-    _generateNode(node.body);
-
-    _genConditionAndJumpIf(node.condition, true, join);
-
-    --currentLoopDepth;
-  }
-
-  @override
-  visitEmptyStatement(EmptyStatement node) {
-    // no-op
-  }
-
-  @override
-  visitExpressionStatement(ExpressionStatement node) {
-    final expr = node.expression;
-    _generateNode(expr);
-    if (!isExpressionWithoutResult(expr)) {
-      asm.emitDrop1();
-    }
-  }
-
-  @override
-  visitForInStatement(ForInStatement node) {
-    // Should be lowered by the async transformation.
-    throw "unreachable";
-  }
-
-  @override
-  visitForStatement(ForStatement node) {
-    _enterScope(node);
-    try {
-      _generateNodeList(node.variables);
-
-      if (asm.isUnreachable) {
-        // Bail out before binding a label which allows backward jumps,
-        // as it is not handled by local unreachable code elimination.
-        return;
-      }
-
-      final Label done = new Label();
-      final Label join = new Label(allowsBackwardJumps: true);
-      asm.bind(join);
-
-      asm.emitCheckStack(++currentLoopDepth);
-
-      if (node.condition != null) {
-        _genConditionAndJumpIf(node.condition, false, done);
-      }
-
-      _generateNode(node.body);
-
-      if (locals.currentContextSize > 0) {
-        asm.emitPush(locals.contextVarIndexInFrame);
-        asm.emitCloneContext(
-            locals.currentContextId, locals.currentContextSize);
-        asm.emitPopLocal(locals.contextVarIndexInFrame);
-      }
-
-      for (var update in node.updates) {
-        _generateNode(update);
-        asm.emitDrop1();
-      }
-
-      asm.emitJump(join);
-
-      asm.bind(done);
-      --currentLoopDepth;
-    } finally {
-      _leaveScope();
-    }
-  }
-
-  @override
-  visitFunctionDeclaration(ast.FunctionDeclaration node) {
-    if (options.emitDebuggerStops) {
-      asm.emitDebugCheck();
-    }
-    _genPushContextIfCaptured(node.variable);
-    _genClosure(node, node.variable.name, node.function);
-    _genStoreVar(node.variable);
-  }
-
-  @override
-  visitIfStatement(IfStatement node) {
-    final Label otherwisePart = new Label();
-
-    _genConditionAndJumpIf(node.condition, false, otherwisePart);
-
-    _generateNode(node.then);
-
-    if (node.otherwise != null) {
-      final Label done = new Label();
-      asm.emitJump(done);
-      asm.bind(otherwisePart);
-      _generateNode(node.otherwise);
-      asm.bind(done);
-    } else {
-      asm.bind(otherwisePart);
-    }
-  }
-
-  @override
-  visitLabeledStatement(LabeledStatement node) {
-    final label = new Label();
-    labeledStatements ??= new Map<LabeledStatement, Label>();
-    labeledStatements[node] = label;
-    contextLevels ??= new Map<TreeNode, int>();
-    contextLevels[node] = locals.currentContextLevel;
-    _generateNode(node.body);
-    asm.bind(label);
-    labeledStatements.remove(node);
-    contextLevels.remove(node);
-  }
-
-  @override
-  visitReturnStatement(ReturnStatement node) {
-    final expr = node.expression ?? new NullLiteral();
-
-    final List<TryFinally> tryFinallyBlocks =
-        _getEnclosingTryFinallyBlocks(node, null);
-    if (tryFinallyBlocks.isEmpty) {
-      _generateNode(expr);
-      _genReturnTOS();
-    } else {
-      if (options.emitDebuggerStops) {
-        // Stop on the return statement before executing finally blocks.
-        asm.emitDebugCheck();
-      }
-      if (expr is BasicLiteral) {
-        _addFinallyBlocks(tryFinallyBlocks, () {
-          _generateNode(expr);
-          _genReturnTOS();
-        });
-      } else {
-        // Keep return value in a variable as try-catch statements
-        // inside finally can zap expression stack.
-        _generateNode(node.expression);
-        asm.emitPopLocal(locals.returnVarIndexInFrame);
-
-        _addFinallyBlocks(tryFinallyBlocks, () {
-          asm.emitPush(locals.returnVarIndexInFrame);
-          _genReturnTOS();
-        });
-      }
-    }
-  }
-
-  @override
-  visitSwitchStatement(SwitchStatement node) {
-    contextLevels ??= new Map<TreeNode, int>();
-    contextLevels[node] = locals.currentContextLevel;
-
-    _generateNode(node.expression);
-
-    if (asm.isUnreachable) {
-      // Bail out before binding labels which allow backward jumps,
-      // as they are not handled by local unreachable code elimination.
-      return;
-    }
-
-    final int temp = locals.tempIndexInFrame(node);
-    asm.emitPopLocal(temp);
-
-    final Label done = new Label();
-    final List<Label> caseLabels = new List<Label>.generate(
-        node.cases.length, (_) => new Label(allowsBackwardJumps: true));
-    final equalsArgDesc = objectTable.getArgDescHandle(2);
-
-    switchCases ??= new Map<SwitchCase, Label>();
-
-    Label defaultLabel = done;
-    for (int i = 0; i < node.cases.length; i++) {
-      final SwitchCase switchCase = node.cases[i];
-      final Label caseLabel = caseLabels[i];
-      switchCases[switchCase] = caseLabel;
-
-      if (switchCase.isDefault) {
-        defaultLabel = caseLabel;
-      } else {
-        final savedSourcePosition = asm.currentSourcePosition;
-        for (int i = 0; i < switchCase.expressions.length; ++i) {
-          _recordSourcePosition(switchCase.expressionOffsets[i]);
-          _genPushConstExpr(switchCase.expressions[i]);
-          asm.emitPush(temp);
-          asm.emitInterfaceCall(
-              cp.addInterfaceCall(
-                  InvocationKind.method, coreTypes.objectEquals, equalsArgDesc),
-              2);
-          asm.emitJumpIfTrue(caseLabel);
-        }
-        asm.currentSourcePosition = savedSourcePosition;
-      }
-    }
-
-    asm.emitJump(defaultLabel);
-
-    for (int i = 0; i < node.cases.length; i++) {
-      final SwitchCase switchCase = node.cases[i];
-      final Label caseLabel = caseLabels[i];
-
-      asm.bind(caseLabel);
-      _generateNode(switchCase.body);
-
-      // Front-end issues a compile-time error if there is a fallthrough
-      // between cases. Also, default case should be the last one.
-    }
-
-    asm.bind(done);
-    node.cases.forEach(switchCases.remove);
-    contextLevels.remove(node);
-  }
-
-  bool _isTryBlock(TreeNode node) => node is TryCatch || node is TryFinally;
-
-  int _savedContextVar(TreeNode node) {
-    assert(_isTryBlock(node));
-    assert(locals.capturedSavedContextVar(node) == null);
-    return locals.tempIndexInFrame(node, tempIndex: 0);
-  }
-
-  // Exception var occupies the same slot as saved context, so context
-  // should be restored first, before loading exception.
-  int _exceptionVar(TreeNode node) {
-    assert(_isTryBlock(node));
-    return locals.tempIndexInFrame(node, tempIndex: 0);
-  }
-
-  int _stackTraceVar(TreeNode node) {
-    assert(_isTryBlock(node));
-    return locals.tempIndexInFrame(node, tempIndex: 1);
-  }
-
-  _saveContextForTryBlock(TreeNode node) {
-    if (!locals.hasContextVar) {
-      return;
-    }
-    final capturedSavedContextVar = locals.capturedSavedContextVar(node);
-    if (capturedSavedContextVar != null) {
-      assert(locals.isSyncYieldingFrame);
-      _genPushContextForVariable(capturedSavedContextVar);
-      asm.emitPush(locals.contextVarIndexInFrame);
-      _genStoreVar(capturedSavedContextVar);
-    } else {
-      asm.emitPush(locals.contextVarIndexInFrame);
-      asm.emitPopLocal(_savedContextVar(node));
-    }
-  }
-
-  _restoreContextForTryBlock(TreeNode node) {
-    if (!locals.hasContextVar) {
-      return;
-    }
-    final capturedSavedContextVar = locals.capturedSavedContextVar(node);
-    if (capturedSavedContextVar != null) {
-      // 1. Restore context from closure var.
-      // This context has a context level at frame entry.
-      asm.emitPush(locals.closureVarIndexInFrame);
-      asm.emitLoadFieldTOS(cp.addInstanceField(closureContext));
-      asm.emitPopLocal(locals.contextVarIndexInFrame);
-
-      // 2. Restore context from captured :saved_try_context_var${depth}.
-      assert(locals.isCaptured(capturedSavedContextVar));
-      _genLoadVar(capturedSavedContextVar,
-          currentContextLevel: locals.contextLevelAtEntry);
-    } else {
-      asm.emitPush(_savedContextVar(node));
-    }
-    asm.emitPopLocal(locals.contextVarIndexInFrame);
-  }
-
-  /// Start try block
-  TryBlock _startTryBlock(TreeNode node) {
-    assert(_isTryBlock(node));
-
-    _saveContextForTryBlock(node);
-
-    return asm.exceptionsTable.enterTryBlock(asm.offset);
-  }
-
-  /// End try block and start its handler.
-  void _endTryBlock(TreeNode node, TryBlock tryBlock) {
-    tryBlock.endPC = asm.offset;
-    tryBlock.handlerPC = asm.offset;
-
-    // Exception handlers are reachable although there are no labels or jumps.
-    asm.isUnreachable = false;
-
-    asm.emitSetFrame(locals.frameSize);
-
-    _restoreContextForTryBlock(node);
-
-    asm.emitMoveSpecial(SpecialIndex.exception, _exceptionVar(node));
-    asm.emitMoveSpecial(SpecialIndex.stackTrace, _stackTraceVar(node));
-
-    final capturedExceptionVar = locals.capturedExceptionVar(node);
-    if (capturedExceptionVar != null) {
-      _genPushContextForVariable(capturedExceptionVar);
-      asm.emitPush(_exceptionVar(node));
-      _genStoreVar(capturedExceptionVar);
-    }
-
-    final capturedStackTraceVar = locals.capturedStackTraceVar(node);
-    if (capturedStackTraceVar != null) {
-      _genPushContextForVariable(capturedStackTraceVar);
-      asm.emitPush(_stackTraceVar(node));
-      _genStoreVar(capturedStackTraceVar);
-    }
-  }
-
-  void _genRethrow(TreeNode node) {
-    final capturedExceptionVar = locals.capturedExceptionVar(node);
-    if (capturedExceptionVar != null) {
-      assert(locals.isCaptured(capturedExceptionVar));
-      _genLoadVar(capturedExceptionVar);
-    } else {
-      asm.emitPush(_exceptionVar(node));
-    }
-
-    final capturedStackTraceVar = locals.capturedStackTraceVar(node);
-    if (capturedStackTraceVar != null) {
-      assert(locals.isCaptured(capturedStackTraceVar));
-      _genLoadVar(capturedStackTraceVar);
-    } else {
-      asm.emitPush(_stackTraceVar(node));
-    }
-
-    asm.emitThrow(1);
-  }
-
-  @override
-  visitTryCatch(TryCatch node) {
-    if (asm.isUnreachable) {
-      return;
-    }
-
-    final Label done = new Label();
-
-    final TryBlock tryBlock = _startTryBlock(node);
-    tryBlock.isSynthetic = node.isSynthetic;
-    tryCatches ??= new Map<TryCatch, TryBlock>();
-    tryCatches[node] = tryBlock; // Used by rethrow.
-
-    _generateNode(node.body);
-    asm.emitJump(done);
-
-    _endTryBlock(node, tryBlock);
-
-    final int exception = _exceptionVar(node);
-    final int stackTrace = _stackTraceVar(node);
-
-    bool hasCatchAll = false;
-
-    final savedSourcePosition = asm.currentSourcePosition;
-    for (Catch catchClause in node.catches) {
-      _recordSourcePosition(catchClause.fileOffset);
-      tryBlock.types.add(cp.addType(catchClause.guard));
-
-      Label skipCatch;
-      final guardType = catchClause.guard;
-      // Exception objects are guaranteed to be non-nullable, so
-      // non-nullable Object is also a catch-all type.
-      if (guardType is DynamicType ||
-          (guardType is InterfaceType &&
-              guardType.classNode == coreTypes.objectClass)) {
-        hasCatchAll = true;
-      } else {
-        asm.emitPush(exception);
-        _genInstanceOf(catchClause.guard);
-
-        skipCatch = new Label();
-        asm.emitJumpIfFalse(skipCatch);
-      }
-
-      _enterScope(catchClause);
-
-      if (catchClause.exception != null) {
-        _genPushContextIfCaptured(catchClause.exception);
-        asm.emitPush(exception);
-        _genStoreVar(catchClause.exception);
-      }
-
-      if (catchClause.stackTrace != null) {
-        tryBlock.needsStackTrace = true;
-        _genPushContextIfCaptured(catchClause.stackTrace);
-        asm.emitPush(stackTrace);
-        _genStoreVar(catchClause.stackTrace);
-      }
-
-      _generateNode(catchClause.body);
-
-      _leaveScope();
-      asm.emitJump(done);
-
-      if (skipCatch != null) {
-        asm.bind(skipCatch);
-      }
-    }
-    asm.currentSourcePosition = savedSourcePosition;
-
-    if (!hasCatchAll) {
-      tryBlock.needsStackTrace = true;
-      _genRethrow(node);
-    }
-
-    asm.bind(done);
-    tryCatches.remove(node);
-  }
-
-  @override
-  visitTryFinally(TryFinally node) {
-    if (asm.isUnreachable) {
-      return;
-    }
-
-    final TryBlock tryBlock = _startTryBlock(node);
-    tryBlock.isSynthetic = true;
-    finallyBlocks ??= new Map<TryFinally, List<FinallyBlock>>();
-    finallyBlocks[node] = <FinallyBlock>[];
-
-    _generateNode(node.body);
-
-    if (!asm.isUnreachable) {
-      final normalContinuation = new FinallyBlock(() {
-        /* do nothing (fall through) */
-      });
-      finallyBlocks[node].add(normalContinuation);
-      asm.emitJump(normalContinuation.entry);
-    }
-
-    _endTryBlock(node, tryBlock);
-
-    tryBlock.types.add(cp.addType(const DynamicType()));
-
-    _generateNode(node.finalizer);
-
-    tryBlock.needsStackTrace = true; // For rethrowing.
-    _genRethrow(node);
-
-    for (var finallyBlock in finallyBlocks[node]) {
-      asm.bind(finallyBlock.entry);
-      _restoreContextForTryBlock(node);
-      _generateNode(node.finalizer);
-      finallyBlock.generateContinuation();
-    }
-
-    finallyBlocks.remove(node);
-  }
-
-  bool _skipVariableInitialization(VariableDeclaration v, bool isCaptured) {
-    // We can skip variable initialization if the variable is supposed to be
-    // initialized to null and it's captured. This is because all the slots in
-    // the capture context are implicitly initialized to null.
-
-    // Check if the variable is supposed to be initialized to null.
-    if (!(v.initializer == null || v.initializer is NullLiteral)) {
-      return false;
-    }
-
-    // Late variables need to be initialized to a sentinel, not null.
-    if (v.isLate) return false;
-
-    // Non-captured variables go in stack slots that aren't implicitly nulled.
-    return isCaptured;
-  }
-
-  @override
-  visitVariableDeclaration(VariableDeclaration node) {
-    if (!node.isConst) {
-      final bool isCaptured = locals.isCaptured(node);
-      final initializer = node.initializer;
-      final bool emitStore = !_skipVariableInitialization(node, isCaptured);
-      int maxInitializerPosition = node.fileOffset;
-      if (emitStore) {
-        if (isCaptured) {
-          _genPushContextForVariable(node);
-        }
-        if (node.isLate && !_isTrivialInitializer(initializer)) {
-          asm.emitPushUninitializedSentinel();
-        } else if (initializer != null) {
-          _startRecordingMaxPosition(node.fileOffset);
-          _generateNode(initializer);
-          maxInitializerPosition = _endRecordingMaxPosition();
-        } else {
-          asm.emitPushNull();
-        }
-      }
-
-      if (options.emitDebuggerStops &&
-          (initializer == null || _variableSetNeedsDebugCheck(initializer))) {
-        final savedSourcePosition = asm.currentSourcePosition;
-        if (node.fileEqualsOffset != TreeNode.noOffset) {
-          _recordSourcePosition(node.fileEqualsOffset);
-        }
-        asm.emitDebugCheck();
-        asm.currentSourcePosition = savedSourcePosition;
-      }
-
-      if (options.emitLocalVarInfo && !asm.isUnreachable && node.name != null) {
-        _declareLocalVariable(node, maxInitializerPosition + 1);
-      }
-
-      if (emitStore) {
-        _genStoreVar(node);
-      }
-    }
-  }
-
-  @override
-  visitWhileStatement(WhileStatement node) {
-    if (asm.isUnreachable) {
-      // Bail out before binding a label which allows backward jumps,
-      // as it is not handled by local unreachable code elimination.
-      return;
-    }
-
-    final Label done = new Label();
-    final Label join = new Label(allowsBackwardJumps: true);
-    asm.bind(join);
-
-    asm.emitCheckStack(++currentLoopDepth);
-
-    _genConditionAndJumpIf(node.condition, false, done);
-
-    _generateNode(node.body);
-
-    asm.emitJump(join);
-    --currentLoopDepth;
-
-    asm.bind(done);
-  }
-
-  @override
-  visitYieldStatement(YieldStatement node) {
-    if (!node.isNative) {
-      throw 'YieldStatement must be desugared: $node';
-    }
-
-    if (asm.isUnreachable) {
-      return;
-    }
-
-    // 0 is reserved for normal entry, yield points are counted from 1.
-    final int yieldIndex = yieldPoints.length + 1;
-    final Label continuationLabel = new Label(allowsBackwardJumps: true);
-    yieldPoints.add(continuationLabel);
-
-    // :await_jump_var = #index
-    assert(locals.isCaptured(locals.awaitJumpVar));
-    _genPushContextForVariable(locals.awaitJumpVar);
-    _genPushInt(yieldIndex);
-    _genStoreVar(locals.awaitJumpVar);
-
-    // :await_ctx_var = context
-    assert(locals.isCaptured(locals.awaitContextVar));
-    _genPushContextForVariable(locals.awaitContextVar);
-    asm.emitPush(locals.contextVarIndexInFrame);
-    _genStoreVar(locals.awaitContextVar);
-
-    // return <expression>
-    // Note: finally blocks are *not* executed on the way out.
-    _generateNode(node.expression);
-    _genReturnTOS(node.fileOffset);
-
-    asm.bind(continuationLabel);
-
-    if (parentFunction.dartAsyncMarker == AsyncMarker.Async ||
-        parentFunction.dartAsyncMarker == AsyncMarker.AsyncStar) {
-      final int exceptionParam = locals.asyncExceptionParamIndexInFrame;
-      final int stackTraceParam = locals.asyncStackTraceParamIndexInFrame;
-
-      // if (:exception != null) rethrow (:exception, :stack_trace)
-      final Label cont = new Label();
-      asm.emitPush(exceptionParam);
-      asm.emitJumpIfNull(cont);
-
-      asm.emitPush(exceptionParam);
-      asm.emitPush(stackTraceParam);
-      asm.emitThrow(1);
-
-      asm.bind(cont);
-    }
-  }
-
-  @override
-  visitFieldInitializer(FieldInitializer node) {
-    _genFieldInitializer(node.field, node.value);
-  }
-
-  @override
-  visitRedirectingInitializer(RedirectingInitializer node) {
-    final args = node.arguments;
-    assert(args.types.isEmpty);
-    _genArguments(new ThisExpression(), args);
-    _genDirectCallWithArgs(node.target, args, hasReceiver: true, node: node);
-    asm.emitDrop1();
-  }
-
-  @override
-  visitSuperInitializer(SuperInitializer node) {
-    final args = node.arguments;
-    assert(args.types.isEmpty);
-    _genArguments(new ThisExpression(), args);
-    // Re-resolve target due to partial mixin resolution.
-    Member target;
-    for (var replacement in enclosingClass.superclass.constructors) {
-      if (node.target.name == replacement.name) {
-        target = replacement;
-        break;
-      }
-    }
-    assert(target != null);
-    _genDirectCallWithArgs(target, args, hasReceiver: true, node: node);
-    asm.emitDrop1();
-  }
-
-  @override
-  visitLocalInitializer(LocalInitializer node) {
-    _generateNode(node.variable);
-  }
-
-  @override
-  visitAssertInitializer(AssertInitializer node) {
-    _generateNode(node.statement);
-  }
-
-  @override
-  visitConstantExpression(ConstantExpression node) {
-    _genPushConstant(node.constant);
-  }
-}
-
-class UnsupportedOperationError {
-  final String message;
-  UnsupportedOperationError(this.message);
-
-  @override
-  String toString() => message;
-}
-
-class TooManyArgumentsException extends BytecodeLimitExceededException {
-  final int fileOffset;
-  TooManyArgumentsException(this.fileOffset);
-}
-
-typedef void GenerateContinuation();
-
-class FinallyBlock {
-  final Label entry = new Label();
-  final GenerateContinuation generateContinuation;
-
-  FinallyBlock(this.generateContinuation);
-}
-
-class Annotations {
-  final AnnotationsDeclaration object;
-  final bool hasPragma;
-
-  const Annotations(this.object, this.hasPragma);
-}
-
-ast.Component createFreshComponentWithBytecode(ast.Component component) {
-  final newComponent = new ast.Component();
-  newComponent.setMainMethodAndMode(null, false, component.mode);
-  final newRepository = new BytecodeMetadataRepository();
-  newComponent.addMetadataRepository(newRepository);
-
-  final oldRepository = component.metadata.remove(newRepository.tag);
-  final metadata = oldRepository.mapping[component];
-  newRepository.mapping[newComponent] = metadata;
-
-  return newComponent;
-}
diff --git a/pkg/vm/lib/bytecode/generics.dart b/pkg/vm/lib/bytecode/generics.dart
deleted file mode 100644
index 6fc5829..0000000
--- a/pkg/vm/lib/bytecode/generics.dart
+++ /dev/null
@@ -1,311 +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.
-
-library vm.bytecode.generics;
-
-import 'dart:math' show min;
-
-import 'package:kernel/ast.dart' hide MapEntry;
-import 'package:kernel/core_types.dart' show CoreTypes;
-import 'package:kernel/type_algebra.dart' show Substitution;
-import 'package:kernel/type_environment.dart' show StaticTypeContext;
-
-import 'options.dart' show BytecodeOptions;
-
-bool hasInstantiatorTypeArguments(Class c) {
-  for (; c != null; c = c.superclass) {
-    if (c.typeParameters.isNotEmpty) {
-      return true;
-    }
-  }
-  return false;
-}
-
-List<DartType> getTypeParameterTypes(List<TypeParameter> typeParameters) {
-  if (typeParameters.isEmpty) {
-    return const <DartType>[];
-  }
-  final types = new List<DartType>(typeParameters.length);
-  for (int i = 0; i < typeParameters.length; ++i) {
-    final tp = typeParameters[i];
-    types[i] = new TypeParameterType(
-        tp, TypeParameterType.computeNullabilityFromBound(tp));
-  }
-  return types;
-}
-
-bool _canReuseSuperclassTypeArguments(List<DartType> superTypeArgs,
-    List<TypeParameter> typeParameters, int overlap) {
-  for (int i = 0; i < overlap; ++i) {
-    final superTypeArg = superTypeArgs[superTypeArgs.length - overlap + i];
-    final typeParam = typeParameters[i];
-    if (!(superTypeArg is TypeParameterType &&
-        superTypeArg.parameter == typeParameters[i] &&
-        superTypeArg.nullability ==
-            TypeParameterType.computeNullabilityFromBound(typeParam))) {
-      return false;
-    }
-  }
-  return true;
-}
-
-List<DartType> flattenInstantiatorTypeArguments(
-    Class instantiatedClass, List<DartType> typeArgs) {
-  final typeParameters = instantiatedClass.typeParameters;
-  assert(typeArgs.length == typeParameters.length);
-
-  final supertype = instantiatedClass.supertype;
-  if (supertype == null) {
-    return typeArgs;
-  }
-
-  final superTypeArgs = flattenInstantiatorTypeArguments(
-      supertype.classNode, supertype.typeArguments);
-
-  // Shrink type arguments by reusing portion of superclass type arguments
-  // if there is an overlapping. This optimization should be consistent with
-  // VM in order to correctly reuse instantiator type arguments.
-  int overlap = min(superTypeArgs.length, typeArgs.length);
-  for (; overlap > 0; --overlap) {
-    if (_canReuseSuperclassTypeArguments(
-        superTypeArgs, typeParameters, overlap)) {
-      break;
-    }
-  }
-
-  assert(typeParameters.length == typeArgs.length);
-
-  final substitution = Substitution.fromPairs(typeParameters, typeArgs);
-
-  List<DartType> flatTypeArgs = <DartType>[];
-  for (var type in superTypeArgs) {
-    flatTypeArgs.add(substitution.substituteType(type));
-  }
-  flatTypeArgs.addAll(typeArgs.getRange(overlap, typeArgs.length));
-
-  return flatTypeArgs;
-}
-
-List<DartType> getInstantiatorTypeArguments(
-    Class instantiatedClass, List<DartType> typeArgs) {
-  final flatTypeArgs =
-      flattenInstantiatorTypeArguments(instantiatedClass, typeArgs);
-  if (isAllDynamic(flatTypeArgs)) {
-    return null;
-  }
-  return flatTypeArgs;
-}
-
-List<DartType> getDefaultFunctionTypeArguments(FunctionNode function) {
-  final typeParameters = function.typeParameters;
-  if (typeParameters.isEmpty) {
-    return null;
-  }
-  bool dynamicOnly = true;
-  for (var tp in typeParameters) {
-    if (tp.defaultType != null && tp.defaultType != const DynamicType()) {
-      dynamicOnly = false;
-      break;
-    }
-  }
-  if (dynamicOnly) {
-    return null;
-  }
-  List<DartType> defaultTypes = <DartType>[];
-  for (var tp in typeParameters) {
-    defaultTypes.add(tp.defaultType ?? const DynamicType());
-  }
-  return defaultTypes;
-}
-
-bool isAllDynamic(List<DartType> typeArgs) {
-  for (var t in typeArgs) {
-    if (t != const DynamicType()) {
-      return false;
-    }
-  }
-  return true;
-}
-
-bool isInstantiatedGenericType(DartType type) =>
-    (type is InterfaceType) &&
-    type.typeArguments.isNotEmpty &&
-    !hasFreeTypeParameters(type.typeArguments);
-
-bool hasFreeTypeParameters(List<DartType> typeArgs) {
-  final findTypeParams = new FindFreeTypeParametersVisitor();
-  return typeArgs.any((t) => t.accept(findTypeParams));
-}
-
-class FindFreeTypeParametersVisitor extends DartTypeVisitor<bool> {
-  Set<TypeParameter> _declaredTypeParameters;
-
-  bool visit(DartType type) => type.accept(this);
-
-  @override
-  bool defaultDartType(DartType node) =>
-      throw 'Unexpected type ${node.runtimeType} $node';
-
-  @override
-  bool visitInvalidType(InvalidType node) => false;
-
-  @override
-  bool visitDynamicType(DynamicType node) => false;
-
-  @override
-  bool visitVoidType(VoidType node) => false;
-
-  @override
-  bool visitBottomType(BottomType node) => false;
-
-  @override
-  bool visitNeverType(NeverType node) => false;
-
-  @override
-  bool visitTypeParameterType(TypeParameterType node) =>
-      _declaredTypeParameters == null ||
-      !_declaredTypeParameters.contains(node.parameter);
-
-  @override
-  bool visitInterfaceType(InterfaceType node) =>
-      node.typeArguments.any((t) => t.accept(this));
-
-  @override
-  bool visitFutureOrType(FutureOrType node) => node.typeArgument.accept(this);
-
-  @override
-  bool visitTypedefType(TypedefType node) =>
-      node.typeArguments.any((t) => t.accept(this));
-
-  @override
-  bool visitFunctionType(FunctionType node) {
-    if (node.typeParameters.isNotEmpty) {
-      _declaredTypeParameters ??= new Set<TypeParameter>();
-      _declaredTypeParameters.addAll(node.typeParameters);
-    }
-
-    final bool result = node.positionalParameters.any((t) => t.accept(this)) ||
-        node.namedParameters.any((p) => p.type.accept(this)) ||
-        node.returnType.accept(this);
-
-    if (node.typeParameters.isNotEmpty) {
-      _declaredTypeParameters.removeAll(node.typeParameters);
-    }
-
-    return result;
-  }
-}
-
-/// Returns static type of [expr].
-DartType getStaticType(Expression expr, StaticTypeContext staticTypeContext) =>
-    expr.getStaticType(staticTypeContext);
-
-/// Returns `true` if [type] cannot be extended in user code.
-bool isSealedType(DartType type, CoreTypes coreTypes) {
-  if (type is InterfaceType) {
-    final cls = type.classNode;
-    return cls == coreTypes.intClass ||
-        cls == coreTypes.doubleClass ||
-        cls == coreTypes.boolClass ||
-        cls == coreTypes.stringClass ||
-        cls == coreTypes.nullClass;
-  }
-  return false;
-}
-
-/// Returns true if an instance call to [interfaceTarget] with given
-/// [receiver] can omit argument type checks needed due to generic-covariant
-/// parameters.
-bool isUncheckedCall(Member interfaceTarget, Expression receiver,
-    StaticTypeContext staticTypeContext) {
-  if (interfaceTarget == null) {
-    // Dynamic call cannot be unchecked.
-    return false;
-  }
-
-  if (!_hasGenericCovariantParameters(interfaceTarget)) {
-    // Unchecked call makes sense only if there are generic-covariant parameters.
-    return false;
-  }
-
-  // Calls via [this] do not require checks.
-  if (receiver is ThisExpression) {
-    return true;
-  }
-
-  DartType receiverStaticType = getStaticType(receiver, staticTypeContext);
-  if (receiverStaticType is InterfaceType) {
-    final typeArguments = receiverStaticType.typeArguments;
-    if (typeArguments.isEmpty) {
-      return true;
-    }
-
-    final typeParameters = receiverStaticType.classNode.typeParameters;
-    assert(typeArguments.length == typeParameters.length);
-    for (int i = 0; i < typeArguments.length; ++i) {
-      switch (typeParameters[i].variance) {
-        case Variance.covariant:
-          if (!isSealedType(
-              typeArguments[i], staticTypeContext.typeEnvironment.coreTypes)) {
-            return false;
-          }
-          break;
-        case Variance.invariant:
-          break;
-        case Variance.contravariant:
-          return false;
-        default:
-          throw 'Unexpected variance ${typeParameters[i].variance} of '
-              '${typeParameters[i]} in ${receiverStaticType.classNode}';
-      }
-    }
-    return true;
-  }
-  return false;
-}
-
-/// If receiver type at run time matches static type we can omit argument type
-/// checks. This condition can be efficiently tested if static receiver type is
-/// fully instantiated (e.g. doesn't have type parameters).
-/// [isInstantiatedInterfaceCall] tests if an instance call to
-/// [interfaceTarget] with given [staticReceiverType] may benefit from
-/// this optimization.
-bool isInstantiatedInterfaceCall(
-    Member interfaceTarget, DartType staticReceiverType) {
-  // Providing instantiated receiver type wouldn't help in case of a
-  // dynamic call or call without any parameter type checks.
-  if (interfaceTarget == null ||
-      !_hasGenericCovariantParameters(interfaceTarget)) {
-    return false;
-  }
-  return isInstantiatedGenericType(staticReceiverType);
-}
-
-bool _hasGenericCovariantParameters(Member target) {
-  if (target is Field) {
-    return target.isGenericCovariantImpl;
-  } else if (target is Procedure) {
-    for (var param in target.function.positionalParameters) {
-      if (param.isGenericCovariantImpl) {
-        return true;
-      }
-    }
-    for (var param in target.function.namedParameters) {
-      if (param.isGenericCovariantImpl) {
-        return true;
-      }
-    }
-    return false;
-  } else {
-    throw 'Unexpected instance call target ${target.runtimeType} $target';
-  }
-}
-
-/// Returns true if invocation [node] is a closure call with statically known
-/// function type. Such invocations can omit argument type checks.
-bool isUncheckedClosureCall(MethodInvocation node,
-        StaticTypeContext staticTypeContext, BytecodeOptions options) =>
-    node.name.text == 'call' &&
-    getStaticType(node.receiver, staticTypeContext) is FunctionType &&
-    !options.avoidClosureCallInstructions;
diff --git a/pkg/vm/lib/bytecode/local_variable_table.dart b/pkg/vm/lib/bytecode/local_variable_table.dart
deleted file mode 100644
index cdbeb45..0000000
--- a/pkg/vm/lib/bytecode/local_variable_table.dart
+++ /dev/null
@@ -1,242 +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.
-
-library vm.bytecode.local_variable_table;
-
-import 'bytecode_serialization.dart';
-
-enum LocalVariableEntryKind {
-  invalid,
-  scope,
-  variableDeclaration,
-  contextVariable,
-}
-
-abstract class LocalVariableEntry {
-  static const KindMask = 0x0F;
-  static const IsCapturedFlag = 1 << 4;
-
-  LocalVariableEntryKind get kind;
-  int get flags => 0;
-  final int startPC;
-  void writeContents(BufferedWriter writer);
-
-  LocalVariableEntry(this.startPC);
-}
-
-class Scope extends LocalVariableEntry {
-  int endPC;
-  int contextLevel;
-  int position;
-  int endPosition;
-  final List<VariableDeclaration> variables = <VariableDeclaration>[];
-
-  Scope(int startPC, this.endPC, this.contextLevel, this.position,
-      this.endPosition)
-      : super(startPC);
-
-  @override
-  LocalVariableEntryKind get kind => LocalVariableEntryKind.scope;
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    if (endPC == null) {
-      throw '$this is not closed';
-    }
-    writer.writePackedUInt30(endPC - startPC);
-    writer.writeSLEB128(contextLevel);
-    writer.writePackedUInt30(position + 1);
-    writer.writePackedUInt30(endPosition + 1);
-  }
-
-  Scope.readContents(BufferedReader reader, int startPC) : super(startPC) {
-    endPC = startPC + reader.readPackedUInt30();
-    contextLevel = reader.readSLEB128();
-    position = reader.readPackedUInt30() - 1;
-    endPosition = reader.readPackedUInt30() - 1;
-  }
-
-  @override
-  String toString() =>
-      'scope (pc $startPC-$endPC pos $position-$endPosition context-level $contextLevel)';
-}
-
-class VariableDeclaration extends LocalVariableEntry {
-  bool isCaptured;
-  int index;
-  int name;
-  int type;
-  int position;
-  int initializedPosition;
-
-  VariableDeclaration(int startPC, this.isCaptured, this.index, this.name,
-      this.type, this.position, this.initializedPosition)
-      : super(startPC);
-
-  @override
-  LocalVariableEntryKind get kind => LocalVariableEntryKind.variableDeclaration;
-
-  @override
-  int get flags => (isCaptured ? LocalVariableEntry.IsCapturedFlag : 0);
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writeSLEB128(index);
-    writer.writePackedUInt30(name);
-    writer.writePackedUInt30(type);
-    writer.writePackedUInt30(position + 1);
-    writer.writePackedUInt30(initializedPosition + 1);
-  }
-
-  VariableDeclaration.readContents(
-      BufferedReader reader, int startPC, int flags)
-      : super(startPC) {
-    isCaptured = (flags & LocalVariableEntry.IsCapturedFlag) != 0;
-    index = reader.readSLEB128();
-    name = reader.readPackedUInt30();
-    type = reader.readPackedUInt30();
-    position = reader.readPackedUInt30() - 1;
-    initializedPosition = reader.readPackedUInt30() - 1;
-  }
-
-  @override
-  String toString() =>
-      'variable $index${isCaptured ? ' (captured)' : ''} pc $startPC, name CP#$name, type CP#$type, pos $position, init-pos $initializedPosition';
-}
-
-class ContextVariable extends LocalVariableEntry {
-  int index;
-
-  ContextVariable(int startPC, this.index) : super(startPC);
-
-  @override
-  LocalVariableEntryKind get kind => LocalVariableEntryKind.contextVariable;
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writeSLEB128(index);
-  }
-
-  ContextVariable.readContents(BufferedReader reader, int startPC)
-      : super(startPC) {
-    index = reader.readSLEB128();
-  }
-
-  @override
-  String toString() => 'context variable $index';
-}
-
-/// Keeps information about declared local variables.
-class LocalVariableTable extends BytecodeDeclaration {
-  final scopes = <Scope>[];
-  final activeScopes = <Scope>[];
-  ContextVariable contextVariable;
-
-  LocalVariableTable();
-
-  void enterScope(int pc, int contextLevel, int position) {
-    final scope = new Scope(pc, null, contextLevel, position, null);
-    activeScopes.add(scope);
-    scopes.add(scope);
-  }
-
-  void declareVariable(int pc, bool isCaptured, int index, int nameCpIndex,
-      int typeCpIndex, int position, int initializedPosition) {
-    final variable = new VariableDeclaration(pc, isCaptured, index, nameCpIndex,
-        typeCpIndex, position, initializedPosition);
-    activeScopes.last.variables.add(variable);
-  }
-
-  void leaveScope(int pc, int endPosition) {
-    final scope = activeScopes.removeLast();
-    scope.endPC = pc;
-    scope.endPosition = endPosition;
-    if (scope.variables.isEmpty &&
-        activeScopes.isNotEmpty &&
-        scope.contextLevel == activeScopes.last.contextLevel) {
-      scopes.remove(scope);
-    }
-  }
-
-  void leaveAllScopes(int pc, int endPosition) {
-    while (activeScopes.isNotEmpty) {
-      leaveScope(pc, endPosition);
-    }
-  }
-
-  void recordContextVariable(int pc, int index) {
-    assert(contextVariable == null);
-    contextVariable = new ContextVariable(pc, index);
-  }
-
-  bool get isEmpty => scopes.isEmpty && contextVariable == null;
-
-  bool get isNotEmpty => !isEmpty;
-
-  bool get hasActiveScopes => activeScopes.isNotEmpty;
-
-  List<LocalVariableEntry> getEntries() {
-    final entries = <LocalVariableEntry>[];
-    if (contextVariable != null) {
-      entries.add(contextVariable);
-    }
-    for (Scope scope in scopes) {
-      entries.add(scope);
-      entries.addAll(scope.variables);
-    }
-    return entries;
-  }
-
-  void write(BufferedWriter writer) {
-    final entries = getEntries();
-    writer.writePackedUInt30(entries.length);
-    final encodeStartPC = new SLEB128DeltaEncoder();
-    for (var entry in entries) {
-      writer.writeByte(entry.kind.index | entry.flags);
-      encodeStartPC.write(writer, entry.startPC);
-      entry.writeContents(writer);
-    }
-  }
-
-  LocalVariableTable.read(BufferedReader reader) {
-    final int numEntries = reader.readPackedUInt30();
-    final decodeStartPC = new SLEB128DeltaDecoder();
-    Scope scope;
-    for (int i = 0; i < numEntries; ++i) {
-      final int kindAndFlags = reader.readByte();
-      final LocalVariableEntryKind kind = LocalVariableEntryKind
-          .values[kindAndFlags & LocalVariableEntry.KindMask];
-      final int flags = kindAndFlags & ~LocalVariableEntry.KindMask;
-      final int startPC = decodeStartPC.read(reader);
-      switch (kind) {
-        case LocalVariableEntryKind.scope:
-          scope = new Scope.readContents(reader, startPC);
-          scopes.add(scope);
-          break;
-        case LocalVariableEntryKind.variableDeclaration:
-          scope.variables.add(
-              new VariableDeclaration.readContents(reader, startPC, flags));
-          break;
-        case LocalVariableEntryKind.contextVariable:
-          contextVariable = new ContextVariable.readContents(reader, startPC);
-          break;
-        default:
-          throw 'Unexpected entry kind ${kind}';
-      }
-    }
-  }
-
-  Map<int, String> getBytecodeAnnotations() {
-    final map = <int, String>{};
-    for (var entry in getEntries()) {
-      final pc = entry.startPC;
-      if (map[pc] == null) {
-        map[pc] = entry.toString();
-      } else {
-        map[pc] = "${map[pc]}; $entry";
-      }
-    }
-    return map;
-  }
-}
diff --git a/pkg/vm/lib/bytecode/local_vars.dart b/pkg/vm/lib/bytecode/local_vars.dart
deleted file mode 100644
index 882fb58..0000000
--- a/pkg/vm/lib/bytecode/local_vars.dart
+++ /dev/null
@@ -1,1430 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library vm.bytecode.local_vars;
-
-import 'dart:math' show min, max;
-
-import 'package:kernel/ast.dart';
-import 'package:kernel/transformations/continuation.dart'
-    show ContinuationVariables;
-import 'package:kernel/type_environment.dart';
-import 'package:vm/bytecode/generics.dart';
-
-import 'dbc.dart';
-import 'options.dart' show BytecodeOptions;
-import '../metadata/direct_call.dart' show DirectCallMetadata;
-
-// Keep in sync with runtime/vm/object.h:Context::kAwaitJumpVarIndex.
-const int awaitJumpVarContextIndex = 0;
-const int asyncCompleterContextIndex = 1;
-const int controllerContextIndex = 1;
-
-class LocalVariables {
-  final _scopes = new Map<TreeNode, Scope>();
-  final _vars = new Map<VariableDeclaration, VarDesc>();
-  Map<TreeNode, List<int>> _temps;
-  Map<TreeNode, VariableDeclaration> _capturedSavedContextVars;
-  Map<TreeNode, VariableDeclaration> _capturedExceptionVars;
-  Map<TreeNode, VariableDeclaration> _capturedStackTraceVars;
-  Map<ForInStatement, VariableDeclaration> _capturedIteratorVars;
-  final BytecodeOptions options;
-  final StaticTypeContext staticTypeContext;
-  final Map<TreeNode, DirectCallMetadata> directCallMetadata;
-
-  Scope _currentScope;
-  Frame _currentFrame;
-
-  VarDesc _getVarDesc(VariableDeclaration variable) =>
-      _vars[variable] ??
-      (throw 'Variable descriptor is not created for $variable');
-
-  int _getVarIndex(VariableDeclaration variable, bool isCaptured) {
-    final v = _getVarDesc(variable);
-    if (v.isCaptured != isCaptured) {
-      throw 'Mismatch in captured state of $variable';
-    }
-    return v.index ?? (throw 'Variable $variable is not allocated');
-  }
-
-  bool isCaptured(VariableDeclaration variable) =>
-      _getVarDesc(variable).isCaptured;
-
-  int getVarIndexInFrame(VariableDeclaration variable) =>
-      _getVarIndex(variable, false);
-
-  int getVarIndexInContext(VariableDeclaration variable) =>
-      _getVarIndex(variable, true);
-
-  int getOriginalParamSlotIndex(VariableDeclaration variable) =>
-      _getVarDesc(variable).originalParamSlotIndex ??
-      (throw 'Variable $variable does not have originalParamSlotIndex');
-
-  int tempIndexInFrame(TreeNode node, {int tempIndex: 0}) {
-    final temps = _temps[node];
-    if (temps == null) {
-      throw 'Temp is not allocated for node ${node.runtimeType} $node';
-    }
-    return temps[tempIndex];
-  }
-
-  int get currentContextSize => _currentScope.contextSize;
-  int get currentContextLevel => _currentScope.contextLevel;
-  int get currentContextId => _currentScope.contextId;
-
-  int get contextLevelAtEntry =>
-      _currentFrame.contextLevelAtEntry ??
-      (throw "Current frame is top level and it doesn't have a context at entry");
-
-  int getContextLevelOfVar(VariableDeclaration variable) {
-    final v = _getVarDesc(variable);
-    assert(v.isCaptured);
-    return v.scope.contextLevel;
-  }
-
-  int getVarContextId(VariableDeclaration variable) {
-    final v = _getVarDesc(variable);
-    assert(v.isCaptured);
-    return v.scope.contextId;
-  }
-
-  int get closureVarIndexInFrame => getVarIndexInFrame(_currentFrame
-          .closureVar ??
-      (throw 'Closure variable is not declared in ${_currentFrame.function}'));
-
-  int get contextVarIndexInFrame => getVarIndexInFrame(_currentFrame
-          .contextVar ??
-      (throw 'Context variable is not declared in ${_currentFrame.function}'));
-
-  bool get hasContextVar => _currentFrame.contextVar != null;
-
-  int get scratchVarIndexInFrame => getVarIndexInFrame(_currentFrame
-          .scratchVar ??
-      (throw 'Scratch variable is not declared in ${_currentFrame.function}'));
-
-  int get returnVarIndexInFrame => getVarIndexInFrame(_currentFrame.returnVar ??
-      (throw 'Return variable is not declared in ${_currentFrame.function}'));
-
-  VariableDeclaration get functionTypeArgsVar =>
-      _currentFrame.functionTypeArgsVar ??
-      (throw 'FunctionTypeArgs variable is not declared in ${_currentFrame.function}');
-
-  int get functionTypeArgsVarIndexInFrame =>
-      getVarIndexInFrame(functionTypeArgsVar);
-
-  bool get hasFunctionTypeArgsVar => _currentFrame.functionTypeArgsVar != null;
-
-  VariableDeclaration get factoryTypeArgsVar =>
-      _currentFrame.factoryTypeArgsVar ??
-      (throw 'FactoryTypeArgs variable is not declared in ${_currentFrame.function}');
-
-  bool get hasFactoryTypeArgsVar => _currentFrame.factoryTypeArgsVar != null;
-
-  VariableDeclaration get receiverVar =>
-      _currentFrame.receiverVar ??
-      (throw 'Receiver variable is not declared in ${_currentFrame.function}');
-
-  bool get hasCapturedReceiverVar => _currentFrame.capturedReceiverVar != null;
-
-  VariableDeclaration get capturedReceiverVar =>
-      _currentFrame.capturedReceiverVar ??
-      (throw 'Captured receiver variable is not declared in ${_currentFrame.function}');
-
-  bool get hasReceiver => _currentFrame.receiverVar != null;
-
-  bool get isSyncYieldingFrame => _currentFrame.isSyncYielding;
-
-  VariableDeclaration get awaitJumpVar {
-    assert(_currentFrame.isSyncYielding);
-    return _currentFrame.parent
-        .getSyntheticVar(ContinuationVariables.awaitJumpVar);
-  }
-
-  VariableDeclaration get awaitContextVar {
-    assert(_currentFrame.isSyncYielding);
-    return _currentFrame.parent
-        .getSyntheticVar(ContinuationVariables.awaitContextVar);
-  }
-
-  VariableDeclaration get asyncStackTraceVar {
-    assert(options.causalAsyncStacks);
-    assert(_currentFrame.isSyncYielding);
-    return _currentFrame.parent
-        .getSyntheticVar(ContinuationVariables.asyncStackTraceVar);
-  }
-
-  VariableDeclaration capturedSavedContextVar(TreeNode node) =>
-      _capturedSavedContextVars != null
-          ? _capturedSavedContextVars[node]
-          : null;
-  VariableDeclaration capturedExceptionVar(TreeNode node) =>
-      _capturedExceptionVars != null ? _capturedExceptionVars[node] : null;
-  VariableDeclaration capturedStackTraceVar(TreeNode node) =>
-      _capturedStackTraceVars != null ? _capturedStackTraceVars[node] : null;
-  VariableDeclaration capturedIteratorVar(ForInStatement node) =>
-      _capturedIteratorVars != null ? _capturedIteratorVars[node] : null;
-
-  int get asyncExceptionParamIndexInFrame {
-    assert(_currentFrame.isSyncYielding);
-    final function = (_currentFrame.function as FunctionDeclaration).function;
-    final param = function.positionalParameters
-        .firstWhere((p) => p.name == ContinuationVariables.exceptionParam);
-    return getVarIndexInFrame(param);
-  }
-
-  int get asyncStackTraceParamIndexInFrame {
-    assert(_currentFrame.isSyncYielding);
-    final function = (_currentFrame.function as FunctionDeclaration).function;
-    final param = function.positionalParameters
-        .firstWhere((p) => p.name == ContinuationVariables.stackTraceParam);
-    return getVarIndexInFrame(param);
-  }
-
-  int get frameSize => _currentFrame.frameSize;
-
-  int get numParameters => _currentFrame.numParameters;
-
-  int get numParentTypeArguments => _currentFrame.parent?.numTypeArguments ?? 0;
-
-  bool get hasOptionalParameters => _currentFrame.hasOptionalParameters;
-  bool get hasCapturedParameters => _currentFrame.hasCapturedParameters;
-
-  List<VariableDeclaration> get originalNamedParameters =>
-      _currentFrame.originalNamedParameters;
-  List<VariableDeclaration> get sortedNamedParameters =>
-      _currentFrame.sortedNamedParameters;
-
-  LocalVariables(Member node, this.options, this.staticTypeContext,
-      this.directCallMetadata) {
-    final scopeBuilder = new _ScopeBuilder(this);
-    node.accept(scopeBuilder);
-
-    final allocator = new _Allocator(this);
-    node.accept(allocator);
-  }
-
-  void enterScope(TreeNode node) {
-    _currentScope = _scopes[node];
-    _currentFrame = _currentScope.frame;
-  }
-
-  void leaveScope() {
-    _currentScope = _currentScope.parent;
-    _currentFrame = _currentScope?.frame;
-  }
-
-  void withTemp(TreeNode node, int temp, void action()) {
-    final old = _temps[node];
-    assert(old == null || old.length == 1);
-    _temps[node] = [temp];
-    action();
-    _temps[node] = old;
-  }
-}
-
-class VarDesc {
-  final VariableDeclaration declaration;
-  Scope scope;
-  bool isCaptured = false;
-  int index;
-  int originalParamSlotIndex;
-
-  VarDesc(this.declaration, this.scope) {
-    scope.vars.add(this);
-  }
-
-  Frame get frame => scope.frame;
-
-  bool get isAllocated => index != null;
-
-  void capture() {
-    assert(!isAllocated);
-    isCaptured = true;
-  }
-
-  void moveToScope(Scope newScope) {
-    assert(index == null);
-    scope.vars.remove(this);
-    newScope.vars.add(this);
-    scope = newScope;
-  }
-
-  String toString() => 'var ${declaration.name}';
-}
-
-class Frame {
-  final TreeNode function;
-  final Frame parent;
-  Scope topScope;
-
-  List<VariableDeclaration> originalNamedParameters;
-  List<VariableDeclaration> sortedNamedParameters;
-  int numParameters = 0;
-  int numTypeArguments = 0;
-  bool hasOptionalParameters = false;
-  bool hasCapturedParameters = false;
-  bool hasClosures = false;
-  AsyncMarker dartAsyncMarker = AsyncMarker.Sync;
-  bool isSyncYielding = false;
-  VariableDeclaration receiverVar;
-  VariableDeclaration capturedReceiverVar;
-  VariableDeclaration functionTypeArgsVar;
-  VariableDeclaration factoryTypeArgsVar;
-  VariableDeclaration closureVar;
-  VariableDeclaration contextVar;
-  VariableDeclaration scratchVar;
-  VariableDeclaration returnVar;
-  Map<String, VariableDeclaration> syntheticVars;
-  int frameSize = 0;
-  List<int> temporaries = <int>[];
-  int contextLevelAtEntry;
-
-  Frame(this.function, this.parent);
-
-  VariableDeclaration getSyntheticVar(String name) {
-    if (syntheticVars == null) {
-      throw 'No synthetic variables declared in ${function}!';
-    }
-    if (syntheticVars[name] == null) {
-      throw '${name} variable is not declared in ${function}';
-    }
-    return syntheticVars[name];
-  }
-}
-
-class Scope {
-  final Scope parent;
-  final Frame frame;
-  final int loopDepth;
-  final List<VarDesc> vars = <VarDesc>[];
-
-  int localsUsed;
-  int tempsUsed;
-
-  Scope contextOwner;
-  int contextUsed = 0;
-  int contextSize = 0;
-  int contextLevel;
-  int contextId;
-
-  Scope(this.parent, this.frame, this.loopDepth);
-
-  bool get hasContext => contextSize > 0;
-}
-
-bool _hasReceiverParameter(TreeNode node) {
-  return node is Constructor ||
-      (node is Procedure && !node.isStatic) ||
-      (node is Field && !node.isStatic);
-}
-
-class _ScopeBuilder extends RecursiveVisitor<Null> {
-  final LocalVariables locals;
-
-  // Set of synthetic variables we need to keep track of in Frame.
-  static final registeredSyntheticVars = RegExp(r'^(' +
-      '${ContinuationVariables.awaitJumpVar}|' +
-      '${ContinuationVariables.awaitContextVar}|' +
-      '${ContinuationVariables.asyncCompleter}|' +
-      '${ContinuationVariables.asyncStackTraceVar}|' +
-      '${ContinuationVariables.controller}|' +
-      '${ContinuationVariables.controllerStreamVar}|' +
-      // :exception0, :stack_trace17, etc..
-      '${ContinuationVariables.savedTryContextVarPrefix}[0-9]+|' +
-      '${ContinuationVariables.exceptionVarPrefix}[0-9]+|' +
-      '${ContinuationVariables.stackTraceVarPrefix}[0-9]+' +
-      r')$');
-
-  Scope _currentScope;
-  Frame _currentFrame;
-  List<TreeNode> _enclosingTryBlocks;
-  List<TreeNode> _enclosingTryCatches;
-  int _loopDepth;
-
-  _ScopeBuilder(this.locals);
-
-  List<VariableDeclaration> _sortNamedParameters(FunctionNode function) {
-    final params = function.namedParameters.toList();
-    params.sort((VariableDeclaration a, VariableDeclaration b) =>
-        a.name.compareTo(b.name));
-    return params;
-  }
-
-  void _visitFunction(TreeNode node) {
-    final savedEnclosingTryBlocks = _enclosingTryBlocks;
-    _enclosingTryBlocks = <TreeNode>[];
-    final savedEnclosingTryCatches = _enclosingTryCatches;
-    _enclosingTryCatches = <TreeNode>[];
-    final saveLoopDepth = _loopDepth;
-    _loopDepth = 0;
-
-    _enterFrame(node);
-
-    if (node is Field) {
-      if (_hasReceiverParameter(node)) {
-        _currentFrame.receiverVar = new VariableDeclaration('this');
-        _declareVariable(_currentFrame.receiverVar);
-      }
-      node.initializer?.accept(this);
-    } else {
-      assert(node is Procedure ||
-          node is Constructor ||
-          node is FunctionDeclaration ||
-          node is FunctionExpression);
-
-      FunctionNode function = (node as dynamic).function;
-      assert(function != null);
-
-      _currentFrame.dartAsyncMarker = function.dartAsyncMarker;
-
-      _currentFrame.isSyncYielding =
-          function.asyncMarker == AsyncMarker.SyncYielding;
-
-      if (node is Procedure && node.isFactory) {
-        assert(_currentFrame.parent == null);
-        _currentFrame.numTypeArguments = 0;
-        _currentFrame.factoryTypeArgsVar =
-            new VariableDeclaration(':type_arguments');
-        _declareVariable(_currentFrame.factoryTypeArgsVar);
-      } else {
-        _currentFrame.numTypeArguments =
-            (_currentFrame.parent?.numTypeArguments ?? 0) +
-                function.typeParameters.length;
-
-        if (_currentFrame.numTypeArguments > 0) {
-          _currentFrame.functionTypeArgsVar =
-              new VariableDeclaration(':function_type_arguments_var')
-                ..fileOffset = function.fileOffset;
-          _declareVariable(_currentFrame.functionTypeArgsVar);
-        }
-
-        if (_currentFrame.parent?.factoryTypeArgsVar != null) {
-          _currentFrame.factoryTypeArgsVar =
-              _currentFrame.parent.factoryTypeArgsVar;
-        }
-      }
-
-      if (_hasReceiverParameter(node)) {
-        _currentFrame.receiverVar = new VariableDeclaration('this');
-        _declareVariable(_currentFrame.receiverVar);
-      } else if (_currentFrame.parent?.receiverVar != null) {
-        _currentFrame.receiverVar = _currentFrame.parent.receiverVar;
-      }
-      if (node is FunctionDeclaration || node is FunctionExpression) {
-        _currentFrame.closureVar = new VariableDeclaration(':closure');
-        _declareVariable(_currentFrame.closureVar);
-      }
-
-      _currentFrame.originalNamedParameters = function.namedParameters;
-      _currentFrame.sortedNamedParameters = _sortNamedParameters(function);
-
-      visitList(function.positionalParameters, this);
-      visitList(_currentFrame.sortedNamedParameters, this);
-
-      // Inner (a)sync_op(..).
-      if (_currentFrame.isSyncYielding) {
-        // The following variables from parent frame are used implicitly and need
-        // to be captured to preserve state across closure invocations.
-        _useVariable(_currentFrame.parent
-            .getSyntheticVar(ContinuationVariables.awaitJumpVar));
-        _useVariable(_currentFrame.parent
-            .getSyntheticVar(ContinuationVariables.awaitContextVar));
-
-        // Debugger looks for :controller_stream variable among captured
-        // variables in a context, so make sure to capture it.
-        if (_currentFrame.parent.dartAsyncMarker == AsyncMarker.AsyncStar) {
-          _useVariable(_currentFrame.parent
-              .getSyntheticVar(ContinuationVariables.controllerStreamVar));
-        }
-
-        if (locals.options.causalAsyncStacks &&
-            (_currentFrame.parent.dartAsyncMarker == AsyncMarker.Async ||
-                _currentFrame.parent.dartAsyncMarker ==
-                    AsyncMarker.AsyncStar)) {
-          _useVariable(_currentFrame.parent
-              .getSyntheticVar(ContinuationVariables.asyncStackTraceVar));
-        }
-      } // _currentFrame.isSyncYielding
-
-      if (node is Constructor) {
-        for (var field in node.enclosingClass.fields) {
-          if (!field.isStatic && field.initializer != null) {
-            field.initializer.accept(this);
-          }
-        }
-        visitList(node.initializers, this);
-      }
-
-      function.body?.accept(this);
-
-      // sync* is transformed to have two nested synthetic functions.
-      // The first such function defines :await_jump_var, which needs to be
-      // made part of the outer function's scope.
-      if (_currentFrame.parent?.dartAsyncMarker == AsyncMarker.SyncStar) {
-        locals
-            ._getVarDesc(_currentFrame
-                .getSyntheticVar(ContinuationVariables.awaitJumpVar))
-            .moveToScope(_currentScope);
-      }
-
-      // Outer, original async/async*.
-      if (_currentFrame.dartAsyncMarker == AsyncMarker.Async ||
-          _currentFrame.dartAsyncMarker == AsyncMarker.AsyncStar) {
-        locals
-            ._getVarDesc(_currentFrame
-                .getSyntheticVar(ContinuationVariables.awaitJumpVar))
-            .moveToScope(_currentScope);
-
-        // Depending on the type of async, an additional synth. var. is needed.
-        if (_currentFrame.dartAsyncMarker == AsyncMarker.Async) {
-          locals
-              ._getVarDesc(_currentFrame
-                  .getSyntheticVar(ContinuationVariables.asyncCompleter))
-              .moveToScope(_currentScope);
-        } else if (_currentFrame.dartAsyncMarker == AsyncMarker.AsyncStar) {
-          locals
-              ._getVarDesc(_currentFrame
-                  .getSyntheticVar(ContinuationVariables.controller))
-              .moveToScope(_currentScope);
-        }
-      }
-    }
-
-    if (node is FunctionDeclaration ||
-        node is FunctionExpression ||
-        _currentFrame.hasClosures) {
-      _currentFrame.contextVar = new VariableDeclaration(':context');
-      _declareVariable(_currentFrame.contextVar);
-      _currentFrame.scratchVar = new VariableDeclaration(':scratch');
-      _declareVariable(_currentFrame.scratchVar);
-    }
-
-    if (_hasReceiverParameter(node)) {
-      if (locals.isCaptured(_currentFrame.receiverVar)) {
-        // Duplicate receiver variable for local use.
-        _currentFrame.capturedReceiverVar = _currentFrame.receiverVar;
-        _currentFrame.receiverVar = new VariableDeclaration('this');
-        _declareVariable(_currentFrame.receiverVar);
-      }
-    }
-
-    _leaveFrame();
-
-    _enclosingTryBlocks = savedEnclosingTryBlocks;
-    _enclosingTryCatches = savedEnclosingTryCatches;
-    _loopDepth = saveLoopDepth;
-  }
-
-  _enterFrame(TreeNode node) {
-    _currentFrame = new Frame(node, _currentFrame);
-    _enterScope(node);
-    _currentFrame.topScope = _currentScope;
-  }
-
-  _leaveFrame() {
-    _leaveScope();
-    _currentFrame = _currentFrame.parent;
-  }
-
-  void _enterScope(TreeNode node) {
-    _currentScope = new Scope(_currentScope, _currentFrame, _loopDepth);
-    assert(locals._scopes[node] == null);
-    locals._scopes[node] = _currentScope;
-  }
-
-  void _leaveScope() {
-    _currentScope = _currentScope.parent;
-  }
-
-  void _declareVariable(VariableDeclaration variable, [Scope scope]) {
-    if (scope == null) {
-      scope = _currentScope;
-    }
-    final VarDesc v = new VarDesc(variable, scope);
-    assert(locals._vars[variable] == null,
-        'Double declaring variable ${variable}!');
-    locals._vars[variable] = v;
-  }
-
-  void _useVariable(VariableDeclaration variable) {
-    assert(variable != null);
-    final VarDesc v = locals._vars[variable];
-    if (v == null) {
-      throw 'Variable $variable is used before declared';
-    }
-    if (v.frame != _currentFrame) {
-      v.capture();
-    }
-  }
-
-  void _useThis() {
-    assert(_currentFrame.receiverVar != null);
-    _useVariable(_currentFrame.receiverVar);
-  }
-
-  void _captureAllVisibleVariablesInCurrentFrame() {
-    assert(_currentFrame.isSyncYielding);
-    final transient = new Set<VariableDeclaration>();
-    transient
-      ..addAll([
-        _currentFrame.functionTypeArgsVar,
-        _currentFrame.closureVar,
-        _currentFrame.contextVar,
-        _currentFrame.scratchVar,
-        _currentFrame.returnVar,
-      ]);
-    transient.addAll((_currentFrame.function as LocalFunction)
-        .function
-        .positionalParameters);
-    for (Scope scope = _currentScope;
-        scope != null && scope.frame == _currentFrame;
-        scope = scope.parent) {
-      for (VarDesc v in scope.vars) {
-        if (!transient.contains(v.declaration)) {
-          v.capture();
-        }
-      }
-    }
-  }
-
-  // Capture synthetic variables for control flow statements.
-  void _captureSyntheticVariables() {
-    int depth = 0;
-    for (TreeNode tryBlock in _enclosingTryBlocks) {
-      locals._capturedSavedContextVars ??=
-          new Map<TreeNode, VariableDeclaration>();
-      _captureSyntheticVariable(ContinuationVariables.savedTryContextVar(depth),
-          tryBlock, locals._capturedSavedContextVars);
-      ++depth;
-    }
-    depth = 0;
-    for (TreeNode tryBlock in _enclosingTryCatches) {
-      locals._capturedExceptionVars ??=
-          new Map<TreeNode, VariableDeclaration>();
-      locals._capturedStackTraceVars ??=
-          new Map<TreeNode, VariableDeclaration>();
-      _captureSyntheticVariable(ContinuationVariables.exceptionVar(depth),
-          tryBlock, locals._capturedExceptionVars);
-      _captureSyntheticVariable(ContinuationVariables.stackTraceVar(depth),
-          tryBlock, locals._capturedStackTraceVars);
-      ++depth;
-    }
-  }
-
-  void _captureSyntheticVariable(
-      String name, TreeNode node, Map<TreeNode, VariableDeclaration> map) {
-    final variable = _currentFrame.parent.getSyntheticVar(name);
-    _useVariable(variable);
-    assert(map[node] == null || map[node] == variable);
-    map[node] = variable;
-  }
-
-  void _visitWithScope(TreeNode node) {
-    _enterScope(node);
-    node.visitChildren(this);
-    _leaveScope();
-  }
-
-  @override
-  defaultMember(Member node) {
-    _visitFunction(node);
-  }
-
-  @override
-  visitFunctionDeclaration(FunctionDeclaration node) {
-    _currentFrame.hasClosures = true;
-    if (_currentFrame.receiverVar != null) {
-      // Closure creation may load receiver to get instantiator type arguments.
-      _useThis();
-    }
-    node.variable.accept(this);
-    _visitFunction(node);
-  }
-
-  @override
-  visitFunctionExpression(FunctionExpression node) {
-    _currentFrame.hasClosures = true;
-    if (_currentFrame.receiverVar != null) {
-      // Closure creation may load receiver to get instantiator type arguments.
-      _useThis();
-    }
-    _visitFunction(node);
-  }
-
-  @override
-  visitVariableDeclaration(VariableDeclaration node) {
-    _declareVariable(node);
-    // Register synthetic variables so we can reference them later where
-    // they're implicitely used.
-    if (node.name != null && registeredSyntheticVars.hasMatch(node.name)) {
-      _currentFrame.syntheticVars ??= <String, VariableDeclaration>{};
-      assert(_currentFrame.syntheticVars[node.name] == null,
-          "Synthetic variable ${node} double declared!");
-      _currentFrame.syntheticVars[node.name] = node;
-    }
-
-    node.visitChildren(this);
-  }
-
-  @override
-  visitVariableGet(VariableGet node) {
-    _useVariable(node.variable);
-    if (node.variable.isLate && node.variable.initializer != null) {
-      node.variable.initializer.accept(this);
-    }
-  }
-
-  @override
-  visitVariableSet(VariableSet node) {
-    _useVariable(node.variable);
-    node.visitChildren(this);
-  }
-
-  @override
-  visitThisExpression(ThisExpression node) {
-    _useThis();
-  }
-
-  @override
-  visitSuperMethodInvocation(SuperMethodInvocation node) {
-    _useThis();
-    node.visitChildren(this);
-  }
-
-  @override
-  visitSuperPropertyGet(SuperPropertyGet node) {
-    _useThis();
-    node.visitChildren(this);
-  }
-
-  @override
-  visitSuperPropertySet(SuperPropertySet node) {
-    _useThis();
-    node.visitChildren(this);
-  }
-
-  @override
-  visitTypeParameterType(TypeParameterType node) {
-    var parent = node.parameter.parent;
-    if (parent is Class) {
-      _useThis();
-    } else if (parent is FunctionNode) {
-      parent = parent.parent;
-      if (parent is Procedure && parent.isFactory) {
-        assert(_currentFrame.factoryTypeArgsVar != null);
-        _useVariable(_currentFrame.factoryTypeArgsVar);
-      }
-    }
-
-    // Erase promoted bound in type parameter types as it makes no
-    // difference at run time, but types which are different only in
-    // promoted bounds are not equal when compared using DartType.operator==,
-    // which prevents reusing of type arguments.
-    // See dartbug.com/39240 for context.
-    node.promotedBound = null;
-
-    node.visitChildren(this);
-  }
-
-  @override
-  visitBlock(Block node) {
-    _visitWithScope(node);
-  }
-
-  @override
-  visitBlockExpression(BlockExpression node) {
-    // Not using _visitWithScope as Block inside BlockExpression does not have
-    // a scope.
-    _enterScope(node);
-    visitList(node.body.statements, this);
-    node.value.accept(this);
-    _leaveScope();
-  }
-
-  @override
-  visitAssertStatement(AssertStatement node) {
-    if (!locals.options.enableAsserts) {
-      return;
-    }
-    super.visitAssertStatement(node);
-  }
-
-  @override
-  visitAssertBlock(AssertBlock node) {
-    if (!locals.options.enableAsserts) {
-      return;
-    }
-    _visitWithScope(node);
-  }
-
-  @override
-  visitForStatement(ForStatement node) {
-    ++_loopDepth;
-    _visitWithScope(node);
-    --_loopDepth;
-  }
-
-  @override
-  visitForInStatement(ForInStatement node) {
-    node.iterable.accept(this);
-
-    VariableDeclaration iteratorVar;
-    if (_currentFrame.isSyncYielding) {
-      // Declare a variable to hold 'iterator' so it could be captured.
-      iteratorVar = VariableDeclaration(':for-in-iterator');
-      _declareVariable(iteratorVar);
-      locals._capturedIteratorVars ??=
-          new Map<ForInStatement, VariableDeclaration>();
-      locals._capturedIteratorVars[node] = iteratorVar;
-    }
-
-    ++_loopDepth;
-    _enterScope(node);
-    node.variable.accept(this);
-    node.body.accept(this);
-    _leaveScope();
-    --_loopDepth;
-
-    if (_currentFrame.isSyncYielding && !locals.isCaptured(iteratorVar)) {
-      // Iterator variable was not captured, as there are no yield points
-      // inside for-in statement body. The variable is needed only if captured,
-      // so undeclare it.
-      assert(_currentScope.vars.last == locals._vars[iteratorVar]);
-      _currentScope.vars.removeLast();
-      locals._vars.remove(iteratorVar);
-      locals._capturedIteratorVars.remove(node);
-    }
-  }
-
-  @override
-  visitCatch(Catch node) {
-    _visitWithScope(node);
-  }
-
-  @override
-  visitLet(Let node) {
-    _visitWithScope(node);
-  }
-
-  @override
-  visitYieldStatement(YieldStatement node) {
-    assert(_currentFrame.isSyncYielding);
-    _captureAllVisibleVariablesInCurrentFrame();
-    _captureSyntheticVariables();
-    node.visitChildren(this);
-  }
-
-  @override
-  visitTryCatch(TryCatch node) {
-    _enclosingTryBlocks.add(node);
-    node.body?.accept(this);
-    _enclosingTryBlocks.removeLast();
-
-    _enclosingTryCatches.add(node);
-    visitList(node.catches, this);
-    _enclosingTryCatches.removeLast();
-  }
-
-  @override
-  visitTryFinally(TryFinally node) {
-    _enclosingTryBlocks.add(node);
-    node.body?.accept(this);
-    _enclosingTryBlocks.removeLast();
-
-    _enclosingTryCatches.add(node);
-    node.finalizer?.accept(this);
-    _enclosingTryCatches.removeLast();
-  }
-
-  @override
-  visitReturnStatement(ReturnStatement node) {
-    // If returning from within a try-finally block, need to allocate
-    // an extra variable to hold a return value.
-    // Return value can't be kept on the stack as try-catch statements
-    // inside finally can zap expression stack.
-    // Literals (including implicit 'null' in 'return;') do not require
-    // an extra variable as they can be generated after all finally blocks.
-    if (_enclosingTryBlocks.isNotEmpty &&
-        (node.expression != null && node.expression is! BasicLiteral)) {
-      _currentFrame.returnVar = new VariableDeclaration(':return');
-      _declareVariable(_currentFrame.returnVar, _currentFrame.topScope);
-    }
-    node.visitChildren(this);
-  }
-
-  @override
-  visitWhileStatement(WhileStatement node) {
-    ++_loopDepth;
-    node.visitChildren(this);
-    --_loopDepth;
-  }
-
-  @override
-  visitDoStatement(DoStatement node) {
-    ++_loopDepth;
-    node.visitChildren(this);
-    --_loopDepth;
-  }
-}
-
-// Allocate context slots for each local variable.
-class _Allocator extends RecursiveVisitor<Null> {
-  final LocalVariables locals;
-
-  Scope _currentScope;
-  Frame _currentFrame;
-  int _contextIdCounter = 0;
-
-  _Allocator(this.locals);
-
-  void _enterScope(TreeNode node) {
-    final scope = locals._scopes[node];
-    assert(scope != null);
-    assert(scope.parent == _currentScope);
-    _currentScope = scope;
-
-    if (_currentScope.frame != _currentFrame) {
-      _currentFrame = _currentScope.frame;
-
-      if (_currentScope.parent != null) {
-        _currentFrame.contextLevelAtEntry = _currentScope.parent.contextLevel;
-      }
-
-      _currentScope.localsUsed = 0;
-      _currentScope.tempsUsed = 0;
-    } else {
-      _currentScope.localsUsed = _currentScope.parent.localsUsed;
-      _currentScope.tempsUsed = _currentScope.parent.tempsUsed;
-    }
-
-    assert(_currentScope.contextOwner == null);
-    assert(_currentScope.contextLevel == null);
-    assert(_currentScope.contextId == null);
-
-    final int parentContextLevel =
-        _currentScope.parent != null ? _currentScope.parent.contextLevel : -1;
-
-    assert(parentContextLevel != null);
-
-    final int numCaptured =
-        _currentScope.vars.where((v) => v.isCaptured).length;
-    if (numCaptured > 0) {
-      // Share contexts between scopes which belong to the same frame and
-      // have the same loop depth.
-      _currentScope.contextOwner = _currentScope;
-      for (Scope contextOwner = _currentScope;
-          contextOwner != null &&
-              contextOwner.frame == _currentScope.frame &&
-              contextOwner.loopDepth == _currentScope.loopDepth;
-          contextOwner = contextOwner.parent) {
-        if (contextOwner.hasContext) {
-          _currentScope.contextOwner = contextOwner;
-          break;
-        }
-      }
-
-      _currentScope.contextOwner.contextSize += numCaptured;
-
-      if (_currentScope.contextOwner == _currentScope) {
-        _currentScope.contextLevel = parentContextLevel + 1;
-        int saturatedContextId = min(_contextIdCounter++, contextIdLimit - 1);
-        _currentScope.contextId = saturatedContextId;
-      } else {
-        _currentScope.contextLevel = _currentScope.contextOwner.contextLevel;
-        _currentScope.contextId = _currentScope.contextOwner.contextId;
-      }
-    } else {
-      _currentScope.contextLevel = parentContextLevel;
-    }
-  }
-
-  void _leaveScope() {
-    assert(_currentScope.contextUsed == _currentScope.contextSize);
-
-    _currentScope = _currentScope.parent;
-    _currentFrame = _currentScope?.frame;
-
-    // Remove temporary variables which are out of scope.
-    if (_currentScope != null) {
-      int tempsToRetain = _currentFrame.temporaries.length;
-      while (tempsToRetain > 0 &&
-          _currentFrame.temporaries[tempsToRetain - 1] >=
-              _currentScope.localsUsed) {
-        --tempsToRetain;
-      }
-      assert(tempsToRetain >= _currentScope.tempsUsed);
-      _currentFrame.temporaries.length = tempsToRetain;
-      assert(_currentFrame.temporaries
-          .every((index) => index < _currentScope.localsUsed));
-    }
-  }
-
-  void _updateFrameSize() {
-    _currentFrame.frameSize =
-        max(_currentFrame.frameSize, _currentScope.localsUsed);
-  }
-
-  void _allocateTemp(TreeNode node, {int count: 1}) {
-    locals._temps ??= new Map<TreeNode, List<int>>();
-    assert(locals._temps[node] == null);
-    if (_currentScope.tempsUsed + count > _currentFrame.temporaries.length) {
-      // Allocate new local slots for temporary variables.
-      final int newSlots =
-          (_currentScope.tempsUsed + count) - _currentFrame.temporaries.length;
-      int local = _currentScope.localsUsed;
-      _currentScope.localsUsed += newSlots;
-      if (_currentScope.localsUsed > localVariableIndexLimit) {
-        throw new LocalVariableIndexOverflowException();
-      }
-      _updateFrameSize();
-      for (int i = 0; i < newSlots; i++) {
-        _currentFrame.temporaries.add(local + i);
-      }
-    }
-    locals._temps[node] = _currentFrame.temporaries
-        .sublist(_currentScope.tempsUsed, _currentScope.tempsUsed + count);
-    _currentScope.tempsUsed += count;
-  }
-
-  void _freeTemp(TreeNode node, {int count: 1}) {
-    assert(_currentScope.tempsUsed >= count);
-    _currentScope.tempsUsed -= count;
-    assert(listEquals(
-        locals._temps[node],
-        _currentFrame.temporaries.sublist(
-            _currentScope.tempsUsed, _currentScope.tempsUsed + count)));
-  }
-
-  void _allocateVariable(VariableDeclaration variable, {int paramSlotIndex}) {
-    final VarDesc v = locals._getVarDesc(variable);
-
-    assert(!v.isAllocated);
-    assert(v.scope == _currentScope);
-
-    if (v.isCaptured) {
-      v.index = _currentScope.contextOwner.contextUsed++;
-      if (v.index >= capturedVariableIndexLimit) {
-        throw new LocalVariableIndexOverflowException();
-      }
-      v.originalParamSlotIndex = paramSlotIndex;
-      return;
-    }
-
-    if (paramSlotIndex != null) {
-      assert(paramSlotIndex < 0 ||
-          (_currentFrame.hasOptionalParameters &&
-              paramSlotIndex < _currentFrame.numParameters));
-      v.index = paramSlotIndex;
-    } else {
-      v.index = _currentScope.localsUsed++;
-      if (v.index >= localVariableIndexLimit) {
-        throw new LocalVariableIndexOverflowException();
-      }
-    }
-    _updateFrameSize();
-  }
-
-  void _ensureVariableAllocated(VariableDeclaration variable) {
-    if (variable != null) {
-      final VarDesc v = locals._getVarDesc(variable);
-      if (!v.isAllocated) {
-        _allocateVariable(variable);
-      }
-    }
-  }
-
-  void _allocateParameter(VariableDeclaration node, int i) {
-    final numParameters = _currentFrame.numParameters;
-    assert(0 <= i && i < numParameters);
-    int paramSlotIndex = _currentFrame.hasOptionalParameters
-        ? i
-        : -kParamEndSlotFromFp - numParameters + i;
-    _allocateVariable(node, paramSlotIndex: paramSlotIndex);
-  }
-
-  void _allocateParameters(TreeNode node, FunctionNode function) {
-    final bool isFactory = node is Procedure && node.isFactory;
-    final bool hasReceiver = _hasReceiverParameter(node);
-    final bool hasClosureArg =
-        node is FunctionDeclaration || node is FunctionExpression;
-
-    _currentFrame.numParameters = function.positionalParameters.length +
-        function.namedParameters.length +
-        (isFactory ? 1 : 0) +
-        (hasReceiver ? 1 : 0) +
-        (hasClosureArg ? 1 : 0);
-
-    _currentFrame.hasOptionalParameters = function.requiredParameterCount <
-            function.positionalParameters.length ||
-        function.namedParameters.isNotEmpty;
-
-    _currentFrame.hasCapturedParameters =
-        (isFactory && locals.isCaptured(_currentFrame.factoryTypeArgsVar)) ||
-            (hasReceiver && _currentFrame.capturedReceiverVar != null) ||
-            function.positionalParameters.any(locals.isCaptured) ||
-            function.namedParameters.any(locals.isCaptured);
-
-    int count = 0;
-    if (isFactory) {
-      _allocateParameter(_currentFrame.factoryTypeArgsVar, count++);
-    }
-    if (hasReceiver) {
-      assert(!locals.isCaptured(_currentFrame.receiverVar));
-      _allocateParameter(_currentFrame.receiverVar, count++);
-
-      if (_currentFrame.capturedReceiverVar != null) {
-        _allocateVariable(_currentFrame.capturedReceiverVar);
-      }
-    }
-    if (hasClosureArg) {
-      assert(!locals.isCaptured(_currentFrame.closureVar));
-      _allocateParameter(_currentFrame.closureVar, count++);
-    }
-    for (var param in function.positionalParameters) {
-      _allocateParameter(param, count++);
-    }
-    for (var param in _currentFrame.sortedNamedParameters) {
-      _allocateParameter(param, count++);
-    }
-    assert(count == _currentFrame.numParameters);
-
-    if (_currentFrame.hasOptionalParameters) {
-      _currentScope.localsUsed = _currentFrame.numParameters;
-      _updateFrameSize();
-    }
-  }
-
-  void _allocateSpecialVariables() {
-    _ensureVariableAllocated(_currentFrame.functionTypeArgsVar);
-    _ensureVariableAllocated(_currentFrame.contextVar);
-    _ensureVariableAllocated(_currentFrame.scratchVar);
-    _ensureVariableAllocated(_currentFrame.returnVar);
-  }
-
-  void _visitFunction(TreeNode node) {
-    _enterScope(node);
-
-    if (node is Field) {
-      if (_hasReceiverParameter(node)) {
-        _currentFrame.numParameters = 1;
-        _allocateParameter(_currentFrame.receiverVar, 0);
-        if (_currentFrame.capturedReceiverVar != null) {
-          _allocateVariable(_currentFrame.capturedReceiverVar);
-        }
-      }
-      _allocateSpecialVariables();
-      node.initializer?.accept(this);
-    } else {
-      assert(node is Procedure ||
-          node is Constructor ||
-          node is FunctionDeclaration ||
-          node is FunctionExpression);
-
-      final FunctionNode function = (node as dynamic).function;
-      assert(function != null);
-
-      // Specially allocate implicit variables before anything else to ensure
-      // reserved spot in context.
-
-      // Outer async/async* function.
-      if (_currentFrame.dartAsyncMarker == AsyncMarker.Async ||
-          _currentFrame.dartAsyncMarker == AsyncMarker.AsyncStar) {
-        final awaitJumpVar =
-            _currentFrame.getSyntheticVar(ContinuationVariables.awaitJumpVar);
-        _allocateVariable(awaitJumpVar);
-        assert(
-            locals._getVarDesc(awaitJumpVar).index == awaitJumpVarContextIndex);
-      }
-
-      // :await_jump_var is declared in sync_op_gen, and implicitely used in sync_op.
-      if (_currentFrame.parent?.dartAsyncMarker == AsyncMarker.SyncStar) {
-        final awaitJumpVar =
-            _currentFrame.getSyntheticVar(ContinuationVariables.awaitJumpVar);
-        _allocateVariable(awaitJumpVar);
-        assert(
-            locals._getVarDesc(awaitJumpVar).index == awaitJumpVarContextIndex);
-      }
-
-      if (_currentFrame.dartAsyncMarker == AsyncMarker.Async) {
-        final asyncCompleter =
-            _currentFrame.getSyntheticVar(ContinuationVariables.asyncCompleter);
-        _allocateVariable(asyncCompleter);
-        assert(locals._getVarDesc(asyncCompleter).index ==
-            asyncCompleterContextIndex);
-      } else if (_currentFrame.dartAsyncMarker == AsyncMarker.AsyncStar) {
-        final controller =
-            _currentFrame.getSyntheticVar(ContinuationVariables.controller);
-        _allocateVariable(controller);
-        assert(locals._getVarDesc(controller).index == controllerContextIndex);
-      }
-
-      _allocateParameters(node, function);
-      _allocateSpecialVariables();
-
-      if (node is Constructor) {
-        for (var field in node.enclosingClass.fields) {
-          if (!field.isStatic && field.initializer != null) {
-            field.initializer.accept(this);
-          }
-        }
-        visitList(node.initializers, this);
-      }
-
-      // The visit the function body.
-      function.body?.accept(this);
-    }
-
-    _leaveScope();
-  }
-
-  void _visit(TreeNode node, {bool scope: false, int temps: 0}) {
-    if (scope) {
-      _enterScope(node);
-    }
-    if (temps > 0) {
-      _allocateTemp(node, count: temps);
-    }
-
-    node.visitChildren(this);
-
-    if (temps > 0) {
-      _freeTemp(node, count: temps);
-    }
-    if (scope) {
-      _leaveScope();
-    }
-  }
-
-  @override
-  defaultMember(Member node) {
-    _visitFunction(node);
-  }
-
-  @override
-  visitFunctionDeclaration(FunctionDeclaration node) {
-    _allocateVariable(node.variable);
-    _allocateTemp(node);
-    _visitFunction(node);
-    _freeTemp(node);
-  }
-
-  @override
-  visitFunctionExpression(FunctionExpression node) {
-    _allocateTemp(node);
-    _visitFunction(node);
-    _freeTemp(node);
-  }
-
-  @override
-  visitVariableDeclaration(VariableDeclaration node) {
-    // Since these synthetic vars are specially allocated at a set index,
-    // verify these slots, and only allocate normal vars.
-    if (node.name == ContinuationVariables.awaitJumpVar) {
-      assert(locals._getVarDesc(node).index == awaitJumpVarContextIndex);
-    } else if (node.name == ContinuationVariables.asyncCompleter) {
-      assert(locals._getVarDesc(node).index == asyncCompleterContextIndex);
-    } else if (node.name == ContinuationVariables.controller) {
-      assert(locals._getVarDesc(node).index == controllerContextIndex);
-    } else {
-      _allocateVariable(node);
-    }
-
-    node.visitChildren(this);
-  }
-
-  @override
-  visitBlock(Block node) {
-    _visit(node, scope: true);
-  }
-
-  @override
-  visitBlockExpression(BlockExpression node) {
-    // Not using _visit as Block inside BlockExpression does not have a scope.
-    _enterScope(node);
-    visitList(node.body.statements, this);
-    node.value.accept(this);
-    _leaveScope();
-  }
-
-  @override
-  visitAssertStatement(AssertStatement node) {
-    if (!locals.options.enableAsserts) {
-      return;
-    }
-    super.visitAssertStatement(node);
-  }
-
-  @override
-  visitAssertBlock(AssertBlock node) {
-    if (!locals.options.enableAsserts) {
-      return;
-    }
-    _visit(node, scope: true);
-  }
-
-  @override
-  visitForStatement(ForStatement node) {
-    _visit(node, scope: true);
-  }
-
-  @override
-  visitForInStatement(ForInStatement node) {
-    _allocateTemp(node);
-    if (locals._capturedIteratorVars != null) {
-      _ensureVariableAllocated(locals._capturedIteratorVars[node]);
-    }
-
-    node.iterable.accept(this);
-
-    _enterScope(node);
-    node.variable.accept(this);
-    node.body.accept(this);
-    _leaveScope();
-
-    _freeTemp(node);
-  }
-
-  @override
-  visitCatch(Catch node) {
-    _visit(node, scope: true);
-  }
-
-  @override
-  visitLet(Let node) {
-    _visit(node, scope: true);
-  }
-
-  // -------------- Allocation of temporaries --------------
-
-  @override
-  visitConstructorInvocation(ConstructorInvocation node) {
-    if (node.isConst) {
-      return;
-    }
-    _visit(node, temps: 1);
-  }
-
-  @override
-  visitListLiteral(ListLiteral node) {
-    if (node.isConst) {
-      return;
-    }
-    _visit(node, temps: 1);
-  }
-
-  @override
-  visitMapLiteral(MapLiteral node) {
-    if (node.isConst) {
-      return;
-    }
-    _visit(node, temps: 1);
-  }
-
-  @override
-  visitStringConcatenation(StringConcatenation node) {
-    _visit(node, temps: 1);
-  }
-
-  @override
-  visitConditionalExpression(ConditionalExpression node) {
-    _visit(node, temps: 1);
-  }
-
-  @override
-  visitLogicalExpression(LogicalExpression node) {
-    _visit(node, temps: 1);
-  }
-
-  @override
-  visitMethodInvocation(MethodInvocation node) {
-    int numTemps = 0;
-    if (isUncheckedClosureCall(
-        node, locals.staticTypeContext, locals.options)) {
-      numTemps = 1;
-    } else if (locals.directCallMetadata != null) {
-      final directCall = locals.directCallMetadata[node];
-      if (directCall != null && directCall.checkReceiverForNull) {
-        numTemps = 1;
-      }
-    }
-    _visit(node, temps: numTemps);
-  }
-
-  @override
-  visitPropertySet(PropertySet node) {
-    _visit(node, temps: 1);
-  }
-
-  @override
-  visitPropertyGet(PropertyGet node) {
-    int numTemps = 0;
-    if (locals.directCallMetadata != null) {
-      final directCall = locals.directCallMetadata[node];
-      if (directCall != null && directCall.checkReceiverForNull) {
-        numTemps = 1;
-      }
-    }
-    _visit(node, temps: numTemps);
-  }
-
-  @override
-  visitSuperMethodInvocation(SuperMethodInvocation node) {
-    _visit(node, temps: 1);
-  }
-
-  @override
-  visitSuperPropertyGet(SuperPropertyGet node) {
-    _visit(node, temps: 1);
-  }
-
-  @override
-  visitSuperPropertySet(SuperPropertySet node) {
-    _visit(node, temps: 1);
-  }
-
-  @override
-  visitSwitchStatement(SwitchStatement node) {
-    _visit(node, temps: 1);
-  }
-
-  @override
-  visitVariableGet(VariableGet node) {
-    _visit(node, temps: node.variable.isLate ? 1 : 0);
-  }
-
-  @override
-  visitVariableSet(VariableSet node) {
-    final v = node.variable;
-    final bool needsTemp = locals.isCaptured(v) || v.isLate && v.isFinal;
-    _visit(node, temps: needsTemp ? 1 : 0);
-  }
-
-  @override
-  visitStaticSet(StaticSet node) {
-    _visit(node, temps: 1);
-  }
-
-  @override
-  visitTryCatch(TryCatch node) {
-    _visit(node, temps: 2);
-  }
-
-  @override
-  visitTryFinally(TryFinally node) {
-    _visit(node, temps: 2);
-  }
-
-  @override
-  visitInstantiation(Instantiation node) {
-    _visit(node, temps: 3);
-  }
-
-  @override
-  visitNullCheck(NullCheck node) {
-    _visit(node, temps: 1);
-  }
-}
-
-class LocalVariableIndexOverflowException
-    extends BytecodeLimitExceededException {}
diff --git a/pkg/vm/lib/bytecode/ngrams.dart b/pkg/vm/lib/bytecode/ngrams.dart
deleted file mode 100644
index 54e028b..0000000
--- a/pkg/vm/lib/bytecode/ngrams.dart
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library vm.bytecode.ngrams;
-
-import 'dart:io';
-import 'dart:typed_data';
-
-import 'package:kernel/ast.dart' show listEquals, listHashCode;
-
-import 'dbc.dart';
-import 'disassembler.dart' show Instruction, BytecodeDisassembler;
-
-bool isControlFlowInstr(Instruction instr) => isControlFlow(instr.opcode);
-
-class NGram {
-  List<Instruction> instrs;
-  BytecodeDisassembler _disassembler;
-
-  NGram(this.instrs, {bool mergePushes = false}) {
-    if (mergePushes) {
-      _mergePushes(instrs);
-    }
-    _canonicalize(instrs);
-  }
-
-  /// Tests if any instructions that are not the last instruction in the window
-  /// are a jump, throw, or call.
-  bool get controlFlowIsNotLast =>
-      instrs.sublist(0, instrs.length - 1).any(isControlFlowInstr);
-
-  @override
-  int get hashCode => listHashCode(instrs);
-
-  @override
-  bool operator ==(other) =>
-      (other is NGram) && listEquals(instrs, other.instrs);
-
-  @override
-  String toString() {
-    StringBuffer out = new StringBuffer();
-    for (var instr in instrs) {
-      _disassembler.writeInstruction(out, instr);
-    }
-    return out.toString();
-  }
-
-  /// Rewrites all Push-like instructions as 'Push r0'.
-  static void _mergePushes(List<Instruction> instrs) {
-    for (int i = 0; i < instrs.length; i++) {
-      if (isPush(instrs[i].opcode)) {
-        instrs[i] = new Instruction(Opcode.kPush, false, <int>[0], 0);
-      }
-    }
-  }
-
-  /// Rewrites the operands of instructions so that ngrams that differ only in
-  /// operands can be considered the same.
-  ///
-  /// Each type of operand is considered to come from a different space, and
-  /// each operand is re-indexed in that space starting from 0 such that each
-  /// distinct operand before canonicalization remains distinct afterwords. E.g.
-  ///
-  /// Push r3
-  /// Push r3
-  /// Push r4
-  ///
-  /// Becomes
-  ///
-  /// Push r0
-  /// Push r0
-  /// Push r1
-  static void _canonicalize(List<Instruction> instrs) {
-    Map<Operand, Map<int, int>> operandMaps = <Operand, Map<int, int>>{
-      // No mapping for Operand.none.
-      Operand.imm: <int, int>{},
-      Operand.lit: <int, int>{},
-      Operand.reg: <int, int>{},
-      Operand.xeg: <int, int>{},
-      Operand.tgt: <int, int>{},
-      // No mapping for Operand.spe.
-    };
-    for (Instruction instr in instrs) {
-      Format fmt = BytecodeFormats[instr.opcode];
-      for (int i = 0; i < instr.operands.length; i++) {
-        Operand op = fmt.operands[i];
-        if (!operandMaps.containsKey(op)) {
-          continue;
-        }
-        int newOperand = operandMaps[op]
-            .putIfAbsent(instr.operands[i], () => operandMaps[op].length);
-        instr.operands[i] = newOperand;
-      }
-    }
-  }
-}
-
-class NGramReader {
-  List<Instruction> _instructions;
-
-  Map<NGram, int> _ngramCounts = <NGram, int>{};
-
-  NGramReader(String traceFilename) {
-    File traceFile = File(traceFilename);
-    Uint8List bytecode = traceFile.readAsBytesSync();
-    final disassembler = new BytecodeDisassembler();
-    _instructions = disassembler.decode(bytecode);
-  }
-
-  Map<NGram, int> get ngramCounts => _ngramCounts;
-
-  void readAllNGrams(int windowSize,
-      {bool basicBlocks: true, bool mergePushes: false}) {
-    int offset = 0;
-    while (offset + windowSize < _instructions.length) {
-      List<Instruction> window =
-          _instructions.sublist(offset, offset + windowSize);
-      offset += 1;
-      NGram ngram = new NGram(window, mergePushes: mergePushes);
-      if (basicBlocks && ngram.controlFlowIsNotLast) {
-        continue;
-      }
-      _ngramCounts.update(ngram, (count) => count + 1, ifAbsent: () => 1);
-    }
-  }
-
-  void writeNGramStats(String outputFilename,
-      {bool sort = true, int minCount = 1000}) {
-    File outputFile = new File(outputFilename);
-    IOSink file = outputFile.openWrite();
-    List<MapEntry<NGram, int>> entries =
-        _ngramCounts.entries.where((e) => e.value > minCount).toList();
-    if (sort) {
-      entries.sort((e1, e2) => e2.value - e1.value);
-    }
-    entries.forEach((e) {
-      file.write("count: ${e.value}\n${e.key}\n");
-    });
-    file.close();
-  }
-}
diff --git a/pkg/vm/lib/bytecode/nullability_detector.dart b/pkg/vm/lib/bytecode/nullability_detector.dart
deleted file mode 100644
index 414807b..0000000
--- a/pkg/vm/lib/bytecode/nullability_detector.dart
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library vm.bytecode.nullability_detector;
-
-import 'package:kernel/ast.dart';
-import 'dbc.dart';
-import 'recognized_methods.dart' show RecognizedMethods;
-
-class NullabilityDetector {
-  final _IsNullableVisitor _isNullableVisitor;
-
-  NullabilityDetector(RecognizedMethods recognizedMethods)
-      : _isNullableVisitor = new _IsNullableVisitor(recognizedMethods);
-
-  bool isNullable(Expression expr) => expr.accept(_isNullableVisitor);
-}
-
-class _IsNullableVisitor extends ExpressionVisitor<bool> {
-  final RecognizedMethods recognizedMethods;
-
-  _IsNullableVisitor(this.recognizedMethods);
-
-  @override
-  bool defaultExpression(Expression node) => true;
-
-  @override
-  bool visitNullLiteral(NullLiteral node) => true;
-
-  // All basic literals except NullLiteral are non-nullable.
-  @override
-  bool defaultBasicLiteral(BasicLiteral node) => false;
-
-  @override
-  bool visitVariableGet(VariableGet node) {
-    final v = node.variable;
-    if ((v.isConst || v.isFinal) && v.initializer != null) {
-      return v.initializer.accept(this);
-    }
-    return true;
-  }
-
-  @override
-  bool visitVariableSet(VariableSet node) => node.value.accept(this);
-
-  @override
-  bool visitMethodInvocation(MethodInvocation node) {
-    final Opcode opcode = recognizedMethods.specializedBytecodeFor(node);
-    if (opcode != null) {
-      return !_nonNullableBytecodeInstructions.contains(opcode);
-    }
-    return true;
-  }
-
-  @override
-  bool visitConstructorInvocation(ConstructorInvocation node) => false;
-
-  @override
-  bool visitNot(Not node) => false;
-
-  @override
-  bool visitLogicalExpression(LogicalExpression node) => false;
-
-  @override
-  bool visitConditionalExpression(ConditionalExpression node) =>
-      node.then.accept(this) || node.otherwise.accept(this);
-
-  @override
-  bool visitStringConcatenation(StringConcatenation node) => false;
-
-  @override
-  bool visitIsExpression(IsExpression node) => false;
-
-  @override
-  bool visitAsExpression(AsExpression node) => node.operand.accept(this);
-
-  @override
-  bool visitSymbolLiteral(SymbolLiteral node) => false;
-
-  @override
-  bool visitTypeLiteral(TypeLiteral node) => false;
-
-  @override
-  bool visitThisExpression(ThisExpression node) => false;
-
-  @override
-  bool visitRethrow(Rethrow node) => false;
-
-  @override
-  bool visitThrow(Throw node) => false;
-
-  @override
-  bool visitListLiteral(ListLiteral node) => false;
-
-  @override
-  bool visitMapLiteral(MapLiteral node) => false;
-
-  @override
-  bool visitFunctionExpression(FunctionExpression node) => false;
-
-  @override
-  bool visitConstantExpression(ConstantExpression node) =>
-      node.constant is NullConstant;
-
-  @override
-  bool visitLet(Let node) => node.body.accept(this);
-
-  @override
-  bool visitInstantiation(Instantiation node) => false;
-}
-
-final _nonNullableBytecodeInstructions = new Set<Opcode>.from([
-  Opcode.kBooleanNegateTOS,
-  Opcode.kEqualsNull,
-  Opcode.kNegateInt,
-  Opcode.kAddInt,
-  Opcode.kSubInt,
-  Opcode.kMulInt,
-  Opcode.kTruncDivInt,
-  Opcode.kModInt,
-  Opcode.kBitAndInt,
-  Opcode.kBitOrInt,
-  Opcode.kBitXorInt,
-  Opcode.kShlInt,
-  Opcode.kShrInt,
-  Opcode.kCompareIntEq,
-  Opcode.kCompareIntGt,
-  Opcode.kCompareIntLt,
-  Opcode.kCompareIntGe,
-  Opcode.kCompareIntLe,
-  Opcode.kNegateDouble,
-  Opcode.kAddDouble,
-  Opcode.kSubDouble,
-  Opcode.kMulDouble,
-  Opcode.kDivDouble,
-  Opcode.kCompareDoubleEq,
-  Opcode.kCompareDoubleGt,
-  Opcode.kCompareDoubleLt,
-  Opcode.kCompareDoubleGe,
-  Opcode.kCompareDoubleLe,
-]);
diff --git a/pkg/vm/lib/bytecode/object_table.dart b/pkg/vm/lib/bytecode/object_table.dart
deleted file mode 100644
index 8db0792..0000000
--- a/pkg/vm/lib/bytecode/object_table.dart
+++ /dev/null
@@ -1,2376 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library vm.bytecode.object_table;
-
-import 'package:kernel/ast.dart' hide MapEntry;
-import 'package:kernel/core_types.dart' show CoreTypes;
-
-import 'bytecode_serialization.dart'
-    show
-        BufferedWriter,
-        BufferedReader,
-        BytecodeObject,
-        BytecodeSizeStatistics,
-        ForwardReference,
-        NamedEntryStatistics,
-        doubleToIntBits,
-        intBitsToDouble,
-        ObjectReader,
-        ObjectWriter,
-        StringWriter;
-import 'generics.dart'
-    show getInstantiatorTypeArguments, hasInstantiatorTypeArguments;
-import 'declarations.dart' show SourceFile, TypeParametersDeclaration;
-import 'recursive_types_validator.dart' show RecursiveTypesValidator;
-
-/*
-
-Bytecode object table is encoded in the following way
-(using notation from pkg/kernel/binary.md):
-
-type ObjectTable {
-  UInt numEntries
-
-  // Total size of ‘objects’ in bytes.
-  UInt objectsSize
-
-  ObjectContents[numEntries] objects
-
-  // Offsets relative to ‘objects’.
-  UInt[numEntries] objectOffsets
-}
-
-
-// Either reference to an object in object table, or object contents
-// written inline (determined by bit 0).
-PackedObject = ObjectReference | ObjectContents
-
-type ObjectReference {
-  // Bit 0 (reference bit): 1
-  // Bits 1+: index in object table
-  UInt reference
-}
-
-type ObjectContents {
-  // Bit 0 (reference bit): 0
-  // Bits 1-4: object kind
-  // Bits 5+ object flags
-  UInt header
-}
-
-// Invalid/null object (always present at index 0).
-type InvalidObject extends ObjectContents {
-  kind = 0;
-}
-
-type Library extends ObjectContents {
-  kind = 1;
-  PackedObject importUri;
-}
-
-type Class extends ObjectContents {
-  kind = 2;
-  PackedObject library;
-  // Empty name is used for artificial class containing top-level
-  // members of a library.
-  PackedObject name;
-}
-
-type Member extends ObjectContents {
-  kind = 3;
-  flags = (isField, isConstructor);
-  PackedObject class;
-  PackedObject name;
-}
-
-type Closure extends ObjectContents {
-  kind = 4;
-  PackedObject enclosingMember;
-  UInt closureIndex;
-}
-
-type Name extends ObjectContents {
-  kind = 9;
-
-  // Invalid for public names
-  PackedObject library;
-
-  // Getters are prefixed with 'get:'.
-  // Setters are prefixed with 'set:'.
-  PackedString string;
-}
-
-// Type arguments vector.
-type TypeArguments extends ObjectContents {
-  kind = 10;
-  List<PackedObject> args;
-}
-
-abstract type ConstObject extends ObjectContents {
-  kind = 12;
-  flags = constantTag (4 bits)
-}
-
-type ConstInstance extends ConstObject {
-  kind = 12
-  constantTag (flags) = 1
-  PackedObject type;
-  List<Pair<PackedObject, PackedObject>> fieldValues;
-}
-
-type ConstInt extends ConstValue {
-  kind = 12
-  constantTag (flags) = 2
-  SLEB128 value;
-}
-
-type ConstDouble extends ConstValue {
-  kind = 12
-  constantTag (flags) = 3
-  // double bits are reinterpreted as 64-bit int
-  SLEB128 value;
-}
-
-type ConstList extends ConstObject {
-  kind = 12
-  constantTag (flags) = 4
-  PackedObject elemType;
-  List<PackedObject> entries;
-}
-
-type ConstTearOff extends ConstObject {
-  kind = 12
-  constantTag (flags) = 5
-  PackedObject target;
-}
-
-type ConstBool extends ConstValue {
-  kind = 12
-  constantTag = 6
-  Byte isTrue;
-}
-
-type ConstSymbol extends ConstObject {
-  kind = 12
-  constantTag (flags) = 7
-  PackedObject name;
-}
-
-type ConstTearOffInstantiation extends ConstObject {
-  kind = 12
-  constantTag (flags) = 8
-  PackedObject tearOff;
-  PackedObject typeArguments;
-}
-
-type ArgDesc extends ObjectContents {
-  kind = 13;
-  flags = (hasNamedArgs, hasTypeArgs)
-
-  UInt numArguments
-
- if hasTypeArgs
-   UInt numTypeArguments
-
- if hasNamedArgs
-   List<PackedObject> argNames;
-}
-
-type Script extends ObjectContents {
-  kind = 14
-  flags = (hasSourceFile)
-  PackedObject uri
-  if hasSourceFile
-    UInt sourceFileOffset
-}
-
-abstract type Type extends ObjectContents {
-  kind = 15
-  flags = typeTag (4 bits)
-}
-
-type DynamicType extends Type {
-  kind = 15
-  typeTag (flags) = 1
-}
-
-type VoidType extends Type {
-  kind = 15
-  typeTag (flags) = 2
-}
-
-type NeverType extends Type {
-  kind = 15
-  typeTag (flags) = 9
-}
-
-// SimpleType can be used only for types without instantiator type arguments.
-type SimpleType extends Type {
-  kind = 15
-  typeTag (flags) = 3
-  PackedObject class
-}
-
-type TypeParameter extends Type {
-  kind = 15
-  typeTag (flags) = 4
-  // Class, Member or Closure declaring this type parameter.
-  // Null (Invalid) if declared by function type.
-  PackedObject parent
-  UInt indexInParent
-}
-
-// Non-recursive finalized generic type.
-type GenericType extends Type {
-  kind = 15
-  typeTag (flags) = 5
-  PackedObject class
-  // Flattened type arguments vector.
-  PackedObject typeArgs
-}
-
-// Recursive finalized generic type.
-type RecursiveGenericType extends Type {
-  kind = 15
-  typeTag (flags) = 6
-  // This id is used to reference recursive types using RecursiveTypeRef.
-  // Type should be declared using RecursiveGenericType before it can be referenced.
-  // The root type should have zero recursiveId.
-  UInt recursiveId
-  PackedObject class
-  // Flattened type arguments vector.
-  PackedObject typeArgs
-}
-
-type RecursiveTypeRef extends Type {
-  kind = 15
-  typeTag (flags) = 7
-  UInt recursiveId
-}
-
-type FunctionType extends Type {
-  kind = 15
-  typeTag (flags) = 8
-
-  UInt functionTypeFlags(hasOptionalPositionalParams,
-                         hasOptionalNamedParams,
-                         hasTypeParams)
-
-  if hasTypeParams
-    TypeParametersDeclaration typeParameters
-
-  UInt numParameters
-
-  if hasOptionalPositionalParams || hasOptionalNamedParams
-    UInt numRequiredParameters
-
-  Type[] positionalParameters
-  NameAndType[] namedParameters
-  PackedObject returnType
-}
-
-type TypeParametersDeclaration {
-   UInt numTypeParameters
-   PackedObject[numTypeParameters] typeParameterNames
-   PackedObject[numTypeParameters] typeParameterBounds
-}
-
-type NameAndType {
-  PackedObject name;
-  PackedObject type;
-}
-
-*/
-
-enum ObjectKind {
-  kInvalid,
-  kLibrary,
-  kClass,
-  kMember,
-  kClosure,
-  kUnused1,
-  kUnused2,
-  kUnused3,
-  kUnused4,
-  kName,
-  kTypeArguments,
-  kUnused5,
-  kConstObject,
-  kArgDesc,
-  kScript,
-  kType,
-}
-
-enum ConstTag {
-  kInvalid,
-  kInstance,
-  kInt,
-  kDouble,
-  kList,
-  kTearOff,
-  kBool,
-  kSymbol,
-  kTearOffInstantiation,
-  kString,
-}
-
-enum TypeTag {
-  kInvalid,
-  kDynamic,
-  kVoid,
-  kSimpleType,
-  kTypeParameter,
-  kGenericType,
-  kRecursiveGenericType,
-  kRecursiveTypeRef,
-  kFunctionType,
-  kNever,
-}
-
-/// Name of artificial class containing top-level members of a library.
-const String topLevelClassName = '';
-
-String objectKindToString(ObjectKind kind) =>
-    kind.toString().substring('ObjectKind.k'.length);
-
-String nullabilityToString(Nullability nullability) {
-  switch (nullability) {
-    case Nullability.legacy:
-      return '*';
-    case Nullability.nullable:
-      return '?';
-    case Nullability.undetermined:
-      return '%';
-    case Nullability.nonNullable:
-      return '';
-  }
-  throw "Unknown Nullability: $nullability";
-}
-
-/// Represents object (library, class, member, closure, type or name) in the
-/// object table.
-abstract class ObjectHandle extends BytecodeObject {
-  static const int referenceBit = 1 << 0;
-  static const int indexShift = 1;
-  static const int inlineObject = -1;
-
-  static const int kindShift = 1;
-  static const int kindMask = 0x0F;
-
-  static const int flagBit0 = 1 << 5;
-  static const int flagBit1 = 1 << 6;
-  static const int flagBit2 = 1 << 7;
-  static const int flagBit3 = 1 << 8;
-  static const int flagBit4 = 1 << 9;
-  static const int flagBit5 = 1 << 10;
-  static const int flagsMask =
-      flagBit0 | flagBit1 | flagBit2 | flagBit3 | flagBit4 | flagBit5;
-
-  static int _makeReference(int index) => (index << indexShift) | referenceBit;
-
-  static int _getIndexFromReference(int reference) {
-    assert((reference & referenceBit) != 0);
-    return reference >> indexShift;
-  }
-
-  static int _makeHeader(ObjectKind kind, int flags) {
-    assert((kind.index & kindMask) == kind.index);
-    assert((flags & flagsMask) == flags);
-    return (kind.index << kindShift) | flags;
-  }
-
-  static ObjectKind _getKindFromHeader(int header) {
-    assert((header & referenceBit) == 0);
-    return ObjectKind.values[(header >> kindShift) & kindMask];
-  }
-
-  static int _getFlagsFromHeader(int header) {
-    assert((header & referenceBit) == 0);
-    return header & flagsMask;
-  }
-
-  int _useCount = 0;
-  int _reference;
-
-  ObjectHandle();
-
-  ObjectKind get kind;
-
-  int get flags => 0;
-  set flags(int value) {}
-
-  bool get isCacheable => true;
-  bool get shouldBeIncludedIntoIndexTable =>
-      _useCount >= ObjectTable.indexTableUseCountThreshold && isCacheable;
-
-  factory ObjectHandle._empty(ObjectKind kind, int flags) {
-    switch (kind) {
-      case ObjectKind.kInvalid:
-        return new _InvalidHandle();
-      case ObjectKind.kLibrary:
-        return new _LibraryHandle._empty();
-      case ObjectKind.kClass:
-        return new _ClassHandle._empty();
-      case ObjectKind.kMember:
-        return new _MemberHandle._empty();
-      case ObjectKind.kClosure:
-        return new _ClosureHandle._empty();
-      case ObjectKind.kName:
-        return ((flags & _NameHandle.flagIsPublic) != 0)
-            ? new _PublicNameHandle._empty()
-            : _PrivateNameHandle._empty();
-      case ObjectKind.kTypeArguments:
-        return new _TypeArgumentsHandle._empty();
-      case ObjectKind.kConstObject:
-        return new _ConstObjectHandle._empty();
-      case ObjectKind.kArgDesc:
-        return new _ArgDescHandle._empty();
-      case ObjectKind.kScript:
-        return new _ScriptHandle._empty();
-      case ObjectKind.kType:
-        Nullability nullability = Nullability
-            .values[(flags & _TypeHandle.nullabilityMask) ~/ flagBit4];
-        switch (TypeTag.values[(flags & _TypeHandle.tagMask) ~/ flagBit0]) {
-          case TypeTag.kInvalid:
-            break;
-          case TypeTag.kDynamic:
-            return new _DynamicTypeHandle();
-          case TypeTag.kVoid:
-            return new _VoidTypeHandle();
-          case TypeTag.kNever:
-            return new _NeverTypeHandle(nullability);
-          case TypeTag.kSimpleType:
-            return new _SimpleTypeHandle._empty(nullability);
-          case TypeTag.kTypeParameter:
-            return new _TypeParameterHandle._empty(nullability);
-          case TypeTag.kGenericType:
-            return new _GenericTypeHandle._empty(nullability);
-          case TypeTag.kRecursiveGenericType:
-            return new _RecursiveGenericTypeHandle._empty(nullability);
-          case TypeTag.kRecursiveTypeRef:
-            return new _RecursiveTypeRefHandle._empty(nullability);
-          case TypeTag.kFunctionType:
-            return new _FunctionTypeHandle._empty(nullability);
-        }
-        throw 'Unexpected type tag $flags';
-      case ObjectKind.kUnused1:
-      case ObjectKind.kUnused2:
-      case ObjectKind.kUnused3:
-      case ObjectKind.kUnused4:
-      case ObjectKind.kUnused5:
-        break;
-    }
-    throw 'Unexpected object kind $kind';
-  }
-
-  void _write(BufferedWriter writer) {
-    int header = _makeHeader(kind, flags);
-    assert((header & referenceBit) == 0);
-    writer.writePackedUInt30(header);
-    writeContents(writer);
-  }
-
-  void writeContents(BufferedWriter writer);
-
-  factory ObjectHandle._read(BufferedReader reader, int header) {
-    assert((header & referenceBit) == 0);
-    final ObjectKind kind = _getKindFromHeader(header);
-    final int flags = _getFlagsFromHeader(header);
-    final obj = new ObjectHandle._empty(kind, flags);
-    obj.flags = flags;
-    obj.readContents(reader);
-    return obj;
-  }
-
-  void readContents(BufferedReader reader);
-
-  void accountUsesForObjectCopies(int numCopies) {}
-
-  void indexStrings(StringWriter strings) {}
-}
-
-class _InvalidHandle extends ObjectHandle {
-  _InvalidHandle();
-
-  @override
-  ObjectKind get kind => ObjectKind.kInvalid;
-
-  @override
-  void writeContents(BufferedWriter writer) {}
-
-  @override
-  void readContents(BufferedReader reader) {}
-
-  @override
-  String toString() => 'Invalid';
-}
-
-class _LibraryHandle extends ObjectHandle {
-  _ConstObjectHandle uri;
-
-  _LibraryHandle._empty();
-
-  _LibraryHandle(this.uri);
-
-  @override
-  ObjectKind get kind => ObjectKind.kLibrary;
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writePackedObject(uri);
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    uri = reader.readPackedObject();
-  }
-
-  @override
-  void accountUsesForObjectCopies(int numCopies) {
-    uri._useCount += numCopies;
-  }
-
-  @override
-  int get hashCode => uri.hashCode + 11;
-
-  @override
-  bool operator ==(other) => other is _LibraryHandle && this.uri == other.uri;
-
-  @override
-  String toString() => uri.value;
-}
-
-class _ClassHandle extends ObjectHandle {
-  _LibraryHandle library;
-  _NameHandle name;
-
-  _ClassHandle._empty();
-
-  _ClassHandle(this.library, this.name);
-
-  @override
-  ObjectKind get kind => ObjectKind.kClass;
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writePackedObject(library);
-    writer.writePackedObject(name);
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    library = reader.readPackedObject();
-    name = reader.readPackedObject();
-  }
-
-  @override
-  void accountUsesForObjectCopies(int numCopies) {
-    library._useCount += numCopies;
-    name._useCount += numCopies;
-  }
-
-  @override
-  int get hashCode => _combineHashes(library.hashCode, name.hashCode);
-
-  @override
-  bool operator ==(other) =>
-      other is _ClassHandle &&
-      this.library == other.library &&
-      this.name == other.name;
-
-  @override
-  String toString() =>
-      name.name == topLevelClassName ? '$library' : '$library::${name.name}';
-}
-
-class _MemberHandle extends ObjectHandle {
-  static const int flagIsField = ObjectHandle.flagBit0;
-  static const int flagIsConstructor = ObjectHandle.flagBit1;
-
-  int _flags = 0;
-  _ClassHandle parent;
-  _NameHandle name;
-
-  _MemberHandle._empty();
-  _MemberHandle(this.parent, this.name, bool isField, bool isConstructor) {
-    if (isField) {
-      _flags |= flagIsField;
-    }
-    if (isConstructor) {
-      _flags |= flagIsConstructor;
-    }
-  }
-
-  @override
-  ObjectKind get kind => ObjectKind.kMember;
-
-  @override
-  int get flags => _flags;
-
-  @override
-  set flags(int value) {
-    _flags = value;
-  }
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writePackedObject(parent);
-    writer.writePackedObject(name);
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    parent = reader.readPackedObject();
-    name = reader.readPackedObject();
-  }
-
-  @override
-  void accountUsesForObjectCopies(int numCopies) {
-    parent._useCount += numCopies;
-    name._useCount += numCopies;
-  }
-
-  @override
-  int get hashCode => _combineHashes(parent.hashCode, name.hashCode);
-
-  @override
-  bool operator ==(other) =>
-      other is _MemberHandle &&
-      this.parent == other.parent &&
-      this.name == other.name &&
-      this.flags == other.flags;
-
-  @override
-  String toString() =>
-      '$parent::${name.name}' +
-      (flags & flagIsField != 0 ? ' (field)' : '') +
-      (flags & flagIsConstructor != 0 ? ' (constructor)' : '');
-}
-
-class _ClosureHandle extends ObjectHandle {
-  _MemberHandle enclosingMember;
-  int closureIndex;
-
-  _ClosureHandle._empty();
-
-  _ClosureHandle(this.enclosingMember, this.closureIndex) {
-    assert(closureIndex >= 0);
-  }
-
-  @override
-  ObjectKind get kind => ObjectKind.kClosure;
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writePackedObject(enclosingMember);
-    writer.writePackedUInt30(closureIndex);
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    enclosingMember = reader.readPackedObject();
-    closureIndex = reader.readPackedUInt30();
-  }
-
-  @override
-  void accountUsesForObjectCopies(int numCopies) {
-    enclosingMember._useCount += numCopies;
-  }
-
-  @override
-  int get hashCode => _combineHashes(enclosingMember.hashCode, closureIndex);
-
-  @override
-  bool operator ==(other) =>
-      other is _ClosureHandle &&
-      this.enclosingMember == other.enclosingMember &&
-      this.closureIndex == other.closureIndex;
-
-  @override
-  String toString() => '$enclosingMember::Closure/$closureIndex';
-}
-
-abstract class _TypeHandle extends ObjectHandle {
-  static const int tagMask = ObjectHandle.flagBit0 |
-      ObjectHandle.flagBit1 |
-      ObjectHandle.flagBit2 |
-      ObjectHandle.flagBit3;
-  static const int nullabilityMask =
-      ObjectHandle.flagBit4 | ObjectHandle.flagBit5;
-
-  final TypeTag tag;
-  Nullability nullability;
-
-  _TypeHandle(this.tag, this.nullability);
-
-  @override
-  ObjectKind get kind => ObjectKind.kType;
-
-  @override
-  int get flags =>
-      (tag.index * ObjectHandle.flagBit0) |
-      (nullability.index * ObjectHandle.flagBit4);
-
-  @override
-  set flags(int value) {
-    if (value != flags) {
-      throw 'Unable to set flags for _TypeHandle (they are occupied by type tag and nnbd)';
-    }
-  }
-}
-
-class _DynamicTypeHandle extends _TypeHandle {
-  _DynamicTypeHandle() : super(TypeTag.kDynamic, Nullability.nullable);
-
-  @override
-  void writeContents(BufferedWriter writer) {}
-
-  @override
-  void readContents(BufferedReader reader) {}
-
-  @override
-  int get hashCode => 2029;
-
-  @override
-  bool operator ==(other) => other is _DynamicTypeHandle;
-
-  @override
-  String toString() => 'dynamic';
-}
-
-class _VoidTypeHandle extends _TypeHandle {
-  _VoidTypeHandle() : super(TypeTag.kVoid, Nullability.nullable);
-
-  @override
-  void writeContents(BufferedWriter writer) {}
-
-  @override
-  void readContents(BufferedReader reader) {}
-
-  @override
-  int get hashCode => 2039;
-
-  @override
-  bool operator ==(other) => other is _VoidTypeHandle;
-
-  @override
-  String toString() => 'void';
-}
-
-class _NeverTypeHandle extends _TypeHandle {
-  _NeverTypeHandle(Nullability nullability)
-      : super(TypeTag.kNever, nullability);
-
-  @override
-  void writeContents(BufferedWriter writer) {}
-
-  @override
-  void readContents(BufferedReader reader) {}
-
-  @override
-  int get hashCode => _combineHashes(2049, nullability.index);
-
-  @override
-  bool operator ==(other) =>
-      other is _NeverTypeHandle && this.nullability == other.nullability;
-
-  @override
-  String toString() => 'Never${nullabilityToString(nullability)}';
-}
-
-class _SimpleTypeHandle extends _TypeHandle {
-  _ClassHandle class_;
-
-  _SimpleTypeHandle._empty(Nullability nullability)
-      : super(TypeTag.kSimpleType, nullability);
-
-  _SimpleTypeHandle(this.class_, Nullability nullability)
-      : super(TypeTag.kSimpleType, nullability);
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writePackedObject(class_);
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    class_ = reader.readPackedObject();
-  }
-
-  @override
-  void accountUsesForObjectCopies(int numCopies) {
-    if (class_ != null) {
-      class_._useCount += numCopies;
-    }
-  }
-
-  @override
-  int get hashCode => _combineHashes(class_.hashCode, nullability.index);
-
-  @override
-  bool operator ==(other) =>
-      other is _SimpleTypeHandle &&
-      this.class_ == other.class_ &&
-      this.nullability == other.nullability;
-
-  @override
-  String toString() => '$class_${nullabilityToString(nullability)}';
-}
-
-class _TypeParameterHandle extends _TypeHandle {
-  ObjectHandle parent;
-  int indexInParent;
-
-  _TypeParameterHandle._empty(Nullability nullability)
-      : super(TypeTag.kTypeParameter, nullability);
-
-  _TypeParameterHandle(this.parent, this.indexInParent, Nullability nullability)
-      : super(TypeTag.kTypeParameter, nullability) {
-    assert(parent is _ClassHandle ||
-        parent is _MemberHandle ||
-        parent is _ClosureHandle ||
-        parent == null);
-    assert(indexInParent >= 0);
-  }
-
-  @override
-  bool get isCacheable => (parent != null);
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writePackedObject(parent);
-    writer.writePackedUInt30(indexInParent);
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    parent = reader.readPackedObject();
-    indexInParent = reader.readPackedUInt30();
-  }
-
-  @override
-  void accountUsesForObjectCopies(int numCopies) {
-    if (parent != null) {
-      parent._useCount += numCopies;
-    }
-  }
-
-  @override
-  int get hashCode => _combineHashes(
-      parent.hashCode, _combineHashes(indexInParent, nullability.index));
-
-  @override
-  bool operator ==(other) =>
-      other is _TypeParameterHandle &&
-      this.parent == other.parent &&
-      this.indexInParent == other.indexInParent &&
-      this.nullability == other.nullability;
-
-  @override
-  String toString() =>
-      '$parent::TypeParam/$indexInParent${nullabilityToString(nullability)}';
-}
-
-class _GenericTypeHandle extends _TypeHandle {
-  _ClassHandle class_;
-  _TypeArgumentsHandle typeArgs;
-
-  _GenericTypeHandle._empty(Nullability nullability)
-      : super(TypeTag.kGenericType, nullability);
-
-  _GenericTypeHandle(this.class_, this.typeArgs, Nullability nullability)
-      : super(TypeTag.kGenericType, nullability);
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writePackedObject(class_);
-    writer.writePackedObject(typeArgs);
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    class_ = reader.readPackedObject();
-    typeArgs = reader.readPackedObject();
-  }
-
-  @override
-  void accountUsesForObjectCopies(int numCopies) {
-    class_._useCount += numCopies;
-    if (typeArgs != null) {
-      typeArgs._useCount += numCopies;
-    }
-  }
-
-  @override
-  int get hashCode => _combineHashes(
-      class_.hashCode, _combineHashes(typeArgs.hashCode, nullability.index));
-
-  @override
-  bool operator ==(other) =>
-      other is _GenericTypeHandle &&
-      this.class_ == other.class_ &&
-      this.typeArgs == other.typeArgs &&
-      this.nullability == other.nullability;
-
-  @override
-  String toString() => '$class_ $typeArgs${nullabilityToString(nullability)}';
-}
-
-class _RecursiveGenericTypeHandle extends _TypeHandle {
-  int id;
-  _ClassHandle class_;
-  _TypeArgumentsHandle typeArgs;
-
-  _RecursiveGenericTypeHandle._empty(Nullability nullability)
-      : super(TypeTag.kRecursiveGenericType, nullability);
-
-  _RecursiveGenericTypeHandle(
-      this.id, this.class_, this.typeArgs, Nullability nullability)
-      : super(TypeTag.kRecursiveGenericType, nullability);
-
-  @override
-  bool get isCacheable => (id == 0);
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writePackedUInt30(id);
-    writer.writePackedObject(class_);
-    writer.writePackedObject(typeArgs);
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    id = reader.readPackedUInt30();
-    class_ = reader.readPackedObject();
-    typeArgs = reader.readPackedObject();
-  }
-
-  @override
-  void accountUsesForObjectCopies(int numCopies) {
-    class_._useCount += numCopies;
-    if (typeArgs != null) {
-      typeArgs._useCount += numCopies;
-    }
-  }
-
-  @override
-  int get hashCode => _combineHashes(
-      class_.hashCode, _combineHashes(typeArgs.hashCode, nullability.index));
-
-  @override
-  bool operator ==(other) =>
-      other is _RecursiveGenericTypeHandle &&
-      this.class_ == other.class_ &&
-      this.typeArgs == other.typeArgs &&
-      this.nullability == other.nullability;
-
-  @override
-  String toString() =>
-      '(recursive #$id) $class_ $typeArgs${nullabilityToString(nullability)}';
-}
-
-class _RecursiveTypeRefHandle extends _TypeHandle {
-  int id;
-
-  _RecursiveTypeRefHandle._empty(Nullability nullability)
-      : super(TypeTag.kRecursiveTypeRef, nullability);
-
-  _RecursiveTypeRefHandle(this.id)
-      : super(TypeTag.kRecursiveTypeRef, Nullability.legacy);
-
-  @override
-  bool get isCacheable => false;
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writePackedUInt30(id);
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    id = reader.readPackedUInt30();
-  }
-
-  @override
-  int get hashCode => id;
-
-  @override
-  bool operator ==(other) =>
-      other is _RecursiveTypeRefHandle && this.id == other.id;
-
-  @override
-  String toString() => 'recursive-ref #$id';
-}
-
-class NameAndType {
-  _NameHandle name;
-  _TypeHandle type;
-
-  NameAndType(this.name, this.type);
-
-  @override
-  int get hashCode => _combineHashes(name.hashCode, type.hashCode);
-
-  @override
-  bool operator ==(other) =>
-      other is NameAndType &&
-      this.name == other.name &&
-      this.type == other.type;
-
-  @override
-  String toString() => '$type ${name.name}';
-}
-
-class _FunctionTypeHandle extends _TypeHandle {
-  static const int flagHasOptionalPositionalParams = 1 << 0;
-  static const int flagHasOptionalNamedParams = 1 << 1;
-  static const int flagHasTypeParams = 1 << 2;
-
-  int functionTypeFlags = 0;
-  List<NameAndType> typeParams;
-  int numRequiredParams;
-  List<_TypeHandle> positionalParams;
-  List<NameAndType> namedParams;
-  _TypeHandle returnType;
-
-  _FunctionTypeHandle._empty(Nullability nullability)
-      : super(TypeTag.kFunctionType, nullability);
-
-  _FunctionTypeHandle(
-      this.typeParams,
-      this.numRequiredParams,
-      this.positionalParams,
-      this.namedParams,
-      this.returnType,
-      Nullability nullability)
-      : super(TypeTag.kFunctionType, nullability) {
-    assert(numRequiredParams <= positionalParams.length + namedParams.length);
-    if (numRequiredParams < positionalParams.length) {
-      assert(namedParams.isEmpty);
-      functionTypeFlags |= flagHasOptionalPositionalParams;
-    }
-    if (namedParams.isNotEmpty) {
-      assert(numRequiredParams == positionalParams.length);
-      functionTypeFlags |= flagHasOptionalNamedParams;
-    }
-    if (typeParams.isNotEmpty) {
-      functionTypeFlags |= flagHasTypeParams;
-    }
-  }
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writePackedUInt30(functionTypeFlags);
-    if ((functionTypeFlags & flagHasTypeParams) != 0) {
-      new TypeParametersDeclaration(typeParams).write(writer);
-    }
-    writer.writePackedUInt30(positionalParams.length + namedParams.length);
-    if (functionTypeFlags &
-            (flagHasOptionalPositionalParams | flagHasOptionalNamedParams) !=
-        0) {
-      writer.writePackedUInt30(numRequiredParams);
-    }
-    for (var param in positionalParams) {
-      writer.writePackedObject(param);
-    }
-    for (var param in namedParams) {
-      writer.writePackedObject(param.name);
-      writer.writePackedObject(param.type);
-    }
-    writer.writePackedObject(returnType);
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    functionTypeFlags = reader.readPackedUInt30();
-    if ((functionTypeFlags & flagHasTypeParams) != 0) {
-      typeParams = new TypeParametersDeclaration.read(reader).typeParams;
-    } else {
-      typeParams = const <NameAndType>[];
-    }
-    final int numParams = reader.readPackedUInt30();
-    numRequiredParams = numParams;
-    if ((functionTypeFlags &
-            (flagHasOptionalPositionalParams | flagHasOptionalNamedParams)) !=
-        0) {
-      numRequiredParams = reader.readPackedUInt30();
-    }
-    final bool hasNamedParams =
-        (functionTypeFlags & flagHasOptionalNamedParams) != 0;
-    positionalParams = new List<_TypeHandle>.generate(
-        hasNamedParams ? numRequiredParams : numParams,
-        (_) => reader.readPackedObject());
-    if (hasNamedParams) {
-      namedParams = new List<NameAndType>.generate(
-          numParams - numRequiredParams,
-          (_) => new NameAndType(
-              reader.readPackedObject(), reader.readPackedObject()));
-    } else {
-      namedParams = const <NameAndType>[];
-    }
-    returnType = reader.readPackedObject();
-  }
-
-  @override
-  void accountUsesForObjectCopies(int numCopies) {
-    positionalParams.forEach((p) {
-      p._useCount += numCopies;
-    });
-    namedParams.forEach((p) {
-      p.name._useCount += numCopies;
-      p.type._useCount += numCopies;
-    });
-  }
-
-  @override
-  bool get isCacheable {
-    for (var param in positionalParams) {
-      if (!param.isCacheable) {
-        return false;
-      }
-    }
-    for (var param in namedParams) {
-      if (!param.type.isCacheable) {
-        return false;
-      }
-    }
-    if (!returnType.isCacheable) {
-      return false;
-    }
-    return true;
-  }
-
-  @override
-  int get hashCode {
-    int hash = listHashCode(typeParams);
-    hash = _combineHashes(hash, numRequiredParams);
-    hash = _combineHashes(hash, listHashCode(positionalParams));
-    hash = _combineHashes(hash, listHashCode(namedParams));
-    hash = _combineHashes(hash, returnType.hashCode);
-    hash = _combineHashes(hash, nullability.index);
-    return hash;
-  }
-
-  @override
-  bool operator ==(other) =>
-      other is _FunctionTypeHandle &&
-      listEquals(this.typeParams, other.typeParams) &&
-      this.numRequiredParams == other.numRequiredParams &&
-      listEquals(this.positionalParams, other.positionalParams) &&
-      listEquals(this.namedParams, other.namedParams) &&
-      this.returnType == other.returnType &&
-      this.nullability == other.nullability;
-
-  @override
-  String toString() {
-    StringBuffer sb = new StringBuffer();
-    sb.write('FunctionType');
-    if (typeParams.isNotEmpty) {
-      sb.write(' <${typeParams.join(', ')}>');
-    }
-    sb.write(' (');
-    sb.write(positionalParams.sublist(0, numRequiredParams).join(', '));
-    if (numRequiredParams != positionalParams.length) {
-      if (numRequiredParams > 0) {
-        sb.write(', ');
-      }
-      sb.write('[ ${positionalParams.sublist(numRequiredParams).join(', ')} ]');
-    }
-    if (namedParams.isNotEmpty) {
-      if (numRequiredParams > 0) {
-        sb.write(', ');
-      }
-      sb.write('{ ${namedParams.join(', ')} }');
-    }
-    sb.write(')${nullabilityToString(nullability)} -> ');
-    sb.write(returnType);
-    return sb.toString();
-  }
-}
-
-abstract class _NameHandle extends ObjectHandle {
-  static const int flagIsPublic = ObjectHandle.flagBit0;
-
-  String get name;
-
-  @override
-  ObjectKind get kind => ObjectKind.kName;
-
-  @override
-  void indexStrings(StringWriter strings) {
-    strings.put(name);
-  }
-
-  @override
-  String toString() => "'$name'";
-}
-
-class _PublicNameHandle extends _NameHandle {
-  String name;
-
-  _PublicNameHandle._empty();
-
-  _PublicNameHandle(this.name);
-
-  @override
-  int get flags => _NameHandle.flagIsPublic;
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writePackedStringReference(name);
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    name = reader.readPackedStringReference();
-  }
-
-  @override
-  int get hashCode => name.hashCode;
-
-  @override
-  bool operator ==(other) =>
-      other is _PublicNameHandle && this.name == other.name;
-
-  @override
-  String toString() => "'$name'";
-}
-
-class _PrivateNameHandle extends _NameHandle {
-  _LibraryHandle library;
-  String name;
-
-  _PrivateNameHandle._empty();
-
-  _PrivateNameHandle(this.library, this.name) {
-    assert(library != null);
-  }
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writePackedObject(library);
-    writer.writePackedStringReference(name);
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    library = reader.readPackedObject();
-    name = reader.readPackedStringReference();
-  }
-
-  @override
-  void accountUsesForObjectCopies(int numCopies) {
-    library._useCount += numCopies;
-  }
-
-  @override
-  int get hashCode => _combineHashes(name.hashCode, library.hashCode);
-
-  @override
-  bool operator ==(other) =>
-      other is _PrivateNameHandle &&
-      this.name == other.name &&
-      this.library == other.library;
-
-  @override
-  String toString() => "'$name'";
-}
-
-class _TypeArgumentsHandle extends ObjectHandle {
-  List<_TypeHandle> args;
-
-  _TypeArgumentsHandle._empty();
-
-  _TypeArgumentsHandle(this.args);
-
-  @override
-  ObjectKind get kind => ObjectKind.kTypeArguments;
-
-  @override
-  bool get isCacheable {
-    for (var arg in args) {
-      if (!arg.isCacheable) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writePackedList(args);
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    args = reader.readPackedList<_TypeHandle>();
-  }
-
-  @override
-  void accountUsesForObjectCopies(int numCopies) {
-    args.forEach((t) {
-      t._useCount += numCopies;
-    });
-  }
-
-  @override
-  int get hashCode => listHashCode(args);
-
-  @override
-  bool operator ==(other) =>
-      other is _TypeArgumentsHandle && listEquals(this.args, other.args);
-
-  @override
-  String toString() => '< ${args.join(', ')} >';
-}
-
-class _ConstObjectHandle extends ObjectHandle {
-  ConstTag tag;
-  dynamic value;
-  ObjectHandle type;
-  int _hashCode = 0;
-
-  _ConstObjectHandle._empty();
-
-  _ConstObjectHandle(this.tag, this.value, [this.type]);
-
-  @override
-  ObjectKind get kind => ObjectKind.kConstObject;
-
-  @override
-  int get flags => tag.index * ObjectHandle.flagBit0;
-
-  @override
-  set flags(int value) {
-    tag = ConstTag.values[value ~/ ObjectHandle.flagBit0];
-    assert(tag != ConstTag.kInvalid);
-  }
-
-  bool get isCacheable => (tag != ConstTag.kInt) && (tag != ConstTag.kBool);
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    switch (tag) {
-      case ConstTag.kInt:
-        writer.writeSLEB128(value as int);
-        break;
-      case ConstTag.kDouble:
-        writer.writeSLEB128(doubleToIntBits(value as double));
-        break;
-      case ConstTag.kBool:
-        writer.writeByte((value as bool) ? 1 : 0);
-        break;
-      case ConstTag.kInstance:
-        {
-          final fieldValues = value as Map<ObjectHandle, ObjectHandle>;
-          writer.writePackedObject(type);
-          writer.writePackedUInt30(fieldValues.length);
-          fieldValues.forEach((ObjectHandle field, ObjectHandle value) {
-            writer.writePackedObject(field);
-            writer.writePackedObject(value);
-          });
-        }
-        break;
-      case ConstTag.kList:
-        {
-          final elems = value as List<ObjectHandle>;
-          writer.writePackedObject(type);
-          writer.writePackedList(elems);
-        }
-        break;
-      case ConstTag.kTearOff:
-        {
-          final target = value as ObjectHandle;
-          writer.writePackedObject(target);
-        }
-        break;
-      case ConstTag.kSymbol:
-        {
-          final name = value as ObjectHandle;
-          writer.writePackedObject(name);
-        }
-        break;
-      case ConstTag.kTearOffInstantiation:
-        {
-          final tearOff = value as ObjectHandle;
-          writer.writePackedObject(tearOff);
-          writer.writePackedObject(type as _TypeArgumentsHandle);
-        }
-        break;
-      case ConstTag.kString:
-        writer.writePackedStringReference(value as String);
-        break;
-      default:
-        throw 'Unexpected constant tag: $tag';
-    }
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    switch (tag) {
-      case ConstTag.kInt:
-        value = reader.readSLEB128();
-        break;
-      case ConstTag.kDouble:
-        value = intBitsToDouble(reader.readSLEB128());
-        break;
-      case ConstTag.kBool:
-        value = reader.readByte() != 0;
-        break;
-      case ConstTag.kInstance:
-        type = reader.readPackedObject();
-        value = Map<ObjectHandle, ObjectHandle>.fromEntries(
-            new List<MapEntry<ObjectHandle, ObjectHandle>>.generate(
-                reader.readPackedUInt30(),
-                (_) => new MapEntry<ObjectHandle, ObjectHandle>(
-                    reader.readPackedObject(), reader.readPackedObject())));
-        break;
-      case ConstTag.kList:
-        type = reader.readPackedObject();
-        value = reader.readPackedList<ObjectHandle>();
-        break;
-      case ConstTag.kTearOff:
-        value = reader.readPackedObject();
-        break;
-      case ConstTag.kSymbol:
-        value = reader.readPackedObject();
-        break;
-      case ConstTag.kTearOffInstantiation:
-        value = reader.readPackedObject();
-        type = reader.readPackedObject();
-        break;
-      case ConstTag.kString:
-        value = reader.readPackedStringReference();
-        break;
-      default:
-        throw 'Unexpected constant tag: $tag';
-    }
-  }
-
-  @override
-  void accountUsesForObjectCopies(int numCopies) {
-    switch (tag) {
-      case ConstTag.kInt:
-      case ConstTag.kDouble:
-      case ConstTag.kBool:
-      case ConstTag.kString:
-        break;
-      case ConstTag.kInstance:
-        {
-          type._useCount += numCopies;
-          final fieldValues = value as Map<ObjectHandle, ObjectHandle>;
-          fieldValues.forEach((ObjectHandle field, ObjectHandle value) {
-            field._useCount += numCopies;
-            value?._useCount += numCopies;
-          });
-        }
-        break;
-      case ConstTag.kList:
-        {
-          final elems = value as List<ObjectHandle>;
-          for (var elem in elems) {
-            elem?._useCount += numCopies;
-          }
-          type._useCount += numCopies;
-        }
-        break;
-      case ConstTag.kTearOff:
-        {
-          final target = value as ObjectHandle;
-          target._useCount += numCopies;
-        }
-        break;
-      case ConstTag.kSymbol:
-        {
-          final name = value as ObjectHandle;
-          name._useCount += numCopies;
-        }
-        break;
-      case ConstTag.kTearOffInstantiation:
-        {
-          final tearOff = value as ObjectHandle;
-          tearOff._useCount += numCopies;
-          if (type != null) {
-            type._useCount += numCopies;
-          }
-        }
-        break;
-      default:
-        throw 'Unexpected constant tag: $tag';
-    }
-  }
-
-  @override
-  int get hashCode {
-    if (_hashCode != 0) {
-      return _hashCode;
-    }
-    switch (tag) {
-      case ConstTag.kInt:
-      case ConstTag.kDouble:
-      case ConstTag.kBool:
-      case ConstTag.kTearOff:
-      case ConstTag.kSymbol:
-      case ConstTag.kString:
-        return _hashCode = value.hashCode;
-      case ConstTag.kInstance:
-        {
-          final fieldValues = value as Map<ObjectHandle, ObjectHandle>;
-          return _hashCode =
-              _combineHashes(type.hashCode, mapHashCode(fieldValues));
-        }
-        break;
-      case ConstTag.kList:
-        {
-          final elems = value as List<ObjectHandle>;
-          return _hashCode = _combineHashes(type.hashCode, listHashCode(elems));
-        }
-        break;
-      case ConstTag.kTearOffInstantiation:
-        return _hashCode = _combineHashes(value.hashCode, type.hashCode);
-      default:
-        throw 'Unexpected constant tag: $tag';
-    }
-  }
-
-  @override
-  bool operator ==(other) {
-    if (identical(this, other)) {
-      return true;
-    }
-    if (other is _ConstObjectHandle && this.tag == other.tag) {
-      switch (tag) {
-        case ConstTag.kInt:
-        case ConstTag.kBool:
-        case ConstTag.kTearOff:
-        case ConstTag.kSymbol:
-        case ConstTag.kString:
-          return this.value == other.value;
-        case ConstTag.kDouble:
-          return this.value.compareTo(other.value) == 0;
-        case ConstTag.kInstance:
-          return this.type == other.type && mapEquals(this.value, other.value);
-        case ConstTag.kList:
-          return this.type == other.type && listEquals(this.value, other.value);
-        case ConstTag.kTearOffInstantiation:
-          return this.type == other.type && this.value == other.value;
-        default:
-          throw 'Unexpected constant tag: $tag';
-      }
-    }
-    return false;
-  }
-
-  @override
-  String toString() {
-    switch (tag) {
-      case ConstTag.kInt:
-      case ConstTag.kDouble:
-      case ConstTag.kBool:
-      case ConstTag.kSymbol:
-        return 'const $value';
-      case ConstTag.kInstance:
-        return 'const $type $value';
-      case ConstTag.kList:
-        return 'const <$type> $value';
-      case ConstTag.kTearOff:
-        return 'const tear-off $value';
-      case ConstTag.kTearOffInstantiation:
-        return 'const $type $value';
-      case ConstTag.kString:
-        return "'$value'";
-      default:
-        throw 'Unexpected constant tag: $tag';
-    }
-  }
-}
-
-class _ArgDescHandle extends ObjectHandle {
-  static const int flagHasNamedArgs = ObjectHandle.flagBit0;
-  static const int flagHasTypeArgs = ObjectHandle.flagBit1;
-
-  int _flags = 0;
-  int numArguments;
-  int numTypeArguments;
-  List<_PublicNameHandle> argNames;
-
-  _ArgDescHandle._empty();
-
-  _ArgDescHandle(this.numArguments, this.numTypeArguments, this.argNames) {
-    if (argNames.isNotEmpty) {
-      _flags |= flagHasNamedArgs;
-    }
-    if (numTypeArguments > 0) {
-      _flags |= flagHasTypeArgs;
-    }
-  }
-
-  @override
-  ObjectKind get kind => ObjectKind.kArgDesc;
-
-  @override
-  int get flags => _flags;
-
-  @override
-  set flags(int value) {
-    _flags = value;
-  }
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writePackedUInt30(numArguments);
-    if ((_flags & flagHasTypeArgs) != 0) {
-      writer.writePackedUInt30(numTypeArguments);
-    }
-    if ((_flags & flagHasNamedArgs) != 0) {
-      writer.writePackedList(argNames);
-    }
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    numArguments = reader.readPackedUInt30();
-    numTypeArguments =
-        ((_flags & flagHasTypeArgs) != 0) ? reader.readPackedUInt30() : 0;
-    argNames = ((_flags & flagHasNamedArgs) != 0)
-        ? reader.readPackedList<_PublicNameHandle>()
-        : null;
-  }
-
-  @override
-  void accountUsesForObjectCopies(int numCopies) {
-    if (argNames != null) {
-      for (var name in argNames) {
-        name._useCount += numCopies;
-      }
-    }
-  }
-
-  @override
-  int get hashCode => _combineHashes(
-      numArguments, _combineHashes(numTypeArguments, listHashCode(argNames)));
-
-  @override
-  bool operator ==(other) =>
-      other is _ArgDescHandle &&
-      this.numArguments == other.numArguments &&
-      this.numTypeArguments == other.numTypeArguments &&
-      listEquals(this.argNames, other.argNames);
-
-  @override
-  String toString() =>
-      'ArgDesc num-args $numArguments, num-type-args $numTypeArguments, names $argNames';
-}
-
-class _ScriptHandle extends ObjectHandle {
-  static const int flagHasSourceFile = ObjectHandle.flagBit0;
-
-  int _flags = 0;
-  ObjectHandle uri;
-  SourceFile _source;
-  ForwardReference<SourceFile> _sourceForwardReference;
-
-  _ScriptHandle._empty();
-
-  _ScriptHandle(this.uri, this._source) {
-    if (_source != null) {
-      _flags |= flagHasSourceFile;
-    }
-  }
-
-  @override
-  ObjectKind get kind => ObjectKind.kScript;
-
-  // Include scripts into index table if there are more than 1 reference
-  // in order to make sure there are no duplicated script objects within the
-  // same bytecode component.
-  @override
-  bool get shouldBeIncludedIntoIndexTable => _useCount > 1;
-
-  @override
-  int get flags => _flags;
-
-  @override
-  set flags(int value) {
-    _flags = value;
-  }
-
-  SourceFile get source {
-    // Unwrap forward reference on the first access.
-    if (_sourceForwardReference != null) {
-      _source = _sourceForwardReference.get();
-      _sourceForwardReference = null;
-    }
-    return _source;
-  }
-
-  set source(SourceFile sourceFile) {
-    _source = sourceFile;
-    if (_source != null) {
-      _flags |= flagHasSourceFile;
-    } else {
-      _flags &= ~flagHasSourceFile;
-    }
-  }
-
-  @override
-  void writeContents(BufferedWriter writer) {
-    writer.writePackedObject(uri);
-    if ((_flags & flagHasSourceFile) != 0) {
-      writer.writeLinkOffset(source);
-    }
-  }
-
-  @override
-  void readContents(BufferedReader reader) {
-    uri = reader.readPackedObject();
-    if ((_flags & flagHasSourceFile) != 0) {
-      // Script handles in the object table may be read before source files,
-      // so use forwarding reference here.
-      _sourceForwardReference =
-          reader.readLinkOffsetAsForwardReference<SourceFile>();
-    }
-  }
-
-  @override
-  int get hashCode => uri.hashCode;
-
-  @override
-  bool operator ==(other) => other is _ScriptHandle && this.uri == other.uri;
-
-  @override
-  String toString() => "$uri${source != null ? '($source)' : ''}";
-}
-
-class ObjectTable implements ObjectWriter, ObjectReader {
-  /// Object is added to an index table if it is used more than this
-  /// number of times.
-  static const int indexTableUseCountThreshold = 3;
-
-  final List<ObjectHandle> _objects = new List<ObjectHandle>();
-  final Map<ObjectHandle, ObjectHandle> _canonicalizationCache =
-      <ObjectHandle, ObjectHandle>{};
-  final Map<Node, ObjectHandle> _nodeCache = <Node, ObjectHandle>{};
-  final Map<String, _PublicNameHandle> _publicNames =
-      <String, _PublicNameHandle>{};
-  List<ObjectHandle> _indexTable;
-  _TypeHandle _dynamicType;
-  _TypeHandle _voidType;
-  _NodeVisitor _nodeVisitor;
-
-  ObjectTable(CoreTypes coreTypes) {
-    _dynamicType = getOrAddObject(new _DynamicTypeHandle());
-    _voidType = getOrAddObject(new _VoidTypeHandle());
-    _nodeVisitor = new _NodeVisitor(this, coreTypes);
-  }
-
-  ObjectHandle getHandle(Node node) {
-    if (node == null) {
-      return null;
-    }
-    ObjectHandle handle = _nodeCache[node];
-    if (handle == null) {
-      handle = node.accept(_nodeVisitor);
-      if (handle != null && handle.isCacheable) {
-        _nodeCache[node] = handle;
-      }
-    } else {
-      ++handle._useCount;
-    }
-    return handle;
-  }
-
-  List<ObjectHandle> getHandles(List<Node> nodes) {
-    final handles = new List<ObjectHandle>(nodes.length);
-    for (int i = 0; i < nodes.length; ++i) {
-      handles[i] = getHandle(nodes[i]);
-    }
-    return handles;
-  }
-
-  String mangleGetterName(String name) => 'get:$name';
-
-  String mangleSetterName(String name) => 'set:$name';
-
-  String mangleSelectorName(String name, bool isGetter, bool isSetter) {
-    if (isGetter) {
-      return mangleGetterName(name);
-    } else if (isSetter) {
-      return mangleSetterName(name);
-    } else {
-      return name;
-    }
-  }
-
-  String mangleMemberName(Member member, bool isGetter, bool isSetter) {
-    final name = member.name.text;
-    if (isGetter || (member is Procedure && member.isGetter)) {
-      return mangleGetterName(name);
-    }
-    if (isSetter || (member is Procedure && member.isSetter)) {
-      return mangleSetterName(name);
-    }
-    return name;
-  }
-
-  ObjectHandle getPublicNameHandle(String name) {
-    assert(name != null);
-    _PublicNameHandle handle = _publicNames[name];
-    if (handle == null) {
-      handle = getOrAddObject(new _PublicNameHandle(name));
-      _publicNames[name] = handle;
-    }
-    return handle;
-  }
-
-  ObjectHandle getNameHandle(Library library, String name) {
-    if (library == null) {
-      return getPublicNameHandle(name);
-    }
-    assert(name != null);
-    final libraryHandle = library != null ? getHandle(library) : null;
-    return getOrAddObject(new _PrivateNameHandle(libraryHandle, name));
-  }
-
-  List<_PublicNameHandle> getPublicNameHandles(List<String> names) {
-    if (names.isEmpty) {
-      return const <_PublicNameHandle>[];
-    }
-    final handles = new List<_PublicNameHandle>(names.length);
-    for (int i = 0; i < names.length; ++i) {
-      handles[i] = getPublicNameHandle(names[i]);
-    }
-    return handles;
-  }
-
-  ObjectHandle getConstStringHandle(String value) =>
-      getOrAddObject(new _ConstObjectHandle(ConstTag.kString, value));
-
-  List<ObjectHandle> getConstStringHandles(List<String> values) {
-    if (values.isEmpty) {
-      return const <ObjectHandle>[];
-    }
-    final handles = new List<ObjectHandle>(values.length);
-    for (int i = 0; i < values.length; ++i) {
-      handles[i] = getConstStringHandle(values[i]);
-    }
-    return handles;
-  }
-
-  ObjectHandle getSelectorNameHandle(Name name,
-      {bool isGetter: false, bool isSetter: false}) {
-    return getNameHandle(
-        name.library, mangleSelectorName(name.text, isGetter, isSetter));
-  }
-
-  ObjectHandle getTopLevelClassHandle(Library library) {
-    final libraryHandle = getHandle(library);
-    final name = getPublicNameHandle(topLevelClassName);
-    return getOrAddObject(new _ClassHandle(libraryHandle, name));
-  }
-
-  ObjectHandle getMemberHandle(Member member,
-      {bool isGetter: false, bool isSetter: false}) {
-    final parent = member.parent;
-    ObjectHandle classHandle;
-    if (parent is Class) {
-      classHandle = getHandle(parent);
-    } else if (parent is Library) {
-      classHandle = getTopLevelClassHandle(parent);
-    } else {
-      throw "Unexpected Member's parent ${parent.runtimeType} $parent";
-    }
-    final nameHandle = getNameHandle(
-        member.name.library, mangleMemberName(member, isGetter, isSetter));
-    bool isField = member is Field && !isGetter && !isSetter;
-    bool isConstructor =
-        member is Constructor || (member is Procedure && member.isFactory);
-    return getOrAddObject(
-        new _MemberHandle(classHandle, nameHandle, isField, isConstructor));
-  }
-
-  ObjectHandle getTypeArgumentsHandle(List<DartType> typeArgs) {
-    if (typeArgs == null) {
-      return null;
-    }
-    final handles = new List<_TypeHandle>(typeArgs.length);
-    for (int i = 0; i < typeArgs.length; ++i) {
-      handles[i] = getHandle(typeArgs[i]) as _TypeHandle;
-    }
-    return getOrAddObject(new _TypeArgumentsHandle(handles));
-  }
-
-  ObjectHandle getArgDescHandle(int numArguments,
-      [int numTypeArguments = 0, List<String> argNames = const <String>[]]) {
-    return getOrAddObject(new _ArgDescHandle(
-        numArguments, numTypeArguments, getPublicNameHandles(argNames)));
-  }
-
-  ObjectHandle getArgDescHandleByArguments(Arguments args,
-      {bool hasReceiver: false, bool isFactory: false}) {
-    List<_PublicNameHandle> argNames = const <_PublicNameHandle>[];
-    final namedArguments = args.named;
-    if (namedArguments.isNotEmpty) {
-      argNames = new List<_PublicNameHandle>(namedArguments.length);
-      for (int i = 0; i < namedArguments.length; ++i) {
-        argNames[i] = getPublicNameHandle(namedArguments[i].name);
-      }
-    }
-    final int numArguments = args.positional.length +
-        args.named.length +
-        (hasReceiver ? 1 : 0) +
-        // VM expects that type arguments vector passed to a factory
-        // constructor is counted in numArguments, and not counted in
-        // numTypeArgs.
-        // TODO(alexmarkov): Clean this up.
-        (isFactory ? 1 : 0);
-    final int numTypeArguments = isFactory ? 0 : args.types.length;
-    return getOrAddObject(
-        new _ArgDescHandle(numArguments, numTypeArguments, argNames));
-  }
-
-  ObjectHandle getScriptHandle(Uri uri, SourceFile source) {
-    ObjectHandle uriHandle = getPublicNameHandle(uri.toString());
-    _ScriptHandle handle = getOrAddObject(new _ScriptHandle(uriHandle, source));
-    if (handle.source == null && source != null) {
-      handle.source = source;
-    }
-    return handle;
-  }
-
-  List<NameAndType> getTypeParameterHandles(List<TypeParameter> typeParams) {
-    if (typeParams.isEmpty) {
-      return const <NameAndType>[];
-    }
-    final namesAndBounds = new List<NameAndType>();
-    for (TypeParameter tp in typeParams) {
-      namesAndBounds.add(
-          new NameAndType(getPublicNameHandle(tp.name), getHandle(tp.bound)));
-    }
-    return namesAndBounds;
-  }
-
-  void declareClosure(
-      FunctionNode function, Member enclosingMember, int closureIndex) {
-    final handle = getOrAddObject(
-        new _ClosureHandle(getHandle(enclosingMember), closureIndex));
-    _nodeCache[function] = handle;
-  }
-
-  ObjectHandle getOrAddObject(ObjectHandle obj) {
-    assert(obj._useCount == 0);
-    ObjectHandle canonical = _canonicalizationCache[obj];
-    if (canonical == null) {
-      assert(_indexTable == null);
-      _objects.add(obj);
-      _canonicalizationCache[obj] = obj;
-      canonical = obj;
-    }
-    ++canonical._useCount;
-    return canonical;
-  }
-
-  void allocateIndexTable() {
-    int tableSize = 1; // Reserve invalid entry.
-    for (var obj in _objects.reversed) {
-      assert(obj._reference == null);
-      if (obj.shouldBeIncludedIntoIndexTable) {
-        // This object will be included into index table.
-        ++tableSize;
-      } else {
-        // This object will be copied and written inline. Bump use count for
-        // objects referenced from this one for each copy after the first.
-        obj._reference = ObjectHandle.inlineObject;
-        obj.accountUsesForObjectCopies(obj._useCount - 1);
-      }
-    }
-    _indexTable = new List<ObjectHandle>(tableSize);
-    int count = 0;
-    _indexTable[count++] = new _InvalidHandle()
-      .._reference = ObjectHandle._makeReference(0);
-    for (var obj in _objects) {
-      if (obj._reference == null) {
-        obj._reference = ObjectHandle._makeReference(count);
-        _indexTable[count++] = obj;
-      } else {
-        assert(obj._reference == ObjectHandle.inlineObject);
-      }
-    }
-    assert(count == tableSize);
-  }
-
-  @override
-  void writeObject(BytecodeObject object, BufferedWriter writer) {
-    ObjectHandle handle = object as ObjectHandle;
-    if (handle == null) {
-      writer.writePackedUInt30(ObjectHandle._makeReference(0));
-      return;
-    }
-    if (handle._reference == ObjectHandle.inlineObject) {
-      handle._write(writer);
-    } else {
-      assert(handle._reference >= 0);
-      assert((handle._reference & ObjectHandle.referenceBit) != 0);
-      writer.writePackedUInt30(handle._reference);
-    }
-  }
-
-  @override
-  BytecodeObject readObject(BufferedReader reader) {
-    final int header = reader.readPackedUInt30();
-    if ((header & ObjectHandle.referenceBit) == 0) {
-      return new ObjectHandle._read(reader, header);
-    } else {
-      final int index = ObjectHandle._getIndexFromReference(header);
-      return (index == 0) ? null : _indexTable[index];
-    }
-  }
-
-  void write(BufferedWriter writer) {
-    assert(writer.objectWriter == this);
-    assert(_indexTable != null);
-    final start = writer.offset;
-    if (BytecodeSizeStatistics.objectTableStats.isEmpty) {
-      for (var kind in ObjectKind.values) {
-        BytecodeSizeStatistics.objectTableStats
-            .add(new NamedEntryStatistics(objectKindToString(kind)));
-      }
-    }
-
-    BufferedWriter contentsWriter = new BufferedWriter.fromWriter(writer);
-    List<int> offsets = new List<int>(_indexTable.length);
-
-    for (int i = 0; i < _indexTable.length; ++i) {
-      offsets[i] = contentsWriter.offset;
-      _indexTable[i]._write(contentsWriter);
-
-      final entryStat =
-          BytecodeSizeStatistics.objectTableStats[_indexTable[i].kind.index];
-      entryStat.size += (contentsWriter.offset - offsets[i]);
-      ++entryStat.count;
-    }
-
-    writer.writePackedUInt30(_indexTable.length);
-    writer.writePackedUInt30(contentsWriter.offset);
-    writer.appendWriter(contentsWriter);
-    for (var offs in offsets) {
-      writer.writePackedUInt30(offs);
-    }
-
-    // Index strings in objects which will be written inline
-    // in constant pool entries.
-    for (var obj in _objects) {
-      if (obj._reference == ObjectHandle.inlineObject) {
-        obj.indexStrings(writer.stringWriter);
-      }
-    }
-
-    BytecodeSizeStatistics.objectTableSize += (writer.offset - start);
-    BytecodeSizeStatistics.objectTableEntriesCount += _indexTable.length;
-  }
-
-  ObjectTable.read(BufferedReader reader) {
-    reader.objectReader = this;
-
-    final int numEntries = reader.readPackedUInt30();
-    reader.readPackedUInt30(); // Contents length
-
-    _indexTable = new List<ObjectHandle>(numEntries);
-    for (int i = 0; i < numEntries; ++i) {
-      final int header = reader.readPackedUInt30();
-      _indexTable[i] = new ObjectHandle._read(reader, header)
-        .._reference = ObjectHandle._makeReference(i);
-    }
-    // Skip index table.
-    for (int i = 0; i < numEntries; ++i) {
-      reader.readPackedUInt30();
-    }
-  }
-
-  @override
-  String toString() {
-    StringBuffer sb = new StringBuffer();
-    sb.writeln('ObjectTable {');
-    for (int i = 0; i < _indexTable.length; ++i) {
-      final obj = _indexTable[i];
-      sb.writeln('  [$i] = ${objectKindToString(obj.kind)} $obj');
-    }
-    sb.writeln('}');
-    return sb.toString();
-  }
-}
-
-class _NodeVisitor extends Visitor<ObjectHandle> {
-  final ObjectTable objectTable;
-  final CoreTypes coreTypes;
-  final _typeParameters = <TypeParameter, ObjectHandle>{};
-  final Map<DartType, int> _recursiveTypeIds = <DartType, int>{};
-  final recursiveTypesValidator;
-
-  _NodeVisitor(this.objectTable, this.coreTypes)
-      : recursiveTypesValidator = new RecursiveTypesValidator(coreTypes);
-
-  @override
-  ObjectHandle defaultNode(Node node) =>
-      throw 'Unexpected node ${node.runtimeType} $node';
-
-  @override
-  ObjectHandle visitLibrary(Library node) {
-    final uri = objectTable.getConstStringHandle(node.importUri.toString());
-    return objectTable.getOrAddObject(new _LibraryHandle(uri));
-  }
-
-  @override
-  ObjectHandle visitClass(Class node) {
-    final ObjectHandle library = objectTable.getHandle(node.enclosingLibrary);
-    final name = node.name.startsWith('_')
-        ? objectTable.getOrAddObject(new _PrivateNameHandle(library, node.name))
-        : objectTable.getPublicNameHandle(node.name);
-    return objectTable.getOrAddObject(new _ClassHandle(library, name));
-  }
-
-  @override
-  ObjectHandle defaultMember(Member node) => objectTable.getMemberHandle(node);
-
-  @override
-  ObjectHandle visitDynamicType(DynamicType node) => objectTable._dynamicType;
-
-  @override
-  ObjectHandle visitVoidType(VoidType node) => objectTable._voidType;
-
-  @override
-  ObjectHandle visitNeverType(NeverType node) =>
-      objectTable.getOrAddObject(new _NeverTypeHandle(node.nullability));
-
-  @override
-  ObjectHandle visitBottomType(BottomType node) =>
-      // Map Bottom type to Null type until not emitted by CFE anymore.
-      objectTable.getHandle(coreTypes.nullType);
-
-  @override
-  ObjectHandle visitInterfaceType(InterfaceType node) {
-    final classHandle = objectTable.getHandle(node.classNode);
-    if (!hasInstantiatorTypeArguments(node.classNode)) {
-      return objectTable
-          .getOrAddObject(new _SimpleTypeHandle(classHandle, node.nullability));
-    }
-
-    // Non-finalized types are not recursive, but finalization of
-    // generic types includes flattening of type arguments and types could
-    // become recursive. Consider the following example:
-    //
-    //  class Base<T> {}
-    //  class Foo<T> extends Base<Foo<T>> {}
-    //
-    //  Foo<int> is not recursive, but finalized type is recursive:
-    //  Foo<int>* = Foo [ Base [ Foo<int>* ], int ]
-    //
-    // Object table serialization/deserialization cannot handle cycles between
-    // objects, so recursive types require extra care when serializing.
-    // Back references to the already serialized types are represented as
-    // _RecursiveTypeRefHandle objects, which are only valid in the context
-    // of enclosing top-level _RecursiveGenericType.
-    //
-    int recursiveId = _recursiveTypeIds[node];
-    if (recursiveId != null) {
-      return objectTable
-          .getOrAddObject(new _RecursiveTypeRefHandle(recursiveId));
-    }
-
-    recursiveTypesValidator.validateType(node);
-
-    final isRecursive = recursiveTypesValidator.isRecursive(node);
-    if (isRecursive) {
-      recursiveId = _recursiveTypeIds.length;
-      _recursiveTypeIds[node] = recursiveId;
-    }
-
-    List<DartType> instantiatorArgs =
-        getInstantiatorTypeArguments(node.classNode, node.typeArguments);
-    ObjectHandle typeArgsHandle =
-        objectTable.getTypeArgumentsHandle(instantiatorArgs);
-
-    final result = objectTable.getOrAddObject(isRecursive
-        ? new _RecursiveGenericTypeHandle(
-            recursiveId, classHandle, typeArgsHandle, node.nullability)
-        : new _GenericTypeHandle(
-            classHandle, typeArgsHandle, node.nullability));
-
-    if (isRecursive) {
-      _recursiveTypeIds.remove(node);
-    }
-
-    return result;
-  }
-
-  @override
-  ObjectHandle visitFutureOrType(FutureOrType node) {
-    final classNode = coreTypes.deprecatedFutureOrClass;
-    final classHandle = objectTable.getHandle(classNode);
-    List<DartType> instantiatorArgs =
-        getInstantiatorTypeArguments(classNode, [node.typeArgument]);
-    ObjectHandle typeArgsHandle =
-        objectTable.getTypeArgumentsHandle(instantiatorArgs);
-    final result = objectTable.getOrAddObject(
-        new _GenericTypeHandle(classHandle, typeArgsHandle, node.nullability));
-    return result;
-  }
-
-  @override
-  ObjectHandle visitTypeParameterType(TypeParameterType node) {
-    final param = node.parameter;
-    final handle = _typeParameters[param];
-    if (handle != null) {
-      final typeParameterHandle = handle as _TypeParameterHandle;
-      if (typeParameterHandle.nullability == node.nullability) {
-        return handle;
-      }
-      return objectTable.getOrAddObject(new _TypeParameterHandle(
-          typeParameterHandle.parent,
-          typeParameterHandle.indexInParent,
-          node.nullability));
-    }
-
-    final parent = param.parent;
-    if (parent == null) {
-      throw 'Type parameter $param without parent, but not declared by function type';
-    }
-
-    ObjectHandle parentHandle;
-    int indexInParent;
-    if (parent is Class) {
-      parentHandle = objectTable.getHandle(parent);
-      indexInParent = parent.typeParameters.indexOf(param);
-      if (indexInParent < 0) {
-        throw 'Type parameter $param is not found in its parent class $parent';
-      }
-    } else if (parent is FunctionNode) {
-      final funcParent = parent.parent;
-      if (funcParent is Member) {
-        parentHandle = objectTable.getHandle(funcParent);
-      } else if (funcParent is FunctionExpression ||
-          funcParent is FunctionDeclaration) {
-        parentHandle = objectTable.getHandle(parent);
-      } else {
-        throw 'Unexpected parent of FunctionNode: ${funcParent.runtimeType} $funcParent';
-      }
-      indexInParent = parent.typeParameters.indexOf(node.parameter);
-      if (indexInParent < 0) {
-        throw 'Type parameter $param is not found in its parent function $parent';
-      }
-    } else {
-      throw 'Unexpected parent of TypeParameter: ${parent.runtimeType} $parent';
-    }
-    return objectTable.getOrAddObject(new _TypeParameterHandle(
-        parentHandle, indexInParent, node.nullability));
-  }
-
-  @override
-  ObjectHandle visitFunctionType(FunctionType node) {
-    final int numEnclosingTypeParameters = _typeParameters.length;
-    for (int i = 0; i < node.typeParameters.length; ++i) {
-      _typeParameters[node.typeParameters[i]] = objectTable.getOrAddObject(
-          new _TypeParameterHandle(
-              null, numEnclosingTypeParameters + i, Nullability.legacy));
-      // Nullability.legacy is a dummy value, since TypeParameter does not
-      // specify nullability, only the reference to a TypeParameter does, i.e.
-      // TypeParameterType.
-    }
-
-    final positionalParams = new List<_TypeHandle>();
-    for (var param in node.positionalParameters) {
-      positionalParams.add(objectTable.getHandle(param));
-    }
-    final namedParams = new List<NameAndType>();
-    for (var param in node.namedParameters) {
-      namedParams.add(new NameAndType(
-          objectTable.getPublicNameHandle(param.name),
-          objectTable.getHandle(param.type)));
-    }
-    final returnType = objectTable.getHandle(node.returnType);
-
-    final result = objectTable.getOrAddObject(new _FunctionTypeHandle(
-        objectTable.getTypeParameterHandles(node.typeParameters),
-        node.requiredParameterCount,
-        positionalParams,
-        namedParams,
-        returnType,
-        node.nullability));
-
-    for (int i = 0; i < node.typeParameters.length; ++i) {
-      _typeParameters.remove(node.typeParameters[i]);
-    }
-
-    return result;
-  }
-
-  @override
-  ObjectHandle visitTypedefType(TypedefType node) =>
-      objectTable.getHandle(node.unalias);
-
-  @override
-  ObjectHandle visitNullConstant(NullConstant node) => null;
-
-  @override
-  ObjectHandle visitBoolConstant(BoolConstant node) => objectTable
-      .getOrAddObject(new _ConstObjectHandle(ConstTag.kBool, node.value));
-
-  @override
-  ObjectHandle visitIntConstant(IntConstant node) => objectTable
-      .getOrAddObject(new _ConstObjectHandle(ConstTag.kInt, node.value));
-
-  @override
-  ObjectHandle visitDoubleConstant(DoubleConstant node) => objectTable
-      .getOrAddObject(new _ConstObjectHandle(ConstTag.kDouble, node.value));
-
-  @override
-  ObjectHandle visitStringConstant(StringConstant node) =>
-      objectTable.getConstStringHandle(node.value);
-
-  @override
-  ObjectHandle visitSymbolConstant(SymbolConstant node) =>
-      objectTable.getOrAddObject(new _ConstObjectHandle(
-          ConstTag.kSymbol,
-          objectTable.getNameHandle(
-              node.libraryReference?.asLibrary, node.name)));
-
-  @override
-  ObjectHandle visitListConstant(ListConstant node) =>
-      objectTable.getOrAddObject(new _ConstObjectHandle(
-          ConstTag.kList,
-          objectTable.getHandles(node.entries),
-          objectTable.getHandle(node.typeArgument)));
-
-  @override
-  ObjectHandle visitInstanceConstant(InstanceConstant node) =>
-      objectTable.getOrAddObject(new _ConstObjectHandle(
-          ConstTag.kInstance,
-          node.fieldValues.map<ObjectHandle, ObjectHandle>(
-              (Reference fieldRef, Constant value) => new MapEntry(
-                  objectTable.getHandle(fieldRef.asField),
-                  objectTable.getHandle(value))),
-          objectTable.getHandle(new InterfaceType(
-              node.classNode, Nullability.legacy, node.typeArguments))));
-
-  @override
-  ObjectHandle visitTearOffConstant(TearOffConstant node) =>
-      objectTable.getOrAddObject(new _ConstObjectHandle(
-          ConstTag.kTearOff, objectTable.getHandle(node.procedure)));
-
-  @override
-  ObjectHandle visitTypeLiteralConstant(TypeLiteralConstant node) =>
-      objectTable.getHandle(node.type);
-
-  @override
-  ObjectHandle visitPartialInstantiationConstant(
-          PartialInstantiationConstant node) =>
-      objectTable.getOrAddObject(new _ConstObjectHandle(
-          ConstTag.kTearOffInstantiation,
-          objectTable.getHandle(node.tearOffConstant),
-          objectTable.getTypeArgumentsHandle(node.types)));
-}
-
-int _combineHashes(int hash1, int hash2) =>
-    (((hash1 * 31) & 0x3fffffff) + hash2) & 0x3fffffff;
diff --git a/pkg/vm/lib/bytecode/options.dart b/pkg/vm/lib/bytecode/options.dart
deleted file mode 100644
index 1eedd8d..0000000
--- a/pkg/vm/lib/bytecode/options.dart
+++ /dev/null
@@ -1,97 +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.
-
-library vm.bytecode.options;
-
-/// Collection of options for bytecode generator.
-class BytecodeOptions {
-  static Map<String, String> commandLineFlags = {
-    'annotations': 'Emit Dart annotations',
-    'local-var-info': 'Emit debug information about local variables',
-    'debugger-stops': 'Emit bytecode instructions for stopping in the debugger',
-    'show-bytecode-size-stat': 'Show bytecode size breakdown',
-    'source-positions': 'Emit source positions',
-    'instance-field-initializers': 'Emit separate instance field initializers',
-    'keep-unreachable-code':
-        'Do not remove unreachable code (useful if collecting code coverage)',
-    'avoid-closure-call-instructions':
-        'Do not emit closure call instructions (useful if collecting code '
-            'coverage, as closure call instructions are not tracked by code '
-            'coverage)',
-  };
-
-  bool enableAsserts;
-  bool causalAsyncStacks;
-  bool emitSourcePositions;
-  bool emitSourceFiles;
-  bool emitLocalVarInfo;
-  bool emitDebuggerStops;
-  bool emitAnnotations;
-  bool emitInstanceFieldInitializers;
-  bool omitAssertSourcePositions;
-  bool keepUnreachableCode;
-  bool avoidClosureCallInstructions;
-  bool showBytecodeSizeStatistics;
-  Map<String, String> environmentDefines;
-
-  BytecodeOptions(
-      {this.enableAsserts = false,
-      this.causalAsyncStacks,
-      this.emitSourcePositions = false,
-      this.emitSourceFiles = false,
-      this.emitLocalVarInfo = false,
-      this.emitDebuggerStops = false,
-      this.emitAnnotations = false,
-      this.emitInstanceFieldInitializers = false,
-      this.omitAssertSourcePositions = false,
-      this.keepUnreachableCode = false,
-      this.avoidClosureCallInstructions = false,
-      this.showBytecodeSizeStatistics = false,
-      bool aot = false,
-      this.environmentDefines = const <String, String>{}}) {
-    causalAsyncStacks ??=
-        environmentDefines['dart.developer.causal_async_stacks'] == 'true';
-    if (aot) {
-      emitSourcePositions = true;
-      emitLocalVarInfo = true;
-      causalAsyncStacks = true;
-    }
-  }
-
-  void parseCommandLineFlags(List<String> flags) {
-    if (flags == null) {
-      return;
-    }
-    for (String flag in flags) {
-      switch (flag) {
-        case 'source-positions':
-          emitSourcePositions = true;
-          break;
-        case 'local-var-info':
-          emitLocalVarInfo = true;
-          break;
-        case 'debugger-stops':
-          emitDebuggerStops = true;
-          break;
-        case 'annotations':
-          emitAnnotations = true;
-          break;
-        case 'instance-field-initializers':
-          emitInstanceFieldInitializers = true;
-          break;
-        case 'keep-unreachable-code':
-          keepUnreachableCode = true;
-          break;
-        case 'avoid-closure-call-instructions':
-          avoidClosureCallInstructions = true;
-          break;
-        case 'show-bytecode-size-stat':
-          showBytecodeSizeStatistics = true;
-          break;
-        default:
-          throw 'Unexpected bytecode flag $flag';
-      }
-    }
-  }
-}
diff --git a/pkg/vm/lib/bytecode/recognized_methods.dart b/pkg/vm/lib/bytecode/recognized_methods.dart
deleted file mode 100644
index f73ce50..0000000
--- a/pkg/vm/lib/bytecode/recognized_methods.dart
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library vm.bytecode.recognized_methods;
-
-import 'package:kernel/ast.dart';
-import 'package:kernel/type_environment.dart' show StaticTypeContext;
-
-import 'dbc.dart';
-import 'generics.dart' show getStaticType;
-
-class RecognizedMethods {
-  static const binaryIntOps = <String, Opcode>{
-    '+': Opcode.kAddInt,
-    '-': Opcode.kSubInt,
-    '*': Opcode.kMulInt,
-    '~/': Opcode.kTruncDivInt,
-    '%': Opcode.kModInt,
-    '&': Opcode.kBitAndInt,
-    '|': Opcode.kBitOrInt,
-    '^': Opcode.kBitXorInt,
-    '<<': Opcode.kShlInt,
-    '>>': Opcode.kShrInt,
-    '==': Opcode.kCompareIntEq,
-    '>': Opcode.kCompareIntGt,
-    '<': Opcode.kCompareIntLt,
-    '>=': Opcode.kCompareIntGe,
-    '<=': Opcode.kCompareIntLe,
-  };
-
-  static const binaryDoubleOps = <String, Opcode>{
-    '+': Opcode.kAddDouble,
-    '-': Opcode.kSubDouble,
-    '*': Opcode.kMulDouble,
-    '/': Opcode.kDivDouble,
-    '==': Opcode.kCompareDoubleEq,
-    '>': Opcode.kCompareDoubleGt,
-    '<': Opcode.kCompareDoubleLt,
-    '>=': Opcode.kCompareDoubleGe,
-    '<=': Opcode.kCompareDoubleLe,
-  };
-
-  final StaticTypeContext staticTypeContext;
-
-  RecognizedMethods(this.staticTypeContext);
-
-  DartType staticType(Expression expr) =>
-      getStaticType(expr, staticTypeContext);
-
-  bool isInt(DartType type) =>
-      type == staticTypeContext.typeEnvironment.coreTypes.intLegacyRawType;
-
-  bool isDouble(DartType type) =>
-      type == staticTypeContext.typeEnvironment.coreTypes.doubleLegacyRawType;
-
-  Opcode specializedBytecodeFor(MethodInvocation node) {
-    final args = node.arguments;
-    if (!args.named.isEmpty) {
-      return null;
-    }
-
-    final Expression receiver = node.receiver;
-    final String selector = node.name.text;
-
-    switch (args.positional.length) {
-      case 0:
-        return specializedBytecodeForUnaryOp(selector, receiver);
-      case 1:
-        return specializedBytecodeForBinaryOp(
-            selector, receiver, args.positional.single);
-      default:
-        return null;
-    }
-  }
-
-  Opcode specializedBytecodeForUnaryOp(String selector, Expression arg) {
-    if (selector == 'unary-') {
-      final argType = staticType(arg);
-      if (isInt(argType)) {
-        return Opcode.kNegateInt;
-      } else if (isDouble(argType)) {
-        return Opcode.kNegateDouble;
-      }
-    }
-
-    return null;
-  }
-
-  Opcode specializedBytecodeForBinaryOp(
-      String selector, Expression a, Expression b) {
-    if (selector == '==' && (a is NullLiteral || b is NullLiteral)) {
-      return Opcode.kEqualsNull;
-    }
-
-    final aType = staticType(a);
-    final bType = staticType(b);
-
-    if (isInt(aType) && isInt(bType)) {
-      return binaryIntOps[selector];
-    }
-    if (isDouble(aType) && isDouble(bType)) {
-      return binaryDoubleOps[selector];
-    }
-    return null;
-  }
-}
diff --git a/pkg/vm/lib/bytecode/recursive_types_validator.dart b/pkg/vm/lib/bytecode/recursive_types_validator.dart
deleted file mode 100644
index 66512be..0000000
--- a/pkg/vm/lib/bytecode/recursive_types_validator.dart
+++ /dev/null
@@ -1,188 +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.
-
-library vm.bytecode.recursive_types_validator;
-
-import 'package:kernel/ast.dart' hide MapEntry;
-import 'package:kernel/core_types.dart' show CoreTypes;
-import 'package:kernel/type_algebra.dart' show Substitution;
-
-import 'generics.dart'
-    show flattenInstantiatorTypeArguments, hasFreeTypeParameters;
-
-/// Detect recursive types and validates that finalized (flattened)
-/// representation of generic types is valid (finite).
-class RecursiveTypesValidator {
-  final CoreTypes coreTypes;
-  final Set<DartType> _validatedTypes = <DartType>{};
-  final Set<DartType> _recursiveTypes = <DartType>{};
-  final Set<Class> _validatedClases = <Class>{};
-
-  RecursiveTypesValidator(this.coreTypes);
-
-  /// Validates [type].
-  void validateType(DartType type) {
-    if (!isValidated(type)) {
-      final visitor = new _RecursiveTypesVisitor(this);
-      visitor.visit(type);
-      _validatedTypes.addAll(visitor.validated);
-      _recursiveTypes.addAll(visitor.recursive);
-    }
-  }
-
-  bool isValidated(DartType type) => _validatedTypes.contains(type);
-
-  /// Returns true if [type] is recursive.
-  /// Should be called only after validating [type].
-  bool isRecursive(DartType type) {
-    assert(isValidated(type));
-    return _recursiveTypes.contains(type);
-  }
-
-  void validateClass(Class cls) {
-    if (_validatedClases.add(cls)) {
-      try {
-        validateType(
-            cls.getThisType(coreTypes, cls.enclosingLibrary.nonNullable));
-      } on IllegalRecursiveTypeException catch (e) {
-        _validatedClases.remove(cls);
-        throw e;
-      }
-    }
-  }
-}
-
-class IllegalRecursiveTypeException {
-  final DartType type;
-  IllegalRecursiveTypeException(this.type);
-}
-
-class _RecursiveTypesVisitor extends DartTypeVisitor<void> {
-  final RecursiveTypesValidator validator;
-  final Set<DartType> validated = <DartType>{};
-  final Set<DartType> recursive = <DartType>{};
-  final Set<DartType> _visited = new Set<DartType>();
-  final List<DartType> _stack = <DartType>[];
-
-  _RecursiveTypesVisitor(this.validator);
-
-  void visit(DartType type) {
-    if (validator.isValidated(type)) {
-      return;
-    }
-
-    if (!_visited.add(type)) {
-      final int start = _stack.lastIndexOf(type);
-      _verifyRecursiveType(start, type);
-      for (int i = start; i < _stack.length; ++i) {
-        recursive.add(_stack[i]);
-      }
-      return;
-    }
-
-    _stack.add(type);
-
-    type.accept(this);
-
-    _stack.removeLast();
-    _visited.remove(type);
-
-    validated.add(type);
-  }
-
-  @override
-  void defaultDartType(DartType node) =>
-      throw 'Unexpected type ${node.runtimeType} $node';
-
-  @override
-  void visitInvalidType(InvalidType node) {}
-
-  @override
-  void visitDynamicType(DynamicType node) {}
-
-  @override
-  void visitVoidType(VoidType node) {}
-
-  @override
-  void visitBottomType(BottomType node) {}
-
-  @override
-  void visitNeverType(NeverType node) {}
-
-  @override
-  void visitTypeParameterType(TypeParameterType node) {}
-
-  @override
-  void visitInterfaceType(InterfaceType node) {
-    // Validate class declaration type separately
-    // to avoid failures due to types in the current _stack.
-    validator.validateClass(node.classNode);
-
-    for (var typeArg in node.typeArguments) {
-      visit(typeArg);
-    }
-    final flatTypeArgs =
-        flattenInstantiatorTypeArguments(node.classNode, node.typeArguments);
-    for (var typeArg in flatTypeArgs.getRange(
-        0, flatTypeArgs.length - node.typeArguments.length)) {
-      visit(typeArg);
-    }
-  }
-
-  @override
-  void visitFutureOrType(FutureOrType node) {
-    visit(node.typeArgument);
-  }
-
-  @override
-  void visitTypedefType(TypedefType node) => visit(node.unalias);
-
-  @override
-  void visitFunctionType(FunctionType node) {
-    for (var p in node.positionalParameters) {
-      visit(p);
-    }
-    for (var p in node.namedParameters) {
-      visit(p.type);
-    }
-    visit(node.returnType);
-  }
-
-  void _verifyRecursiveType(int start, DartType type) {
-    if (type is InterfaceType) {
-      if (!hasFreeTypeParameters(type.typeArguments)) {
-        return;
-      }
-
-      for (int i = start + 1; i < _stack.length; ++i) {
-        final other = _stack[i];
-        if (other is InterfaceType &&
-            other.classNode == type.classNode &&
-            hasFreeTypeParameters(other.typeArguments)) {
-          if (!listEquals(_eraseTypeParameters(type.typeArguments),
-              _eraseTypeParameters(other.typeArguments))) {
-            throw IllegalRecursiveTypeException(type);
-          }
-        }
-      }
-    } else {
-      throw 'Unexpected recursive type ${type.runtimeType} $type';
-    }
-  }
-
-  List<DartType> _eraseTypeParameters(List<DartType> typeArgs) {
-    return typeArgs
-        .map((DartType t) =>
-            const _EraseTypeParametersToDynamic().substituteType(t))
-        .toList();
-  }
-}
-
-class _EraseTypeParametersToDynamic extends Substitution {
-  const _EraseTypeParametersToDynamic();
-
-  DartType getSubstitute(TypeParameter parameter, bool upperBound) {
-    return const DynamicType();
-  }
-}
diff --git a/pkg/vm/lib/bytecode/source_positions.dart b/pkg/vm/lib/bytecode/source_positions.dart
deleted file mode 100644
index 9cf138c..0000000
--- a/pkg/vm/lib/bytecode/source_positions.dart
+++ /dev/null
@@ -1,125 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library vm.bytecode.source_positions;
-
-import 'bytecode_serialization.dart'
-    show
-        BufferedWriter,
-        BufferedReader,
-        BytecodeDeclaration,
-        PackedUInt30DeltaEncoder,
-        PackedUInt30DeltaDecoder,
-        SLEB128DeltaEncoder,
-        SLEB128DeltaDecoder;
-
-/// Maintains mapping between bytecode instructions and source positions.
-class SourcePositions extends BytecodeDeclaration {
-  // Special value of fileOffset which marks synthetic code without source
-  // position.
-  static const syntheticCodeMarker = -1;
-  // Special value of fileOffset which marks yield point.
-  static const yieldPointMarker = -2;
-
-  final List<int> _positions = <int>[]; // Pairs (PC, fileOffset).
-  int _lastPc = 0;
-  int _lastOffset = 0;
-
-  SourcePositions();
-
-  void add(int pc, int fileOffset) {
-    assert(pc > _lastPc);
-    assert((fileOffset >= 0) || (fileOffset == syntheticCodeMarker));
-    if (fileOffset != _lastOffset) {
-      _positions.add(pc);
-      _positions.add(fileOffset);
-      _lastPc = pc;
-      _lastOffset = fileOffset;
-    }
-  }
-
-  void addYieldPoint(int pc, int fileOffset) {
-    assert(pc > _lastPc);
-    assert((fileOffset >= 0) || (fileOffset == syntheticCodeMarker));
-    _positions.add(pc);
-    _positions.add(yieldPointMarker);
-    _positions.add(pc);
-    _positions.add(fileOffset);
-    _lastPc = pc;
-    _lastOffset = fileOffset;
-  }
-
-  bool get isEmpty => _positions.isEmpty;
-  bool get isNotEmpty => !isEmpty;
-
-  void write(BufferedWriter writer) {
-    writer.writePackedUInt30(_positions.length ~/ 2);
-    final encodePC = new PackedUInt30DeltaEncoder();
-    final encodeOffset = new SLEB128DeltaEncoder();
-    for (int i = 0; i < _positions.length; i += 2) {
-      final int pc = _positions[i];
-      final int fileOffset = _positions[i + 1];
-      encodePC.write(writer, pc);
-      encodeOffset.write(writer, fileOffset);
-    }
-  }
-
-  SourcePositions.read(BufferedReader reader) {
-    final int length = reader.readPackedUInt30();
-    final decodePC = new PackedUInt30DeltaDecoder();
-    final decodeOffset = new SLEB128DeltaDecoder();
-    for (int i = 0; i < length; ++i) {
-      int pc = decodePC.read(reader);
-      int fileOffset = decodeOffset.read(reader);
-      _positions.add(pc);
-      _positions.add(fileOffset);
-    }
-  }
-
-  @override
-  String toString() => _positions.toString();
-
-  Map<int, String> getBytecodeAnnotations() {
-    final map = <int, String>{};
-    for (int i = 0; i < _positions.length; i += 2) {
-      final int pc = _positions[i];
-      final int fileOffset = _positions[i + 1];
-      final entry = (fileOffset == yieldPointMarker)
-          ? 'yield point'
-          : 'source position $fileOffset';
-      if (map[pc] == null) {
-        map[pc] = entry;
-      } else {
-        map[pc] = "${map[pc]}; $entry";
-      }
-    }
-    return map;
-  }
-}
-
-/// Keeps file offsets of line starts. This information is used to
-/// decode source positions to line/column.
-class LineStarts extends BytecodeDeclaration {
-  final List<int> lineStarts;
-
-  LineStarts(this.lineStarts);
-
-  void write(BufferedWriter writer) {
-    writer.writePackedUInt30(lineStarts.length);
-    final encodeLineStarts = new PackedUInt30DeltaEncoder();
-    for (int lineStart in lineStarts) {
-      encodeLineStarts.write(writer, lineStart);
-    }
-  }
-
-  factory LineStarts.read(BufferedReader reader) {
-    final decodeLineStarts = new PackedUInt30DeltaDecoder();
-    final lineStarts = new List<int>.generate(
-        reader.readPackedUInt30(), (_) => decodeLineStarts.read(reader));
-    return new LineStarts(lineStarts);
-  }
-
-  @override
-  String toString() => 'Line starts: $lineStarts';
-}
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
index a3e2edd..c123f75 100644
--- a/pkg/vm/lib/kernel_front_end.dart
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -47,10 +47,6 @@
 import 'package:kernel/target/targets.dart' show Target, TargetFlags, getTarget;
 import 'package:package_config/package_config.dart' show loadPackageConfigUri;
 
-import 'bytecode/bytecode_serialization.dart' show BytecodeSizeStatistics;
-import 'bytecode/gen_bytecode.dart'
-    show generateBytecode, createFreshComponentWithBytecode;
-import 'bytecode/options.dart' show BytecodeOptions;
 import 'http_filesystem.dart' show HttpAwareFileSystem;
 import 'target/install.dart' show installAdditionalTargets;
 import 'transformations/devirtualization.dart' as devirtualization
@@ -129,14 +125,6 @@
   args.addOption('data-dir',
       help: 'Name of the subdirectory of //data for output files');
   args.addOption('manifest', help: 'Path to output Fuchsia package manifest');
-  args.addFlag('gen-bytecode', help: 'Generate bytecode', defaultsTo: false);
-  args.addMultiOption('bytecode-options',
-      help: 'Specify options for bytecode generation:',
-      valueHelp: 'opt1,opt2,...',
-      allowed: BytecodeOptions.commandLineFlags.keys,
-      allowedHelp: BytecodeOptions.commandLineFlags);
-  args.addFlag('drop-ast',
-      help: 'Include only bytecode into the output file', defaultsTo: true);
   args.addMultiOption('enable-experiment',
       help: 'Comma separated list of experimental features to enable.');
   args.addFlag('help',
@@ -184,8 +172,6 @@
   final bool tfa = options['tfa'];
   final bool linkPlatform = options['link-platform'];
   final bool embedSources = options['embed-sources'];
-  final bool genBytecode = options['gen-bytecode'];
-  final bool dropAST = options['drop-ast'];
   final bool enableAsserts = options['enable-asserts'];
   final bool nullSafety = options['sound-null-safety'];
   final bool useProtobufTreeShaker = options['protobuf-tree-shaker'];
@@ -215,13 +201,6 @@
     }
   }
 
-  final BytecodeOptions bytecodeOptions = new BytecodeOptions(
-    enableAsserts: enableAsserts,
-    emitSourceFiles: embedSources,
-    environmentDefines: environmentDefines,
-    aot: aot,
-  )..parseCommandLineFlags(options['bytecode-options']);
-
   final fileSystem =
       createFrontEndFileSystem(fileSystemScheme, fileSystemRoots);
 
@@ -276,9 +255,6 @@
       useGlobalTypeFlowAnalysis: tfa,
       environmentDefines: environmentDefines,
       enableAsserts: enableAsserts,
-      genBytecode: genBytecode,
-      bytecodeOptions: bytecodeOptions,
-      dropAST: dropAST && !splitOutputByPackages,
       useProtobufTreeShaker: useProtobufTreeShaker,
       useProtobufTreeShakerV2: useProtobufTreeShakerV2,
       minimalKernel: minimalKernel,
@@ -291,20 +267,12 @@
     return compileTimeErrorExitCode;
   }
 
-  if (bytecodeOptions.showBytecodeSizeStatistics && !splitOutputByPackages) {
-    BytecodeSizeStatistics.reset();
-  }
-
   final IOSink sink = new File(outputFileName).openWrite();
   final BinaryPrinter printer = new BinaryPrinter(sink,
       libraryFilter: (lib) => !results.loadedLibraries.contains(lib));
   printer.writeComponentFile(results.component);
   await sink.close();
 
-  if (bytecodeOptions.showBytecodeSizeStatistics && !splitOutputByPackages) {
-    BytecodeSizeStatistics.dump();
-  }
-
   if (depfile != null) {
     await writeDepfile(
         fileSystem, results.compiledSources, outputFileName, depfile);
@@ -316,9 +284,6 @@
       compilerOptions,
       results,
       outputFileName,
-      genBytecode: genBytecode,
-      bytecodeOptions: bytecodeOptions,
-      dropAST: dropAST,
     );
   }
 
@@ -357,9 +322,6 @@
     bool useGlobalTypeFlowAnalysis: false,
     Map<String, String> environmentDefines,
     bool enableAsserts: true,
-    bool genBytecode: false,
-    BytecodeOptions bytecodeOptions,
-    bool dropAST: false,
     bool useProtobufTreeShaker: false,
     bool useProtobufTreeShakerV2: false,
     bool minimalKernel: false,
@@ -411,26 +373,6 @@
     }
   }
 
-  if (genBytecode && !errorDetector.hasCompilationErrors && component != null) {
-    List<Library> libraries = new List<Library>();
-    for (Library library in component.libraries) {
-      if (loadedLibraries.contains(library)) continue;
-      libraries.add(library);
-    }
-
-    await runWithFrontEndCompilerContext(source, options, component, () {
-      generateBytecode(component,
-          libraries: libraries,
-          hierarchy: compilerResult.classHierarchy,
-          coreTypes: compilerResult.coreTypes,
-          options: bytecodeOptions);
-    });
-
-    if (dropAST) {
-      component = createFreshComponentWithBytecode(component);
-    }
-  }
-
   // Restore error handler (in case 'options' are reused).
   options.onDiagnostic = errorDetector.previousErrorHandler;
 
@@ -683,21 +625,8 @@
 /// Write a separate kernel binary for each package. The name of the
 /// output kernel binary is '[outputFileName]-$package.dilp'.
 /// The list of package names is written into a file '[outputFileName]-packages'.
-///
-/// Generates bytecode for each package if requested.
-Future writeOutputSplitByPackages(
-  Uri source,
-  CompilerOptions compilerOptions,
-  KernelCompilationResults compilationResults,
-  String outputFileName, {
-  bool genBytecode: false,
-  BytecodeOptions bytecodeOptions,
-  bool dropAST: false,
-}) async {
-  if (bytecodeOptions.showBytecodeSizeStatistics) {
-    BytecodeSizeStatistics.reset();
-  }
-
+Future writeOutputSplitByPackages(Uri source, CompilerOptions compilerOptions,
+    KernelCompilationResults compilationResults, String outputFileName) async {
   final packages = new List<String>();
   await runWithFrontEndCompilerContext(
       source, compilerOptions, compilationResults.component, () async {
@@ -710,17 +639,6 @@
       final IOSink sink = new File(filename).openWrite();
 
       Component partComponent = compilationResults.component;
-      if (genBytecode) {
-        generateBytecode(partComponent,
-            options: bytecodeOptions,
-            libraries: libraries,
-            hierarchy: compilationResults.classHierarchy,
-            coreTypes: compilationResults.coreTypes);
-
-        if (dropAST) {
-          partComponent = createFreshComponentWithBytecode(partComponent);
-        }
-      }
 
       final BinaryPrinter printer = new BinaryPrinter(sink,
           libraryFilter: (lib) =>
@@ -731,10 +649,6 @@
     }, mainFirst: false);
   });
 
-  if (bytecodeOptions.showBytecodeSizeStatistics) {
-    BytecodeSizeStatistics.dump();
-  }
-
   final IOSink packagesList = new File('$outputFileName-packages').openWrite();
   for (String package in packages) {
     packagesList.writeln(package);
diff --git a/pkg/vm/lib/metadata/binary_cache.dart b/pkg/vm/lib/metadata/binary_cache.dart
deleted file mode 100644
index e2151ef..0000000
--- a/pkg/vm/lib/metadata/binary_cache.dart
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library vm.metadata.binary_cache;
-
-import 'package:kernel/ast.dart'
-    show BinarySink, BinarySource, MetadataRepository, Node, TreeNode;
-
-class BinaryCacheMetadataRepository extends MetadataRepository<List<int>> {
-  static const repositoryTag = 'vm.binary_cache';
-
-  @override
-  String get tag => repositoryTag;
-
-  @override
-  final Map<TreeNode, List<int>> mapping = <TreeNode, List<int>>{};
-
-  @override
-  void writeToBinary(List<int> metadata, Node node, BinarySink sink) {
-    sink.writeByteList(metadata);
-  }
-
-  @override
-  List<int> readFromBinary(Node node, BinarySource source) {
-    List<int> result = source.readByteList();
-    _weakMap[node] = result;
-    return result;
-  }
-
-  static List<int> lookup(Node node) => _weakMap[node];
-  static void insert(Node node, List<int> metadata) {
-    _weakMap[node] = metadata;
-  }
-
-  static final _weakMap = new Expando<List<int>>();
-}
diff --git a/pkg/vm/lib/metadata/bytecode.dart b/pkg/vm/lib/metadata/bytecode.dart
deleted file mode 100644
index fc91879..0000000
--- a/pkg/vm/lib/metadata/bytecode.dart
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library vm.metadata.bytecode;
-
-import 'package:kernel/ast.dart'
-    show BinarySink, BinarySource, MetadataRepository, Node, TreeNode;
-import '../bytecode/bytecode_serialization.dart'
-    show BufferedWriter, BufferedReader, LinkWriter, LinkReader;
-import '../bytecode/declarations.dart' show Component;
-
-import 'dart:developer';
-
-class BytecodeMetadata {
-  final Component component;
-
-  BytecodeMetadata(this.component);
-
-  void write(BufferedWriter writer) {
-    Timeline.timeSync("BytecodeMetadata.write", () {
-      component.write(writer);
-    });
-  }
-
-  factory BytecodeMetadata.read(BufferedReader reader) {
-    return Timeline.timeSync("BytecodeMetadata.read", () {
-      return new BytecodeMetadata(new Component.read(reader));
-    });
-  }
-
-  @override
-  String toString() => "\n"
-      "BytecodeMetadata {\n"
-      "$component\n"
-      "}\n";
-}
-
-/// Repository for [BytecodeMetadata].
-class BytecodeMetadataRepository extends MetadataRepository<BytecodeMetadata> {
-  @override
-  final String tag = 'vm.bytecode';
-
-  @override
-  final Map<TreeNode, BytecodeMetadata> mapping =
-      <TreeNode, BytecodeMetadata>{};
-
-  @override
-  void writeToBinary(BytecodeMetadata metadata, Node node, BinarySink sink) {
-    final bytecodeComponent = metadata.component;
-    final linkWriter = new LinkWriter();
-    final writer = new BufferedWriter(
-        bytecodeComponent.version,
-        bytecodeComponent.stringTable,
-        bytecodeComponent.objectTable,
-        linkWriter);
-    metadata.write(writer);
-    writer.writeContentsToBinarySink(sink);
-  }
-
-  @override
-  BytecodeMetadata readFromBinary(Node node, BinarySource source) {
-    final linkReader = new LinkReader();
-    final reader = new BufferedReader(-1, null, null, linkReader, source.bytes,
-        baseOffset: source.currentOffset);
-    final bytecodeComponent = new Component.read(reader);
-    return new BytecodeMetadata(bytecodeComponent);
-  }
-}
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index 59a24ab..174a310 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -20,7 +20,6 @@
 import 'package:kernel/vm/constants_native_effects.dart'
     show VmConstantsBackend;
 
-import '../metadata/binary_cache.dart' show BinaryCacheMetadataRepository;
 import '../transformations/call_site_annotator.dart' as callSiteAnnotator;
 import '../transformations/lowering.dart' as lowering show transformLibraries;
 import '../transformations/ffi.dart' as transformFfi show ReplacedMembers;
@@ -400,7 +399,6 @@
   @override
   Component configureComponent(Component component) {
     callSiteAnnotator.addRepositoryTo(component);
-    component.addMetadataRepository(new BinaryCacheMetadataRepository());
     return super.configureComponent(component);
   }
 
diff --git a/pkg/vm/test/bytecode/gen_bytecode_test.dart b/pkg/vm/test/bytecode/gen_bytecode_test.dart
deleted file mode 100644
index 673a16e..0000000
--- a/pkg/vm/test/bytecode/gen_bytecode_test.dart
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io';
-
-import 'package:front_end/src/api_unstable/vm.dart'
-    show CompilerOptions, DiagnosticMessage;
-import 'package:kernel/ast.dart';
-import 'package:kernel/kernel.dart';
-import 'package:test/test.dart';
-import 'package:vm/bytecode/gen_bytecode.dart' show generateBytecode;
-import 'package:vm/bytecode/options.dart' show BytecodeOptions;
-import 'package:vm/kernel_front_end.dart' show runWithFrontEndCompilerContext;
-
-import '../common_test_utils.dart';
-
-final String pkgVmDir = Platform.script.resolve('../..').toFilePath();
-
-runTestCase(Uri source) async {
-  // Certain tests require super-mixin semantics which is used in Flutter.
-  bool enableSuperMixins = source.pathSegments.last == 'super_calls.dart';
-
-  Component component = await compileTestCaseToKernelProgram(source,
-      enableSuperMixins: enableSuperMixins);
-
-  final options = new CompilerOptions()
-    ..onDiagnostic = (DiagnosticMessage message) {
-      fail("Compilation error: ${message.plainTextFormatted.join('\n')}");
-    };
-
-  final mainLibrary = component.mainMethod.enclosingLibrary;
-
-  await runWithFrontEndCompilerContext(source, options, component, () {
-    // Need to omit source positions from bytecode as they are different on
-    // Linux and Windows (due to differences in newline characters).
-    generateBytecode(component,
-        options: new BytecodeOptions(
-            enableAsserts: true, omitAssertSourcePositions: true),
-        libraries: [mainLibrary]);
-  });
-
-  component.libraries.removeWhere((lib) => lib != mainLibrary);
-  String actual = kernelComponentToString(component);
-
-  // Remove absolute library URIs.
-  actual = actual.replaceAll(new Uri.file(pkgVmDir).toString(), '#pkg/vm');
-
-  compareResultWithExpectationsFile(source, actual);
-}
-
-main() {
-  group('gen-bytecode', () {
-    final testCasesDir = new Directory(pkgVmDir + '/testcases/bytecode');
-
-    for (var entry
-        in testCasesDir.listSync(recursive: true, followLinks: false)) {
-      if (entry.path.endsWith(".dart")) {
-        test(entry.path, () => runTestCase(entry.uri));
-      }
-    }
-  });
-}
diff --git a/pkg/vm/test/bytecode/object_table_test.dart b/pkg/vm/test/bytecode/object_table_test.dart
deleted file mode 100644
index 84f1001..0000000
--- a/pkg/vm/test/bytecode/object_table_test.dart
+++ /dev/null
@@ -1,129 +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:kernel/ast.dart';
-import 'package:kernel/core_types.dart' show CoreTypes;
-import 'package:kernel/testing/mock_sdk_component.dart';
-import 'package:test/test.dart';
-import 'package:expect/expect.dart';
-import 'package:vm/bytecode/object_table.dart';
-
-main() {
-  Library lib1;
-  Library lib2;
-  CoreTypes coreTypes;
-  Supertype objectSupertype;
-  ObjectTable objectTable;
-
-  Class addClass(Library lib, String name,
-      [List<TypeParameter> typeParameters = const []]) {
-    Class cls = new Class(
-        name: name, supertype: objectSupertype, typeParameters: typeParameters);
-    cls.parent = lib;
-    lib.addClass(cls);
-    return cls;
-  }
-
-  setUp(() {
-    // Start with mock SDK libraries.
-    Component component = createMockSdkComponent();
-    coreTypes = new CoreTypes(component);
-    objectSupertype = coreTypes.objectClass.asThisSupertype;
-
-    // Add test libraries.
-    lib1 = new Library(Uri.parse('org-dartlang:///test1.dart'), name: 'lib1');
-    lib1.parent = component;
-    component.libraries.add(lib1);
-
-    lib2 = new Library(Uri.parse('org-dartlang:///test2.dart'), name: 'lib2');
-    lib2.parent = component;
-    component.libraries.add(lib2);
-
-    objectTable = new ObjectTable(coreTypes);
-  });
-
-  tearDown(() {});
-
-  test('libraries', () {
-    final h1 = objectTable.getHandle(lib1);
-    final h2 = objectTable.getHandle(lib2);
-    Expect.notEquals(h1, h2);
-    Expect.identical(h1, objectTable.getHandle(lib1));
-    Expect.identical(h2, objectTable.getHandle(lib2));
-    Expect.equals(true, h1.isCacheable);
-    Expect.equals(true, h2.isCacheable);
-    Expect.equals(false, h1.shouldBeIncludedIntoIndexTable); // 2 uses
-    Expect.identical(h1, objectTable.getHandle(lib1));
-    Expect.equals(true, h1.shouldBeIncludedIntoIndexTable); // 3 uses
-  });
-
-  test('classes', () {
-    final Class c1 = addClass(lib1, 'A');
-    final Class c2 = addClass(lib1, 'B');
-    final Class c3 = addClass(lib2, 'A');
-    final h1 = objectTable.getHandle(c1);
-    final h2 = objectTable.getHandle(c2);
-    final h3 = objectTable.getHandle(c3);
-    Expect.notEquals(h1, h2);
-    Expect.notEquals(h1, h3);
-    Expect.notEquals(h2, h3);
-    Expect.identical(h1, objectTable.getHandle(c1));
-    Expect.identical(h2, objectTable.getHandle(c2));
-    Expect.identical(h3, objectTable.getHandle(c3));
-    Expect.equals(true, h1.isCacheable);
-    Expect.equals(true, h2.isCacheable);
-    Expect.equals(true, h3.isCacheable);
-    final lib1h = objectTable.getHandle(lib1);
-    final lib2h = objectTable.getHandle(lib2);
-    Expect.equals(true, lib1h.shouldBeIncludedIntoIndexTable); // 3 uses
-    Expect.equals(false, lib2h.shouldBeIncludedIntoIndexTable); // 2 uses
-  });
-
-  test('simple-types', () {
-    final h1a = objectTable
-        .getHandle(new InterfaceType(coreTypes.intClass, Nullability.legacy));
-    final h1b = objectTable
-        .getHandle(new InterfaceType(coreTypes.intClass, Nullability.legacy));
-    final h2a = objectTable.getHandle(const DynamicType());
-    final h2b = objectTable.getHandle(new DynamicType());
-    Expect.identical(h1a, h1b);
-    Expect.identical(h2a, h2b);
-    Expect.notEquals(h1a, h2a);
-    Expect.equals(true, h1a.isCacheable);
-    Expect.equals(true, h2a.isCacheable);
-    Expect.equals(false, h1a.shouldBeIncludedIntoIndexTable); // 2 uses
-    objectTable.getHandle(new InterfaceType(
-        coreTypes.listClass,
-        Nullability.legacy,
-        [new InterfaceType(coreTypes.intClass, Nullability.legacy)]));
-    Expect.equals(true, h1a.shouldBeIncludedIntoIndexTable); // 3 uses
-  });
-
-  test('recursive-types', () {
-    final base = addClass(lib1, "Base", [new TypeParameter("T")]);
-    final derived1 = addClass(lib1, "Derived");
-    derived1.supertype =
-        new Supertype(base, [new InterfaceType(derived1, Nullability.legacy)]);
-    final derived2 = addClass(lib2, "Derived");
-    derived2.supertype =
-        new Supertype(base, [new InterfaceType(derived2, Nullability.legacy)]);
-    final h1a =
-        objectTable.getHandle(new InterfaceType(derived1, Nullability.legacy));
-    final h1b =
-        objectTable.getHandle(new InterfaceType(derived1, Nullability.legacy));
-    final h2a =
-        objectTable.getHandle(new InterfaceType(derived2, Nullability.legacy));
-    final h2b =
-        objectTable.getHandle(new InterfaceType(derived2, Nullability.legacy));
-    Expect.identical(h1a, h1b);
-    Expect.identical(h2a, h2b);
-    Expect.notEquals(h1a, h2a);
-    Expect.equals(true, h1a.isCacheable);
-    Expect.equals(true, h2a.isCacheable);
-    final typeArgs1 = (h1a as dynamic).typeArgs;
-    final typeArgs2 = (h2a as dynamic).typeArgs;
-    Expect.equals(false, typeArgs1.isCacheable);
-    Expect.equals(false, typeArgs2.isCacheable);
-  });
-}
diff --git a/pkg/vm/test/bytecode/recursive_types_validator_test.dart b/pkg/vm/test/bytecode/recursive_types_validator_test.dart
deleted file mode 100644
index 6927492..0000000
--- a/pkg/vm/test/bytecode/recursive_types_validator_test.dart
+++ /dev/null
@@ -1,175 +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:kernel/ast.dart';
-import 'package:kernel/core_types.dart' show CoreTypes;
-import 'package:kernel/testing/mock_sdk_component.dart';
-import 'package:test/test.dart';
-import 'package:expect/expect.dart';
-import 'package:vm/bytecode/recursive_types_validator.dart';
-
-main() {
-  CoreTypes coreTypes;
-  Library lib;
-  Supertype objectSuper;
-  DartType intType;
-  DartType doubleType;
-  Class base;
-  RecursiveTypesValidator validator;
-
-  Class addClass(String name, List<TypeParameter> typeParameters) {
-    Class cls = new Class(
-        name: name, supertype: objectSuper, typeParameters: typeParameters);
-    lib.addClass(cls);
-    return cls;
-  }
-
-  setUp(() {
-    // Start with mock SDK libraries.
-    Component component = createMockSdkComponent();
-    coreTypes = new CoreTypes(component);
-    objectSuper = coreTypes.objectClass.asThisSupertype;
-    intType = new InterfaceType(coreTypes.intClass, Nullability.legacy);
-    doubleType = new InterfaceType(coreTypes.doubleClass, Nullability.legacy);
-
-    // Add the test library.
-    lib = new Library(Uri.parse('org-dartlang:///test.dart'), name: 'lib');
-    lib.parent = component;
-    component.libraries.add(lib);
-
-    // class Base<T>
-    base = addClass('Base', [new TypeParameter('T')]);
-
-    validator = new RecursiveTypesValidator(coreTypes);
-  });
-
-  tearDown(() {});
-
-  test('simple-recursive-type', () async {
-    // class Derived<T> extends Base<Derived<T>>
-    TypeParameter t = new TypeParameter('T');
-    Class derived = addClass('Derived', [t]);
-    DartType derivedOfT = new InterfaceType(derived, Nullability.legacy,
-        [new TypeParameterType(t, Nullability.legacy)]);
-    DartType derivedOfInt =
-        new InterfaceType(derived, Nullability.legacy, [intType]);
-    derived.supertype = new Supertype(base, [derivedOfT]);
-
-    validator.validateType(derivedOfT);
-    Expect.isTrue(validator.isRecursive(derivedOfT));
-
-    validator.validateType(derivedOfInt);
-    Expect.isTrue(validator.isRecursive(derivedOfInt));
-  });
-
-  test('recursive-type-extends-instantiated', () async {
-    // class Derived<T> extends Base<Derived<Derived<int>>>
-    TypeParameter t = new TypeParameter('T');
-    Class derived = addClass('Derived', [t]);
-    DartType derivedOfT = new InterfaceType(derived, Nullability.legacy,
-        [new TypeParameterType(t, Nullability.legacy)]);
-    DartType derivedOfInt =
-        new InterfaceType(derived, Nullability.legacy, [intType]);
-    DartType derivedOfDerivedOfInt =
-        new InterfaceType(derived, Nullability.legacy, [derivedOfInt]);
-    derived.supertype = new Supertype(base, [derivedOfDerivedOfInt]);
-
-    validator.validateType(derivedOfT);
-    validator.validateType(derivedOfInt);
-
-    Expect.isFalse(validator.isRecursive(derivedOfT));
-    Expect.isTrue(validator.isRecursive(derivedOfInt));
-    Expect.isTrue(validator.isRecursive(derivedOfDerivedOfInt));
-  });
-
-  test('recursive-non-contractive-type', () async {
-    // class Derived<T> extends Base<Derived<Derived<T>>>
-    TypeParameter t = new TypeParameter('T');
-    Class derived = addClass('Derived', [t]);
-    DartType derivedOfT = new InterfaceType(derived, Nullability.legacy,
-        [new TypeParameterType(t, Nullability.legacy)]);
-    DartType derivedOfInt =
-        new InterfaceType(derived, Nullability.legacy, [intType]);
-    DartType derivedOfDerivedOfT =
-        new InterfaceType(derived, Nullability.legacy, [derivedOfT]);
-    derived.supertype = new Supertype(base, [derivedOfDerivedOfT]);
-
-    Expect.throws(() {
-      validator.validateType(derivedOfT);
-    });
-    Expect.throws(() {
-      validator.validateType(derivedOfDerivedOfT);
-    });
-    Expect.throws(() {
-      validator.validateType(derivedOfInt);
-    });
-  });
-
-  test('mutually-recursive-types', () async {
-    // class Derived1<U> extends Base<Derived2<U>>
-    // class Derived2<V> extends Base<Derived1<V>>
-    TypeParameter u = new TypeParameter('U');
-    Class derived1 = addClass('Derived1', [u]);
-
-    TypeParameter v = new TypeParameter('V');
-    Class derived2 = addClass('Derived2', [v]);
-
-    DartType derived2OfU = new InterfaceType(derived2, Nullability.legacy,
-        [new TypeParameterType(u, Nullability.legacy)]);
-    derived1.supertype = new Supertype(base, [derived2OfU]);
-
-    DartType derived1OfV = new InterfaceType(derived1, Nullability.legacy,
-        [new TypeParameterType(v, Nullability.legacy)]);
-    derived2.supertype = new Supertype(base, [derived1OfV]);
-
-    DartType derived1OfU = new InterfaceType(derived1, Nullability.legacy,
-        [new TypeParameterType(u, Nullability.legacy)]);
-    DartType derived1OfInt =
-        new InterfaceType(derived1, Nullability.legacy, [intType]);
-
-    DartType derived2OfV = new InterfaceType(derived2, Nullability.legacy,
-        [new TypeParameterType(v, Nullability.legacy)]);
-    DartType derived2OfInt =
-        new InterfaceType(derived2, Nullability.legacy, [intType]);
-
-    validator.validateType(derived1OfU);
-    Expect.isTrue(validator.isRecursive(derived1OfU));
-
-    validator.validateType(derived1OfInt);
-    Expect.isTrue(validator.isRecursive(derived1OfInt));
-
-    validator.validateType(derived2OfV);
-    Expect.isTrue(validator.isRecursive(derived2OfV));
-
-    validator.validateType(derived2OfInt);
-    Expect.isTrue(validator.isRecursive(derived2OfInt));
-  });
-
-  test('recursive-two-type-params', () async {
-    // class F<P1, P2> {}
-    // class E<Q1, Q2> extends F<E<Q1, int>, Q2> {}
-    TypeParameter p1 = new TypeParameter('P1');
-    TypeParameter p2 = new TypeParameter('P2');
-    Class f = addClass('F', [p1, p2]);
-
-    TypeParameter q1 = new TypeParameter('Q1');
-    TypeParameter q2 = new TypeParameter('Q2');
-    Class e = addClass('E', [q1, q2]);
-
-    DartType eOfQ1Int = new InterfaceType(e, Nullability.legacy,
-        [new TypeParameterType(q1, Nullability.legacy), intType]);
-    e.supertype = new Supertype(
-        f, [eOfQ1Int, new TypeParameterType(q2, Nullability.legacy)]);
-
-    DartType eOfIntDouble =
-        new InterfaceType(e, Nullability.legacy, [intType, doubleType]);
-
-    validator.validateType(eOfIntDouble);
-    validator.validateType(e.getThisType(coreTypes, lib.nonNullable));
-
-    Expect.isFalse(validator.isRecursive(eOfIntDouble));
-    Expect.isFalse(
-        validator.isRecursive(e.getThisType(coreTypes, lib.nonNullable)));
-  });
-}
diff --git a/pkg/vm/test/kernel_front_end_test.dart b/pkg/vm/test/kernel_front_end_test.dart
index 2bc2815..711b616 100644
--- a/pkg/vm/test/kernel_front_end_test.dart
+++ b/pkg/vm/test/kernel_front_end_test.dart
@@ -101,39 +101,6 @@
     ]);
   }, timeout: Timeout.none);
 
-  test('compile-bytecode', () async {
-    await testCompile([
-      '--platform',
-      platformPath(),
-      '--packages',
-      '$sdkDir/$packagesFile',
-      '--output',
-      outputDill(),
-      '--gen-bytecode',
-      '--drop-ast',
-      '$sdkDir/$mainScript',
-    ]);
-  }, timeout: Timeout.none);
-
-  test('compile-bytecode-package-split', () async {
-    await testCompile([
-      '--platform',
-      platformPath(),
-      '--packages',
-      '$sdkDir/$packagesFile',
-      '--output',
-      outputDill(),
-      '--gen-bytecode',
-      '--drop-ast',
-      '--split-output-by-packages',
-      '--manifest',
-      outputManifest(),
-      '--component-name',
-      'foo_component',
-      '$sdkDir/$mainScript',
-    ]);
-  }, timeout: Timeout.none);
-
   test('compile-package-config', () async {
     await testCompile([
       '--platform',
diff --git a/pkg/vm/testcases/bytecode/asserts.dart b/pkg/vm/testcases/bytecode/asserts.dart
deleted file mode 100644
index 2778c8d..0000000
--- a/pkg/vm/testcases/bytecode/asserts.dart
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-void test1(bool condition) {
-  assert(condition);
-}
-
-void test2(bool condition(), String message()) {
-  assert(condition(), message());
-}
-
-main() {}
diff --git a/pkg/vm/testcases/bytecode/asserts.dart.expect b/pkg/vm/testcases/bytecode/asserts.dart.expect
deleted file mode 100644
index 39a0d1e..0000000
--- a/pkg/vm/testcases/bytecode/asserts.dart.expect
+++ /dev/null
@@ -1,96 +0,0 @@
-main = #lib::main;
- [@vm.bytecode=
-BytecodeMetadata {
-Bytecode (version: stable)
-Main library: #lib
-Library '#lib'
-    name '#lib'
-    script '#lib'
-
-Class '', script = '#lib'
-
-
-Function 'test1', static, reflectable, debuggable
-    parameters [dart:core::bool* 'condition'] (required: 1)
-    return-type void
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  JumpIfNoAsserts      L1
-  Push                 FP[-5]
-  AssertBoolean        0
-  JumpIfTrue           L1
-  PushInt              0
-  PushInt              0
-  PushNull
-  DirectCall           CP#0, 3
-  Drop1
-L1:
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::_AssertionError::_throwNew', ArgDesc num-args 3, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'test2', static, reflectable, debuggable
-    parameters [FunctionType ()* -> dart:core::bool* 'condition', FunctionType ()* -> dart:core::String* 'message'] (required: 2)
-    return-type void
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  JumpIfNoAsserts      L1
-  Push                 FP[-6]
-  StoreLocal           r0
-  Push                 r0
-  UncheckedClosureCall CP#0, 1
-  AssertBoolean        0
-  JumpIfTrue           L1
-  PushInt              0
-  PushInt              0
-  Push                 FP[-5]
-  StoreLocal           r0
-  Push                 r0
-  UncheckedClosureCall CP#0, 1
-  DirectCall           CP#1, 3
-  Drop1
-L1:
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
-  [1] = DirectCall 'dart:core::_AssertionError::_throwNew', ArgDesc num-args 3, num-type-args 0, names []
-  [2] = Reserved
-}
-
-
-Function 'main', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-}
-
-
-}
-]library #lib from "#lib" as #lib {
-
-  static method test1(dart.core::bool* condition) → void {
-    assert(condition);
-  }
-  static method test2(() →* dart.core::bool* condition, () →* dart.core::String* message) → void {
-    assert([@vm.call-site-attributes.metadata=receiverType:dart.core::bool* Function()*] condition.call(), [@vm.call-site-attributes.metadata=receiverType:dart.core::String* Function()*] message.call());
-  }
-  static method main() → dynamic {}
-}
diff --git a/pkg/vm/testcases/bytecode/async.dart b/pkg/vm/testcases/bytecode/async.dart
deleted file mode 100644
index 6ccf357..0000000
--- a/pkg/vm/testcases/bytecode/async.dart
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:async';
-
-Future<int> foo() async => 42;
-
-Future<int> simpleAsyncAwait(Future<int> a, Future<int> b) async {
-  return (await a) + (await b);
-}
-
-Future<int> loops(List<int> list) async {
-  int sum = 0;
-  for (int i = 0; i < 10; ++i) {
-    for (var j in list) {
-      sum += i + j + await foo();
-    }
-  }
-  for (int k = 0; k < 10; ++k) {
-    sum += k;
-  }
-  return sum;
-}
-
-Future<int> tryCatchRethrow(Future<int> a, Future<int> b, Future<int> c) async {
-  int x = 1;
-  try {
-    x = x + await a;
-  } catch (e) {
-    if (e is Error) {
-      return 42;
-    }
-    x = x + await b;
-    rethrow;
-  } finally {
-    print('fin');
-    x = x + await c;
-    return x;
-  }
-}
-
-closure(Future<int> a) {
-  int x = 3;
-  Future<int> nested() async {
-    int y = 4;
-    try {
-      x = 5;
-      y = await a;
-      return x + y;
-    } finally {
-      print('fin');
-    }
-  }
-
-  return nested;
-}
-
-Future<int> testAssert(Future<int> a) async {
-  assert((await a) == 42);
-  return 7;
-}
-
-var asyncInFieldInitializer = (Future<int> x) async {
-  await x;
-};
-
-main() {}
diff --git a/pkg/vm/testcases/bytecode/async.dart.expect b/pkg/vm/testcases/bytecode/async.dart.expect
deleted file mode 100644
index 54765bc..0000000
--- a/pkg/vm/testcases/bytecode/async.dart.expect
+++ /dev/null
@@ -1,2265 +0,0 @@
-main = #lib::main;
- [@vm.bytecode=
-BytecodeMetadata {
-Bytecode (version: stable)
-Main library: #lib
-Library '#lib'
-    name '#lib'
-    script '#lib'
-
-Class '', script = '#lib'
-
-Field 'asyncInFieldInitializer', type = FunctionType (dart:async::Future < dart:core::int* >*)* -> dart:async::Future < dart:core::Null? >*, getter = 'get:asyncInFieldInitializer', reflectable, static, has-initializer
-    initializer
-Bytecode {
-  Entry                3
-  CheckStack           0
-  AllocateClosure      CP#0
-  StoreLocal           r2
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#20
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#22
-  Push                 r2
-  PushConstant         CP#0
-  StoreFieldTOS        CP#24
-  Push                 r2
-  Push                 r0
-  StoreFieldTOS        CP#1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ClosureFunction 0
-  [1] = InstanceField dart:core::_Closure::_context (field)
-  [2] = Reserved
-  [3] = Type dart:async::Future < dart:core::int* >*
-  [4] = ObjectRef 'x'
-  [5] = SubtypeTestCache
-  [6] = Class dart:async::_AsyncAwaitCompleter
-  [7] = ObjectRef < dart:core::Null? >
-  [8] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [9] = Reserved
-  [10] = ClosureFunction 1
-  [11] = ObjectRef null
-  [12] = DirectCall 'dart:async::_awaitHelper', ArgDesc num-args 4, num-type-args 0, names []
-  [13] = Reserved
-  [14] = DirectCall 'dart:async::_completeOnAsyncReturn', ArgDesc num-args 2, num-type-args 0, names []
-  [15] = Reserved
-  [16] = Type dynamic
-  [17] = InterfaceCall 'dart:async::Completer::completeError', ArgDesc num-args 3, num-type-args 0, names []
-  [18] = Reserved
-  [19] = EndClosureFunctionScope
-  [20] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [21] = Reserved
-  [22] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [23] = Reserved
-  [24] = InstanceField dart:core::_Closure::_function (field)
-  [25] = Reserved
-  [26] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
-  [27] = Reserved
-  [28] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
-  [29] = Reserved
-  [30] = InterfaceCall 'dart:async::_AsyncAwaitCompleter::start', ArgDesc num-args 2, num-type-args 0, names []
-  [31] = Reserved
-  [32] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
-  [33] = Reserved
-  [34] = EndClosureFunctionScope
-}
-Closure #lib::asyncInFieldInitializer (field)::'<anonymous closure>' async (dart:async::Future < dart:core::int* >* x) -> dart:async::Future < dart:core::Null? >*
-ClosureCode {
-  Entry                4
-  Push                 FP[-6]
-  LoadFieldTOS         CP#1
-  PopLocal             r0
-  CheckStack           0
-  AllocateContext      0, 9
-  PopLocal             r0
-  Push                 r0
-  Push                 FP[-5]
-  StoreContextVar      0, 2
-  JumpIfUnchecked      L1
-  Push                 FP[-5]
-  PushConstant         CP#3
-  PushNull
-  PushNull
-  PushConstant         CP#4
-  AssertAssignable     0, CP#5
-  Drop1
-L1:
-  Push                 r0
-  PushConstant         CP#7
-  PushConstant         CP#6
-  AllocateT
-  StoreLocal           r2
-  Push                 r2
-  DirectCall           CP#8, 1
-  Drop1
-  StoreContextVar      0, 1
-  PushNull
-  PopLocal             r3
-  Push                 r0
-  PushInt              0
-  StoreContextVar      0, 0
-  Push                 r0
-  AllocateClosure      CP#10
-  StoreLocal           r2
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#20
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#22
-  Push                 r2
-  PushConstant         CP#10
-  StoreFieldTOS        CP#24
-  Push                 r2
-  Push                 r0
-  StoreFieldTOS        CP#1
-  StoreContextVar      0, 8
-  PushNull
-  PopLocal             r3
-  Push                 r0
-  Push                 r0
-  LoadContextVar       0, 8
-  DirectCall           CP#26, 1
-  StoreContextVar      0, 4
-  Push                 r0
-  Push                 r0
-  LoadContextVar       0, 8
-  DirectCall           CP#28, 1
-  StoreContextVar      0, 5
-  Push                 r0
-  LoadContextVar       0, 1
-  Push                 r0
-  LoadContextVar       0, 8
-  InterfaceCall        CP#30, 2
-  Drop1
-  Push                 r0
-  LoadContextVar       0, 1
-  InterfaceCall        CP#32, 1
-  ReturnTOS
-}
-
-Closure #lib::asyncInFieldInitializer (field)::Closure/0::':async_op' ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
-ClosureCode {
-  EntryOptional        1, 3, 0
-  LoadConstant         r1, CP#11
-  LoadConstant         r2, CP#11
-  LoadConstant         r3, CP#11
-  Frame                6
-  Push                 r0
-  LoadFieldTOS         CP#1
-  PopLocal             r4
-  CheckStack           0
-  Push                 r4
-  LoadContextVar       0, 0
-  StoreLocal           r5
-  PushInt              0
-  JumpIfNeStrict       L1
-  Push                 r4
-  Push                 r4
-  StoreContextVar      0, 7
-Try #0 start:
-  Push                 r4
-  PushInt              1
-  StoreContextVar      0, 0
-  Push                 r4
-  Push                 r4
-  StoreContextVar      0, 6
-  Push                 r4
-  LoadContextVar       0, 2
-  Push                 r4
-  LoadContextVar       0, 4
-  Push                 r4
-  LoadContextVar       0, 5
-  Push                 r4
-  LoadContextVar       0, 8
-  DirectCall           CP#12, 4
-  PopLocal             r8
-  PushNull
-  ReturnTOS
-L4:
-  Push                 r2
-  JumpIfNull           L2
-  Push                 r2
-  Push                 r3
-  Throw                1
-L2:
-  Push                 r1
-  Drop1
-  Push                 r4
-  LoadContextVar       0, 1
-  Push                 r4
-  LoadContextVar       0, 3
-  DirectCall           CP#14, 2
-  Drop1
-  PushNull
-  ReturnTOS
-Try #0 end:
-Try #0 handler:
-  SetFrame             10
-  Push                 r0
-  LoadFieldTOS         CP#1
-  PopLocal             r4
-  Push                 r4
-  LoadContextVar       0, 7
-  PopLocal             r4
-  MoveSpecial          exception, r6
-  MoveSpecial          stackTrace, r7
-  Push                 r6
-  PopLocal             r8
-  Push                 r7
-  PopLocal             r9
-  Push                 r4
-  LoadContextVar       0, 1
-  Push                 r8
-  Push                 r9
-  InterfaceCall        CP#17, 3
-  Drop1
-  Jump                 L3
-L3:
-  PushNull
-  ReturnTOS
-L1:
-  Push                 r4
-  LoadContextVar       0, 6
-  PopLocal             r4
-  Jump                 L4
-}
-
-
-Function 'foo', static, reflectable, async
-    parameters [] (required: 0)
-    return-type dart:async::Future < dart:core::int* >*
-
-Bytecode {
-  Entry                7
-  CheckStack           0
-  AllocateContext      0, 4
-  PopLocal             r0
-  Push                 r0
-  PushConstant         CP#1
-  PushConstant         CP#0
-  AllocateT
-  StoreLocal           r2
-  Push                 r2
-  DirectCall           CP#2, 1
-  Drop1
-  StoreContextVar      0, 1
-  PushNull
-  PopLocal             r3
-  PushNull
-  PopLocal             r4
-  PushNull
-  PopLocal             r5
-  Push                 r0
-  PushInt              0
-  StoreContextVar      0, 0
-  AllocateClosure      CP#4
-  StoreLocal           r2
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#14
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#16
-  Push                 r2
-  PushConstant         CP#4
-  StoreFieldTOS        CP#18
-  Push                 r2
-  Push                 r0
-  StoreFieldTOS        CP#6
-  PopLocal             r6
-  PushNull
-  PopLocal             r3
-  Push                 r6
-  DirectCall           CP#20, 1
-  PopLocal             r4
-  Push                 r6
-  DirectCall           CP#22, 1
-  PopLocal             r5
-  Push                 r0
-  LoadContextVar       0, 1
-  Push                 r6
-  InterfaceCall        CP#24, 2
-  Drop1
-  Push                 r0
-  LoadContextVar       0, 1
-  InterfaceCall        CP#26, 1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Class dart:async::_AsyncAwaitCompleter
-  [1] = ObjectRef < dart:core::int* >
-  [2] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-  [4] = ClosureFunction 0
-  [5] = ObjectRef null
-  [6] = InstanceField dart:core::_Closure::_context (field)
-  [7] = Reserved
-  [8] = DirectCall 'dart:async::_completeOnAsyncReturn', ArgDesc num-args 2, num-type-args 0, names []
-  [9] = Reserved
-  [10] = Type dynamic
-  [11] = InterfaceCall 'dart:async::Completer::completeError', ArgDesc num-args 3, num-type-args 0, names []
-  [12] = Reserved
-  [13] = EndClosureFunctionScope
-  [14] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [15] = Reserved
-  [16] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [17] = Reserved
-  [18] = InstanceField dart:core::_Closure::_function (field)
-  [19] = Reserved
-  [20] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
-  [21] = Reserved
-  [22] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
-  [23] = Reserved
-  [24] = InterfaceCall 'dart:async::_AsyncAwaitCompleter::start', ArgDesc num-args 2, num-type-args 0, names []
-  [25] = Reserved
-  [26] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
-  [27] = Reserved
-}
-Closure #lib::foo::':async_op' ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
-ClosureCode {
-  EntryOptional        1, 3, 0
-  LoadConstant         r1, CP#5
-  LoadConstant         r2, CP#5
-  LoadConstant         r3, CP#5
-  Frame                6
-  Push                 r0
-  LoadFieldTOS         CP#6
-  PopLocal             r4
-  CheckStack           0
-  Push                 r4
-  LoadContextVar       0, 0
-  StoreLocal           r5
-  PushInt              0
-  JumpIfNeStrict       L1
-  Push                 r4
-  PopLocal             r6
-Try #0 start:
-  Push                 r4
-  PushInt              42
-  StoreContextVar      0, 2
-  Jump                 L2
-L2:
-  Push                 r4
-  LoadContextVar       0, 1
-  Push                 r4
-  LoadContextVar       0, 2
-  DirectCall           CP#8, 2
-  Drop1
-  PushNull
-  ReturnTOS
-Try #0 end:
-Try #0 handler:
-  SetFrame             10
-  Push                 r6
-  PopLocal             r4
-  MoveSpecial          exception, r6
-  MoveSpecial          stackTrace, r7
-  Push                 r6
-  PopLocal             r8
-  Push                 r7
-  PopLocal             r9
-  Push                 r4
-  LoadContextVar       0, 1
-  Push                 r8
-  Push                 r9
-  InterfaceCall        CP#11, 3
-  Drop1
-  Jump                 L3
-L3:
-  PushNull
-  ReturnTOS
-L1:
-  Trap
-}
-
-
-Function 'simpleAsyncAwait', static, reflectable, async
-    parameters [dart:async::Future < dart:core::int* >* 'a', dart:async::Future < dart:core::int* >* 'b'] (required: 2)
-    return-type dart:async::Future < dart:core::int* >*
-
-Bytecode {
-  Entry                4
-  CheckStack           0
-  AllocateContext      0, 11
-  PopLocal             r0
-  Push                 r0
-  Push                 FP[-6]
-  StoreContextVar      0, 2
-  Push                 r0
-  Push                 FP[-5]
-  StoreContextVar      0, 3
-  Push                 r0
-  PushConstant         CP#1
-  PushConstant         CP#0
-  AllocateT
-  StoreLocal           r2
-  Push                 r2
-  DirectCall           CP#2, 1
-  Drop1
-  StoreContextVar      0, 1
-  PushNull
-  PopLocal             r3
-  Push                 r0
-  PushInt              0
-  StoreContextVar      0, 0
-  Push                 r0
-  AllocateClosure      CP#4
-  StoreLocal           r2
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#16
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#18
-  Push                 r2
-  PushConstant         CP#4
-  StoreFieldTOS        CP#20
-  Push                 r2
-  Push                 r0
-  StoreFieldTOS        CP#6
-  StoreContextVar      0, 10
-  PushNull
-  PopLocal             r3
-  Push                 r0
-  Push                 r0
-  LoadContextVar       0, 10
-  DirectCall           CP#22, 1
-  StoreContextVar      0, 5
-  Push                 r0
-  Push                 r0
-  LoadContextVar       0, 10
-  DirectCall           CP#24, 1
-  StoreContextVar      0, 6
-  Push                 r0
-  LoadContextVar       0, 1
-  Push                 r0
-  LoadContextVar       0, 10
-  InterfaceCall        CP#26, 2
-  Drop1
-  Push                 r0
-  LoadContextVar       0, 1
-  InterfaceCall        CP#28, 1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Class dart:async::_AsyncAwaitCompleter
-  [1] = ObjectRef < dart:core::int* >
-  [2] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-  [4] = ClosureFunction 0
-  [5] = ObjectRef null
-  [6] = InstanceField dart:core::_Closure::_context (field)
-  [7] = Reserved
-  [8] = DirectCall 'dart:async::_awaitHelper', ArgDesc num-args 4, num-type-args 0, names []
-  [9] = Reserved
-  [10] = DirectCall 'dart:async::_completeOnAsyncReturn', ArgDesc num-args 2, num-type-args 0, names []
-  [11] = Reserved
-  [12] = Type dynamic
-  [13] = InterfaceCall 'dart:async::Completer::completeError', ArgDesc num-args 3, num-type-args 0, names []
-  [14] = Reserved
-  [15] = EndClosureFunctionScope
-  [16] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [17] = Reserved
-  [18] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [19] = Reserved
-  [20] = InstanceField dart:core::_Closure::_function (field)
-  [21] = Reserved
-  [22] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
-  [23] = Reserved
-  [24] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
-  [25] = Reserved
-  [26] = InterfaceCall 'dart:async::_AsyncAwaitCompleter::start', ArgDesc num-args 2, num-type-args 0, names []
-  [27] = Reserved
-  [28] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
-  [29] = Reserved
-}
-Closure #lib::simpleAsyncAwait::':async_op' ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
-ClosureCode {
-  EntryOptional        1, 3, 0
-  LoadConstant         r1, CP#5
-  LoadConstant         r2, CP#5
-  LoadConstant         r3, CP#5
-  Frame                6
-  Push                 r0
-  LoadFieldTOS         CP#6
-  PopLocal             r4
-  CheckStack           0
-  Push                 r4
-  LoadContextVar       0, 0
-  StoreLocal           r5
-  PushInt              0
-  JumpIfNeStrict       L1
-  Push                 r4
-  Push                 r4
-  StoreContextVar      0, 8
-Try #0 start:
-  Push                 r4
-  PushInt              1
-  StoreContextVar      0, 0
-  Push                 r4
-  Push                 r4
-  StoreContextVar      0, 7
-  Push                 r4
-  LoadContextVar       0, 2
-  Push                 r4
-  LoadContextVar       0, 5
-  Push                 r4
-  LoadContextVar       0, 6
-  Push                 r4
-  LoadContextVar       0, 10
-  DirectCall           CP#8, 4
-  PopLocal             r8
-  PushNull
-  ReturnTOS
-L6:
-  Push                 r2
-  JumpIfNull           L2
-  Push                 r2
-  Push                 r3
-  Throw                1
-L2:
-  Push                 r4
-  Push                 r1
-  StoreContextVar      0, 9
-  Push                 r4
-  PushInt              2
-  StoreContextVar      0, 0
-  Push                 r4
-  Push                 r4
-  StoreContextVar      0, 7
-  Push                 r4
-  LoadContextVar       0, 3
-  Push                 r4
-  LoadContextVar       0, 5
-  Push                 r4
-  LoadContextVar       0, 6
-  Push                 r4
-  LoadContextVar       0, 10
-  DirectCall           CP#8, 4
-  PopLocal             r9
-  PushNull
-  ReturnTOS
-L7:
-  Push                 r2
-  JumpIfNull           L3
-  Push                 r2
-  Push                 r3
-  Throw                1
-L3:
-  Push                 r4
-  Push                 r4
-  LoadContextVar       0, 9
-  Push                 r1
-  AddInt
-  StoreContextVar      0, 4
-  Jump                 L4
-L4:
-  Push                 r4
-  LoadContextVar       0, 1
-  Push                 r4
-  LoadContextVar       0, 4
-  DirectCall           CP#10, 2
-  Drop1
-  PushNull
-  ReturnTOS
-Try #0 end:
-Try #0 handler:
-  SetFrame             10
-  Push                 r0
-  LoadFieldTOS         CP#6
-  PopLocal             r4
-  Push                 r4
-  LoadContextVar       0, 8
-  PopLocal             r4
-  MoveSpecial          exception, r6
-  MoveSpecial          stackTrace, r7
-  Push                 r6
-  PopLocal             r8
-  Push                 r7
-  PopLocal             r9
-  Push                 r4
-  LoadContextVar       0, 1
-  Push                 r8
-  Push                 r9
-  InterfaceCall        CP#13, 3
-  Drop1
-  Jump                 L5
-L5:
-  PushNull
-  ReturnTOS
-L1:
-  Push                 r4
-  LoadContextVar       0, 7
-  PopLocal             r4
-  Push                 r5
-  PushInt              1
-  JumpIfEqStrict       L6
-  Jump                 L7
-}
-
-
-Function 'loops', static, reflectable, async
-    parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
-    return-type dart:async::Future < dart:core::int* >*
-
-Bytecode {
-  Entry                4
-  CheckStack           0
-  AllocateContext      0, 11
-  PopLocal             r0
-  Push                 r0
-  Push                 FP[-5]
-  StoreContextVar      0, 2
-  Push                 r0
-  PushConstant         CP#1
-  PushConstant         CP#0
-  AllocateT
-  StoreLocal           r2
-  Push                 r2
-  DirectCall           CP#2, 1
-  Drop1
-  StoreContextVar      0, 1
-  PushNull
-  PopLocal             r3
-  Push                 r0
-  PushInt              0
-  StoreContextVar      0, 0
-  Push                 r0
-  AllocateClosure      CP#4
-  StoreLocal           r2
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#24
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#26
-  Push                 r2
-  PushConstant         CP#4
-  StoreFieldTOS        CP#28
-  Push                 r2
-  Push                 r0
-  StoreFieldTOS        CP#6
-  StoreContextVar      0, 10
-  PushNull
-  PopLocal             r3
-  Push                 r0
-  Push                 r0
-  LoadContextVar       0, 10
-  DirectCall           CP#30, 1
-  StoreContextVar      0, 4
-  Push                 r0
-  Push                 r0
-  LoadContextVar       0, 10
-  DirectCall           CP#32, 1
-  StoreContextVar      0, 5
-  Push                 r0
-  LoadContextVar       0, 1
-  Push                 r0
-  LoadContextVar       0, 10
-  InterfaceCall        CP#34, 2
-  Drop1
-  Push                 r0
-  LoadContextVar       0, 1
-  InterfaceCall        CP#36, 1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Class dart:async::_AsyncAwaitCompleter
-  [1] = ObjectRef < dart:core::int* >
-  [2] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-  [4] = ClosureFunction 0
-  [5] = ObjectRef null
-  [6] = InstanceField dart:core::_Closure::_context (field)
-  [7] = Reserved
-  [8] = InterfaceCall 'dart:core::Iterable::get:iterator', ArgDesc num-args 1, num-type-args 0, names []
-  [9] = Reserved
-  [10] = InterfaceCall 'dart:core::Iterator::moveNext', ArgDesc num-args 1, num-type-args 0, names []
-  [11] = Reserved
-  [12] = InterfaceCall 'dart:core::Iterator::get:current', ArgDesc num-args 1, num-type-args 0, names []
-  [13] = Reserved
-  [14] = DirectCall '#lib::foo', ArgDesc num-args 0, num-type-args 0, names []
-  [15] = Reserved
-  [16] = DirectCall 'dart:async::_awaitHelper', ArgDesc num-args 4, num-type-args 0, names []
-  [17] = Reserved
-  [18] = DirectCall 'dart:async::_completeOnAsyncReturn', ArgDesc num-args 2, num-type-args 0, names []
-  [19] = Reserved
-  [20] = Type dynamic
-  [21] = InterfaceCall 'dart:async::Completer::completeError', ArgDesc num-args 3, num-type-args 0, names []
-  [22] = Reserved
-  [23] = EndClosureFunctionScope
-  [24] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [25] = Reserved
-  [26] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [27] = Reserved
-  [28] = InstanceField dart:core::_Closure::_function (field)
-  [29] = Reserved
-  [30] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
-  [31] = Reserved
-  [32] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
-  [33] = Reserved
-  [34] = InterfaceCall 'dart:async::_AsyncAwaitCompleter::start', ArgDesc num-args 2, num-type-args 0, names []
-  [35] = Reserved
-  [36] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
-  [37] = Reserved
-}
-Closure #lib::loops::':async_op' ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
-ClosureCode {
-  EntryOptional        1, 3, 0
-  LoadConstant         r1, CP#5
-  LoadConstant         r2, CP#5
-  LoadConstant         r3, CP#5
-  Frame                6
-  Push                 r0
-  LoadFieldTOS         CP#6
-  PopLocal             r4
-  CheckStack           0
-  Push                 r4
-  LoadContextVar       0, 0
-  StoreLocal           r5
-  PushInt              0
-  JumpIfNeStrict       L1
-  Push                 r4
-  Push                 r4
-  StoreContextVar      0, 7
-Try #0 start:
-  AllocateContext      1, 1
-  StoreLocal           r5
-  Push                 r5
-  Push                 r4
-  StoreContextParent
-  PopLocal             r4
-  Push                 r4
-  PushInt              0
-  StoreContextVar      1, 0
-  AllocateContext      2, 2
-  StoreLocal           r5
-  Push                 r5
-  Push                 r4
-  StoreContextParent
-  PopLocal             r4
-  Push                 r4
-  PushInt              0
-  StoreContextVar      2, 0
-L6:
-  CheckStack           1
-  Push                 r4
-  LoadContextVar       2, 0
-  PushInt              10
-  CompareIntLt
-  JumpIfFalse          L2
-  Push                 r4
-  Push                 r4
-  LoadContextParent
-  LoadContextParent
-  LoadContextVar       0, 2
-  InterfaceCall        CP#8, 1
-  StoreContextVar      2, 1
-L5:
-  CheckStack           2
-  Push                 r4
-  LoadContextVar       2, 1
-  InterfaceCall        CP#10, 1
-  AssertBoolean        0
-  JumpIfFalse          L3
-  AllocateContext      3, 1
-  StoreLocal           r5
-  Push                 r5
-  Push                 r4
-  StoreContextParent
-  PopLocal             r4
-  Push                 r4
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       2, 1
-  InterfaceCall        CP#12, 1
-  StoreContextVar      3, 0
-  Push                 r4
-  LoadContextParent
-  LoadContextParent
-  LoadContextParent
-  Push                 r4
-  LoadContextParent
-  LoadContextParent
-  LoadContextVar       1, 0
-  StoreContextVar      0, 9
-  Push                 r4
-  LoadContextParent
-  LoadContextParent
-  LoadContextParent
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       2, 0
-  Push                 r4
-  LoadContextVar       3, 0
-  AddInt
-  StoreContextVar      0, 8
-  Push                 r4
-  LoadContextParent
-  LoadContextParent
-  LoadContextParent
-  PushInt              1
-  StoreContextVar      0, 0
-  Push                 r4
-  LoadContextParent
-  LoadContextParent
-  LoadContextParent
-  Push                 r4
-  StoreContextVar      0, 6
-  DirectCall           CP#14, 0
-  Push                 r4
-  LoadContextParent
-  LoadContextParent
-  LoadContextParent
-  LoadContextVar       0, 4
-  Push                 r4
-  LoadContextParent
-  LoadContextParent
-  LoadContextParent
-  LoadContextVar       0, 5
-  Push                 r4
-  LoadContextParent
-  LoadContextParent
-  LoadContextParent
-  LoadContextVar       0, 10
-  DirectCall           CP#16, 4
-  PopLocal             r9
-  PushNull
-  ReturnTOS
-L11:
-  Push                 r2
-  JumpIfNull           L4
-  Push                 r2
-  Push                 r3
-  Throw                1
-L4:
-  Push                 r4
-  LoadContextParent
-  LoadContextParent
-  Push                 r4
-  LoadContextParent
-  LoadContextParent
-  LoadContextParent
-  LoadContextVar       0, 9
-  Push                 r4
-  LoadContextParent
-  LoadContextParent
-  LoadContextParent
-  LoadContextVar       0, 8
-  Push                 r1
-  AddInt
-  AddInt
-  StoreContextVar      1, 0
-  Push                 r4
-  LoadContextParent
-  PopLocal             r4
-  Jump                 L5
-L3:
-  Push                 r4
-  CloneContext         2, 2
-  PopLocal             r4
-  Push                 r4
-  Push                 r4
-  LoadContextVar       2, 0
-  PushInt              1
-  AddInt
-  StoreLocal           r8
-  StoreContextVar      2, 0
-  Push                 r8
-  Drop1
-  Jump                 L6
-L2:
-  Push                 r4
-  LoadContextParent
-  PopLocal             r4
-  PushInt              0
-  PopLocal             r8
-L8:
-  CheckStack           1
-  Push                 r8
-  PushInt              10
-  CompareIntLt
-  JumpIfFalse          L7
-  Push                 r4
-  Push                 r4
-  LoadContextVar       1, 0
-  Push                 r8
-  AddInt
-  StoreContextVar      1, 0
-  Push                 r8
-  PushInt              1
-  AddInt
-  StoreLocal           r8
-  Drop1
-  Jump                 L8
-L7:
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  LoadContextVar       1, 0
-  StoreContextVar      0, 3
-  Push                 r4
-  LoadContextParent
-  PopLocal             r4
-  Jump                 L9
-L9:
-  Push                 r4
-  LoadContextVar       0, 1
-  Push                 r4
-  LoadContextVar       0, 3
-  DirectCall           CP#18, 2
-  Drop1
-  PushNull
-  ReturnTOS
-Try #0 end:
-Try #0 handler:
-  SetFrame             10
-  Push                 r0
-  LoadFieldTOS         CP#6
-  PopLocal             r4
-  Push                 r4
-  LoadContextVar       0, 7
-  PopLocal             r4
-  MoveSpecial          exception, r6
-  MoveSpecial          stackTrace, r7
-  Push                 r6
-  PopLocal             r8
-  Push                 r7
-  PopLocal             r9
-  Push                 r4
-  LoadContextVar       0, 1
-  Push                 r8
-  Push                 r9
-  InterfaceCall        CP#21, 3
-  Drop1
-  Jump                 L10
-L10:
-  PushNull
-  ReturnTOS
-L1:
-  Push                 r4
-  LoadContextVar       0, 6
-  PopLocal             r4
-  Jump                 L11
-}
-
-
-Function 'tryCatchRethrow', static, reflectable, async
-    parameters [dart:async::Future < dart:core::int* >* 'a', dart:async::Future < dart:core::int* >* 'b', dart:async::Future < dart:core::int* >* 'c'] (required: 3)
-    return-type dart:async::Future < dart:core::int* >*
-
-Bytecode {
-  Entry                4
-  CheckStack           0
-  AllocateContext      0, 18
-  PopLocal             r0
-  Push                 r0
-  Push                 FP[-7]
-  StoreContextVar      0, 2
-  Push                 r0
-  Push                 FP[-6]
-  StoreContextVar      0, 3
-  Push                 r0
-  Push                 FP[-5]
-  StoreContextVar      0, 4
-  Push                 r0
-  PushConstant         CP#1
-  PushConstant         CP#0
-  AllocateT
-  StoreLocal           r2
-  Push                 r2
-  DirectCall           CP#2, 1
-  Drop1
-  StoreContextVar      0, 1
-  PushNull
-  PopLocal             r3
-  Push                 r0
-  PushInt              0
-  StoreContextVar      0, 0
-  Push                 r0
-  AllocateClosure      CP#4
-  StoreLocal           r2
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#22
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#24
-  Push                 r2
-  PushConstant         CP#4
-  StoreFieldTOS        CP#26
-  Push                 r2
-  Push                 r0
-  StoreFieldTOS        CP#6
-  StoreContextVar      0, 17
-  PushNull
-  PopLocal             r3
-  Push                 r0
-  Push                 r0
-  LoadContextVar       0, 17
-  DirectCall           CP#28, 1
-  StoreContextVar      0, 6
-  Push                 r0
-  Push                 r0
-  LoadContextVar       0, 17
-  DirectCall           CP#30, 1
-  StoreContextVar      0, 7
-  Push                 r0
-  LoadContextVar       0, 1
-  Push                 r0
-  LoadContextVar       0, 17
-  InterfaceCall        CP#32, 2
-  Drop1
-  Push                 r0
-  LoadContextVar       0, 1
-  InterfaceCall        CP#34, 1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Class dart:async::_AsyncAwaitCompleter
-  [1] = ObjectRef < dart:core::int* >
-  [2] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-  [4] = ClosureFunction 0
-  [5] = ObjectRef null
-  [6] = InstanceField dart:core::_Closure::_context (field)
-  [7] = Reserved
-  [8] = DirectCall 'dart:async::_awaitHelper', ArgDesc num-args 4, num-type-args 0, names []
-  [9] = Reserved
-  [10] = Type dynamic
-  [11] = Type dart:core::Error*
-  [12] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
-  [13] = Reserved
-  [14] = ObjectRef 'fin'
-  [15] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [16] = Reserved
-  [17] = DirectCall 'dart:async::_completeOnAsyncReturn', ArgDesc num-args 2, num-type-args 0, names []
-  [18] = Reserved
-  [19] = InterfaceCall 'dart:async::Completer::completeError', ArgDesc num-args 3, num-type-args 0, names []
-  [20] = Reserved
-  [21] = EndClosureFunctionScope
-  [22] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [23] = Reserved
-  [24] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [25] = Reserved
-  [26] = InstanceField dart:core::_Closure::_function (field)
-  [27] = Reserved
-  [28] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
-  [29] = Reserved
-  [30] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
-  [31] = Reserved
-  [32] = InterfaceCall 'dart:async::_AsyncAwaitCompleter::start', ArgDesc num-args 2, num-type-args 0, names []
-  [33] = Reserved
-  [34] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
-  [35] = Reserved
-}
-Closure #lib::tryCatchRethrow::':async_op' ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
-ClosureCode {
-  EntryOptional        1, 3, 0
-  LoadConstant         r1, CP#5
-  LoadConstant         r2, CP#5
-  LoadConstant         r3, CP#5
-  Frame                10
-  Push                 r0
-  LoadFieldTOS         CP#6
-  PopLocal             r4
-  CheckStack           0
-  Push                 r4
-  LoadContextVar       0, 0
-  StoreLocal           r5
-  PushInt              0
-  JumpIfNeStrict       L1
-  Push                 r4
-  Push                 r4
-  StoreContextVar      0, 9
-Try #0 start:
-  AllocateContext      1, 2
-  StoreLocal           r5
-  Push                 r5
-  Push                 r4
-  StoreContextParent
-  PopLocal             r4
-  Push                 r4
-  PushInt              1
-  StoreContextVar      1, 0
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  StoreContextVar      0, 10
-Try #1 start:
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  StoreContextVar      0, 11
-Try #2 start:
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  LoadContextVar       1, 0
-  StoreContextVar      0, 14
-  Push                 r4
-  LoadContextParent
-  PushInt              1
-  StoreContextVar      0, 0
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  StoreContextVar      0, 8
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 2
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 6
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 7
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 17
-  DirectCall           CP#8, 4
-  PopLocal             r13
-  PushNull
-  ReturnTOS
-L13:
-  Push                 r2
-  JumpIfNull           L2
-  Push                 r2
-  Push                 r3
-  Throw                1
-L2:
-  Push                 r4
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 14
-  Push                 r1
-  AddInt
-  StoreContextVar      1, 0
-  Jump                 L3
-Try #2 end:
-Try #2 handler:
-  SetFrame             14
-  Push                 r0
-  LoadFieldTOS         CP#6
-  PopLocal             r4
-  Push                 r4
-  LoadContextVar       0, 11
-  PopLocal             r4
-  MoveSpecial          exception, r10
-  MoveSpecial          stackTrace, r11
-  Push                 r4
-  LoadContextParent
-  Push                 r10
-  StoreContextVar      0, 12
-  Push                 r4
-  LoadContextParent
-  Push                 r11
-  StoreContextVar      0, 13
-  Push                 r4
-  Push                 r10
-  StoreContextVar      1, 1
-  Push                 r4
-  LoadContextVar       1, 1
-  PushConstant         CP#11
-  InterfaceCall        CP#12, 2
-  JumpIfFalse          L4
-  Push                 r4
-  LoadContextParent
-  PushInt              42
-  StoreContextVar      0, 5
-  Jump                 L5
-L4:
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  LoadContextVar       1, 0
-  StoreContextVar      0, 15
-  Push                 r4
-  LoadContextParent
-  PushInt              2
-  StoreContextVar      0, 0
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  StoreContextVar      0, 8
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 3
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 6
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 7
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 17
-  DirectCall           CP#8, 4
-  PopLocal             r13
-  PushNull
-  ReturnTOS
-L14:
-  Push                 r2
-  JumpIfNull           L6
-  Push                 r2
-  Push                 r3
-  Throw                1
-L6:
-  Push                 r4
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 15
-  Push                 r1
-  AddInt
-  StoreContextVar      1, 0
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 12
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 13
-  Throw                1
-L3:
-  Jump                 L7
-Try #1 end:
-Try #1 handler:
-  SetFrame             14
-  Push                 r0
-  LoadFieldTOS         CP#6
-  PopLocal             r4
-  Push                 r4
-  LoadContextVar       0, 10
-  PopLocal             r4
-  MoveSpecial          exception, r8
-  MoveSpecial          stackTrace, r9
-  Push                 r4
-  LoadContextParent
-  Push                 r8
-  StoreContextVar      0, 12
-  Push                 r4
-  LoadContextParent
-  Push                 r9
-  StoreContextVar      0, 13
-  PushConstant         CP#14
-  DirectCall           CP#15, 1
-  Drop1
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  LoadContextVar       1, 0
-  StoreContextVar      0, 16
-  Push                 r4
-  LoadContextParent
-  PushInt              3
-  StoreContextVar      0, 0
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  StoreContextVar      0, 8
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 4
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 6
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 7
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 17
-  DirectCall           CP#8, 4
-  PopLocal             r12
-  PushNull
-  ReturnTOS
-L15:
-  Push                 r2
-  JumpIfNull           L8
-  Push                 r2
-  Push                 r3
-  Throw                1
-L8:
-  Push                 r4
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 16
-  Push                 r1
-  AddInt
-  StoreContextVar      1, 0
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  LoadContextVar       1, 0
-  StoreContextVar      0, 5
-  Push                 r4
-  LoadContextParent
-  PopLocal             r4
-  Jump                 L9
-L5:
-  Push                 r0
-  LoadFieldTOS         CP#6
-  PopLocal             r4
-  Push                 r4
-  LoadContextVar       0, 10
-  PopLocal             r4
-  PushConstant         CP#14
-  DirectCall           CP#15, 1
-  Drop1
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  LoadContextVar       1, 0
-  StoreContextVar      0, 16
-  Push                 r4
-  LoadContextParent
-  PushInt              4
-  StoreContextVar      0, 0
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  StoreContextVar      0, 8
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 4
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 6
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 7
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 17
-  DirectCall           CP#8, 4
-  PopLocal             r12
-  PushNull
-  ReturnTOS
-L16:
-  Push                 r2
-  JumpIfNull           L10
-  Push                 r2
-  Push                 r3
-  Throw                1
-L10:
-  Push                 r4
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 16
-  Push                 r1
-  AddInt
-  StoreContextVar      1, 0
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  LoadContextVar       1, 0
-  StoreContextVar      0, 5
-  Push                 r4
-  LoadContextParent
-  PopLocal             r4
-  Jump                 L9
-L7:
-  Push                 r0
-  LoadFieldTOS         CP#6
-  PopLocal             r4
-  Push                 r4
-  LoadContextVar       0, 10
-  PopLocal             r4
-  PushConstant         CP#14
-  DirectCall           CP#15, 1
-  Drop1
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  LoadContextVar       1, 0
-  StoreContextVar      0, 16
-  Push                 r4
-  LoadContextParent
-  PushInt              5
-  StoreContextVar      0, 0
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  StoreContextVar      0, 8
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 4
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 6
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 7
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 17
-  DirectCall           CP#8, 4
-  PopLocal             r12
-  PushNull
-  ReturnTOS
-L17:
-  Push                 r2
-  JumpIfNull           L11
-  Push                 r2
-  Push                 r3
-  Throw                1
-L11:
-  Push                 r4
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       0, 16
-  Push                 r1
-  AddInt
-  StoreContextVar      1, 0
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  LoadContextVar       1, 0
-  StoreContextVar      0, 5
-  Push                 r4
-  LoadContextParent
-  PopLocal             r4
-  Jump                 L9
-L9:
-  Push                 r4
-  LoadContextVar       0, 1
-  Push                 r4
-  LoadContextVar       0, 5
-  DirectCall           CP#17, 2
-  Drop1
-  PushNull
-  ReturnTOS
-Try #0 end:
-Try #0 handler:
-  SetFrame             14
-  Push                 r0
-  LoadFieldTOS         CP#6
-  PopLocal             r4
-  Push                 r4
-  LoadContextVar       0, 9
-  PopLocal             r4
-  MoveSpecial          exception, r6
-  MoveSpecial          stackTrace, r7
-  Push                 r6
-  PopLocal             r8
-  Push                 r7
-  PopLocal             r9
-  Push                 r4
-  LoadContextVar       0, 1
-  Push                 r8
-  Push                 r9
-  InterfaceCall        CP#19, 3
-  Drop1
-  Jump                 L12
-L12:
-  PushNull
-  ReturnTOS
-L1:
-  Push                 r4
-  LoadContextVar       0, 8
-  PopLocal             r4
-  Push                 r5
-  PushInt              1
-  JumpIfEqStrict       L13
-  Push                 r5
-  PushInt              2
-  JumpIfEqStrict       L14
-  Push                 r5
-  PushInt              3
-  JumpIfEqStrict       L15
-  Push                 r5
-  PushInt              4
-  JumpIfEqStrict       L16
-  Jump                 L17
-}
-
-
-Function 'closure', static, reflectable, debuggable
-    parameters [dart:async::Future < dart:core::int* >* 'a'] (required: 1)
-    return-type dynamic
-
-Bytecode {
-  Entry                4
-  CheckStack           0
-  AllocateContext      0, 2
-  PopLocal             r0
-  Push                 r0
-  Push                 FP[-5]
-  StoreContextVar      0, 0
-  Push                 r0
-  PushInt              3
-  StoreContextVar      0, 1
-  AllocateClosure      CP#0
-  StoreLocal           r3
-  Push                 r3
-  PushNull
-  StoreFieldTOS        CP#20
-  Push                 r3
-  PushNull
-  StoreFieldTOS        CP#22
-  Push                 r3
-  PushConstant         CP#0
-  StoreFieldTOS        CP#24
-  Push                 r3
-  Push                 r0
-  StoreFieldTOS        CP#1
-  PopLocal             r2
-  Push                 r2
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ClosureFunction 0
-  [1] = InstanceField dart:core::_Closure::_context (field)
-  [2] = Reserved
-  [3] = Class dart:async::_AsyncAwaitCompleter
-  [4] = ObjectRef < dart:core::int* >
-  [5] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [6] = Reserved
-  [7] = ClosureFunction 1
-  [8] = ObjectRef null
-  [9] = DirectCall 'dart:async::_awaitHelper', ArgDesc num-args 4, num-type-args 0, names []
-  [10] = Reserved
-  [11] = Type dynamic
-  [12] = ObjectRef 'fin'
-  [13] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [14] = Reserved
-  [15] = DirectCall 'dart:async::_completeOnAsyncReturn', ArgDesc num-args 2, num-type-args 0, names []
-  [16] = Reserved
-  [17] = InterfaceCall 'dart:async::Completer::completeError', ArgDesc num-args 3, num-type-args 0, names []
-  [18] = Reserved
-  [19] = EndClosureFunctionScope
-  [20] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [21] = Reserved
-  [22] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [23] = Reserved
-  [24] = InstanceField dart:core::_Closure::_function (field)
-  [25] = Reserved
-  [26] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
-  [27] = Reserved
-  [28] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
-  [29] = Reserved
-  [30] = InterfaceCall 'dart:async::_AsyncAwaitCompleter::start', ArgDesc num-args 2, num-type-args 0, names []
-  [31] = Reserved
-  [32] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
-  [33] = Reserved
-  [34] = EndClosureFunctionScope
-}
-Closure #lib::closure::'nested' async () -> dart:async::Future < dart:core::int* >*
-ClosureCode {
-  Entry                4
-  Push                 FP[-5]
-  LoadFieldTOS         CP#1
-  PopLocal             r0
-  CheckStack           0
-  AllocateContext      1, 9
-  StoreLocal           r1
-  Push                 r1
-  Push                 r0
-  StoreContextParent
-  PopLocal             r0
-  Push                 r0
-  PushConstant         CP#4
-  PushConstant         CP#3
-  AllocateT
-  StoreLocal           r2
-  Push                 r2
-  DirectCall           CP#5, 1
-  Drop1
-  StoreContextVar      1, 1
-  PushNull
-  PopLocal             r3
-  Push                 r0
-  PushInt              0
-  StoreContextVar      1, 0
-  Push                 r0
-  AllocateClosure      CP#7
-  StoreLocal           r2
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#20
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#22
-  Push                 r2
-  PushConstant         CP#7
-  StoreFieldTOS        CP#24
-  Push                 r2
-  Push                 r0
-  StoreFieldTOS        CP#1
-  StoreContextVar      1, 8
-  PushNull
-  PopLocal             r3
-  Push                 r0
-  Push                 r0
-  LoadContextVar       1, 8
-  DirectCall           CP#26, 1
-  StoreContextVar      1, 3
-  Push                 r0
-  Push                 r0
-  LoadContextVar       1, 8
-  DirectCall           CP#28, 1
-  StoreContextVar      1, 4
-  Push                 r0
-  LoadContextVar       1, 1
-  Push                 r0
-  LoadContextVar       1, 8
-  InterfaceCall        CP#30, 2
-  Drop1
-  Push                 r0
-  LoadContextVar       1, 1
-  InterfaceCall        CP#32, 1
-  ReturnTOS
-}
-
-Closure #lib::closure::Closure/0::':async_op' ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
-ClosureCode {
-  EntryOptional        1, 3, 0
-  LoadConstant         r1, CP#8
-  LoadConstant         r2, CP#8
-  LoadConstant         r3, CP#8
-  Frame                8
-  Push                 r0
-  LoadFieldTOS         CP#1
-  PopLocal             r4
-  CheckStack           0
-  Push                 r4
-  LoadContextVar       1, 0
-  StoreLocal           r5
-  PushInt              0
-  JumpIfNeStrict       L1
-  Push                 r4
-  Push                 r4
-  StoreContextVar      1, 6
-Try #0 start:
-  AllocateContext      2, 1
-  StoreLocal           r5
-  Push                 r5
-  Push                 r4
-  StoreContextParent
-  PopLocal             r4
-  Push                 r4
-  PushInt              4
-  StoreContextVar      2, 0
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  StoreContextVar      1, 7
-Try #1 start:
-  Push                 r4
-  LoadContextParent
-  LoadContextParent
-  PushInt              5
-  StoreContextVar      0, 1
-  Push                 r4
-  LoadContextParent
-  PushInt              1
-  StoreContextVar      1, 0
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  StoreContextVar      1, 5
-  Push                 r4
-  LoadContextParent
-  LoadContextParent
-  LoadContextVar       0, 0
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       1, 3
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       1, 4
-  Push                 r4
-  LoadContextParent
-  LoadContextVar       1, 8
-  DirectCall           CP#9, 4
-  PopLocal             r11
-  PushNull
-  ReturnTOS
-L6:
-  Push                 r2
-  JumpIfNull           L2
-  Push                 r2
-  Push                 r3
-  Throw                1
-L2:
-  Push                 r4
-  Push                 r1
-  StoreContextVar      2, 0
-  Push                 r4
-  LoadContextParent
-  Push                 r4
-  LoadContextParent
-  LoadContextParent
-  LoadContextVar       0, 1
-  Push                 r4
-  LoadContextVar       2, 0
-  AddInt
-  StoreContextVar      1, 2
-  Jump                 L3
-Try #1 end:
-Try #1 handler:
-  SetFrame             12
-  Push                 r0
-  LoadFieldTOS         CP#1
-  PopLocal             r4
-  Push                 r4
-  LoadContextVar       1, 7
-  PopLocal             r4
-  MoveSpecial          exception, r8
-  MoveSpecial          stackTrace, r9
-  PushConstant         CP#12
-  DirectCall           CP#13, 1
-  Drop1
-  Push                 r8
-  Push                 r9
-  Throw                1
-L3:
-  Push                 r0
-  LoadFieldTOS         CP#1
-  PopLocal             r4
-  Push                 r4
-  LoadContextVar       1, 7
-  PopLocal             r4
-  PushConstant         CP#12
-  DirectCall           CP#13, 1
-  Drop1
-  Push                 r4
-  LoadContextParent
-  PopLocal             r4
-  Jump                 L4
-L4:
-  Push                 r4
-  LoadContextVar       1, 1
-  Push                 r4
-  LoadContextVar       1, 2
-  DirectCall           CP#15, 2
-  Drop1
-  PushNull
-  ReturnTOS
-Try #0 end:
-Try #0 handler:
-  SetFrame             12
-  Push                 r0
-  LoadFieldTOS         CP#1
-  PopLocal             r4
-  Push                 r4
-  LoadContextVar       1, 6
-  PopLocal             r4
-  MoveSpecial          exception, r6
-  MoveSpecial          stackTrace, r7
-  Push                 r6
-  PopLocal             r8
-  Push                 r7
-  PopLocal             r9
-  Push                 r4
-  LoadContextVar       1, 1
-  Push                 r8
-  Push                 r9
-  InterfaceCall        CP#17, 3
-  Drop1
-  Jump                 L5
-L5:
-  PushNull
-  ReturnTOS
-L1:
-  Push                 r4
-  LoadContextVar       1, 5
-  PopLocal             r4
-  Jump                 L6
-}
-
-
-Function 'testAssert', static, reflectable, async
-    parameters [dart:async::Future < dart:core::int* >* 'a'] (required: 1)
-    return-type dart:async::Future < dart:core::int* >*
-
-Bytecode {
-  Entry                4
-  CheckStack           0
-  AllocateContext      0, 9
-  PopLocal             r0
-  Push                 r0
-  Push                 FP[-5]
-  StoreContextVar      0, 2
-  Push                 r0
-  PushConstant         CP#1
-  PushConstant         CP#0
-  AllocateT
-  StoreLocal           r2
-  Push                 r2
-  DirectCall           CP#2, 1
-  Drop1
-  StoreContextVar      0, 1
-  PushNull
-  PopLocal             r3
-  Push                 r0
-  PushInt              0
-  StoreContextVar      0, 0
-  Push                 r0
-  AllocateClosure      CP#4
-  StoreLocal           r2
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#18
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#20
-  Push                 r2
-  PushConstant         CP#4
-  StoreFieldTOS        CP#22
-  Push                 r2
-  Push                 r0
-  StoreFieldTOS        CP#6
-  StoreContextVar      0, 8
-  PushNull
-  PopLocal             r3
-  Push                 r0
-  Push                 r0
-  LoadContextVar       0, 8
-  DirectCall           CP#24, 1
-  StoreContextVar      0, 4
-  Push                 r0
-  Push                 r0
-  LoadContextVar       0, 8
-  DirectCall           CP#26, 1
-  StoreContextVar      0, 5
-  Push                 r0
-  LoadContextVar       0, 1
-  Push                 r0
-  LoadContextVar       0, 8
-  InterfaceCall        CP#28, 2
-  Drop1
-  Push                 r0
-  LoadContextVar       0, 1
-  InterfaceCall        CP#30, 1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Class dart:async::_AsyncAwaitCompleter
-  [1] = ObjectRef < dart:core::int* >
-  [2] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-  [4] = ClosureFunction 0
-  [5] = ObjectRef null
-  [6] = InstanceField dart:core::_Closure::_context (field)
-  [7] = Reserved
-  [8] = DirectCall 'dart:async::_awaitHelper', ArgDesc num-args 4, num-type-args 0, names []
-  [9] = Reserved
-  [10] = DirectCall 'dart:core::_AssertionError::_throwNew', ArgDesc num-args 3, num-type-args 0, names []
-  [11] = Reserved
-  [12] = DirectCall 'dart:async::_completeOnAsyncReturn', ArgDesc num-args 2, num-type-args 0, names []
-  [13] = Reserved
-  [14] = Type dynamic
-  [15] = InterfaceCall 'dart:async::Completer::completeError', ArgDesc num-args 3, num-type-args 0, names []
-  [16] = Reserved
-  [17] = EndClosureFunctionScope
-  [18] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [19] = Reserved
-  [20] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [21] = Reserved
-  [22] = InstanceField dart:core::_Closure::_function (field)
-  [23] = Reserved
-  [24] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
-  [25] = Reserved
-  [26] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
-  [27] = Reserved
-  [28] = InterfaceCall 'dart:async::_AsyncAwaitCompleter::start', ArgDesc num-args 2, num-type-args 0, names []
-  [29] = Reserved
-  [30] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
-  [31] = Reserved
-}
-Closure #lib::testAssert::':async_op' ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
-ClosureCode {
-  EntryOptional        1, 3, 0
-  LoadConstant         r1, CP#5
-  LoadConstant         r2, CP#5
-  LoadConstant         r3, CP#5
-  Frame                6
-  Push                 r0
-  LoadFieldTOS         CP#6
-  PopLocal             r4
-  CheckStack           0
-  Push                 r4
-  LoadContextVar       0, 0
-  StoreLocal           r5
-  PushInt              0
-  JumpIfNeStrict       L1
-  Push                 r4
-  Push                 r4
-  StoreContextVar      0, 7
-Try #0 start:
-  JumpIfNoAsserts      L2
-  Push                 r4
-  PushInt              1
-  StoreContextVar      0, 0
-  Push                 r4
-  Push                 r4
-  StoreContextVar      0, 6
-  Push                 r4
-  LoadContextVar       0, 2
-  Push                 r4
-  LoadContextVar       0, 4
-  Push                 r4
-  LoadContextVar       0, 5
-  Push                 r4
-  LoadContextVar       0, 8
-  DirectCall           CP#8, 4
-  PopLocal             r8
-  PushNull
-  ReturnTOS
-L6:
-  Push                 r2
-  JumpIfNull           L3
-  Push                 r2
-  Push                 r3
-  Throw                1
-L3:
-  JumpIfNoAsserts      L2
-  Push                 r1
-  PushInt              42
-  CompareIntEq
-  JumpIfTrue           L2
-  PushInt              0
-  PushInt              0
-  PushNull
-  DirectCall           CP#10, 3
-  Drop1
-L2:
-  Push                 r4
-  PushInt              7
-  StoreContextVar      0, 3
-  Jump                 L4
-L4:
-  Push                 r4
-  LoadContextVar       0, 1
-  Push                 r4
-  LoadContextVar       0, 3
-  DirectCall           CP#12, 2
-  Drop1
-  PushNull
-  ReturnTOS
-Try #0 end:
-Try #0 handler:
-  SetFrame             10
-  Push                 r0
-  LoadFieldTOS         CP#6
-  PopLocal             r4
-  Push                 r4
-  LoadContextVar       0, 7
-  PopLocal             r4
-  MoveSpecial          exception, r6
-  MoveSpecial          stackTrace, r7
-  Push                 r6
-  PopLocal             r8
-  Push                 r7
-  PopLocal             r9
-  Push                 r4
-  LoadContextVar       0, 1
-  Push                 r8
-  Push                 r9
-  InterfaceCall        CP#15, 3
-  Drop1
-  Jump                 L5
-L5:
-  PushNull
-  ReturnTOS
-L1:
-  Push                 r4
-  LoadContextVar       0, 6
-  PopLocal             r4
-  Jump                 L6
-}
-
-
-Function 'main', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-}
-
-
-}
-]library #lib from "#lib" as #lib {
-
-  import "dart:async";
-
-  static field (dart.async::Future<dart.core::int*>*) →* dart.async::Future<dart.core::Null?>* asyncInFieldInitializer = (dart.async::Future<dart.core::int*>* x) → dart.async::Future<dart.core::Null?>* /* originally async */ {
-    final dart.async::_AsyncAwaitCompleter<dart.core::Null?>* :async_completer = new dart.async::_AsyncAwaitCompleter::•<dart.core::Null?>();
-    FutureOr<dart.core::Null?>* :return_value;
-    dynamic :async_stack_trace;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          dart._internal::unsafeCast<dart.core::int*>(:result);
-        }
-        dart.async::_completeOnAsyncReturn(:async_completer, :return_value);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        :async_completer.{dart.async::Completer::completeError}(exception, stack_trace);
-      }
-    :async_stack_trace = dart.async::_asyncStackTraceHelper(:async_op);
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_completer.{dart.async::_AsyncAwaitCompleter::start}(:async_op);
-    return :async_completer.{dart.async::Completer::future};
-  };
-  static method foo() → dart.async::Future<dart.core::int*>* /* originally async */ {
-    final dart.async::_AsyncAwaitCompleter<dart.core::int*>* :async_completer = new dart.async::_AsyncAwaitCompleter::•<dart.core::int*>();
-    FutureOr<dart.core::int*>* :return_value;
-    dynamic :async_stack_trace;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-      try {
-        #L2:
-        {
-          :return_value = 42;
-          break #L2;
-        }
-        dart.async::_completeOnAsyncReturn(:async_completer, :return_value);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        :async_completer.{dart.async::Completer::completeError}(exception, stack_trace);
-      }
-    :async_stack_trace = dart.async::_asyncStackTraceHelper(:async_op);
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_completer.{dart.async::_AsyncAwaitCompleter::start}(:async_op);
-    return :async_completer.{dart.async::Completer::future};
-  }
-  static method simpleAsyncAwait(dart.async::Future<dart.core::int*>* a, dart.async::Future<dart.core::int*>* b) → dart.async::Future<dart.core::int*>* /* originally async */ {
-    final dart.async::_AsyncAwaitCompleter<dart.core::int*>* :async_completer = new dart.async::_AsyncAwaitCompleter::•<dart.core::int*>();
-    FutureOr<dart.core::int*>* :return_value;
-    dynamic :async_stack_trace;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    dynamic :async_temporary_0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-      try {
-        #L3:
-        {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = dart._internal::unsafeCast<dart.core::int*>(:result);
-          [yield] let dynamic #t3 = dart.async::_awaitHelper(b, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = dart._internal::unsafeCast<dart.core::int*>(:async_temporary_0).{dart.core::num::+}(dart._internal::unsafeCast<dart.core::int*>(:result));
-          break #L3;
-        }
-        dart.async::_completeOnAsyncReturn(:async_completer, :return_value);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        :async_completer.{dart.async::Completer::completeError}(exception, stack_trace);
-      }
-    :async_stack_trace = dart.async::_asyncStackTraceHelper(:async_op);
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_completer.{dart.async::_AsyncAwaitCompleter::start}(:async_op);
-    return :async_completer.{dart.async::Completer::future};
-  }
-  static method loops(dart.core::List<dart.core::int*>* list) → dart.async::Future<dart.core::int*>* /* originally async */ {
-    final dart.async::_AsyncAwaitCompleter<dart.core::int*>* :async_completer = new dart.async::_AsyncAwaitCompleter::•<dart.core::int*>();
-    FutureOr<dart.core::int*>* :return_value;
-    dynamic :async_stack_trace;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    dynamic :async_temporary_0;
-    dynamic :async_temporary_1;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-      try {
-        #L4:
-        {
-          dart.core::int* sum = 0;
-          for (dart.core::int* i = 0; i.{dart.core::num::<}(10); i = i.{dart.core::num::+}(1)) {
-            {
-              dart.core::Iterator<dart.core::int*>* :sync-for-iterator = list.{dart.core::Iterable::iterator};
-              for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(); ) {
-                dart.core::int* j = :sync-for-iterator.{dart.core::Iterator::current};
-                {
-                  :async_temporary_1 = sum;
-                  :async_temporary_0 = i.{dart.core::num::+}(j);
-                  [yield] let dynamic #t4 = dart.async::_awaitHelper(#lib::foo(), :async_op_then, :async_op_error, :async_op) in null;
-                  sum = dart._internal::unsafeCast<dart.core::int*>(:async_temporary_1).{dart.core::num::+}(dart._internal::unsafeCast<dart.core::int*>(:async_temporary_0).{dart.core::num::+}(dart._internal::unsafeCast<dart.core::int*>(:result)));
-                }
-              }
-            }
-          }
-          for (dart.core::int* k = 0; k.{dart.core::num::<}(10); k = k.{dart.core::num::+}(1)) {
-            sum = sum.{dart.core::num::+}(k);
-          }
-          :return_value = sum;
-          break #L4;
-        }
-        dart.async::_completeOnAsyncReturn(:async_completer, :return_value);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        :async_completer.{dart.async::Completer::completeError}(exception, stack_trace);
-      }
-    :async_stack_trace = dart.async::_asyncStackTraceHelper(:async_op);
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_completer.{dart.async::_AsyncAwaitCompleter::start}(:async_op);
-    return :async_completer.{dart.async::Completer::future};
-  }
-  static method tryCatchRethrow(dart.async::Future<dart.core::int*>* a, dart.async::Future<dart.core::int*>* b, dart.async::Future<dart.core::int*>* c) → dart.async::Future<dart.core::int*>* /* originally async */ {
-    final dart.async::_AsyncAwaitCompleter<dart.core::int*>* :async_completer = new dart.async::_AsyncAwaitCompleter::•<dart.core::int*>();
-    FutureOr<dart.core::int*>* :return_value;
-    dynamic :async_stack_trace;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    dynamic :saved_try_context_var1;
-    dynamic :saved_try_context_var2;
-    dynamic :exception0;
-    dynamic :stack_trace0;
-    dynamic :async_temporary_0;
-    dynamic :async_temporary_1;
-    dynamic :async_temporary_2;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-      try {
-        #L5:
-        {
-          dart.core::int* x = 1;
-          try
-            try {
-              :async_temporary_0 = x;
-              [yield] let dynamic #t5 = dart.async::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
-              x = dart._internal::unsafeCast<dart.core::int*>(:async_temporary_0).{dart.core::num::+}(dart._internal::unsafeCast<dart.core::int*>(:result));
-            }
-            on dynamic catch(final dynamic e) {
-              if(e is dart.core::Error*) {
-                :return_value = 42;
-                break #L5;
-              }
-              :async_temporary_1 = x;
-              [yield] let dynamic #t6 = dart.async::_awaitHelper(b, :async_op_then, :async_op_error, :async_op) in null;
-              x = dart._internal::unsafeCast<dart.core::int*>(:async_temporary_1).{dart.core::num::+}(dart._internal::unsafeCast<dart.core::int*>(:result));
-              rethrow;
-            }
-          finally {
-            dart.core::print("fin");
-            :async_temporary_2 = x;
-            [yield] let dynamic #t7 = dart.async::_awaitHelper(c, :async_op_then, :async_op_error, :async_op) in null;
-            x = dart._internal::unsafeCast<dart.core::int*>(:async_temporary_2).{dart.core::num::+}(dart._internal::unsafeCast<dart.core::int*>(:result));
-            :return_value = x;
-            break #L5;
-          }
-        }
-        dart.async::_completeOnAsyncReturn(:async_completer, :return_value);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        :async_completer.{dart.async::Completer::completeError}(exception, stack_trace);
-      }
-    :async_stack_trace = dart.async::_asyncStackTraceHelper(:async_op);
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_completer.{dart.async::_AsyncAwaitCompleter::start}(:async_op);
-    return :async_completer.{dart.async::Completer::future};
-  }
-  static method closure(dart.async::Future<dart.core::int*>* a) → dynamic {
-    dart.core::int* x = 3;
-    function nested() → dart.async::Future<dart.core::int*>* /* originally async */ {
-      final dart.async::_AsyncAwaitCompleter<dart.core::int*>* :async_completer = new dart.async::_AsyncAwaitCompleter::•<dart.core::int*>();
-      FutureOr<dart.core::int*>* :return_value;
-      dynamic :async_stack_trace;
-      (dynamic) →* dynamic :async_op_then;
-      (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-      dart.core::int* :await_jump_var = 0;
-      dynamic :await_ctx_var;
-      dynamic :saved_try_context_var0;
-      dynamic :saved_try_context_var1;
-      function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-        try {
-          #L6:
-          {
-            dart.core::int* y = 4;
-            try {
-              x = 5;
-              [yield] let dynamic #t8 = dart.async::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
-              y = dart._internal::unsafeCast<dart.core::int*>(:result);
-              :return_value = x.{dart.core::num::+}(y);
-              break #L6;
-            }
-            finally {
-              dart.core::print("fin");
-            }
-          }
-          dart.async::_completeOnAsyncReturn(:async_completer, :return_value);
-          return;
-        }
-        on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-          :async_completer.{dart.async::Completer::completeError}(exception, stack_trace);
-        }
-      :async_stack_trace = dart.async::_asyncStackTraceHelper(:async_op);
-      :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-      :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-      :async_completer.{dart.async::_AsyncAwaitCompleter::start}(:async_op);
-      return :async_completer.{dart.async::Completer::future};
-    }
-    return nested;
-  }
-  static method testAssert(dart.async::Future<dart.core::int*>* a) → dart.async::Future<dart.core::int*>* /* originally async */ {
-    final dart.async::_AsyncAwaitCompleter<dart.core::int*>* :async_completer = new dart.async::_AsyncAwaitCompleter::•<dart.core::int*>();
-    FutureOr<dart.core::int*>* :return_value;
-    dynamic :async_stack_trace;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.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 {
-        #L7:
-        {
-          assert {
-            [yield] let dynamic #t9 = dart.async::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
-            assert(dart._internal::unsafeCast<dart.core::int*>(:result).{dart.core::num::==}(42));
-          }
-          :return_value = 7;
-          break #L7;
-        }
-        dart.async::_completeOnAsyncReturn(:async_completer, :return_value);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        :async_completer.{dart.async::Completer::completeError}(exception, stack_trace);
-      }
-    :async_stack_trace = dart.async::_asyncStackTraceHelper(:async_op);
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_completer.{dart.async::_AsyncAwaitCompleter::start}(:async_op);
-    return :async_completer.{dart.async::Completer::future};
-  }
-  static method main() → dynamic {}
-}
diff --git a/pkg/vm/testcases/bytecode/bootstrapping.dart b/pkg/vm/testcases/bytecode/bootstrapping.dart
deleted file mode 100644
index 3f8c850..0000000
--- a/pkg/vm/testcases/bytecode/bootstrapping.dart
+++ /dev/null
@@ -1,155 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Selection of methods used during bootstrapping.
-
-// ignore_for_file: native_function_body_in_non_sdk_code
-// ignore_for_file: unused_element, unused_field
-
-// -----------------------------------------------------------------
-
-void _printString(String s) native "Builtin_PrintString";
-
-void _print(arg) {
-  _printString(arg.toString());
-}
-
-_getPrintClosure() => _print;
-
-// -----------------------------------------------------------------
-
-typedef void _ScheduleImmediateClosure(void callback());
-
-class _ScheduleImmediate {
-  static _ScheduleImmediateClosure _closure;
-}
-
-void _setScheduleImmediateClosure(_ScheduleImmediateClosure closure) {
-  _ScheduleImmediate._closure = closure;
-}
-
-// -----------------------------------------------------------------
-
-class _NamespaceImpl implements _Namespace {
-  _NamespaceImpl._();
-
-  static _NamespaceImpl _create(_NamespaceImpl namespace, var n)
-      native "Namespace_Create";
-  static int _getPointer(_NamespaceImpl namespace)
-      native "Namespace_GetPointer";
-  static int _getDefault() native "Namespace_GetDefault";
-
-  // If the platform supports "namespaces", this method is called by the
-  // embedder with the platform-specific namespace information.
-  static _NamespaceImpl _cachedNamespace = null;
-  static void _setupNamespace(var namespace) {
-    _cachedNamespace = _create(new _NamespaceImpl._(), namespace);
-  }
-
-  static _NamespaceImpl get _namespace {
-    if (_cachedNamespace == null) {
-      // The embedder has not supplied a namespace before one is needed, so
-      // instead use a safe-ish default value.
-      _cachedNamespace = _create(new _NamespaceImpl._(), _getDefault());
-    }
-    return _cachedNamespace;
-  }
-
-  static int get _namespacePointer => _getPointer(_namespace);
-}
-
-class _Namespace {
-  static void _setupNamespace(var namespace) {
-    _NamespaceImpl._setupNamespace(namespace);
-  }
-
-  static _Namespace get _namespace => _NamespaceImpl._namespace;
-
-  static int get _namespacePointer => _NamespaceImpl._namespacePointer;
-}
-
-// -----------------------------------------------------------------
-
-// These may be set to different values by the embedder by calling
-// _setStdioFDs when initializing dart:io.
-int _stdinFD = 0;
-int _stdoutFD = 1;
-int _stderrFD = 2;
-
-// This is an embedder entrypoint.
-void _setStdioFDs(int stdin, int stdout, int stderr) {
-  _stdinFD = stdin;
-  _stdoutFD = stdout;
-  _stderrFD = stderr;
-}
-
-// -----------------------------------------------------------------
-
-class VMLibraryHooks {
-  // Example: "dart:isolate _Timer._factory"
-  static var timerFactory;
-
-  // Example: "dart:io _EventHandler._sendData"
-  static var eventHandlerSendData;
-
-  // A nullary closure that answers the current clock value in milliseconds.
-  // Example: "dart:io _EventHandler._timerMillisecondClock"
-  static var timerMillisecondClock;
-
-  // Implementation of Resource.readAsBytes.
-  static var resourceReadAsBytes;
-
-  // Implementation of package root/map provision.
-  static var packageRootString;
-  static var packageConfigString;
-  static var packageRootUriFuture;
-  static var packageConfigUriFuture;
-  static var resolvePackageUriFuture;
-
-  static var _computeScriptUri;
-  static var _cachedScript;
-  static set platformScript(var f) {
-    _computeScriptUri = f;
-    _cachedScript = null;
-  }
-
-  static get platformScript {
-    if (_cachedScript == null && _computeScriptUri != null) {
-      _cachedScript = _computeScriptUri();
-    }
-    return _cachedScript;
-  }
-}
-
-String _rawScript;
-Uri _scriptUri() {
-  if (_rawScript.startsWith('http:') ||
-      _rawScript.startsWith('https:') ||
-      _rawScript.startsWith('file:')) {
-    return Uri.parse(_rawScript);
-  } else {
-    return Uri.base.resolveUri(new Uri.file(_rawScript));
-  }
-}
-
-_setupHooks() {
-  VMLibraryHooks.platformScript = _scriptUri;
-}
-
-class Stdin {}
-
-Stdin _stdin;
-
-class _StdIOUtils {
-  static Stdin _getStdioInputStream(int fd) => null;
-}
-
-Stdin get stdin {
-  _stdin ??= _StdIOUtils._getStdioInputStream(_stdinFD);
-  return _stdin;
-}
-
-// -----------------------------------------------------------------
-
-main() {}
diff --git a/pkg/vm/testcases/bytecode/bootstrapping.dart.expect b/pkg/vm/testcases/bytecode/bootstrapping.dart.expect
deleted file mode 100644
index 7ad0a46..0000000
--- a/pkg/vm/testcases/bytecode/bootstrapping.dart.expect
+++ /dev/null
@@ -1,1078 +0,0 @@
-main = #lib::main;
- [@vm.bytecode=
-BytecodeMetadata {
-Bytecode (version: stable)
-Main library: #lib
-Library '#lib'
-    name '#lib'
-    script '#lib'
-
-Class '', script = '#lib'
-
-Field '_stdinFD', type = dart:core::int*, reflectable, static, has-initializer
-    value = const 0
-
-Field '_stdoutFD', type = dart:core::int*, reflectable, static, has-initializer
-    value = const 1
-
-Field '_stderrFD', type = dart:core::int*, reflectable, static, has-initializer
-    value = const 2
-
-Field '_rawScript', type = dart:core::String*, reflectable, static
-    value = null
-
-Field '_stdin', type = #lib::Stdin*, reflectable, static
-    value = null
-
-Function '_printString', static, reflectable, debuggable, native 'Builtin_PrintString'
-    parameters [dart:core::String* 's'] (required: 1)
-    return-type void
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  NativeCall           CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = NativeEntry Builtin_PrintString
-}
-
-
-Function '_print', static, reflectable, debuggable
-    parameters [dynamic 'arg'] (required: 1)
-    return-type void
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  InterfaceCall        CP#0, 1
-  DirectCall           CP#2, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall 'dart:core::Object::toString', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = DirectCall '#lib::_printString', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-}
-
-
-Function '_getPrintClosure', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef const tear-off #lib::_print
-}
-
-
-Function '_setScheduleImmediateClosure', static, reflectable, debuggable
-    parameters [FunctionType (FunctionType ()* -> void)* -> void 'closure'] (required: 1)
-    return-type void
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-5]
-  StoreStaticTOS       CP#0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = StaticField #lib::_ScheduleImmediate::_closure (field)
-}
-
-
-Function '_setStdioFDs', static, reflectable, debuggable
-    parameters [dart:core::int* 'stdin', dart:core::int* 'stdout', dart:core::int* 'stderr'] (required: 3)
-    return-type void
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-7]
-  StoreStaticTOS       CP#0
-  Push                 FP[-6]
-  StoreStaticTOS       CP#1
-  Push                 FP[-5]
-  StoreStaticTOS       CP#2
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = StaticField #lib::_stdinFD (field)
-  [1] = StaticField #lib::_stdoutFD (field)
-  [2] = StaticField #lib::_stderrFD (field)
-}
-
-
-Function '_scriptUri', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Uri*
-
-Bytecode {
-  Entry                2
-  CheckStack           0
-  LoadStatic           CP#0
-  PushConstant         CP#1
-  InterfaceCall        CP#2, 2
-  AssertBoolean        0
-  JumpIfTrue           L1
-  LoadStatic           CP#0
-  PushConstant         CP#4
-  InterfaceCall        CP#2, 2
-  AssertBoolean        0
-  JumpIfTrue           L1
-  LoadStatic           CP#0
-  PushConstant         CP#5
-  InterfaceCall        CP#2, 2
-  AssertBoolean        0
-  JumpIfFalse          L2
-L1:
-  LoadStatic           CP#0
-  DirectCall           CP#6, 1
-  ReturnTOS
-L2:
-  DirectCall           CP#8, 0
-  PushNull
-  LoadStatic           CP#0
-  DirectCall           CP#10, 2
-  InterfaceCall        CP#12, 2
-  ReturnTOS
-}
-ConstantPool {
-  [0] = StaticField #lib::_rawScript (field)
-  [1] = ObjectRef 'http:'
-  [2] = InterfaceCall 'dart:core::String::startsWith', ArgDesc num-args 2, num-type-args 0, names []
-  [3] = Reserved
-  [4] = ObjectRef 'https:'
-  [5] = ObjectRef 'file:'
-  [6] = DirectCall 'dart:core::Uri::parse', ArgDesc num-args 1, num-type-args 0, names []
-  [7] = Reserved
-  [8] = DirectCall 'dart:core::Uri::get:base', ArgDesc num-args 0, num-type-args 0, names []
-  [9] = Reserved
-  [10] = DirectCall 'dart:core::_Uri::file (constructor)', ArgDesc num-args 2, num-type-args 0, names []
-  [11] = Reserved
-  [12] = InterfaceCall 'dart:core::Uri::resolveUri', ArgDesc num-args 2, num-type-args 0, names []
-  [13] = Reserved
-}
-
-
-Function '_setupHooks', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  PushConstant         CP#0
-  DirectCall           CP#1, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef const tear-off #lib::_scriptUri
-  [1] = DirectCall '#lib::VMLibraryHooks::set:platformScript', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-}
-
-
-Function 'get:stdin', getter, static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type #lib::Stdin*
-
-Bytecode {
-  Entry                2
-  CheckStack           0
-  LoadStatic           CP#0
-  JumpIfNotNull        L1
-  LoadStatic           CP#1
-  DirectCall           CP#2, 1
-  StoreLocal           r1
-  Push                 r1
-  StoreStaticTOS       CP#0
-  PopLocal             r0
-  Jump                 L2
-L1:
-  PushNull
-  PopLocal             r0
-L2:
-  Push                 r0
-  Drop1
-  LoadStatic           CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = StaticField #lib::_stdin (field)
-  [1] = StaticField #lib::_stdinFD (field)
-  [2] = DirectCall '#lib::_StdIOUtils::_getStdioInputStream', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-}
-
-
-Function 'main', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-}
-
-Class '_ScheduleImmediate', script = '#lib'
-    extends dart:core::Object*
-
-Field '_closure', type = FunctionType (FunctionType ()* -> void)* -> void, reflectable, static, has-initializer
-    value = null
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::_ScheduleImmediate*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class '_NamespaceImpl', script = '#lib'
-    extends dart:core::Object*
-    implements [#lib::_Namespace*]
-
-Field '_cachedNamespace', type = #lib::_NamespaceImpl*, reflectable, static, has-initializer
-    value = null
-
-Function '_', constructor, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type #lib::_NamespaceImpl*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function '_create', static, reflectable, debuggable, native 'Namespace_Create'
-    parameters [#lib::_NamespaceImpl* 'namespace', dynamic 'n'] (required: 2)
-    return-type #lib::_NamespaceImpl*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-6]
-  Push                 FP[-5]
-  NativeCall           CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = NativeEntry Namespace_Create
-}
-
-
-Function '_getPointer', static, reflectable, debuggable, native 'Namespace_GetPointer'
-    parameters [#lib::_NamespaceImpl* 'namespace'] (required: 1)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  NativeCall           CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = NativeEntry Namespace_GetPointer
-}
-
-
-Function '_getDefault', static, reflectable, debuggable, native 'Namespace_GetDefault'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  NativeCall           CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = NativeEntry Namespace_GetDefault
-}
-
-
-Function '_setupNamespace', static, reflectable, debuggable
-    parameters [dynamic 'namespace'] (required: 1)
-    return-type void
-
-Bytecode {
-  Entry                2
-  CheckStack           0
-  Allocate             CP#0
-  StoreLocal           r1
-  Push                 r1
-  DirectCall           CP#1, 1
-  Drop1
-  Push                 FP[-5]
-  DirectCall           CP#3, 2
-  StoreStaticTOS       CP#5
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Class #lib::_NamespaceImpl
-  [1] = DirectCall '#lib::_NamespaceImpl::_ (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-  [3] = DirectCall '#lib::_NamespaceImpl::_create', ArgDesc num-args 2, num-type-args 0, names []
-  [4] = Reserved
-  [5] = StaticField #lib::_NamespaceImpl::_cachedNamespace (field)
-}
-
-
-Function 'get:_namespace', getter, static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type #lib::_NamespaceImpl*
-
-Bytecode {
-  Entry                2
-  CheckStack           0
-  LoadStatic           CP#0
-  JumpIfNotNull        L1
-  Allocate             CP#1
-  StoreLocal           r1
-  Push                 r1
-  DirectCall           CP#2, 1
-  Drop1
-  DirectCall           CP#4, 0
-  DirectCall           CP#6, 2
-  StoreStaticTOS       CP#0
-L1:
-  LoadStatic           CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = StaticField #lib::_NamespaceImpl::_cachedNamespace (field)
-  [1] = Class #lib::_NamespaceImpl
-  [2] = DirectCall '#lib::_NamespaceImpl::_ (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-  [4] = DirectCall '#lib::_NamespaceImpl::_getDefault', ArgDesc num-args 0, num-type-args 0, names []
-  [5] = Reserved
-  [6] = DirectCall '#lib::_NamespaceImpl::_create', ArgDesc num-args 2, num-type-args 0, names []
-  [7] = Reserved
-}
-
-
-Function 'get:_namespacePointer', getter, static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  DirectCall           CP#0, 0
-  DirectCall           CP#2, 1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::_NamespaceImpl::get:_namespace', ArgDesc num-args 0, num-type-args 0, names []
-  [1] = Reserved
-  [2] = DirectCall '#lib::_NamespaceImpl::_getPointer', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class '_Namespace', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::_Namespace*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function '_setupNamespace', static, reflectable, debuggable
-    parameters [dynamic 'namespace'] (required: 1)
-    return-type void
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::_NamespaceImpl::_setupNamespace', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_namespace', getter, static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type #lib::_Namespace*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  DirectCall           CP#0, 0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::_NamespaceImpl::get:_namespace', ArgDesc num-args 0, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_namespacePointer', getter, static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  DirectCall           CP#0, 0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::_NamespaceImpl::get:_namespacePointer', ArgDesc num-args 0, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'VMLibraryHooks', script = '#lib'
-    extends dart:core::Object*
-
-Field 'timerFactory', type = dynamic, reflectable, static, has-initializer
-    value = null
-
-Field 'eventHandlerSendData', type = dynamic, reflectable, static, has-initializer
-    value = null
-
-Field 'timerMillisecondClock', type = dynamic, reflectable, static, has-initializer
-    value = null
-
-Field 'resourceReadAsBytes', type = dynamic, reflectable, static, has-initializer
-    value = null
-
-Field 'packageRootString', type = dynamic, reflectable, static, has-initializer
-    value = null
-
-Field 'packageConfigString', type = dynamic, reflectable, static, has-initializer
-    value = null
-
-Field 'packageRootUriFuture', type = dynamic, reflectable, static, has-initializer
-    value = null
-
-Field 'packageConfigUriFuture', type = dynamic, reflectable, static, has-initializer
-    value = null
-
-Field 'resolvePackageUriFuture', type = dynamic, reflectable, static, has-initializer
-    value = null
-
-Field '_computeScriptUri', type = dynamic, reflectable, static, has-initializer
-    value = null
-
-Field '_cachedScript', type = dynamic, reflectable, static, has-initializer
-    value = null
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::VMLibraryHooks*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'set:platformScript', setter, static, reflectable, debuggable
-    parameters [dynamic 'f'] (required: 1)
-    return-type void
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-5]
-  StoreStaticTOS       CP#0
-  PushNull
-  StoreStaticTOS       CP#1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = StaticField #lib::VMLibraryHooks::_computeScriptUri (field)
-  [1] = StaticField #lib::VMLibraryHooks::_cachedScript (field)
-}
-
-
-Function 'get:platformScript', getter, static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  LoadStatic           CP#0
-  JumpIfNotNull        L1
-  LoadStatic           CP#1
-  JumpIfNull           L1
-  LoadStatic           CP#1
-  DynamicCall          CP#2, 1
-  StoreStaticTOS       CP#0
-L1:
-  LoadStatic           CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = StaticField #lib::VMLibraryHooks::_cachedScript (field)
-  [1] = StaticField #lib::VMLibraryHooks::_computeScriptUri (field)
-  [2] = DynamicCall 'call', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'Stdin', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::Stdin*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class '_StdIOUtils', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::_StdIOUtils*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function '_getStdioInputStream', static, reflectable, debuggable
-    parameters [dart:core::int* 'fd'] (required: 1)
-    return-type #lib::Stdin*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-
-}
-]library #lib from "#lib" as #lib {
-
-  typedef _ScheduleImmediateClosure = (() →* void) →* void;
-  class _ScheduleImmediate extends dart.core::Object {
-    static field (() →* void) →* void _closure = null;
-    synthetic constructor •() → #lib::_ScheduleImmediate*
-      : super dart.core::Object::•()
-      ;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class _NamespaceImpl extends dart.core::Object implements #lib::_Namespace {
-    static field #lib::_NamespaceImpl* _cachedNamespace = null;
-    constructor _() → #lib::_NamespaceImpl*
-      : super dart.core::Object::•()
-      ;
-    @#C2
-    external static method _create(#lib::_NamespaceImpl* namespace, dynamic n) → #lib::_NamespaceImpl*;
-    @#C4
-    external static method _getPointer(#lib::_NamespaceImpl* namespace) → dart.core::int*;
-    @#C6
-    external static method _getDefault() → dart.core::int*;
-    static method _setupNamespace(dynamic namespace) → void {
-      #lib::_NamespaceImpl::_cachedNamespace = #lib::_NamespaceImpl::_create(new #lib::_NamespaceImpl::_(), namespace);
-    }
-    static get _namespace() → #lib::_NamespaceImpl* {
-      if(#lib::_NamespaceImpl::_cachedNamespace.{#lib::_NamespaceImpl::==}(null)) {
-        #lib::_NamespaceImpl::_cachedNamespace = #lib::_NamespaceImpl::_create(new #lib::_NamespaceImpl::_(), #lib::_NamespaceImpl::_getDefault());
-      }
-      return #lib::_NamespaceImpl::_cachedNamespace;
-    }
-    static get _namespacePointer() → dart.core::int*
-      return #lib::_NamespaceImpl::_getPointer(#lib::_NamespaceImpl::_namespace);
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class _Namespace extends dart.core::Object {
-    synthetic constructor •() → #lib::_Namespace*
-      : super dart.core::Object::•()
-      ;
-    static method _setupNamespace(dynamic namespace) → void {
-      #lib::_NamespaceImpl::_setupNamespace(namespace);
-    }
-    static get _namespace() → #lib::_Namespace*
-      return #lib::_NamespaceImpl::_namespace;
-    static get _namespacePointer() → dart.core::int*
-      return #lib::_NamespaceImpl::_namespacePointer;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class VMLibraryHooks extends dart.core::Object {
-    static field dynamic timerFactory = null;
-    static field dynamic eventHandlerSendData = null;
-    static field dynamic timerMillisecondClock = null;
-    static field dynamic resourceReadAsBytes = null;
-    static field dynamic packageRootString = null;
-    static field dynamic packageConfigString = null;
-    static field dynamic packageRootUriFuture = null;
-    static field dynamic packageConfigUriFuture = null;
-    static field dynamic resolvePackageUriFuture = null;
-    static field dynamic _computeScriptUri = null;
-    static field dynamic _cachedScript = null;
-    synthetic constructor •() → #lib::VMLibraryHooks*
-      : super dart.core::Object::•()
-      ;
-    static set platformScript(dynamic f) → void {
-      #lib::VMLibraryHooks::_computeScriptUri = f;
-      #lib::VMLibraryHooks::_cachedScript = null;
-    }
-    static get platformScript() → dynamic {
-      if(#lib::VMLibraryHooks::_cachedScript.{dart.core::Object::==}(null) && !#lib::VMLibraryHooks::_computeScriptUri.{dart.core::Object::==}(null)) {
-        #lib::VMLibraryHooks::_cachedScript = [@vm.call-site-attributes.metadata=receiverType:dynamic] #lib::VMLibraryHooks::_computeScriptUri.call();
-      }
-      return #lib::VMLibraryHooks::_cachedScript;
-    }
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class Stdin extends dart.core::Object {
-    synthetic constructor •() → #lib::Stdin*
-      : super dart.core::Object::•()
-      ;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class _StdIOUtils extends dart.core::Object {
-    synthetic constructor •() → #lib::_StdIOUtils*
-      : super dart.core::Object::•()
-      ;
-    static method _getStdioInputStream(dart.core::int* fd) → #lib::Stdin*
-      return null;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  static field dart.core::int* _stdinFD = 0;
-  static field dart.core::int* _stdoutFD = 1;
-  static field dart.core::int* _stderrFD = 2;
-  static field dart.core::String* _rawScript;
-  static field #lib::Stdin* _stdin;
-  @#C8
-  external static method _printString(dart.core::String* s) → void;
-  static method _print(dynamic arg) → void {
-    #lib::_printString(arg.{dart.core::Object::toString}());
-  }
-  static method _getPrintClosure() → dynamic
-    return #C9;
-  static method _setScheduleImmediateClosure((() →* void) →* void closure) → void {
-    #lib::_ScheduleImmediate::_closure = closure;
-  }
-  static method _setStdioFDs(dart.core::int* stdin, dart.core::int* stdout, dart.core::int* stderr) → void {
-    #lib::_stdinFD = stdin;
-    #lib::_stdoutFD = stdout;
-    #lib::_stderrFD = stderr;
-  }
-  static method _scriptUri() → dart.core::Uri* {
-    if(#lib::_rawScript.{dart.core::String::startsWith}("http:") || #lib::_rawScript.{dart.core::String::startsWith}("https:") || #lib::_rawScript.{dart.core::String::startsWith}("file:")) {
-      return dart.core::Uri::parse(#lib::_rawScript);
-    }
-    else {
-      return dart.core::Uri::base.{dart.core::Uri::resolveUri}(dart.core::_Uri::file(#lib::_rawScript));
-    }
-  }
-  static method _setupHooks() → dynamic {
-    #lib::VMLibraryHooks::platformScript = #C10;
-  }
-  static get stdin() → #lib::Stdin* {
-    #lib::_stdin.{#lib::Stdin::==}(null) ?{#lib::Stdin*} #lib::_stdin = #lib::_StdIOUtils::_getStdioInputStream(#lib::_stdinFD) : null;
-    return #lib::_stdin;
-  }
-  static method main() → dynamic {}
-}
-constants  {
-  #C1 = "Namespace_Create"
-  #C2 = dart._internal::ExternalName {name:#C1}
-  #C3 = "Namespace_GetPointer"
-  #C4 = dart._internal::ExternalName {name:#C3}
-  #C5 = "Namespace_GetDefault"
-  #C6 = dart._internal::ExternalName {name:#C5}
-  #C7 = "Builtin_PrintString"
-  #C8 = dart._internal::ExternalName {name:#C7}
-  #C9 = tearoff #lib::_print
-  #C10 = tearoff #lib::_scriptUri
-}
diff --git a/pkg/vm/testcases/bytecode/closures.dart b/pkg/vm/testcases/bytecode/closures.dart
deleted file mode 100644
index 669a8f2..0000000
--- a/pkg/vm/testcases/bytecode/closures.dart
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-int simpleClosure() {
-  int x = 5;
-  var inc = (int y) {
-    x = x + y;
-  };
-  inc(3);
-  return x;
-}
-
-class C1 {}
-
-class C2 {}
-
-class C3 {}
-
-class C4 {}
-
-class C5 {}
-
-class C6 {}
-
-class C7 {}
-
-class C8 {}
-
-class A<T1, T2> {
-  void foo<T3, T4>() {
-    void nested1<T5, T6>() {
-      void nested2<T7, T8>() {
-        var nested3 = () {
-          print([T1, T2, T3, T4, T5, T6, T7, T8]);
-          callWithArgs<T1, T2, T3, T4, T5, T6, T7, T8>();
-        };
-        nested3();
-      }
-
-      nested2<C7, C8>();
-      nested2<List<C7>, List<C8>>();
-    }
-
-    nested1<C5, C6>();
-    nested1<List<C5>, List<C6>>();
-  }
-}
-
-void callWithArgs<T1, T2, T3, T4, T5, T6, T7, T8>() {
-  print([T1, T2, T3, T4, T5, T6, T7, T8]);
-}
-
-void callA() {
-  new A<C1, C2>().foo<C3, C4>();
-  new A<C1, C2>().foo<List<C3>, List<C4>>();
-  new A<List<C1>, List<C2>>().foo<List<C3>, List<C4>>();
-}
-
-class B {
-  int foo;
-
-  void topLevel() {
-    {
-      int x = 1;
-
-      {
-        int y = 2;
-        int z = 3;
-
-        var closure1 = (int y) {
-          x = y + 1;
-
-          if (x > 5) {
-            int w = 4;
-
-            void closure2() {
-              z = x + 2;
-              w = foo + y;
-            }
-
-            closure2();
-
-            print(w);
-          }
-        };
-
-        closure1(10);
-        closure1(11);
-
-        print(y);
-        print(z);
-      }
-
-      print(x);
-    }
-
-    {
-      int x = 42;
-
-      var closure3 = () {
-        foo = x;
-      };
-
-      closure3();
-    }
-  }
-}
-
-class C {
-  void testForLoop() {
-    int delta = 0;
-    List<Function> getI = <Function>[];
-    List<Function> setI = <Function>[];
-    for (int i = 0; i < 10; i++) {
-      getI.add(() => i + delta);
-      setI.add((int ii) {
-        i = ii + delta;
-      });
-    }
-  }
-
-  void testForInLoop(List<int> list) {
-    for (var i in list) {
-      var inc = () {
-        i = i + 1;
-      };
-      inc();
-      print(i);
-    }
-  }
-}
-
-typedef IntFunc(int arg);
-
-IntFunc testPartialInstantiation() {
-  void foo<T>(T t) {}
-  IntFunc intFunc = foo;
-  return intFunc;
-}
-
-class D<T> {
-  foo(T t) {
-    return () => t;
-  }
-
-  bar() {
-    return () {
-      inner() {}
-
-      inner();
-    };
-  }
-}
-
-abstract class E {
-  int Function(int x, int y) foo1;
-  int Function<T>(T x, T y) get foo2;
-  int evalArg1();
-  int evalArg2();
-  E getE();
-
-  int testCallThroughGetter1() => foo1(evalArg1(), evalArg2());
-  int testCallThroughGetter2() => foo2<int>(evalArg1(), evalArg2());
-  int testCallThroughGetter3() => getE().foo2<int>(evalArg1(), evalArg2());
-}
-
-main() {}
diff --git a/pkg/vm/testcases/bytecode/closures.dart.expect b/pkg/vm/testcases/bytecode/closures.dart.expect
deleted file mode 100644
index e0baf44..0000000
--- a/pkg/vm/testcases/bytecode/closures.dart.expect
+++ /dev/null
@@ -1,2543 +0,0 @@
-main = #lib::main;
- [@vm.bytecode=
-BytecodeMetadata {
-Bytecode (version: stable)
-Main library: #lib
-Library '#lib'
-    name '#lib'
-    script '#lib'
-
-Class '', script = '#lib'
-
-
-Function 'simpleClosure', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                4
-  CheckStack           0
-  AllocateContext      0, 1
-  PopLocal             r0
-  Push                 r0
-  PushInt              5
-  StoreContextVar      0, 0
-  AllocateClosure      CP#0
-  StoreLocal           r3
-  Push                 r3
-  PushNull
-  StoreFieldTOS        CP#7
-  Push                 r3
-  PushNull
-  StoreFieldTOS        CP#9
-  Push                 r3
-  PushConstant         CP#0
-  StoreFieldTOS        CP#11
-  Push                 r3
-  Push                 r0
-  StoreFieldTOS        CP#1
-  PopLocal             r2
-  Push                 r2
-  StoreLocal           r3
-  PushInt              3
-  Push                 r3
-  UncheckedClosureCall CP#13, 2
-  Drop1
-  Push                 r0
-  LoadContextVar       0, 0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ClosureFunction 0
-  [1] = InstanceField dart:core::_Closure::_context (field)
-  [2] = Reserved
-  [3] = Type dart:core::int*
-  [4] = ObjectRef 'y'
-  [5] = SubtypeTestCache
-  [6] = EndClosureFunctionScope
-  [7] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [8] = Reserved
-  [9] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [10] = Reserved
-  [11] = InstanceField dart:core::_Closure::_function (field)
-  [12] = Reserved
-  [13] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
-}
-Closure #lib::simpleClosure::'<anonymous closure>' (dart:core::int* y) -> dart:core::Null?
-ClosureCode {
-  Entry                3
-  Push                 FP[-6]
-  LoadFieldTOS         CP#1
-  PopLocal             r0
-  CheckStack           0
-  JumpIfUnchecked      L1
-  Push                 FP[-5]
-  PushConstant         CP#3
-  PushNull
-  PushNull
-  PushConstant         CP#4
-  AssertAssignable     1, CP#5
-  Drop1
-L1:
-  Push                 r0
-  Push                 r0
-  LoadContextVar       0, 0
-  Push                 FP[-5]
-  AddInt
-  StoreContextVar      0, 0
-  PushNull
-  ReturnTOS
-}
-
-
-Function 'callWithArgs', static, reflectable, debuggable
-    type-params <dart:core::Object* T1, dart:core::Object* T2, dart:core::Object* T3, dart:core::Object* T4, dart:core::Object* T5, dart:core::Object* T6, dart:core::Object* T7, dart:core::Object* T8>
-    parameters [] (required: 0)
-    return-type void
-
-Bytecode {
-  Entry                2
-  CheckFunctionTypeArgs 8, r0
-  CheckStack           0
-  PushConstant         CP#0
-  StoreLocal           r1
-  Push                 r1
-  PushInt              8
-  CreateArrayTOS
-  StoreLocal           r1
-  Push                 r1
-  PushInt              0
-  PushNull
-  Push                 r0
-  InstantiateType      CP#1
-  StoreIndexedTOS
-  Push                 r1
-  PushInt              1
-  PushNull
-  Push                 r0
-  InstantiateType      CP#2
-  StoreIndexedTOS
-  Push                 r1
-  PushInt              2
-  PushNull
-  Push                 r0
-  InstantiateType      CP#3
-  StoreIndexedTOS
-  Push                 r1
-  PushInt              3
-  PushNull
-  Push                 r0
-  InstantiateType      CP#4
-  StoreIndexedTOS
-  Push                 r1
-  PushInt              4
-  PushNull
-  Push                 r0
-  InstantiateType      CP#5
-  StoreIndexedTOS
-  Push                 r1
-  PushInt              5
-  PushNull
-  Push                 r0
-  InstantiateType      CP#6
-  StoreIndexedTOS
-  Push                 r1
-  PushInt              6
-  PushNull
-  Push                 r0
-  InstantiateType      CP#7
-  StoreIndexedTOS
-  Push                 r1
-  PushInt              7
-  PushNull
-  Push                 r0
-  InstantiateType      CP#8
-  StoreIndexedTOS
-  DirectCall           CP#9, 2
-  DirectCall           CP#11, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef < dart:core::Type* >
-  [1] = Type #lib::callWithArgs::TypeParam/0*
-  [2] = Type #lib::callWithArgs::TypeParam/1*
-  [3] = Type #lib::callWithArgs::TypeParam/2*
-  [4] = Type #lib::callWithArgs::TypeParam/3*
-  [5] = Type #lib::callWithArgs::TypeParam/4*
-  [6] = Type #lib::callWithArgs::TypeParam/5*
-  [7] = Type #lib::callWithArgs::TypeParam/6*
-  [8] = Type #lib::callWithArgs::TypeParam/7*
-  [9] = DirectCall 'dart:core::List::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
-  [10] = Reserved
-  [11] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [12] = Reserved
-}
-
-
-Function 'callA', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type void
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  PushConstant         CP#0
-  PushConstant         CP#2
-  PushConstant         CP#1
-  AllocateT
-  StoreLocal           r0
-  Push                 r0
-  DirectCall           CP#3, 1
-  Drop1
-  InterfaceCall        CP#5, 2
-  Drop1
-  PushConstant         CP#7
-  PushConstant         CP#2
-  PushConstant         CP#1
-  AllocateT
-  StoreLocal           r0
-  Push                 r0
-  DirectCall           CP#3, 1
-  Drop1
-  InterfaceCall        CP#5, 2
-  Drop1
-  PushConstant         CP#7
-  PushConstant         CP#8
-  PushConstant         CP#1
-  AllocateT
-  StoreLocal           r0
-  Push                 r0
-  DirectCall           CP#3, 1
-  Drop1
-  InterfaceCall        CP#5, 2
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef < #lib::C3*, #lib::C4* >
-  [1] = Class #lib::A
-  [2] = ObjectRef < #lib::C1*, #lib::C2* >
-  [3] = DirectCall '#lib::A:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [4] = Reserved
-  [5] = InterfaceCall '#lib::A::foo', ArgDesc num-args 1, num-type-args 2, names []
-  [6] = Reserved
-  [7] = ObjectRef < dart:core::List < #lib::C3* >*, dart:core::List < #lib::C4* >* >
-  [8] = ObjectRef < dart:core::List < #lib::C1* >*, dart:core::List < #lib::C2* >* >
-}
-
-
-Function 'testPartialInstantiation', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type FunctionType (dart:core::int*)* -> dynamic
-
-Bytecode {
-  Entry                7
-  CheckStack           0
-  AllocateClosure      CP#0
-  StoreLocal           r3
-  Push                 r3
-  PushNull
-  StoreFieldTOS        CP#14
-  Push                 r3
-  PushNull
-  StoreFieldTOS        CP#6
-  Push                 r3
-  PushConstant         CP#5
-  StoreFieldTOS        CP#3
-  Push                 r3
-  PushConstant         CP#0
-  StoreFieldTOS        CP#16
-  Push                 r3
-  Push                 r0
-  StoreFieldTOS        CP#1
-  PopLocal             r2
-  Push                 r2
-  StoreLocal           r3
-  PushConstant         CP#18
-  StoreLocal           r6
-  DirectCall           CP#19, 2
-  Drop1
-  Allocate             CP#21
-  StoreLocal           r5
-  Push                 r6
-  StoreFieldTOS        CP#3
-  Push                 r5
-  Push                 r3
-  LoadFieldTOS         CP#14
-  StoreFieldTOS        CP#14
-  Push                 r5
-  Push                 r3
-  LoadFieldTOS         CP#6
-  StoreFieldTOS        CP#6
-  Push                 r5
-  Push                 r3
-  LoadFieldTOS         CP#16
-  StoreFieldTOS        CP#16
-  Push                 r5
-  Push                 r3
-  LoadFieldTOS         CP#1
-  StoreFieldTOS        CP#1
-  Push                 r5
-  PopLocal             r4
-  Push                 r4
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ClosureFunction 0
-  [1] = InstanceField dart:core::_Closure::_context (field)
-  [2] = Reserved
-  [3] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
-  [4] = Reserved
-  [5] = EmptyTypeArguments
-  [6] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [7] = Reserved
-  [8] = DirectCall 'dart:_internal::_prependTypeArguments', ArgDesc num-args 4, num-type-args 0, names []
-  [9] = Reserved
-  [10] = Type #lib::testPartialInstantiation::Closure/0::TypeParam/0*
-  [11] = ObjectRef 't'
-  [12] = SubtypeTestCache
-  [13] = EndClosureFunctionScope
-  [14] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [15] = Reserved
-  [16] = InstanceField dart:core::_Closure::_function (field)
-  [17] = Reserved
-  [18] = ObjectRef < dart:core::int* >
-  [19] = DirectCall 'dart:_internal::_boundsCheckForPartialInstantiation', ArgDesc num-args 2, num-type-args 0, names []
-  [20] = Reserved
-  [21] = Class dart:core::_Closure
-}
-Closure #lib::testPartialInstantiation::'foo' <dart:core::Object* T> (#lib::testPartialInstantiation::Closure/0::TypeParam/0* t) -> void
-ClosureCode {
-  Entry                3
-  Push                 FP[-6]
-  LoadFieldTOS         CP#1
-  PopLocal             r1
-  Push                 FP[-6]
-  LoadFieldTOS         CP#3
-  StoreLocal           r0
-  PushConstant         CP#5
-  JumpIfEqStrict       L1
-  CheckFunctionTypeArgs 0, r2
-  Jump                 L2
-L1:
-  CheckFunctionTypeArgs 1, r0
-L2:
-  CheckStack           0
-  Push                 r0
-  Push                 FP[-6]
-  LoadFieldTOS         CP#6
-  PushInt              0
-  PushInt              1
-  DirectCall           CP#8, 4
-  PopLocal             r0
-  JumpIfUnchecked      L3
-  Push                 FP[-5]
-  PushConstant         CP#10
-  PushNull
-  Push                 r0
-  PushConstant         CP#11
-  AssertAssignable     0, CP#12
-  Drop1
-L3:
-  PushNull
-  ReturnTOS
-}
-
-
-Function 'main', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-}
-
-Class 'C1', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::C1*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'C2', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::C2*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'C3', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::C3*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'C4', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::C4*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'C5', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::C5*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'C6', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::C6*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'C7', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::C7*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'C8', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::C8*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'A', script = '#lib'
-    type-params <dart:core::Object* T1, dart:core::Object* T2> (args: 2)
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::A < #lib::A::TypeParam/0*, #lib::A::TypeParam/1* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'foo', reflectable, debuggable
-    type-params <dart:core::Object* T3, dart:core::Object* T4>
-    parameters [] (required: 0)
-    return-type void
-
-Bytecode {
-  Entry                5
-  CheckFunctionTypeArgs 2, r0
-  CheckStack           0
-  AllocateContext      0, 1
-  PopLocal             r1
-  Push                 r1
-  Push                 FP[-5]
-  StoreContextVar      0, 0
-  AllocateClosure      CP#0
-  StoreLocal           r4
-  Push                 r4
-  Push                 FP[-5]
-  LoadTypeArgumentsField CP#14
-  StoreFieldTOS        CP#30
-  Push                 r4
-  Push                 r0
-  StoreFieldTOS        CP#6
-  Push                 r4
-  PushConstant         CP#5
-  StoreFieldTOS        CP#3
-  Push                 r4
-  PushConstant         CP#0
-  StoreFieldTOS        CP#32
-  Push                 r4
-  Push                 r1
-  StoreFieldTOS        CP#1
-  PopLocal             r3
-  PushConstant         CP#40
-  Push                 r3
-  StoreLocal           r4
-  Push                 r4
-  UncheckedClosureCall CP#37, 2
-  Drop1
-  PushConstant         CP#41
-  Push                 r3
-  StoreLocal           r4
-  Push                 r4
-  UncheckedClosureCall CP#37, 2
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ClosureFunction 0
-  [1] = InstanceField dart:core::_Closure::_context (field)
-  [2] = Reserved
-  [3] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
-  [4] = Reserved
-  [5] = EmptyTypeArguments
-  [6] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [7] = Reserved
-  [8] = DirectCall 'dart:_internal::_prependTypeArguments', ArgDesc num-args 4, num-type-args 0, names []
-  [9] = Reserved
-  [10] = ClosureFunction 1
-  [11] = ClosureFunction 2
-  [12] = ObjectRef < dart:core::Type* >
-  [13] = Type #lib::A::TypeParam/0*
-  [14] = TypeArgumentsField #lib::A
-  [15] = Type #lib::A::TypeParam/1*
-  [16] = Type #lib::A::foo::TypeParam/0*
-  [17] = Type #lib::A::foo::TypeParam/1*
-  [18] = Type #lib::A::foo::Closure/0::TypeParam/0*
-  [19] = Type #lib::A::foo::Closure/0::TypeParam/1*
-  [20] = Type #lib::A::foo::Closure/1::TypeParam/0*
-  [21] = Type #lib::A::foo::Closure/1::TypeParam/1*
-  [22] = DirectCall 'dart:core::List::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
-  [23] = Reserved
-  [24] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [25] = Reserved
-  [26] = ObjectRef < #lib::A::TypeParam/0*, #lib::A::TypeParam/1*, #lib::A::foo::TypeParam/0*, #lib::A::foo::TypeParam/1*, #lib::A::foo::Closure/0::TypeParam/0*, #lib::A::foo::Closure/0::TypeParam/1*, #lib::A::foo::Closure/1::TypeParam/0*, #lib::A::foo::Closure/1::TypeParam/1* >
-  [27] = DirectCall '#lib::callWithArgs', ArgDesc num-args 0, num-type-args 8, names []
-  [28] = Reserved
-  [29] = EndClosureFunctionScope
-  [30] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [31] = Reserved
-  [32] = InstanceField dart:core::_Closure::_function (field)
-  [33] = Reserved
-  [34] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
-  [35] = EndClosureFunctionScope
-  [36] = ObjectRef < #lib::C7*, #lib::C8* >
-  [37] = ObjectRef ArgDesc num-args 1, num-type-args 2, names []
-  [38] = ObjectRef < dart:core::List < #lib::C7* >*, dart:core::List < #lib::C8* >* >
-  [39] = EndClosureFunctionScope
-  [40] = ObjectRef < #lib::C5*, #lib::C6* >
-  [41] = ObjectRef < dart:core::List < #lib::C5* >*, dart:core::List < #lib::C6* >* >
-}
-Closure #lib::A::foo::'nested1' <dart:core::Object* T5, dart:core::Object* T6> () -> void
-ClosureCode {
-  Entry                5
-  Push                 FP[-5]
-  LoadFieldTOS         CP#1
-  PopLocal             r1
-  Push                 FP[-5]
-  LoadFieldTOS         CP#3
-  StoreLocal           r0
-  PushConstant         CP#5
-  JumpIfEqStrict       L1
-  CheckFunctionTypeArgs 0, r2
-  Jump                 L2
-L1:
-  CheckFunctionTypeArgs 2, r0
-L2:
-  CheckStack           0
-  Push                 r0
-  Push                 FP[-5]
-  LoadFieldTOS         CP#6
-  PushInt              2
-  PushInt              4
-  DirectCall           CP#8, 4
-  PopLocal             r0
-  AllocateClosure      CP#10
-  StoreLocal           r4
-  Push                 r4
-  Push                 r1
-  LoadContextVar       0, 0
-  LoadTypeArgumentsField CP#14
-  StoreFieldTOS        CP#30
-  Push                 r4
-  Push                 r0
-  StoreFieldTOS        CP#6
-  Push                 r4
-  PushConstant         CP#5
-  StoreFieldTOS        CP#3
-  Push                 r4
-  PushConstant         CP#10
-  StoreFieldTOS        CP#32
-  Push                 r4
-  Push                 r1
-  StoreFieldTOS        CP#1
-  PopLocal             r3
-  PushConstant         CP#36
-  Push                 r3
-  StoreLocal           r4
-  Push                 r4
-  UncheckedClosureCall CP#37, 2
-  Drop1
-  PushConstant         CP#38
-  Push                 r3
-  StoreLocal           r4
-  Push                 r4
-  UncheckedClosureCall CP#37, 2
-  Drop1
-  PushNull
-  ReturnTOS
-}
-
-Closure #lib::A::foo::Closure/0::'nested2' <dart:core::Object* T7, dart:core::Object* T8> () -> void
-ClosureCode {
-  Entry                5
-  Push                 FP[-5]
-  LoadFieldTOS         CP#1
-  PopLocal             r1
-  Push                 FP[-5]
-  LoadFieldTOS         CP#3
-  StoreLocal           r0
-  PushConstant         CP#5
-  JumpIfEqStrict       L1
-  CheckFunctionTypeArgs 0, r2
-  Jump                 L2
-L1:
-  CheckFunctionTypeArgs 2, r0
-L2:
-  CheckStack           0
-  Push                 r0
-  Push                 FP[-5]
-  LoadFieldTOS         CP#6
-  PushInt              4
-  PushInt              6
-  DirectCall           CP#8, 4
-  PopLocal             r0
-  AllocateClosure      CP#11
-  StoreLocal           r4
-  Push                 r4
-  Push                 r1
-  LoadContextVar       0, 0
-  LoadTypeArgumentsField CP#14
-  StoreFieldTOS        CP#30
-  Push                 r4
-  Push                 r0
-  StoreFieldTOS        CP#6
-  Push                 r4
-  PushConstant         CP#11
-  StoreFieldTOS        CP#32
-  Push                 r4
-  Push                 r1
-  StoreFieldTOS        CP#1
-  PopLocal             r3
-  Push                 r3
-  StoreLocal           r4
-  Push                 r4
-  UncheckedClosureCall CP#34, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-
-Closure #lib::A::foo::Closure/1::'<anonymous closure>' () -> dart:core::Null?
-ClosureCode {
-  Entry                4
-  Push                 FP[-5]
-  LoadFieldTOS         CP#1
-  PopLocal             r1
-  CheckStack           0
-  Push                 FP[-5]
-  LoadFieldTOS         CP#6
-  PopLocal             r0
-  PushConstant         CP#12
-  StoreLocal           r3
-  Push                 r3
-  PushInt              8
-  CreateArrayTOS
-  StoreLocal           r3
-  Push                 r3
-  PushInt              0
-  Push                 r1
-  LoadContextVar       0, 0
-  LoadTypeArgumentsField CP#14
-  PushNull
-  InstantiateType      CP#13
-  StoreIndexedTOS
-  Push                 r3
-  PushInt              1
-  Push                 r1
-  LoadContextVar       0, 0
-  LoadTypeArgumentsField CP#14
-  PushNull
-  InstantiateType      CP#15
-  StoreIndexedTOS
-  Push                 r3
-  PushInt              2
-  PushNull
-  Push                 r0
-  InstantiateType      CP#16
-  StoreIndexedTOS
-  Push                 r3
-  PushInt              3
-  PushNull
-  Push                 r0
-  InstantiateType      CP#17
-  StoreIndexedTOS
-  Push                 r3
-  PushInt              4
-  PushNull
-  Push                 r0
-  InstantiateType      CP#18
-  StoreIndexedTOS
-  Push                 r3
-  PushInt              5
-  PushNull
-  Push                 r0
-  InstantiateType      CP#19
-  StoreIndexedTOS
-  Push                 r3
-  PushInt              6
-  PushNull
-  Push                 r0
-  InstantiateType      CP#20
-  StoreIndexedTOS
-  Push                 r3
-  PushInt              7
-  PushNull
-  Push                 r0
-  InstantiateType      CP#21
-  StoreIndexedTOS
-  DirectCall           CP#22, 2
-  DirectCall           CP#24, 1
-  Drop1
-  Push                 r1
-  LoadContextVar       0, 0
-  LoadTypeArgumentsField CP#14
-  Push                 r0
-  InstantiateTypeArgumentsTOS 0, CP#26
-  DirectCall           CP#27, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'B', script = '#lib'
-    extends dart:core::Object*
-
-Field 'foo', type = dart:core::int*, getter = 'get:foo', setter = 'set:foo', reflectable, has-initializer
-    value = null
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::B*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-Nullable fields: [#lib::B::foo (field)]
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'topLevel', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type void
-
-Bytecode {
-  Entry                5
-  CheckStack           0
-  AllocateContext      0, 4
-  PopLocal             r0
-  Push                 r0
-  Push                 FP[-5]
-  StoreContextVar      0, 0
-  Push                 r0
-  PushInt              1
-  StoreContextVar      0, 1
-  PushInt              2
-  PopLocal             r2
-  Push                 r0
-  PushInt              3
-  StoreContextVar      0, 2
-  AllocateClosure      CP#0
-  StoreLocal           r4
-  Push                 r4
-  PushNull
-  StoreFieldTOS        CP#10
-  Push                 r4
-  PushNull
-  StoreFieldTOS        CP#12
-  Push                 r4
-  PushConstant         CP#0
-  StoreFieldTOS        CP#14
-  Push                 r4
-  Push                 r0
-  StoreFieldTOS        CP#1
-  PopLocal             r3
-  Push                 r3
-  StoreLocal           r4
-  PushInt              10
-  Push                 r4
-  UncheckedClosureCall CP#20, 2
-  Drop1
-  Push                 r3
-  StoreLocal           r4
-  PushInt              11
-  Push                 r4
-  UncheckedClosureCall CP#20, 2
-  Drop1
-  Push                 r2
-  DirectCall           CP#17, 1
-  Drop1
-  Push                 r0
-  LoadContextVar       0, 2
-  DirectCall           CP#17, 1
-  Drop1
-  Push                 r0
-  LoadContextVar       0, 1
-  DirectCall           CP#17, 1
-  Drop1
-  Push                 r0
-  PushInt              42
-  StoreContextVar      0, 3
-  AllocateClosure      CP#21
-  StoreLocal           r3
-  Push                 r3
-  PushNull
-  StoreFieldTOS        CP#10
-  Push                 r3
-  PushNull
-  StoreFieldTOS        CP#12
-  Push                 r3
-  PushConstant         CP#21
-  StoreFieldTOS        CP#14
-  Push                 r3
-  Push                 r0
-  StoreFieldTOS        CP#1
-  PopLocal             r2
-  Push                 r2
-  StoreLocal           r3
-  Push                 r3
-  UncheckedClosureCall CP#16, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ClosureFunction 0
-  [1] = InstanceField dart:core::_Closure::_context (field)
-  [2] = Reserved
-  [3] = Type dart:core::int*
-  [4] = ObjectRef 'y'
-  [5] = SubtypeTestCache
-  [6] = ClosureFunction 1
-  [7] = InterfaceCall '#lib::B::get:foo', ArgDesc num-args 1, num-type-args 0, names []
-  [8] = Reserved
-  [9] = EndClosureFunctionScope
-  [10] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [11] = Reserved
-  [12] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [13] = Reserved
-  [14] = InstanceField dart:core::_Closure::_function (field)
-  [15] = Reserved
-  [16] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
-  [17] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [18] = Reserved
-  [19] = EndClosureFunctionScope
-  [20] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
-  [21] = ClosureFunction 2
-  [22] = InterfaceCall '#lib::B::set:foo', ArgDesc num-args 2, num-type-args 0, names []
-  [23] = Reserved
-  [24] = EndClosureFunctionScope
-}
-Closure #lib::B::topLevel::'<anonymous closure>' (dart:core::int* y) -> dart:core::Null?
-ClosureCode {
-  Entry                4
-  Push                 FP[-6]
-  LoadFieldTOS         CP#1
-  PopLocal             r0
-  CheckStack           0
-  AllocateContext      1, 2
-  StoreLocal           r1
-  Push                 r1
-  Push                 r0
-  StoreContextParent
-  PopLocal             r0
-  Push                 r0
-  Push                 FP[-5]
-  StoreContextVar      1, 0
-  JumpIfUnchecked      L1
-  Push                 FP[-5]
-  PushConstant         CP#3
-  PushNull
-  PushNull
-  PushConstant         CP#4
-  AssertAssignable     1, CP#5
-  Drop1
-L1:
-  Push                 r0
-  LoadContextParent
-  Push                 r0
-  LoadContextVar       1, 0
-  PushInt              1
-  AddInt
-  StoreContextVar      0, 1
-  Push                 r0
-  LoadContextParent
-  LoadContextVar       0, 1
-  PushInt              5
-  CompareIntGt
-  JumpIfFalse          L2
-  Push                 r0
-  PushInt              4
-  StoreContextVar      1, 1
-  AllocateClosure      CP#6
-  StoreLocal           r2
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#10
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#12
-  Push                 r2
-  PushConstant         CP#6
-  StoreFieldTOS        CP#14
-  Push                 r2
-  Push                 r0
-  StoreFieldTOS        CP#1
-  PopLocal             r3
-  Push                 r3
-  StoreLocal           r2
-  Push                 r2
-  UncheckedClosureCall CP#16, 1
-  Drop1
-  Push                 r0
-  LoadContextVar       1, 1
-  DirectCall           CP#17, 1
-  Drop1
-L2:
-  PushNull
-  ReturnTOS
-}
-
-Closure #lib::B::topLevel::Closure/0::'closure2' () -> void
-ClosureCode {
-  Entry                3
-  Push                 FP[-5]
-  LoadFieldTOS         CP#1
-  PopLocal             r0
-  CheckStack           0
-  Push                 r0
-  LoadContextParent
-  Push                 r0
-  LoadContextParent
-  LoadContextVar       0, 1
-  PushInt              2
-  AddInt
-  StoreContextVar      0, 2
-  Push                 r0
-  Push                 r0
-  LoadContextParent
-  LoadContextVar       0, 0
-  InterfaceCall        CP#7, 1
-  Push                 r0
-  LoadContextVar       1, 0
-  AddInt
-  StoreContextVar      1, 1
-  PushNull
-  ReturnTOS
-}
-
-Closure #lib::B::topLevel::'<anonymous closure>' () -> dart:core::Null?
-ClosureCode {
-  Entry                3
-  Push                 FP[-5]
-  LoadFieldTOS         CP#1
-  PopLocal             r0
-  CheckStack           0
-  Push                 r0
-  LoadContextVar       0, 0
-  Push                 r0
-  LoadContextVar       0, 3
-  InterfaceCall        CP#22, 2
-  Drop1
-  PushNull
-  ReturnTOS
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'C', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::C*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'testForLoop', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type void
-
-Bytecode {
-  Entry                5
-  CheckStack           0
-  AllocateContext      0, 1
-  PopLocal             r0
-  Push                 r0
-  PushInt              0
-  StoreContextVar      0, 0
-  PushConstant         CP#0
-  PushConstant         CP#1
-  DirectCall           CP#2, 2
-  PopLocal             r2
-  PushConstant         CP#0
-  PushConstant         CP#1
-  DirectCall           CP#2, 2
-  PopLocal             r4
-  AllocateContext      1, 1
-  StoreLocal           r1
-  Push                 r1
-  Push                 r0
-  StoreContextParent
-  PopLocal             r0
-  Push                 r0
-  PushInt              0
-  StoreContextVar      1, 0
-L2:
-  CheckStack           1
-  Push                 r0
-  LoadContextVar       1, 0
-  PushInt              10
-  CompareIntLt
-  JumpIfFalse          L1
-  Push                 r2
-  AllocateClosure      CP#4
-  StoreLocal           r3
-  Push                 r3
-  PushNull
-  StoreFieldTOS        CP#8
-  Push                 r3
-  PushNull
-  StoreFieldTOS        CP#10
-  Push                 r3
-  PushConstant         CP#4
-  StoreFieldTOS        CP#12
-  Push                 r3
-  Push                 r0
-  StoreFieldTOS        CP#5
-  InstantiatedInterfaceCall CP#14, 2
-  Drop1
-  Push                 r4
-  AllocateClosure      CP#17
-  StoreLocal           r3
-  Push                 r3
-  PushNull
-  StoreFieldTOS        CP#8
-  Push                 r3
-  PushNull
-  StoreFieldTOS        CP#10
-  Push                 r3
-  PushConstant         CP#17
-  StoreFieldTOS        CP#12
-  Push                 r3
-  Push                 r0
-  StoreFieldTOS        CP#5
-  InstantiatedInterfaceCall CP#14, 2
-  Drop1
-  Push                 r0
-  CloneContext         1, 1
-  PopLocal             r0
-  Push                 r0
-  Push                 r0
-  LoadContextVar       1, 0
-  PushInt              1
-  AddInt
-  StoreLocal           r3
-  StoreContextVar      1, 0
-  Push                 r3
-  Drop1
-  Jump                 L2
-L1:
-  Push                 r0
-  LoadContextParent
-  PopLocal             r0
-  Push                 r0
-  LoadContextParent
-  PopLocal             r0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef < dart:core::Function* >
-  [1] = ObjectRef const <dynamic> []
-  [2] = DirectCall 'dart:core::List::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
-  [3] = Reserved
-  [4] = ClosureFunction 0
-  [5] = InstanceField dart:core::_Closure::_context (field)
-  [6] = Reserved
-  [7] = EndClosureFunctionScope
-  [8] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [9] = Reserved
-  [10] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [11] = Reserved
-  [12] = InstanceField dart:core::_Closure::_function (field)
-  [13] = Reserved
-  [14] = InstantiatedInterfaceCall 'dart:core::List::add', ArgDesc num-args 2, num-type-args 0, names [], receiver dart:core::List < dart:core::Function* >*
-  [15] = Reserved
-  [16] = Reserved
-  [17] = ClosureFunction 1
-  [18] = Type dart:core::int*
-  [19] = ObjectRef 'ii'
-  [20] = SubtypeTestCache
-  [21] = EndClosureFunctionScope
-}
-Closure #lib::C::testForLoop::'<anonymous closure>' () -> dart:core::int*
-ClosureCode {
-  Entry                2
-  Push                 FP[-5]
-  LoadFieldTOS         CP#5
-  PopLocal             r0
-  CheckStack           0
-  Push                 r0
-  LoadContextVar       1, 0
-  Push                 r0
-  LoadContextParent
-  LoadContextVar       0, 0
-  AddInt
-  ReturnTOS
-}
-
-Closure #lib::C::testForLoop::'<anonymous closure>' (dart:core::int* ii) -> dart:core::Null?
-ClosureCode {
-  Entry                3
-  Push                 FP[-6]
-  LoadFieldTOS         CP#5
-  PopLocal             r0
-  CheckStack           0
-  JumpIfUnchecked      L1
-  Push                 FP[-5]
-  PushConstant         CP#18
-  PushNull
-  PushNull
-  PushConstant         CP#19
-  AssertAssignable     1, CP#20
-  Drop1
-L1:
-  Push                 r0
-  Push                 FP[-5]
-  Push                 r0
-  LoadContextParent
-  LoadContextVar       0, 0
-  AddInt
-  StoreContextVar      1, 0
-  PushNull
-  ReturnTOS
-}
-
-
-Function 'testForInLoop', reflectable, debuggable
-    parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
-    return-type void
-
-Bytecode {
-  Entry                5
-  CheckStack           0
-  Push                 FP[-5]
-  InterfaceCall        CP#0, 1
-  PopLocal             r2
-L2:
-  CheckStack           1
-  Push                 r2
-  InterfaceCall        CP#2, 1
-  AssertBoolean        0
-  JumpIfFalse          L1
-  AllocateContext      0, 1
-  PopLocal             r0
-  Push                 r0
-  Push                 r2
-  InterfaceCall        CP#4, 1
-  StoreContextVar      0, 0
-  AllocateClosure      CP#6
-  StoreLocal           r4
-  Push                 r4
-  PushNull
-  StoreFieldTOS        CP#10
-  Push                 r4
-  PushNull
-  StoreFieldTOS        CP#12
-  Push                 r4
-  PushConstant         CP#6
-  StoreFieldTOS        CP#14
-  Push                 r4
-  Push                 r0
-  StoreFieldTOS        CP#7
-  PopLocal             r3
-  Push                 r3
-  StoreLocal           r4
-  Push                 r4
-  UncheckedClosureCall CP#16, 1
-  Drop1
-  Push                 r0
-  LoadContextVar       0, 0
-  DirectCall           CP#17, 1
-  Drop1
-  Push                 r0
-  LoadContextParent
-  PopLocal             r0
-  Jump                 L2
-L1:
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall 'dart:core::Iterable::get:iterator', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = InterfaceCall 'dart:core::Iterator::moveNext', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-  [4] = InterfaceCall 'dart:core::Iterator::get:current', ArgDesc num-args 1, num-type-args 0, names []
-  [5] = Reserved
-  [6] = ClosureFunction 0
-  [7] = InstanceField dart:core::_Closure::_context (field)
-  [8] = Reserved
-  [9] = EndClosureFunctionScope
-  [10] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [11] = Reserved
-  [12] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [13] = Reserved
-  [14] = InstanceField dart:core::_Closure::_function (field)
-  [15] = Reserved
-  [16] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
-  [17] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [18] = Reserved
-}
-Closure #lib::C::testForInLoop::'<anonymous closure>' () -> dart:core::Null?
-ClosureCode {
-  Entry                3
-  Push                 FP[-5]
-  LoadFieldTOS         CP#7
-  PopLocal             r0
-  CheckStack           0
-  Push                 r0
-  Push                 r0
-  LoadContextVar       0, 0
-  PushInt              1
-  AddInt
-  StoreContextVar      0, 0
-  PushNull
-  ReturnTOS
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'D', script = '#lib'
-    type-params <dart:core::Object* T> (args: 1)
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::D < #lib::D::TypeParam/0* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'foo', reflectable, debuggable
-    parameters [#lib::D::TypeParam/0* 't'] (required: 1)
-    return-type dynamic
-
-Bytecode {
-  Entry                3
-  CheckStack           0
-  AllocateContext      0, 1
-  PopLocal             r0
-  Push                 r0
-  Push                 FP[-5]
-  StoreContextVar      0, 0
-  JumpIfUnchecked      L1
-  Push                 FP[-5]
-  PushConstant         CP#0
-  Push                 FP[-6]
-  LoadTypeArgumentsField CP#1
-  PushNull
-  PushConstant         CP#2
-  AssertAssignable     0, CP#3
-  Drop1
-L1:
-  AllocateClosure      CP#4
-  StoreLocal           r2
-  Push                 r2
-  Push                 FP[-6]
-  LoadTypeArgumentsField CP#1
-  StoreFieldTOS        CP#8
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#10
-  Push                 r2
-  PushConstant         CP#4
-  StoreFieldTOS        CP#12
-  Push                 r2
-  Push                 r0
-  StoreFieldTOS        CP#5
-  ReturnTOS
-}
-Parameter flags: [2]
-ConstantPool {
-  [0] = Type #lib::D::TypeParam/0*
-  [1] = TypeArgumentsField #lib::D
-  [2] = ObjectRef 't'
-  [3] = SubtypeTestCache
-  [4] = ClosureFunction 0
-  [5] = InstanceField dart:core::_Closure::_context (field)
-  [6] = Reserved
-  [7] = EndClosureFunctionScope
-  [8] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [9] = Reserved
-  [10] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [11] = Reserved
-  [12] = InstanceField dart:core::_Closure::_function (field)
-  [13] = Reserved
-}
-Closure #lib::D::foo::'<anonymous closure>' () -> #lib::D::TypeParam/0*
-ClosureCode {
-  Entry                2
-  Push                 FP[-5]
-  LoadFieldTOS         CP#5
-  PopLocal             r0
-  CheckStack           0
-  Push                 r0
-  LoadContextVar       0, 0
-  ReturnTOS
-}
-
-
-Function 'bar', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                3
-  CheckStack           0
-  AllocateContext      0, 1
-  PopLocal             r0
-  Push                 r0
-  Push                 FP[-5]
-  StoreContextVar      0, 0
-  AllocateClosure      CP#0
-  StoreLocal           r2
-  Push                 r2
-  Push                 FP[-5]
-  LoadTypeArgumentsField CP#5
-  StoreFieldTOS        CP#6
-  Push                 r2
-  PushNull
-  StoreFieldTOS        CP#8
-  Push                 r2
-  PushConstant         CP#0
-  StoreFieldTOS        CP#10
-  Push                 r2
-  Push                 r0
-  StoreFieldTOS        CP#1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ClosureFunction 0
-  [1] = InstanceField dart:core::_Closure::_context (field)
-  [2] = Reserved
-  [3] = ClosureFunction 1
-  [4] = EndClosureFunctionScope
-  [5] = TypeArgumentsField #lib::D
-  [6] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [7] = Reserved
-  [8] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [9] = Reserved
-  [10] = InstanceField dart:core::_Closure::_function (field)
-  [11] = Reserved
-  [12] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
-  [13] = EndClosureFunctionScope
-}
-Closure #lib::D::bar::'<anonymous closure>' () -> dart:core::Null?
-ClosureCode {
-  Entry                4
-  Push                 FP[-5]
-  LoadFieldTOS         CP#1
-  PopLocal             r0
-  CheckStack           0
-  AllocateClosure      CP#3
-  StoreLocal           r3
-  Push                 r3
-  Push                 r0
-  LoadContextVar       0, 0
-  LoadTypeArgumentsField CP#5
-  StoreFieldTOS        CP#6
-  Push                 r3
-  PushNull
-  StoreFieldTOS        CP#8
-  Push                 r3
-  PushConstant         CP#3
-  StoreFieldTOS        CP#10
-  Push                 r3
-  Push                 r0
-  StoreFieldTOS        CP#1
-  PopLocal             r2
-  Push                 r2
-  StoreLocal           r3
-  Push                 r3
-  UncheckedClosureCall CP#12, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-
-Closure #lib::D::bar::Closure/0::'inner' () -> dart:core::Null?
-ClosureCode {
-  Entry                2
-  Push                 FP[-5]
-  LoadFieldTOS         CP#1
-  PopLocal             r0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'E', script = '#lib', abstract
-    extends dart:core::Object*
-
-Field 'foo1', type = FunctionType (dart:core::int*, dart:core::int*)* -> dart:core::int*, getter = 'get:foo1', setter = 'set:foo1', reflectable, has-initializer
-    value = null
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::E*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-Nullable fields: [#lib::E::foo1 (field)]
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:foo2', getter, abstract, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type FunctionType <dart:core::Object* T> (null::TypeParam/0*, null::TypeParam/0*)* -> dart:core::int*
-
-Function 'evalArg1', abstract, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'evalArg2', abstract, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'getE', abstract, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type #lib::E*
-
-Function 'testCallThroughGetter1', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                3
-  CheckStack           0
-  Push                 FP[-5]
-  InterfaceCall        CP#0, 1
-  PopLocal             r0
-  Push                 FP[-5]
-  InterfaceCall        CP#2, 1
-  PopLocal             r1
-  Push                 FP[-5]
-  InterfaceCall        CP#4, 1
-  StoreLocal           r2
-  Push                 r0
-  Push                 r1
-  Push                 r2
-  UncheckedClosureCall CP#6, 3
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall '#lib::E::evalArg1', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = InterfaceCall '#lib::E::evalArg2', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-  [4] = InterfaceCall '#lib::E::get:foo1', ArgDesc num-args 1, num-type-args 0, names []
-  [5] = Reserved
-  [6] = ObjectRef ArgDesc num-args 3, num-type-args 0, names []
-}
-
-
-Function 'testCallThroughGetter2', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                3
-  CheckStack           0
-  Push                 FP[-5]
-  InterfaceCall        CP#0, 1
-  PopLocal             r0
-  Push                 FP[-5]
-  InterfaceCall        CP#2, 1
-  PopLocal             r1
-  PushConstant         CP#4
-  Push                 FP[-5]
-  InterfaceCall        CP#5, 1
-  StoreLocal           r2
-  Push                 r0
-  Push                 r1
-  Push                 r2
-  UncheckedClosureCall CP#7, 4
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall '#lib::E::evalArg1', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = InterfaceCall '#lib::E::evalArg2', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-  [4] = ObjectRef < dart:core::int* >
-  [5] = InterfaceCall '#lib::E::get:foo2', ArgDesc num-args 1, num-type-args 0, names []
-  [6] = Reserved
-  [7] = ObjectRef ArgDesc num-args 3, num-type-args 1, names []
-}
-
-
-Function 'testCallThroughGetter3', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                4
-  CheckStack           0
-  Push                 FP[-5]
-  InterfaceCall        CP#0, 1
-  PopLocal             r0
-  Push                 FP[-5]
-  InterfaceCall        CP#2, 1
-  PopLocal             r1
-  Push                 FP[-5]
-  InterfaceCall        CP#4, 1
-  PopLocal             r2
-  PushConstant         CP#6
-  Push                 r0
-  InterfaceCall        CP#7, 1
-  StoreLocal           r3
-  Push                 r1
-  Push                 r2
-  Push                 r3
-  UncheckedClosureCall CP#9, 4
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall '#lib::E::getE', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = InterfaceCall '#lib::E::evalArg1', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-  [4] = InterfaceCall '#lib::E::evalArg2', ArgDesc num-args 1, num-type-args 0, names []
-  [5] = Reserved
-  [6] = ObjectRef < dart:core::int* >
-  [7] = InterfaceCall '#lib::E::get:foo2', ArgDesc num-args 1, num-type-args 0, names []
-  [8] = Reserved
-  [9] = ObjectRef ArgDesc num-args 3, num-type-args 1, names []
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-
-}
-]library #lib from "#lib" as #lib {
-
-  typedef IntFunc = (dart.core::int*) →* dynamic;
-  class C1 extends dart.core::Object {
-    synthetic constructor •() → #lib::C1*
-      : super dart.core::Object::•()
-      ;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class C2 extends dart.core::Object {
-    synthetic constructor •() → #lib::C2*
-      : super dart.core::Object::•()
-      ;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class C3 extends dart.core::Object {
-    synthetic constructor •() → #lib::C3*
-      : super dart.core::Object::•()
-      ;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class C4 extends dart.core::Object {
-    synthetic constructor •() → #lib::C4*
-      : super dart.core::Object::•()
-      ;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class C5 extends dart.core::Object {
-    synthetic constructor •() → #lib::C5*
-      : super dart.core::Object::•()
-      ;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class C6 extends dart.core::Object {
-    synthetic constructor •() → #lib::C6*
-      : super dart.core::Object::•()
-      ;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class C7 extends dart.core::Object {
-    synthetic constructor •() → #lib::C7*
-      : super dart.core::Object::•()
-      ;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class C8 extends dart.core::Object {
-    synthetic constructor •() → #lib::C8*
-      : super dart.core::Object::•()
-      ;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class A<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → #lib::A<#lib::A::T1*, #lib::A::T2*>*
-      : super dart.core::Object::•()
-      ;
-    method foo<T3 extends dart.core::Object* = dynamic, T4 extends dart.core::Object* = dynamic>() → void {
-      function nested1<T5 extends dart.core::Object* = dynamic, T6 extends dart.core::Object* = dynamic>() → void {
-        function nested2<T7 extends dart.core::Object* = dynamic, T8 extends dart.core::Object* = dynamic>() → void {
-          () →* dart.core::Null? nested3 = () → dart.core::Null? {
-            dart.core::print(<dart.core::Type*>[#lib::A::T1*, #lib::A::T2*, #lib::A::foo::T3*, #lib::A::foo::T4*, T5*, T6*, T7*, T8*]);
-            #lib::callWithArgs<#lib::A::T1*, #lib::A::T2*, #lib::A::foo::T3*, #lib::A::foo::T4*, T5*, T6*, T7*, T8*>();
-          };
-          [@vm.call-site-attributes.metadata=receiverType:dart.core::Null? Function()*] nested3.call();
-        }
-        [@vm.call-site-attributes.metadata=receiverType:void Function<T7, T8>()*] nested2.call<#lib::C7*, #lib::C8*>();
-        [@vm.call-site-attributes.metadata=receiverType:void Function<T7, T8>()*] nested2.call<dart.core::List<#lib::C7*>*, dart.core::List<#lib::C8*>*>();
-      }
-      [@vm.call-site-attributes.metadata=receiverType:void Function<T5, T6>()*] nested1.call<#lib::C5*, #lib::C6*>();
-      [@vm.call-site-attributes.metadata=receiverType:void Function<T5, T6>()*] nested1.call<dart.core::List<#lib::C5*>*, dart.core::List<#lib::C6*>*>();
-    }
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class B extends dart.core::Object {
-    field dart.core::int* foo = null;
-    synthetic constructor •() → #lib::B*
-      : super dart.core::Object::•()
-      ;
-    method topLevel() → void {
-      {
-        dart.core::int* x = 1;
-        {
-          dart.core::int* y = 2;
-          dart.core::int* z = 3;
-          (dart.core::int*) →* dart.core::Null? closure1 = (dart.core::int* y) → dart.core::Null? {
-            x = y.{dart.core::num::+}(1);
-            if(x.{dart.core::num::>}(5)) {
-              dart.core::int* w = 4;
-              function closure2() → void {
-                z = x.{dart.core::num::+}(2);
-                w = this.{#lib::B::foo}.{dart.core::num::+}(y);
-              }
-              [@vm.call-site-attributes.metadata=receiverType:void Function()*] closure2.call();
-              dart.core::print(w);
-            }
-          };
-          [@vm.call-site-attributes.metadata=receiverType:dart.core::Null? Function(dart.core::int*)*] closure1.call(10);
-          [@vm.call-site-attributes.metadata=receiverType:dart.core::Null? Function(dart.core::int*)*] closure1.call(11);
-          dart.core::print(y);
-          dart.core::print(z);
-        }
-        dart.core::print(x);
-      }
-      {
-        dart.core::int* x = 42;
-        () →* dart.core::Null? closure3 = () → dart.core::Null? {
-          this.{#lib::B::foo} = x;
-        };
-        [@vm.call-site-attributes.metadata=receiverType:dart.core::Null? Function()*] closure3.call();
-      }
-    }
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class C extends dart.core::Object {
-    synthetic constructor •() → #lib::C*
-      : super dart.core::Object::•()
-      ;
-    method testForLoop() → void {
-      dart.core::int* delta = 0;
-      dart.core::List<dart.core::Function*>* getI = <dart.core::Function*>[];
-      dart.core::List<dart.core::Function*>* setI = <dart.core::Function*>[];
-      for (dart.core::int* i = 0; i.{dart.core::num::<}(10); i = i.{dart.core::num::+}(1)) {
-        [@vm.call-site-attributes.metadata=receiverType:dart.core::List<dart.core::Function*>*] getI.{dart.core::List::add}(() → dart.core::int* => i.{dart.core::num::+}(delta));
-        [@vm.call-site-attributes.metadata=receiverType:dart.core::List<dart.core::Function*>*] setI.{dart.core::List::add}((dart.core::int* ii) → dart.core::Null? {
-          i = ii.{dart.core::num::+}(delta);
-        });
-      }
-    }
-    method testForInLoop(dart.core::List<dart.core::int*>* list) → void {
-      {
-        dart.core::Iterator<dart.core::int*>* :sync-for-iterator = list.{dart.core::Iterable::iterator};
-        for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(); ) {
-          dart.core::int* i = :sync-for-iterator.{dart.core::Iterator::current};
-          {
-            () →* dart.core::Null? inc = () → dart.core::Null? {
-              i = i.{dart.core::num::+}(1);
-            };
-            [@vm.call-site-attributes.metadata=receiverType:dart.core::Null? Function()*] inc.call();
-            dart.core::print(i);
-          }
-        }
-      }
-    }
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class D<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → #lib::D<#lib::D::T*>*
-      : super dart.core::Object::•()
-      ;
-    method foo(generic-covariant-impl #lib::D::T* t) → dynamic {
-      return () → #lib::D::T* => t;
-    }
-    method bar() → dynamic {
-      return () → dart.core::Null? {
-        function inner() → dart.core::Null? {}
-        [@vm.call-site-attributes.metadata=receiverType:dart.core::Null? Function()*] inner.call();
-      };
-    }
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  abstract class E extends dart.core::Object {
-    field (dart.core::int*, dart.core::int*) →* dart.core::int* foo1 = null;
-    synthetic constructor •() → #lib::E*
-      : super dart.core::Object::•()
-      ;
-    abstract get foo2() → <T extends dart.core::Object* = dynamic>(T*, T*) →* dart.core::int*;
-    abstract method evalArg1() → dart.core::int*;
-    abstract method evalArg2() → dart.core::int*;
-    abstract method getE() → #lib::E*;
-    method testCallThroughGetter1() → dart.core::int*
-      return let final dart.core::int* #t1 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t2 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:dart.core::int* Function(dart.core::int*, dart.core::int*)*] this.{#lib::E::foo1}.call(#t1, #t2);
-    method testCallThroughGetter2() → dart.core::int*
-      return let final dart.core::int* #t3 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t4 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:dart.core::int* Function<T>(T*, T*)*] this.{#lib::E::foo2}.call<dart.core::int*>(#t3, #t4);
-    method testCallThroughGetter3() → dart.core::int*
-      return let final #lib::E* #t5 = this.{#lib::E::getE}() in let final dart.core::int* #t6 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t7 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:dart.core::int* Function<T>(T*, T*)*] #t5.{#lib::E::foo2}.call<dart.core::int*>(#t6, #t7);
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  static method simpleClosure() → dart.core::int* {
-    dart.core::int* x = 5;
-    (dart.core::int*) →* dart.core::Null? inc = (dart.core::int* y) → dart.core::Null? {
-      x = x.{dart.core::num::+}(y);
-    };
-    [@vm.call-site-attributes.metadata=receiverType:dart.core::Null? Function(dart.core::int*)*] inc.call(3);
-    return x;
-  }
-  static method callWithArgs<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic, T3 extends dart.core::Object* = dynamic, T4 extends dart.core::Object* = dynamic, T5 extends dart.core::Object* = dynamic, T6 extends dart.core::Object* = dynamic, T7 extends dart.core::Object* = dynamic, T8 extends dart.core::Object* = dynamic>() → void {
-    dart.core::print(<dart.core::Type*>[#lib::callWithArgs::T1*, #lib::callWithArgs::T2*, #lib::callWithArgs::T3*, #lib::callWithArgs::T4*, #lib::callWithArgs::T5*, #lib::callWithArgs::T6*, #lib::callWithArgs::T7*, #lib::callWithArgs::T8*]);
-  }
-  static method callA() → void {
-    new #lib::A::•<#lib::C1*, #lib::C2*>().{#lib::A::foo}<#lib::C3*, #lib::C4*>();
-    new #lib::A::•<#lib::C1*, #lib::C2*>().{#lib::A::foo}<dart.core::List<#lib::C3*>*, dart.core::List<#lib::C4*>*>();
-    new #lib::A::•<dart.core::List<#lib::C1*>*, dart.core::List<#lib::C2*>*>().{#lib::A::foo}<dart.core::List<#lib::C3*>*, dart.core::List<#lib::C4*>*>();
-  }
-  static method testPartialInstantiation() → (dart.core::int*) →* dynamic {
-    function foo<T extends dart.core::Object* = dynamic>(T* t) → void {}
-    (dart.core::int*) →* dynamic intFunc = foo<dart.core::int*>;
-    return intFunc;
-  }
-  static method main() → dynamic {}
-}
diff --git a/pkg/vm/testcases/bytecode/deferred_lib.dart b/pkg/vm/testcases/bytecode/deferred_lib.dart
deleted file mode 100644
index b93cc06..0000000
--- a/pkg/vm/testcases/bytecode/deferred_lib.dart
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "hello.dart" deferred as lib;
-
-callDeferred() => lib.main();
-
-testLoadLibrary() => lib.loadLibrary();
-
-main() {}
diff --git a/pkg/vm/testcases/bytecode/deferred_lib.dart.expect b/pkg/vm/testcases/bytecode/deferred_lib.dart.expect
deleted file mode 100644
index a3a1685..0000000
--- a/pkg/vm/testcases/bytecode/deferred_lib.dart.expect
+++ /dev/null
@@ -1,75 +0,0 @@
-main = #lib::main;
- [@vm.bytecode=
-BytecodeMetadata {
-Bytecode (version: stable)
-Main library: #lib
-Library '#lib'
-    name '#lib'
-    script '#lib'
-
-Class '', script = '#lib'
-
-
-Function 'callDeferred', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  PushNull
-  DirectCall           CP#0, 1
-  PopLocal             r0
-  DirectCall           CP#2, 0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:async::Future::value (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = DirectCall '#pkg/vm/testcases/bytecode/hello.dart::main', ArgDesc num-args 0, num-type-args 0, names []
-  [3] = Reserved
-}
-
-
-Function 'testLoadLibrary', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  DirectCall           CP#0, 1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:async::Future::value (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'main', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-}
-
-
-}
-]library #lib from "#lib" as #lib {
-
-  import "#pkg/vm/testcases/bytecode/hello.dart" deferred as lib;
-
-  static method callDeferred() → dynamic
-    return let final dynamic #t1 = CheckLibraryIsLoaded(lib) in #lib1::main();
-  static method testLoadLibrary() → dynamic
-    return LoadLibrary(lib);
-  static method main() → dynamic {}
-}
diff --git a/pkg/vm/testcases/bytecode/field_initializers.dart b/pkg/vm/testcases/bytecode/field_initializers.dart
deleted file mode 100644
index 6d9f57e..0000000
--- a/pkg/vm/testcases/bytecode/field_initializers.dart
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-class A {
-  int foo1;
-  int foo2 = null;
-  int foo3 = 42;
-  int foo4;
-  int foo5 = 43;
-
-  A(this.foo4) : foo5 = 44;
-  A.constr2(int x, int y)
-      : foo1 = x,
-        foo5 = y + 1;
-
-  A.redirecting1() : this(45);
-  A.redirecting2(int a, int b, int c) : this.constr2(a, b * c);
-}
-
-class B extends A {
-  int foo6 = 46;
-  static int foo7 = 47;
-  static const int foo8 = 48;
-
-  B() : super(49);
-  B.c2(int i, int j)
-      : foo6 = 50,
-        super.redirecting2(i, j, 51);
-}
-
-main() {}
diff --git a/pkg/vm/testcases/bytecode/field_initializers.dart.expect b/pkg/vm/testcases/bytecode/field_initializers.dart.expect
deleted file mode 100644
index b0ad191..0000000
--- a/pkg/vm/testcases/bytecode/field_initializers.dart.expect
+++ /dev/null
@@ -1,315 +0,0 @@
-main = #lib::main;
- [@vm.bytecode=
-BytecodeMetadata {
-Bytecode (version: stable)
-Main library: #lib
-Library '#lib'
-    name '#lib'
-    script '#lib'
-
-Class '', script = '#lib'
-
-
-Function 'main', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-}
-
-Class 'A', script = '#lib'
-    extends dart:core::Object*
-
-Field 'foo1', type = dart:core::int*, getter = 'get:foo1', setter = 'set:foo1', reflectable
-    value = null
-
-Field 'foo2', type = dart:core::int*, getter = 'get:foo2', setter = 'set:foo2', reflectable, has-initializer
-    value = null
-
-Field 'foo3', type = dart:core::int*, getter = 'get:foo3', setter = 'set:foo3', reflectable, has-initializer
-    value = const 42
-
-Field 'foo4', type = dart:core::int*, getter = 'get:foo4', setter = 'set:foo4', reflectable
-    value = null
-
-Field 'foo5', type = dart:core::int*, getter = 'get:foo5', setter = 'set:foo5', reflectable, has-initializer
-    value = const 43
-
-Function '', constructor, reflectable, debuggable
-    parameters [dart:core::int* 'foo4'] (required: 1)
-    return-type #lib::A*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-6]
-  PushInt              42
-  StoreFieldTOS        CP#0
-  PushInt              43
-  Drop1
-  Push                 FP[-6]
-  Push                 FP[-5]
-  StoreFieldTOS        CP#2
-  Push                 FP[-6]
-  PushInt              44
-  StoreFieldTOS        CP#4
-  Push                 FP[-6]
-  DirectCall           CP#6, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-Nullable fields: [#lib::A::foo1 (field), #lib::A::foo2 (field)]
-ConstantPool {
-  [0] = InstanceField #lib::A::foo3 (field)
-  [1] = Reserved
-  [2] = InstanceField #lib::A::foo4 (field)
-  [3] = Reserved
-  [4] = InstanceField #lib::A::foo5 (field)
-  [5] = Reserved
-  [6] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [7] = Reserved
-}
-
-
-Function 'constr2', constructor, reflectable, debuggable
-    parameters [dart:core::int* 'x', dart:core::int* 'y'] (required: 2)
-    return-type #lib::A*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-7]
-  PushInt              42
-  StoreFieldTOS        CP#0
-  PushInt              43
-  Drop1
-  Push                 FP[-7]
-  Push                 FP[-6]
-  StoreFieldTOS        CP#2
-  Push                 FP[-7]
-  Push                 FP[-5]
-  PushInt              1
-  AddInt
-  StoreFieldTOS        CP#4
-  Push                 FP[-7]
-  DirectCall           CP#6, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-Nullable fields: [#lib::A::foo2 (field), #lib::A::foo4 (field)]
-ConstantPool {
-  [0] = InstanceField #lib::A::foo3 (field)
-  [1] = Reserved
-  [2] = InstanceField #lib::A::foo1 (field)
-  [3] = Reserved
-  [4] = InstanceField #lib::A::foo5 (field)
-  [5] = Reserved
-  [6] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [7] = Reserved
-}
-
-
-Function 'redirecting1', constructor, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type #lib::A*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  PushInt              45
-  DirectCall           CP#0, 2
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::A:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'redirecting2', constructor, reflectable, debuggable
-    parameters [dart:core::int* 'a', dart:core::int* 'b', dart:core::int* 'c'] (required: 3)
-    return-type #lib::A*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-8]
-  Push                 FP[-7]
-  Push                 FP[-6]
-  Push                 FP[-5]
-  MulInt
-  DirectCall           CP#0, 3
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::A::constr2 (constructor)', ArgDesc num-args 3, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'B', script = '#lib'
-    extends #lib::A*
-
-Field 'foo6', type = dart:core::int*, getter = 'get:foo6', setter = 'set:foo6', reflectable, has-initializer
-    value = const 46
-
-Field 'foo7', type = dart:core::int*, reflectable, static, has-initializer
-    value = const 47
-
-Field 'foo8', type = dart:core::int*, reflectable, static, const, final, has-initializer
-    value = const 48
-
-Function '', constructor, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type #lib::B*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  PushInt              46
-  StoreFieldTOS        CP#0
-  Push                 FP[-5]
-  PushInt              49
-  DirectCall           CP#2, 2
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InstanceField #lib::B::foo6 (field)
-  [1] = Reserved
-  [2] = DirectCall '#lib::A:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
-  [3] = Reserved
-}
-
-
-Function 'c2', constructor, reflectable, debuggable
-    parameters [dart:core::int* 'i', dart:core::int* 'j'] (required: 2)
-    return-type #lib::B*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushInt              46
-  Drop1
-  Push                 FP[-7]
-  PushInt              50
-  StoreFieldTOS        CP#0
-  Push                 FP[-7]
-  Push                 FP[-6]
-  Push                 FP[-5]
-  PushInt              51
-  DirectCall           CP#2, 4
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InstanceField #lib::B::foo6 (field)
-  [1] = Reserved
-  [2] = DirectCall '#lib::A::redirecting2 (constructor)', ArgDesc num-args 4, num-type-args 0, names []
-  [3] = Reserved
-}
-
-
-}
-]library #lib from "#lib" as #lib {
-
-  class A extends dart.core::Object {
-    field dart.core::int* foo1;
-    field dart.core::int* foo2 = null;
-    field dart.core::int* foo3 = 42;
-    field dart.core::int* foo4;
-    field dart.core::int* foo5 = 43;
-    constructor •(dart.core::int* foo4) → #lib::A*
-      : #lib::A::foo1 = null, #lib::A::foo4 = foo4, #lib::A::foo5 = 44, super dart.core::Object::•()
-      ;
-    constructor constr2(dart.core::int* x, dart.core::int* y) → #lib::A*
-      : #lib::A::foo4 = null, #lib::A::foo1 = x, #lib::A::foo5 = y.{dart.core::num::+}(1), super dart.core::Object::•()
-      ;
-    constructor redirecting1() → #lib::A*
-      : this #lib::A::•(45)
-      ;
-    constructor redirecting2(dart.core::int* a, dart.core::int* b, dart.core::int* c) → #lib::A*
-      : this #lib::A::constr2(a, b.{dart.core::num::*}(c))
-      ;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class B extends #lib::A {
-    field dart.core::int* foo6 = 46;
-    static field dart.core::int* foo7 = 47;
-    static const field dart.core::int* foo8 = #C1;
-    constructor •() → #lib::B*
-      : super #lib::A::•(49)
-      ;
-    constructor c2(dart.core::int* i, dart.core::int* j) → #lib::B*
-      : #lib::B::foo6 = 50, super #lib::A::redirecting2(i, j, 51)
-      ;
-  }
-  static method main() → dynamic {}
-}
-constants  {
-  #C1 = 48
-}
diff --git a/pkg/vm/testcases/bytecode/hello.dart b/pkg/vm/testcases/bytecode/hello.dart
deleted file mode 100644
index 65a1a2a..0000000
--- a/pkg/vm/testcases/bytecode/hello.dart
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-main() {
-  print('Hello, Dart Bytecode!');
-}
diff --git a/pkg/vm/testcases/bytecode/hello.dart.expect b/pkg/vm/testcases/bytecode/hello.dart.expect
deleted file mode 100644
index 12f2f55..0000000
--- a/pkg/vm/testcases/bytecode/hello.dart.expect
+++ /dev/null
@@ -1,39 +0,0 @@
-main = #lib::main;
- [@vm.bytecode=
-BytecodeMetadata {
-Bytecode (version: stable)
-Main library: #lib
-Library '#lib'
-    name '#lib'
-    script '#lib'
-
-Class '', script = '#lib'
-
-
-Function 'main', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  DirectCall           CP#1, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef 'Hello, Dart Bytecode!'
-  [1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-}
-
-
-}
-]library #lib from "#lib" as #lib {
-
-  static method main() → dynamic {
-    dart.core::print("Hello, Dart Bytecode!");
-  }
-}
diff --git a/pkg/vm/testcases/bytecode/instance_creation.dart b/pkg/vm/testcases/bytecode/instance_creation.dart
deleted file mode 100644
index 8bfa5d7..0000000
--- a/pkg/vm/testcases/bytecode/instance_creation.dart
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// ignore_for_file: native_function_body_in_non_sdk_code
-
-class Base<T1, T2> {
-  T1 t1;
-  T2 t2;
-
-  Base() {
-    print('Base: $T1, $T2');
-  }
-}
-
-class A extends Base<int, String> {
-  A(String s);
-}
-
-class B<T> extends Base<List<T>, String> {
-  B() {
-    print('B: $T');
-  }
-}
-
-class C {
-  C(String s) {
-    print('C: $s');
-  }
-}
-
-foo1() => new C('hello');
-
-void foo2() {
-  new A('hi');
-  new B<int>();
-}
-
-void foo3<T>() {
-  new B<List<T>>();
-}
-
-class E<K, V> {
-  test_reuse1() => new Map<K, V>();
-}
-
-class F<K, V> extends E<String, List<V>> {
-  test_reuse2() => new Map<String, List<V>>();
-}
-
-class G<K, V> {
-  G();
-  factory G.test_factory() => new H<String, K, V>();
-}
-
-class H<P1, P2, P3> extends G<P2, P3> {}
-
-void foo4() {
-  new G<int, List<String>>.test_factory();
-}
-
-class I {
-  I(param);
-  factory I.test_factory2({param}) => new I(param);
-}
-
-void foo5() {
-  new I.test_factory2();
-  new I.test_factory2(param: 42);
-}
-
-class J {
-  factory J() native "agent_J";
-}
-
-abstract class K<A, B> {
-  factory K() => new TestTypeArgReuse<A, B>();
-}
-
-class TestTypeArgReuse<P, Q> extends Base<P, Q> implements K<P, Q> {}
-
-foo6() => new List<String>();
-
-foo7(int n) => new List<int>(n);
-
-main() {
-  foo1();
-  foo2();
-  foo3<String>();
-}
diff --git a/pkg/vm/testcases/bytecode/instance_creation.dart.expect b/pkg/vm/testcases/bytecode/instance_creation.dart.expect
deleted file mode 100644
index 173a1d8..0000000
--- a/pkg/vm/testcases/bytecode/instance_creation.dart.expect
+++ /dev/null
@@ -1,1127 +0,0 @@
-main = #lib::main;
- [@vm.bytecode=
-BytecodeMetadata {
-Bytecode (version: stable)
-Main library: #lib
-Library '#lib'
-    name '#lib'
-    script '#lib'
-
-Class '', script = '#lib'
-
-
-Function 'foo1', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Allocate             CP#0
-  StoreLocal           r0
-  Push                 r0
-  PushConstant         CP#1
-  DirectCall           CP#2, 2
-  Drop1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Class #lib::C
-  [1] = ObjectRef 'hello'
-  [2] = DirectCall '#lib::C:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
-  [3] = Reserved
-}
-
-
-Function 'foo2', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type void
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  PushConstant         CP#1
-  PushConstant         CP#0
-  AllocateT
-  StoreLocal           r0
-  Push                 r0
-  PushConstant         CP#2
-  DirectCall           CP#3, 2
-  Drop1
-  Drop1
-  PushConstant         CP#6
-  PushConstant         CP#5
-  AllocateT
-  StoreLocal           r0
-  Push                 r0
-  DirectCall           CP#7, 1
-  Drop1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Class #lib::A
-  [1] = ObjectRef < dart:core::int*, dart:core::String* >
-  [2] = ObjectRef 'hi'
-  [3] = DirectCall '#lib::A:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
-  [4] = Reserved
-  [5] = Class #lib::B
-  [6] = ObjectRef < dart:core::List < dart:core::int* >*, dart:core::String*, dart:core::int* >
-  [7] = DirectCall '#lib::B:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [8] = Reserved
-}
-
-
-Function 'foo3', static, reflectable, debuggable
-    type-params <dart:core::Object* T>
-    parameters [] (required: 0)
-    return-type void
-
-Bytecode {
-  Entry                2
-  CheckFunctionTypeArgs 1, r0
-  CheckStack           0
-  PushNull
-  Push                 r0
-  InstantiateTypeArgumentsTOS 0, CP#1
-  PushConstant         CP#0
-  AllocateT
-  StoreLocal           r1
-  Push                 r1
-  DirectCall           CP#2, 1
-  Drop1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Class #lib::B
-  [1] = ObjectRef < dart:core::List < dart:core::List < #lib::foo3::TypeParam/0* >* >*, dart:core::String*, dart:core::List < #lib::foo3::TypeParam/0* >* >
-  [2] = DirectCall '#lib::B:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-}
-
-
-Function 'foo4', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type void
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  DirectCall           CP#1, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef < dart:core::int*, dart:core::List < dart:core::String* >* >
-  [1] = DirectCall '#lib::G::test_factory (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-}
-
-
-Function 'foo5', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type void
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  PushInt              42
-  DirectCall           CP#2, 2
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::I::test_factory2 (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = DirectCall '#lib::I::test_factory2 (constructor)', ArgDesc num-args 2, num-type-args 0, names ['param']
-  [3] = Reserved
-}
-
-
-Function 'foo6', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  PushInt              0
-  DirectCall           CP#1, 2
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef < dart:core::String* >
-  [1] = DirectCall 'dart:core::_GrowableList:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
-  [2] = Reserved
-}
-
-
-Function 'foo7', static, reflectable, debuggable
-    parameters [dart:core::int* 'n'] (required: 1)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  Push                 FP[-5]
-  DirectCall           CP#1, 2
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef < dart:core::int* >
-  [1] = DirectCall 'dart:core::_List:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
-  [2] = Reserved
-}
-
-
-Function 'main', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  DirectCall           CP#0, 0
-  Drop1
-  DirectCall           CP#2, 0
-  Drop1
-  PushConstant         CP#4
-  DirectCall           CP#5, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::foo1', ArgDesc num-args 0, num-type-args 0, names []
-  [1] = Reserved
-  [2] = DirectCall '#lib::foo2', ArgDesc num-args 0, num-type-args 0, names []
-  [3] = Reserved
-  [4] = ObjectRef < dart:core::String* >
-  [5] = DirectCall '#lib::foo3', ArgDesc num-args 0, num-type-args 1, names []
-  [6] = Reserved
-}
-
-Class 'Base', script = '#lib'
-    type-params <dart:core::Object* T1, dart:core::Object* T2> (args: 2)
-    extends dart:core::Object*
-
-Field 't1', type = #lib::Base::TypeParam/0*, getter = 'get:t1', setter = 'set:t1', reflectable, has-initializer
-    value = null
-
-Field 't2', type = #lib::Base::TypeParam/1*, getter = 'get:t2', setter = 'set:t2', reflectable, has-initializer
-    value = null
-
-Function '', constructor, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type #lib::Base < #lib::Base::TypeParam/0*, #lib::Base::TypeParam/1* >*
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  PushInt              4
-  CreateArrayTOS
-  StoreLocal           r0
-  Push                 r0
-  PushInt              0
-  PushConstant         CP#2
-  StoreIndexedTOS
-  Push                 r0
-  PushInt              1
-  Push                 FP[-5]
-  LoadTypeArgumentsField CP#4
-  PushNull
-  InstantiateType      CP#3
-  StoreIndexedTOS
-  Push                 r0
-  PushInt              2
-  PushConstant         CP#5
-  StoreIndexedTOS
-  Push                 r0
-  PushInt              3
-  Push                 FP[-5]
-  LoadTypeArgumentsField CP#4
-  PushNull
-  InstantiateType      CP#6
-  StoreIndexedTOS
-  DirectCall           CP#7, 1
-  DirectCall           CP#9, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-Nullable fields: [#lib::Base::t1 (field), #lib::Base::t2 (field)]
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = ObjectRef 'Base: '
-  [3] = Type #lib::Base::TypeParam/0*
-  [4] = TypeArgumentsField #lib::Base
-  [5] = ObjectRef ', '
-  [6] = Type #lib::Base::TypeParam/1*
-  [7] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
-  [8] = Reserved
-  [9] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [10] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'A', script = '#lib'
-    extends #lib::Base < dart:core::int*, dart:core::String* >*
-
-
-Function '', constructor, reflectable, debuggable
-    parameters [dart:core::String* 's'] (required: 1)
-    return-type #lib::A < dart:core::int*, dart:core::String* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-6]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::Base:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-Class 'B', script = '#lib'
-    type-params <dart:core::Object* T> (args: 3)
-    extends #lib::Base < dart:core::List < #lib::B::TypeParam/0* >*, dart:core::String* >*
-
-
-Function '', constructor, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type #lib::B < dart:core::List < #lib::B::TypeParam/0* >*, dart:core::String*, #lib::B::TypeParam/0* >*
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  PushInt              2
-  CreateArrayTOS
-  StoreLocal           r0
-  Push                 r0
-  PushInt              0
-  PushConstant         CP#2
-  StoreIndexedTOS
-  Push                 r0
-  PushInt              1
-  Push                 FP[-5]
-  LoadTypeArgumentsField CP#4
-  PushNull
-  InstantiateType      CP#3
-  StoreIndexedTOS
-  DirectCall           CP#5, 1
-  DirectCall           CP#7, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::Base:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = ObjectRef 'B: '
-  [3] = Type #lib::B::TypeParam/0*
-  [4] = TypeArgumentsField #lib::B
-  [5] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
-  [6] = Reserved
-  [7] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [8] = Reserved
-}
-
-Class 'C', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable, debuggable
-    parameters [dart:core::String* 's'] (required: 1)
-    return-type #lib::C*
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-6]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  PushInt              2
-  CreateArrayTOS
-  StoreLocal           r0
-  Push                 r0
-  PushInt              0
-  PushConstant         CP#2
-  StoreIndexedTOS
-  Push                 r0
-  PushInt              1
-  Push                 FP[-5]
-  StoreIndexedTOS
-  DirectCall           CP#3, 1
-  DirectCall           CP#5, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = ObjectRef 'C: '
-  [3] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
-  [4] = Reserved
-  [5] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [6] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'E', script = '#lib'
-    type-params <dart:core::Object* K, dart:core::Object* V> (args: 2)
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::E < #lib::E::TypeParam/0*, #lib::E::TypeParam/1* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'test_reuse1', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  LoadTypeArgumentsField CP#0
-  DirectCall           CP#1, 1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = TypeArgumentsField #lib::E
-  [1] = DirectCall 'dart:core::Map:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'F', script = '#lib'
-    type-params <dart:core::Object* K, dart:core::Object* V> (args: 4)
-    extends #lib::E < dart:core::String*, dart:core::List < #lib::F::TypeParam/1* >* >*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::F < dart:core::String*, dart:core::List < #lib::F::TypeParam/1* >*, #lib::F::TypeParam/0*, #lib::F::TypeParam/1* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::E:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'test_reuse2', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  LoadTypeArgumentsField CP#0
-  DirectCall           CP#1, 1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = TypeArgumentsField #lib::F
-  [1] = DirectCall 'dart:core::Map:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-}
-
-Class 'G', script = '#lib'
-    type-params <dart:core::Object* K, dart:core::Object* V> (args: 2)
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type #lib::G < #lib::G::TypeParam/0*, #lib::G::TypeParam/1* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'test_factory', factory, static, reflectable, debuggable
-    type-params <dart:core::Object* K, dart:core::Object* V>
-    parameters [] (required: 0)
-    return-type #lib::G < #lib::G::test_factory (constructor)::TypeParam/0*, #lib::G::test_factory (constructor)::TypeParam/1* >*
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-5]
-  PushNull
-  InstantiateTypeArgumentsTOS 0, CP#1
-  PushConstant         CP#0
-  AllocateT
-  StoreLocal           r0
-  Push                 r0
-  DirectCall           CP#2, 1
-  Drop1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Class #lib::H
-  [1] = ObjectRef < #lib::G::test_factory (constructor)::TypeParam/0*, #lib::G::test_factory (constructor)::TypeParam/1*, dart:core::String*, #lib::G::test_factory (constructor)::TypeParam/0*, #lib::G::test_factory (constructor)::TypeParam/1* >
-  [2] = DirectCall '#lib::H:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'H', script = '#lib'
-    type-params <dart:core::Object* P1, dart:core::Object* P2, dart:core::Object* P3> (args: 5)
-    extends #lib::G < #lib::H::TypeParam/1*, #lib::H::TypeParam/2* >*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::H < #lib::H::TypeParam/1*, #lib::H::TypeParam/2*, #lib::H::TypeParam/0*, #lib::H::TypeParam/1*, #lib::H::TypeParam/2* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::G:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-Class 'I', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable, debuggable
-    parameters [dynamic 'param'] (required: 1)
-    return-type #lib::I*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-6]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'test_factory2', factory, static, has-optional-named-params, reflectable, debuggable
-    parameters [dynamic 'param'] (required: 0)
-    return-type #lib::I*
-
-Bytecode {
-  EntryOptional        1, 0, 1
-  LoadConstant         r1, CP#0
-  LoadConstant         r1, CP#1
-  Frame                1
-  CheckStack           0
-  Allocate             CP#2
-  StoreLocal           r2
-  Push                 r2
-  Push                 r1
-  DirectCall           CP#3, 2
-  Drop1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef 'param'
-  [1] = ObjectRef null
-  [2] = Class #lib::I
-  [3] = DirectCall '#lib::I:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
-  [4] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'J', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', factory, static, reflectable, debuggable, native 'agent_J'
-    parameters [] (required: 0)
-    return-type #lib::J*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  NativeCall           CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = NativeEntry agent_J
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'K', script = '#lib', abstract
-    type-params <dart:core::Object* A, dart:core::Object* B> (args: 2)
-    extends dart:core::Object*
-
-
-Function '', factory, static, reflectable, debuggable
-    type-params <dart:core::Object* A, dart:core::Object* B>
-    parameters [] (required: 0)
-    return-type #lib::K < #lib::K:: (constructor)::TypeParam/0*, #lib::K:: (constructor)::TypeParam/1* >*
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-5]
-  PushConstant         CP#0
-  AllocateT
-  StoreLocal           r0
-  Push                 r0
-  DirectCall           CP#1, 1
-  Drop1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Class #lib::TestTypeArgReuse
-  [1] = DirectCall '#lib::TestTypeArgReuse:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'TestTypeArgReuse', script = '#lib'
-    type-params <dart:core::Object* P, dart:core::Object* Q> (args: 2)
-    extends #lib::Base < #lib::TestTypeArgReuse::TypeParam/0*, #lib::TestTypeArgReuse::TypeParam/1* >*
-    implements [#lib::K < #lib::TestTypeArgReuse::TypeParam/0*, #lib::TestTypeArgReuse::TypeParam/1* >*]
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::TestTypeArgReuse < #lib::TestTypeArgReuse::TypeParam/0*, #lib::TestTypeArgReuse::TypeParam/1* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::Base:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-}
-]library #lib from "#lib" as #lib {
-
-  class Base<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic> extends dart.core::Object {
-    generic-covariant-impl field #lib::Base::T1* t1 = null;
-    generic-covariant-impl field #lib::Base::T2* t2 = null;
-    constructor •() → #lib::Base<#lib::Base::T1*, #lib::Base::T2*>*
-      : super dart.core::Object::•() {
-      dart.core::print("Base: ${#lib::Base::T1*}, ${#lib::Base::T2*}");
-    }
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class A extends #lib::Base<dart.core::int*, dart.core::String*> {
-    constructor •(dart.core::String* s) → #lib::A*
-      : super #lib::Base::•()
-      ;
-  }
-  class B<T extends dart.core::Object* = dynamic> extends #lib::Base<dart.core::List<#lib::B::T*>*, dart.core::String*> {
-    constructor •() → #lib::B<#lib::B::T*>*
-      : super #lib::Base::•() {
-      dart.core::print("B: ${#lib::B::T*}");
-    }
-  }
-  class C extends dart.core::Object {
-    constructor •(dart.core::String* s) → #lib::C*
-      : super dart.core::Object::•() {
-      dart.core::print("C: ${s}");
-    }
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class E<K extends dart.core::Object* = dynamic, V extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → #lib::E<#lib::E::K*, #lib::E::V*>*
-      : super dart.core::Object::•()
-      ;
-    method test_reuse1() → dynamic
-      return dart.core::Map::•<#lib::E::K*, #lib::E::V*>();
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class F<K extends dart.core::Object* = dynamic, V extends dart.core::Object* = dynamic> extends #lib::E<dart.core::String*, dart.core::List<#lib::F::V*>*> {
-    synthetic constructor •() → #lib::F<#lib::F::K*, #lib::F::V*>*
-      : super #lib::E::•()
-      ;
-    method test_reuse2() → dynamic
-      return dart.core::Map::•<dart.core::String*, dart.core::List<#lib::F::V*>*>();
-  }
-  class G<K extends dart.core::Object* = dynamic, V extends dart.core::Object* = dynamic> extends dart.core::Object {
-    constructor •() → #lib::G<#lib::G::K*, #lib::G::V*>*
-      : super dart.core::Object::•()
-      ;
-    static factory test_factory<K extends dart.core::Object* = dynamic, V extends dart.core::Object* = dynamic>() → #lib::G<#lib::G::test_factory::K*, #lib::G::test_factory::V*>*
-      return new #lib::H::•<dart.core::String*, #lib::G::test_factory::K*, #lib::G::test_factory::V*>();
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class H<P1 extends dart.core::Object* = dynamic, P2 extends dart.core::Object* = dynamic, P3 extends dart.core::Object* = dynamic> extends #lib::G<#lib::H::P2*, #lib::H::P3*> {
-    synthetic constructor •() → #lib::H<#lib::H::P1*, #lib::H::P2*, #lib::H::P3*>*
-      : super #lib::G::•()
-      ;
-  }
-  class I extends dart.core::Object {
-    constructor •(dynamic param) → #lib::I*
-      : super dart.core::Object::•()
-      ;
-    static factory test_factory2({dynamic param = #C1}) → #lib::I*
-      return new #lib::I::•(param);
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class J extends dart.core::Object {
-    @#C3
-    external static factory •() → #lib::J*;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  abstract class K<A extends dart.core::Object* = dynamic, B extends dart.core::Object* = dynamic> extends dart.core::Object {
-    static factory •<A extends dart.core::Object* = dynamic, B extends dart.core::Object* = dynamic>() → #lib::K<#lib::K::•::A*, #lib::K::•::B*>*
-      return new #lib::TestTypeArgReuse::•<#lib::K::•::A*, #lib::K::•::B*>();
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class TestTypeArgReuse<P extends dart.core::Object* = dynamic, Q extends dart.core::Object* = dynamic> extends #lib::Base<#lib::TestTypeArgReuse::P*, #lib::TestTypeArgReuse::Q*> implements #lib::K<#lib::TestTypeArgReuse::P*, #lib::TestTypeArgReuse::Q*> {
-    synthetic constructor •() → #lib::TestTypeArgReuse<#lib::TestTypeArgReuse::P*, #lib::TestTypeArgReuse::Q*>*
-      : super #lib::Base::•()
-      ;
-  }
-  static method foo1() → dynamic
-    return new #lib::C::•("hello");
-  static method foo2() → void {
-    new #lib::A::•("hi");
-    new #lib::B::•<dart.core::int*>();
-  }
-  static method foo3<T extends dart.core::Object* = dynamic>() → void {
-    new #lib::B::•<dart.core::List<#lib::foo3::T*>*>();
-  }
-  static method foo4() → void {
-    #lib::G::test_factory<dart.core::int*, dart.core::List<dart.core::String*>*>();
-  }
-  static method foo5() → void {
-    #lib::I::test_factory2();
-    #lib::I::test_factory2(param: 42);
-  }
-  static method foo6() → dynamic
-    return dart.core::_GrowableList::•<dart.core::String*>(0);
-  static method foo7(dart.core::int* n) → dynamic
-    return dart.core::_List::•<dart.core::int*>(n);
-  static method main() → dynamic {
-    #lib::foo1();
-    #lib::foo2();
-    #lib::foo3<dart.core::String*>();
-  }
-}
-constants  {
-  #C1 = null
-  #C2 = "agent_J"
-  #C3 = dart._internal::ExternalName {name:#C2}
-}
diff --git a/pkg/vm/testcases/bytecode/literals.dart b/pkg/vm/testcases/bytecode/literals.dart
deleted file mode 100644
index c4c3ea8..0000000
--- a/pkg/vm/testcases/bytecode/literals.dart
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-enum A {
-  elem1,
-  elem2,
-  elem3,
-  elem4,
-}
-
-class B {
-  final int i;
-  const B(this.i);
-}
-
-class C extends B {
-  final int j;
-  const C(int a, int b, int c)
-      : j = a + b,
-        super(c * 5);
-}
-
-class D {
-  final x;
-  final y;
-  const D(this.x, [this.y]);
-}
-
-const c1 = A.elem3;
-const c2 = 'hello!';
-const c3 = c2.length;
-const c4 = const C(1, 2, 3);
-const c5 = const D(const B(4));
-
-void test_constants1() {
-  print(c1);
-  print(c2);
-  print(c3);
-  print(c4);
-  print(c5);
-}
-
-void test_constants2() {
-  print(42);
-  print('foo');
-  print(A.elem2);
-  print(const [42, 'foo', int]);
-  print(const <String, A>{'E2': A.elem2, 'E4': A.elem4});
-  print(
-      const D(const C(4, 5, 6), const {'foo': 42, 'bar': const B(c2.length)}));
-}
-
-void test_list_literal(int a) {
-  print([1, a, 3]);
-  print(<String>['a', a.toString(), 'b']);
-}
-
-void test_map_literal<T>(int a, int b, T c) {
-  print({1: a, b: 2});
-  print(<String, int>{'foo': a, b.toString(): 3});
-  print(<String, T>{});
-  print(<T, int>{c: 4});
-}
-
-void test_symbol() {
-  print(#test_symbol);
-  print(#_private_symbol);
-}
-
-void test_type_literal<T>() {
-  print(String);
-  print(T);
-}
-
-class E<T> {
-  const E();
-}
-
-class F<P, Q> extends E<Map<P, Q>> {
-  const F();
-}
-
-testGenericConstInstance() => const F<int, String>();
-
-typedef GenericFunctionType = X Function<X>(X);
-testGenericFunctionTypeLiteral() => GenericFunctionType;
-
-double fieldWithDoubleLiteralInitializer = 1.0;
-testFieldWithDoubleLiteralInitializer() => fieldWithDoubleLiteralInitializer;
-
-main() {}
diff --git a/pkg/vm/testcases/bytecode/literals.dart.expect b/pkg/vm/testcases/bytecode/literals.dart.expect
deleted file mode 100644
index 2d3b56d..0000000
--- a/pkg/vm/testcases/bytecode/literals.dart.expect
+++ /dev/null
@@ -1,1013 +0,0 @@
-main = #lib::main;
- [@vm.bytecode=
-BytecodeMetadata {
-Bytecode (version: stable)
-Main library: #lib
-Library '#lib'
-    name '#lib'
-    script '#lib'
-
-Class '', script = '#lib'
-
-Field 'c1', type = #lib::A*, getter = 'get:c1', reflectable, static, const, final, has-initializer
-    initializer
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef const #lib::A* {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}
-}
-
-
-Field 'c2', type = dart:core::String*, reflectable, static, const, final, has-initializer
-    value = 'hello!'
-
-Field 'c3', type = dart:core::int*, reflectable, static, const, final, has-initializer
-    value = const 6
-
-Field 'c4', type = #lib::C*, getter = 'get:c4', reflectable, static, const, final, has-initializer
-    initializer
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef const #lib::C* {#lib::C::j (field): const 3, #lib::B::i (field): const 15}
-}
-
-
-Field 'c5', type = #lib::D*, getter = 'get:c5', reflectable, static, const, final, has-initializer
-    initializer
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef const #lib::D* {#lib::D::x (field): const #lib::B* {#lib::B::i (field): const 4}, #lib::D::y (field): null}
-}
-
-
-Field 'fieldWithDoubleLiteralInitializer', type = dart:core::double*, reflectable, static, has-initializer
-    value = const 1.0
-
-Function 'test_constants1', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type void
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  DirectCall           CP#1, 1
-  Drop1
-  PushConstant         CP#3
-  DirectCall           CP#1, 1
-  Drop1
-  PushInt              6
-  DirectCall           CP#1, 1
-  Drop1
-  PushConstant         CP#4
-  DirectCall           CP#1, 1
-  Drop1
-  PushConstant         CP#5
-  DirectCall           CP#1, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef const #lib::A* {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}
-  [1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-  [3] = ObjectRef 'hello!'
-  [4] = ObjectRef const #lib::C* {#lib::C::j (field): const 3, #lib::B::i (field): const 15}
-  [5] = ObjectRef const #lib::D* {#lib::D::x (field): const #lib::B* {#lib::B::i (field): const 4}, #lib::D::y (field): null}
-}
-
-
-Function 'test_constants2', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type void
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushInt              42
-  DirectCall           CP#0, 1
-  Drop1
-  PushConstant         CP#2
-  DirectCall           CP#0, 1
-  Drop1
-  PushConstant         CP#3
-  DirectCall           CP#0, 1
-  Drop1
-  PushConstant         CP#4
-  DirectCall           CP#0, 1
-  Drop1
-  PushConstant         CP#5
-  DirectCall           CP#0, 1
-  Drop1
-  PushConstant         CP#6
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = ObjectRef 'foo'
-  [3] = ObjectRef const #lib::A* {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}
-  [4] = ObjectRef const <dart:core::Object*> [const 42, 'foo', dart:core::int*]
-  [5] = ObjectRef const dart:core::_ImmutableMap < dart:core::String*, #lib::A* >* {dart:core::_ImmutableMap::_kvPairs (field): const <dynamic> ['E2', const #lib::A* {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}, 'E4', const #lib::A* {#lib::A::index (field): const 3, #lib::A::_name (field): 'A.elem4'}]}
-  [6] = ObjectRef const #lib::D* {#lib::D::x (field): const #lib::C* {#lib::C::j (field): const 9, #lib::B::i (field): const 30}, #lib::D::y (field): const dart:core::_ImmutableMap < dart:core::String*, dart:core::Object* >* {dart:core::_ImmutableMap::_kvPairs (field): const <dynamic> ['foo', const 42, 'bar', const #lib::B* {#lib::B::i (field): const 6}]}}
-}
-
-
-Function 'test_list_literal', static, reflectable, debuggable
-    parameters [dart:core::int* 'a'] (required: 1)
-    return-type void
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  PushConstant         CP#0
-  StoreLocal           r0
-  Push                 r0
-  PushInt              3
-  CreateArrayTOS
-  StoreLocal           r0
-  Push                 r0
-  PushInt              0
-  PushInt              1
-  StoreIndexedTOS
-  Push                 r0
-  PushInt              1
-  Push                 FP[-5]
-  StoreIndexedTOS
-  Push                 r0
-  PushInt              2
-  PushInt              3
-  StoreIndexedTOS
-  DirectCall           CP#1, 2
-  DirectCall           CP#3, 1
-  Drop1
-  PushConstant         CP#5
-  StoreLocal           r0
-  Push                 r0
-  PushInt              3
-  CreateArrayTOS
-  StoreLocal           r0
-  Push                 r0
-  PushInt              0
-  PushConstant         CP#6
-  StoreIndexedTOS
-  Push                 r0
-  PushInt              1
-  Push                 FP[-5]
-  InterfaceCall        CP#7, 1
-  StoreIndexedTOS
-  Push                 r0
-  PushInt              2
-  PushConstant         CP#9
-  StoreIndexedTOS
-  DirectCall           CP#1, 2
-  DirectCall           CP#3, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef < dart:core::int* >
-  [1] = DirectCall 'dart:core::List::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
-  [2] = Reserved
-  [3] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [4] = Reserved
-  [5] = ObjectRef < dart:core::String* >
-  [6] = ObjectRef 'a'
-  [7] = InterfaceCall 'dart:core::int::toString', ArgDesc num-args 1, num-type-args 0, names []
-  [8] = Reserved
-  [9] = ObjectRef 'b'
-}
-
-
-Function 'test_map_literal', static, reflectable, debuggable
-    type-params <dart:core::Object* T>
-    parameters [dart:core::int* 'a', dart:core::int* 'b', #lib::test_map_literal::TypeParam/0* 'c'] (required: 3)
-    return-type void
-
-Bytecode {
-  Entry                2
-  CheckFunctionTypeArgs 1, r0
-  CheckStack           0
-  PushConstant         CP#0
-  PushConstant         CP#1
-  PushInt              4
-  CreateArrayTOS
-  StoreLocal           r1
-  Push                 r1
-  PushInt              0
-  PushInt              1
-  StoreIndexedTOS
-  Push                 r1
-  PushInt              1
-  Push                 FP[-7]
-  StoreIndexedTOS
-  Push                 r1
-  PushInt              2
-  Push                 FP[-6]
-  StoreIndexedTOS
-  Push                 r1
-  PushInt              3
-  PushInt              2
-  StoreIndexedTOS
-  DirectCall           CP#2, 2
-  DirectCall           CP#4, 1
-  Drop1
-  PushConstant         CP#6
-  PushConstant         CP#1
-  PushInt              4
-  CreateArrayTOS
-  StoreLocal           r1
-  Push                 r1
-  PushInt              0
-  PushConstant         CP#7
-  StoreIndexedTOS
-  Push                 r1
-  PushInt              1
-  Push                 FP[-7]
-  StoreIndexedTOS
-  Push                 r1
-  PushInt              2
-  Push                 FP[-6]
-  InterfaceCall        CP#8, 1
-  StoreIndexedTOS
-  Push                 r1
-  PushInt              3
-  PushInt              3
-  StoreIndexedTOS
-  DirectCall           CP#2, 2
-  DirectCall           CP#4, 1
-  Drop1
-  PushNull
-  Push                 r0
-  InstantiateTypeArgumentsTOS 0, CP#10
-  PushConstant         CP#11
-  DirectCall           CP#2, 2
-  DirectCall           CP#4, 1
-  Drop1
-  PushNull
-  Push                 r0
-  InstantiateTypeArgumentsTOS 0, CP#12
-  PushConstant         CP#1
-  PushInt              2
-  CreateArrayTOS
-  StoreLocal           r1
-  Push                 r1
-  PushInt              0
-  Push                 FP[-5]
-  StoreIndexedTOS
-  Push                 r1
-  PushInt              1
-  PushInt              4
-  StoreIndexedTOS
-  DirectCall           CP#2, 2
-  DirectCall           CP#4, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef < dart:core::int*, dart:core::int* >
-  [1] = ObjectRef < dynamic >
-  [2] = DirectCall 'dart:core::Map::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
-  [3] = Reserved
-  [4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [5] = Reserved
-  [6] = ObjectRef < dart:core::String*, dart:core::int* >
-  [7] = ObjectRef 'foo'
-  [8] = InterfaceCall 'dart:core::int::toString', ArgDesc num-args 1, num-type-args 0, names []
-  [9] = Reserved
-  [10] = ObjectRef < dart:core::String*, #lib::test_map_literal::TypeParam/0* >
-  [11] = ObjectRef const <dynamic> []
-  [12] = ObjectRef < #lib::test_map_literal::TypeParam/0*, dart:core::int* >
-}
-
-
-Function 'test_symbol', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type void
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  DirectCall           CP#1, 1
-  Drop1
-  PushConstant         CP#3
-  DirectCall           CP#1, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef const 'test_symbol'
-  [1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-  [3] = ObjectRef const '_private_symbol'
-}
-
-
-Function 'test_type_literal', static, reflectable, debuggable
-    type-params <dart:core::Object* T>
-    parameters [] (required: 0)
-    return-type void
-
-Bytecode {
-  Entry                1
-  CheckFunctionTypeArgs 1, r0
-  CheckStack           0
-  PushConstant         CP#0
-  DirectCall           CP#1, 1
-  Drop1
-  PushNull
-  Push                 r0
-  InstantiateType      CP#3
-  DirectCall           CP#1, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Type dart:core::String*
-  [1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-  [3] = Type #lib::test_type_literal::TypeParam/0*
-}
-
-
-Function 'testGenericConstInstance', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef const #lib::F < dart:core::Map < dart:core::int*, dart:core::String* >*, dart:core::int*, dart:core::String* >* {}
-}
-
-
-Function 'testGenericFunctionTypeLiteral', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Type FunctionType <dart:core::Object* X> (null::TypeParam/0*)* -> null::TypeParam/0*
-}
-
-
-Function 'testFieldWithDoubleLiteralInitializer', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  LoadStatic           CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = StaticField #lib::fieldWithDoubleLiteralInitializer (field)
-}
-
-
-Function 'main', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-}
-
-Class 'A', script = '#lib', enum
-    extends dart:core::Object*
-
-Field 'index', type = dart:core::int*, getter = 'get:index', reflectable, final
-    value = null
-
-Field '_name', type = dart:core::String*, getter = 'get:_name', reflectable, final
-    value = null
-
-Field 'values', type = dart:core::List < #lib::A* >*, getter = 'get:values', reflectable, static, const, final, has-initializer
-    initializer
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef const <#lib::A*> [const #lib::A* {#lib::A::index (field): const 0, #lib::A::_name (field): 'A.elem1'}, const #lib::A* {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}, const #lib::A* {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}, const #lib::A* {#lib::A::index (field): const 3, #lib::A::_name (field): 'A.elem4'}]
-}
-
-
-Field 'elem1', type = #lib::A*, getter = 'get:elem1', reflectable, static, const, final, has-initializer
-    initializer
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef const #lib::A* {#lib::A::index (field): const 0, #lib::A::_name (field): 'A.elem1'}
-}
-
-
-Field 'elem2', type = #lib::A*, getter = 'get:elem2', reflectable, static, const, final, has-initializer
-    initializer
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef const #lib::A* {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}
-}
-
-
-Field 'elem3', type = #lib::A*, getter = 'get:elem3', reflectable, static, const, final, has-initializer
-    initializer
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef const #lib::A* {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}
-}
-
-
-Field 'elem4', type = #lib::A*, getter = 'get:elem4', reflectable, static, const, final, has-initializer
-    initializer
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef const #lib::A* {#lib::A::index (field): const 3, #lib::A::_name (field): 'A.elem4'}
-}
-
-
-Function '', constructor, const, reflectable, debuggable
-    parameters [dart:core::int* 'index', dart:core::String* '_name'] (required: 2)
-    return-type #lib::A*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-7]
-  Push                 FP[-6]
-  StoreFieldTOS        CP#0
-  Push                 FP[-7]
-  Push                 FP[-5]
-  StoreFieldTOS        CP#2
-  Push                 FP[-7]
-  DirectCall           CP#4, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InstanceField #lib::A::index (field)
-  [1] = Reserved
-  [2] = InstanceField #lib::A::_name (field)
-  [3] = Reserved
-  [4] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [5] = Reserved
-}
-
-
-Function 'toString', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  InterfaceCall        CP#0, 1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall '#lib::A::get:_name', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'B', script = '#lib'
-    extends dart:core::Object*
-
-Field 'i', type = dart:core::int*, getter = 'get:i', reflectable, final
-    value = null
-
-Function '', constructor, const, reflectable, debuggable
-    parameters [dart:core::int* 'i'] (required: 1)
-    return-type #lib::B*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-6]
-  Push                 FP[-5]
-  StoreFieldTOS        CP#0
-  Push                 FP[-6]
-  DirectCall           CP#2, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InstanceField #lib::B::i (field)
-  [1] = Reserved
-  [2] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'C', script = '#lib'
-    extends #lib::B*
-
-Field 'j', type = dart:core::int*, getter = 'get:j', reflectable, final
-    value = null
-
-Function '', constructor, const, reflectable, debuggable
-    parameters [dart:core::int* 'a', dart:core::int* 'b', dart:core::int* 'c'] (required: 3)
-    return-type #lib::C*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-8]
-  Push                 FP[-7]
-  Push                 FP[-6]
-  AddInt
-  StoreFieldTOS        CP#0
-  Push                 FP[-8]
-  Push                 FP[-5]
-  PushInt              5
-  MulInt
-  DirectCall           CP#2, 2
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InstanceField #lib::C::j (field)
-  [1] = Reserved
-  [2] = DirectCall '#lib::B:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
-  [3] = Reserved
-}
-
-Class 'D', script = '#lib'
-    extends dart:core::Object*
-
-Field 'x', type = dynamic, getter = 'get:x', reflectable, final
-    value = null
-
-Field 'y', type = dynamic, getter = 'get:y', reflectable, final
-    value = null
-
-Function '', constructor, const, has-optional-positional-params, reflectable, debuggable
-    parameters [dynamic 'x', dynamic 'y'] (required: 1)
-    return-type #lib::D*
-
-Bytecode {
-  EntryOptional        2, 1, 0
-  LoadConstant         r2, CP#0
-  Frame                0
-  CheckStack           0
-  Push                 r0
-  Push                 r1
-  StoreFieldTOS        CP#1
-  Push                 r0
-  Push                 r2
-  StoreFieldTOS        CP#3
-  Push                 r0
-  DirectCall           CP#5, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef null
-  [1] = InstanceField #lib::D::x (field)
-  [2] = Reserved
-  [3] = InstanceField #lib::D::y (field)
-  [4] = Reserved
-  [5] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [6] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'E', script = '#lib'
-    type-params <dart:core::Object* T> (args: 1)
-    extends dart:core::Object*
-
-
-Function '', constructor, const, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type #lib::E < #lib::E::TypeParam/0* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'F', script = '#lib'
-    type-params <dart:core::Object* P, dart:core::Object* Q> (args: 3)
-    extends #lib::E < dart:core::Map < #lib::F::TypeParam/0*, #lib::F::TypeParam/1* >* >*
-
-
-Function '', constructor, const, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type #lib::F < dart:core::Map < #lib::F::TypeParam/0*, #lib::F::TypeParam/1* >*, #lib::F::TypeParam/0*, #lib::F::TypeParam/1* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::E:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-}
-]library #lib from "#lib" as #lib {
-
-  typedef GenericFunctionType = <X extends dart.core::Object* = dynamic>(X*) →* X*;
-  class A extends dart.core::Object /*isEnum*/  {
-    final field dart.core::int* index;
-    final field dart.core::String* _name;
-    static const field dart.core::List<#lib::A*>* values = #C13;
-    static const field #lib::A* elem1 = #C3;
-    static const field #lib::A* elem2 = #C6;
-    static const field #lib::A* elem3 = #C9;
-    static const field #lib::A* elem4 = #C12;
-    const constructor •(dart.core::int* index, dart.core::String* _name) → #lib::A*
-      : #lib::A::index = index, #lib::A::_name = _name, super dart.core::Object::•()
-      ;
-    method toString() → dart.core::String*
-      return this.{#lib::A::_name};
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class B extends dart.core::Object /*hasConstConstructor*/  {
-    final field dart.core::int* i;
-    const constructor •(dart.core::int* i) → #lib::B*
-      : #lib::B::i = i, super dart.core::Object::•()
-      ;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class C extends #lib::B /*hasConstConstructor*/  {
-    final field dart.core::int* j;
-    const constructor •(dart.core::int* a, dart.core::int* b, dart.core::int* c) → #lib::C*
-      : #lib::C::j = a.{dart.core::num::+}(b), super #lib::B::•(c.{dart.core::num::*}(5))
-      ;
-  }
-  class D extends dart.core::Object /*hasConstConstructor*/  {
-    final field dynamic x;
-    final field dynamic y;
-    const constructor •(dynamic x, [dynamic y = #C14]) → #lib::D*
-      : #lib::D::x = x, #lib::D::y = y, super dart.core::Object::•()
-      ;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class E<T extends dart.core::Object* = dynamic> extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •() → #lib::E<#lib::E::T*>*
-      : super dart.core::Object::•()
-      ;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class F<P extends dart.core::Object* = dynamic, Q extends dart.core::Object* = dynamic> extends #lib::E<dart.core::Map<#lib::F::P*, #lib::F::Q*>*> /*hasConstConstructor*/  {
-    const constructor •() → #lib::F<#lib::F::P*, #lib::F::Q*>*
-      : super #lib::E::•()
-      ;
-  }
-  static const field #lib::A* c1 = #C9;
-  static const field dart.core::String* c2 = #C15;
-  static const field dart.core::int* c3 = #C16;
-  static const field #lib::C* c4 = #C18;
-  static const field #lib::D* c5 = #C21;
-  static field dart.core::double* fieldWithDoubleLiteralInitializer = 1.0;
-  static method test_constants1() → void {
-    dart.core::print(#C9);
-    dart.core::print(#C15);
-    dart.core::print(#C16);
-    dart.core::print(#C18);
-    dart.core::print(#C21);
-  }
-  static method test_constants2() → void {
-    dart.core::print(42);
-    dart.core::print("foo");
-    dart.core::print(#C6);
-    dart.core::print(#C25);
-    dart.core::print(#C29);
-    dart.core::print(#C37);
-  }
-  static method test_list_literal(dart.core::int* a) → void {
-    dart.core::print(<dart.core::int*>[1, a, 3]);
-    dart.core::print(<dart.core::String*>["a", a.{dart.core::int::toString}(), "b"]);
-  }
-  static method test_map_literal<T extends dart.core::Object* = dynamic>(dart.core::int* a, dart.core::int* b, #lib::test_map_literal::T* c) → void {
-    dart.core::print(<dart.core::int*, dart.core::int*>{1: a, b: 2});
-    dart.core::print(<dart.core::String*, dart.core::int*>{"foo": a, b.{dart.core::int::toString}(): 3});
-    dart.core::print(<dart.core::String*, #lib::test_map_literal::T*>{});
-    dart.core::print(<#lib::test_map_literal::T*, dart.core::int*>{c: 4});
-  }
-  static method test_symbol() → void {
-    dart.core::print(#C38);
-    dart.core::print(#C39);
-  }
-  static method test_type_literal<T extends dart.core::Object* = dynamic>() → void {
-    dart.core::print(dart.core::String*);
-    dart.core::print(#lib::test_type_literal::T*);
-  }
-  static method testGenericConstInstance() → dynamic
-    return #C40;
-  static method testGenericFunctionTypeLiteral() → dynamic
-    return <X extends dart.core::Object* = dynamic>(X*) →* X*;
-  static method testFieldWithDoubleLiteralInitializer() → dynamic
-    return #lib::fieldWithDoubleLiteralInitializer;
-  static method main() → dynamic {}
-}
-constants  {
-  #C1 = 0
-  #C2 = "A.elem1"
-  #C3 = #lib::A {index:#C1, _name:#C2}
-  #C4 = 1
-  #C5 = "A.elem2"
-  #C6 = #lib::A {index:#C4, _name:#C5}
-  #C7 = 2
-  #C8 = "A.elem3"
-  #C9 = #lib::A {index:#C7, _name:#C8}
-  #C10 = 3
-  #C11 = "A.elem4"
-  #C12 = #lib::A {index:#C10, _name:#C11}
-  #C13 = <#lib::A*>[#C3, #C6, #C9, #C12]
-  #C14 = null
-  #C15 = "hello!"
-  #C16 = 6
-  #C17 = 15
-  #C18 = #lib::C {j:#C10, i:#C17}
-  #C19 = 4
-  #C20 = #lib::B {i:#C19}
-  #C21 = #lib::D {x:#C20, y:#C14}
-  #C22 = 42
-  #C23 = "foo"
-  #C24 = TypeLiteralConstant(dart.core::int*)
-  #C25 = <dart.core::Object*>[#C22, #C23, #C24]
-  #C26 = "E2"
-  #C27 = "E4"
-  #C28 = <dynamic>[#C26, #C6, #C27, #C12]
-  #C29 = dart.core::_ImmutableMap<dart.core::String*, #lib::A*> {_kvPairs:#C28}
-  #C30 = 9
-  #C31 = 30
-  #C32 = #lib::C {j:#C30, i:#C31}
-  #C33 = "bar"
-  #C34 = #lib::B {i:#C16}
-  #C35 = <dynamic>[#C23, #C22, #C33, #C34]
-  #C36 = dart.core::_ImmutableMap<dart.core::String*, dart.core::Object*> {_kvPairs:#C35}
-  #C37 = #lib::D {x:#C32, y:#C36}
-  #C38 = #test_symbol
-  #C39 = ##lib::_private_symbol
-  #C40 = #lib::F<dart.core::int*, dart.core::String*> {}
-}
diff --git a/pkg/vm/testcases/bytecode/loops.dart b/pkg/vm/testcases/bytecode/loops.dart
deleted file mode 100644
index 4d9dd1b..0000000
--- a/pkg/vm/testcases/bytecode/loops.dart
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-int test_for(List<int> list) {
-  int sum = 0;
-  for (int i = 0; i < list.length; i++) {
-    sum = sum + list[i];
-  }
-  return sum;
-}
-
-int test_for_break(List<int> list) {
-  int sum = 0;
-  for (int i = 0; i >= 0; i++) {
-    if (i >= list.length) {
-      break;
-    }
-    sum = sum + list[i];
-  }
-  return sum;
-}
-
-int test_for_continue(List<int> list) {
-  int sum = 0;
-  for (int i = -100; i < list.length; i++) {
-    if (i < 0) {
-      continue;
-    }
-    sum = sum + list[i];
-  }
-  return sum;
-}
-
-int test_while(List<int> list) {
-  int sum = 0;
-  int i = 0;
-  while (i < list.length) {
-    sum = sum + list[i++];
-  }
-  return sum;
-}
-
-int test_do_while(List<int> list) {
-  int sum = 0;
-  int i = 0;
-  do {
-    sum = sum + list[i];
-    ++i;
-  } while (i < list.length);
-  return sum;
-}
-
-int test_for_in(List<int> list) {
-  int sum = 0;
-  for (var e in list) {
-    sum = sum + e;
-  }
-  return sum;
-}
-
-int test_for_in_with_outer_var(List<int> list) {
-  int sum = 0;
-  int e = 42;
-  for (e in list) {
-    sum = sum + e;
-  }
-  return sum;
-}
-
-main() {}
diff --git a/pkg/vm/testcases/bytecode/loops.dart.expect b/pkg/vm/testcases/bytecode/loops.dart.expect
deleted file mode 100644
index 11d1d08..0000000
--- a/pkg/vm/testcases/bytecode/loops.dart.expect
+++ /dev/null
@@ -1,429 +0,0 @@
-main = #lib::main;
- [@vm.bytecode=
-BytecodeMetadata {
-Bytecode (version: stable)
-Main library: #lib
-Library '#lib'
-    name '#lib'
-    script '#lib'
-
-Class '', script = '#lib'
-
-
-Function 'test_for', static, reflectable, debuggable
-    parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                2
-  CheckStack           0
-  PushInt              0
-  PopLocal             r0
-  PushInt              0
-  PopLocal             r1
-L2:
-  CheckStack           1
-  Push                 r1
-  Push                 FP[-5]
-  InterfaceCall        CP#0, 1
-  InterfaceCall        CP#2, 2
-  AssertBoolean        0
-  JumpIfFalse          L1
-  Push                 r0
-  Push                 FP[-5]
-  Push                 r1
-  InterfaceCall        CP#4, 2
-  AddInt
-  PopLocal             r0
-  Push                 r1
-  PushInt              1
-  AddInt
-  StoreLocal           r1
-  Drop1
-  Jump                 L2
-L1:
-  Push                 r0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = InterfaceCall 'dart:core::num::<', ArgDesc num-args 2, num-type-args 0, names []
-  [3] = Reserved
-  [4] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
-  [5] = Reserved
-}
-
-
-Function 'test_for_break', static, reflectable, debuggable
-    parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                2
-  CheckStack           0
-  PushInt              0
-  PopLocal             r0
-  PushInt              0
-  PopLocal             r1
-L3:
-  CheckStack           1
-  Push                 r1
-  PushInt              0
-  CompareIntGe
-  JumpIfFalse          L1
-  Push                 r1
-  Push                 FP[-5]
-  InterfaceCall        CP#0, 1
-  InterfaceCall        CP#2, 2
-  AssertBoolean        0
-  JumpIfFalse          L2
-  Jump                 L1
-L2:
-  Push                 r0
-  Push                 FP[-5]
-  Push                 r1
-  InterfaceCall        CP#4, 2
-  AddInt
-  PopLocal             r0
-  Push                 r1
-  PushInt              1
-  AddInt
-  StoreLocal           r1
-  Drop1
-  Jump                 L3
-L1:
-  Push                 r0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = InterfaceCall 'dart:core::num::>=', ArgDesc num-args 2, num-type-args 0, names []
-  [3] = Reserved
-  [4] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
-  [5] = Reserved
-}
-
-
-Function 'test_for_continue', static, reflectable, debuggable
-    parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                2
-  CheckStack           0
-  PushInt              0
-  PopLocal             r0
-  PushInt              100
-  NegateInt
-  PopLocal             r1
-L4:
-  CheckStack           1
-  Push                 r1
-  Push                 FP[-5]
-  InterfaceCall        CP#0, 1
-  InterfaceCall        CP#2, 2
-  AssertBoolean        0
-  JumpIfFalse          L1
-  Push                 r1
-  PushInt              0
-  CompareIntLt
-  JumpIfFalse          L2
-  Jump                 L3
-L2:
-  Push                 r0
-  Push                 FP[-5]
-  Push                 r1
-  InterfaceCall        CP#4, 2
-  AddInt
-  PopLocal             r0
-L3:
-  Push                 r1
-  PushInt              1
-  AddInt
-  StoreLocal           r1
-  Drop1
-  Jump                 L4
-L1:
-  Push                 r0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = InterfaceCall 'dart:core::num::<', ArgDesc num-args 2, num-type-args 0, names []
-  [3] = Reserved
-  [4] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
-  [5] = Reserved
-}
-
-
-Function 'test_while', static, reflectable, debuggable
-    parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                4
-  CheckStack           0
-  PushInt              0
-  PopLocal             r0
-  PushInt              0
-  PopLocal             r1
-L2:
-  CheckStack           1
-  Push                 r1
-  Push                 FP[-5]
-  InterfaceCall        CP#0, 1
-  InterfaceCall        CP#2, 2
-  AssertBoolean        0
-  JumpIfFalse          L1
-  Push                 r0
-  Push                 FP[-5]
-  Push                 r1
-  PopLocal             r2
-  Push                 r2
-  PushInt              1
-  AddInt
-  StoreLocal           r1
-  PopLocal             r3
-  Push                 r2
-  InterfaceCall        CP#4, 2
-  AddInt
-  PopLocal             r0
-  Jump                 L2
-L1:
-  Push                 r0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = InterfaceCall 'dart:core::num::<', ArgDesc num-args 2, num-type-args 0, names []
-  [3] = Reserved
-  [4] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
-  [5] = Reserved
-}
-
-
-Function 'test_do_while', static, reflectable, debuggable
-    parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                2
-  CheckStack           0
-  PushInt              0
-  PopLocal             r0
-  PushInt              0
-  PopLocal             r1
-L1:
-  CheckStack           1
-  Push                 r0
-  Push                 FP[-5]
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  AddInt
-  PopLocal             r0
-  Push                 r1
-  PushInt              1
-  AddInt
-  PopLocal             r1
-  Push                 r1
-  Push                 FP[-5]
-  InterfaceCall        CP#2, 1
-  InterfaceCall        CP#4, 2
-  AssertBoolean        0
-  JumpIfTrue           L1
-  Push                 r0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
-  [1] = Reserved
-  [2] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-  [4] = InterfaceCall 'dart:core::num::<', ArgDesc num-args 2, num-type-args 0, names []
-  [5] = Reserved
-}
-
-
-Function 'test_for_in', static, reflectable, debuggable
-    parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                3
-  CheckStack           0
-  PushInt              0
-  PopLocal             r0
-  Push                 FP[-5]
-  InterfaceCall        CP#0, 1
-  PopLocal             r1
-L2:
-  CheckStack           1
-  Push                 r1
-  InterfaceCall        CP#2, 1
-  AssertBoolean        0
-  JumpIfFalse          L1
-  Push                 r1
-  InterfaceCall        CP#4, 1
-  PopLocal             r2
-  Push                 r0
-  Push                 r2
-  AddInt
-  PopLocal             r0
-  Jump                 L2
-L1:
-  Push                 r0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall 'dart:core::Iterable::get:iterator', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = InterfaceCall 'dart:core::Iterator::moveNext', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-  [4] = InterfaceCall 'dart:core::Iterator::get:current', ArgDesc num-args 1, num-type-args 0, names []
-  [5] = Reserved
-}
-
-
-Function 'test_for_in_with_outer_var', static, reflectable, debuggable
-    parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                4
-  CheckStack           0
-  PushInt              0
-  PopLocal             r0
-  PushInt              42
-  PopLocal             r1
-  Push                 FP[-5]
-  InterfaceCall        CP#0, 1
-  PopLocal             r2
-L2:
-  CheckStack           1
-  Push                 r2
-  InterfaceCall        CP#2, 1
-  AssertBoolean        0
-  JumpIfFalse          L1
-  Push                 r2
-  InterfaceCall        CP#4, 1
-  PopLocal             r3
-  Push                 r3
-  PopLocal             r1
-  Push                 r0
-  Push                 r1
-  AddInt
-  PopLocal             r0
-  Jump                 L2
-L1:
-  Push                 r0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall 'dart:core::Iterable::get:iterator', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-  [2] = InterfaceCall 'dart:core::Iterator::moveNext', ArgDesc num-args 1, num-type-args 0, names []
-  [3] = Reserved
-  [4] = InterfaceCall 'dart:core::Iterator::get:current', ArgDesc num-args 1, num-type-args 0, names []
-  [5] = Reserved
-}
-
-
-Function 'main', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-}
-
-
-}
-]library #lib from "#lib" as #lib {
-
-  static method test_for(dart.core::List<dart.core::int*>* list) → dart.core::int* {
-    dart.core::int* sum = 0;
-    for (dart.core::int* i = 0; i.{dart.core::num::<}(list.{dart.core::List::length}); i = i.{dart.core::num::+}(1)) {
-      sum = sum.{dart.core::num::+}(list.{dart.core::List::[]}(i));
-    }
-    return sum;
-  }
-  static method test_for_break(dart.core::List<dart.core::int*>* list) → dart.core::int* {
-    dart.core::int* sum = 0;
-    #L1:
-    for (dart.core::int* i = 0; i.{dart.core::num::>=}(0); i = i.{dart.core::num::+}(1)) {
-      if(i.{dart.core::num::>=}(list.{dart.core::List::length})) {
-        break #L1;
-      }
-      sum = sum.{dart.core::num::+}(list.{dart.core::List::[]}(i));
-    }
-    return sum;
-  }
-  static method test_for_continue(dart.core::List<dart.core::int*>* list) → dart.core::int* {
-    dart.core::int* sum = 0;
-    for (dart.core::int* i = 100.{dart.core::int::unary-}(); i.{dart.core::num::<}(list.{dart.core::List::length}); i = i.{dart.core::num::+}(1))
-      #L2:
-      {
-        if(i.{dart.core::num::<}(0)) {
-          break #L2;
-        }
-        sum = sum.{dart.core::num::+}(list.{dart.core::List::[]}(i));
-      }
-    return sum;
-  }
-  static method test_while(dart.core::List<dart.core::int*>* list) → dart.core::int* {
-    dart.core::int* sum = 0;
-    dart.core::int* i = 0;
-    while (i.{dart.core::num::<}(list.{dart.core::List::length})) {
-      sum = sum.{dart.core::num::+}(list.{dart.core::List::[]}(let final dart.core::int* #t1 = i in let final dart.core::int* #t2 = i = #t1.{dart.core::num::+}(1) in #t1));
-    }
-    return sum;
-  }
-  static method test_do_while(dart.core::List<dart.core::int*>* list) → dart.core::int* {
-    dart.core::int* sum = 0;
-    dart.core::int* i = 0;
-    do {
-      sum = sum.{dart.core::num::+}(list.{dart.core::List::[]}(i));
-      i = i.{dart.core::num::+}(1);
-    }
-    while (i.{dart.core::num::<}(list.{dart.core::List::length}))
-    return sum;
-  }
-  static method test_for_in(dart.core::List<dart.core::int*>* list) → dart.core::int* {
-    dart.core::int* sum = 0;
-    {
-      dart.core::Iterator<dart.core::int*>* :sync-for-iterator = list.{dart.core::Iterable::iterator};
-      for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(); ) {
-        dart.core::int* e = :sync-for-iterator.{dart.core::Iterator::current};
-        {
-          sum = sum.{dart.core::num::+}(e);
-        }
-      }
-    }
-    return sum;
-  }
-  static method test_for_in_with_outer_var(dart.core::List<dart.core::int*>* list) → dart.core::int* {
-    dart.core::int* sum = 0;
-    dart.core::int* e = 42;
-    {
-      dart.core::Iterator<dart.core::int*>* :sync-for-iterator = list.{dart.core::Iterable::iterator};
-      for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(); ) {
-        final dart.core::int* #t3 = :sync-for-iterator.{dart.core::Iterator::current};
-        {
-          e = #t3;
-          sum = sum.{dart.core::num::+}(e);
-        }
-      }
-    }
-    return sum;
-  }
-  static method main() → dynamic {}
-}
diff --git a/pkg/vm/testcases/bytecode/optional_params.dart b/pkg/vm/testcases/bytecode/optional_params.dart
deleted file mode 100644
index 908f596..0000000
--- a/pkg/vm/testcases/bytecode/optional_params.dart
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-void foo1(x, [a = 'default_a', b = 'default_b']) {
-  print('x = $x');
-  print('a = $a');
-  print('b = $b');
-}
-
-void foo2(y, z, {c = 'default_c', a = 42, b = const ['default_b']}) {
-  print('y = $y');
-  print('z = $z');
-  print('a = $a');
-  print('b = $b');
-  print('c = $c');
-}
-
-void foo3<P, Q>(z, y, {bool a: false, Map<P, Q> b}) {
-  print(P);
-  print(y);
-  print(b);
-}
-
-main() {
-  foo1('fixed_x', 'concrete_a');
-  foo2('fixed_y', 'fixed_z', a: 'concrete_a');
-}
diff --git a/pkg/vm/testcases/bytecode/optional_params.dart.expect b/pkg/vm/testcases/bytecode/optional_params.dart.expect
deleted file mode 100644
index 5e959bc..0000000
--- a/pkg/vm/testcases/bytecode/optional_params.dart.expect
+++ /dev/null
@@ -1,298 +0,0 @@
-main = #lib::main;
- [@vm.bytecode=
-BytecodeMetadata {
-Bytecode (version: stable)
-Main library: #lib
-Library '#lib'
-    name '#lib'
-    script '#lib'
-
-Class '', script = '#lib'
-
-
-Function 'foo1', static, has-optional-positional-params, reflectable, debuggable
-    parameters [dynamic 'x', dynamic 'a', dynamic 'b'] (required: 1)
-    return-type void
-
-Bytecode {
-  EntryOptional        1, 2, 0
-  LoadConstant         r1, CP#0
-  LoadConstant         r2, CP#1
-  Frame                1
-  CheckStack           0
-  PushNull
-  PushInt              2
-  CreateArrayTOS
-  StoreLocal           r3
-  Push                 r3
-  PushInt              0
-  PushConstant         CP#2
-  StoreIndexedTOS
-  Push                 r3
-  PushInt              1
-  Push                 r0
-  StoreIndexedTOS
-  DirectCall           CP#3, 1
-  DirectCall           CP#5, 1
-  Drop1
-  PushNull
-  PushInt              2
-  CreateArrayTOS
-  StoreLocal           r3
-  Push                 r3
-  PushInt              0
-  PushConstant         CP#7
-  StoreIndexedTOS
-  Push                 r3
-  PushInt              1
-  Push                 r1
-  StoreIndexedTOS
-  DirectCall           CP#3, 1
-  DirectCall           CP#5, 1
-  Drop1
-  PushNull
-  PushInt              2
-  CreateArrayTOS
-  StoreLocal           r3
-  Push                 r3
-  PushInt              0
-  PushConstant         CP#8
-  StoreIndexedTOS
-  Push                 r3
-  PushInt              1
-  Push                 r2
-  StoreIndexedTOS
-  DirectCall           CP#3, 1
-  DirectCall           CP#5, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef 'default_a'
-  [1] = ObjectRef 'default_b'
-  [2] = ObjectRef 'x = '
-  [3] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
-  [4] = Reserved
-  [5] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [6] = Reserved
-  [7] = ObjectRef 'a = '
-  [8] = ObjectRef 'b = '
-}
-
-
-Function 'foo2', static, has-optional-named-params, reflectable, debuggable
-    parameters [dynamic 'y', dynamic 'z', dynamic 'c', dynamic 'a', dynamic 'b'] (required: 2)
-    return-type void
-
-Bytecode {
-  EntryOptional        2, 0, 3
-  LoadConstant         r2, CP#0
-  LoadConstant         r2, CP#1
-  LoadConstant         r3, CP#2
-  LoadConstant         r3, CP#3
-  LoadConstant         r4, CP#4
-  LoadConstant         r4, CP#5
-  Frame                1
-  CheckStack           0
-  PushNull
-  PushInt              2
-  CreateArrayTOS
-  StoreLocal           r5
-  Push                 r5
-  PushInt              0
-  PushConstant         CP#6
-  StoreIndexedTOS
-  Push                 r5
-  PushInt              1
-  Push                 r0
-  StoreIndexedTOS
-  DirectCall           CP#7, 1
-  DirectCall           CP#9, 1
-  Drop1
-  PushNull
-  PushInt              2
-  CreateArrayTOS
-  StoreLocal           r5
-  Push                 r5
-  PushInt              0
-  PushConstant         CP#11
-  StoreIndexedTOS
-  Push                 r5
-  PushInt              1
-  Push                 r1
-  StoreIndexedTOS
-  DirectCall           CP#7, 1
-  DirectCall           CP#9, 1
-  Drop1
-  PushNull
-  PushInt              2
-  CreateArrayTOS
-  StoreLocal           r5
-  Push                 r5
-  PushInt              0
-  PushConstant         CP#12
-  StoreIndexedTOS
-  Push                 r5
-  PushInt              1
-  Push                 r2
-  StoreIndexedTOS
-  DirectCall           CP#7, 1
-  DirectCall           CP#9, 1
-  Drop1
-  PushNull
-  PushInt              2
-  CreateArrayTOS
-  StoreLocal           r5
-  Push                 r5
-  PushInt              0
-  PushConstant         CP#13
-  StoreIndexedTOS
-  Push                 r5
-  PushInt              1
-  Push                 r3
-  StoreIndexedTOS
-  DirectCall           CP#7, 1
-  DirectCall           CP#9, 1
-  Drop1
-  PushNull
-  PushInt              2
-  CreateArrayTOS
-  StoreLocal           r5
-  Push                 r5
-  PushInt              0
-  PushConstant         CP#14
-  StoreIndexedTOS
-  Push                 r5
-  PushInt              1
-  Push                 r4
-  StoreIndexedTOS
-  DirectCall           CP#7, 1
-  DirectCall           CP#9, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef 'a'
-  [1] = ObjectRef const 42
-  [2] = ObjectRef 'b'
-  [3] = ObjectRef const <dart:core::String*> ['default_b']
-  [4] = ObjectRef 'c'
-  [5] = ObjectRef 'default_c'
-  [6] = ObjectRef 'y = '
-  [7] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
-  [8] = Reserved
-  [9] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [10] = Reserved
-  [11] = ObjectRef 'z = '
-  [12] = ObjectRef 'a = '
-  [13] = ObjectRef 'b = '
-  [14] = ObjectRef 'c = '
-}
-
-
-Function 'foo3', static, has-optional-named-params, reflectable, debuggable
-    type-params <dart:core::Object* P, dart:core::Object* Q>
-    parameters [dynamic 'z', dynamic 'y', dart:core::bool* 'a', dart:core::Map < #lib::foo3::TypeParam/0*, #lib::foo3::TypeParam/1* >* 'b'] (required: 2)
-    return-type void
-
-Bytecode {
-  EntryOptional        2, 0, 2
-  LoadConstant         r2, CP#0
-  LoadConstant         r2, CP#1
-  LoadConstant         r3, CP#2
-  LoadConstant         r3, CP#3
-  Frame                1
-  CheckFunctionTypeArgs 2, r4
-  CheckStack           0
-  PushNull
-  Push                 r4
-  InstantiateType      CP#4
-  DirectCall           CP#5, 1
-  Drop1
-  Push                 r1
-  DirectCall           CP#5, 1
-  Drop1
-  Push                 r3
-  DirectCall           CP#5, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef 'a'
-  [1] = ObjectRef const false
-  [2] = ObjectRef 'b'
-  [3] = ObjectRef null
-  [4] = Type #lib::foo3::TypeParam/0*
-  [5] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [6] = Reserved
-}
-
-
-Function 'main', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushConstant         CP#0
-  PushConstant         CP#1
-  DirectCall           CP#2, 2
-  Drop1
-  PushConstant         CP#4
-  PushConstant         CP#5
-  PushConstant         CP#1
-  DirectCall           CP#6, 3
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef 'fixed_x'
-  [1] = ObjectRef 'concrete_a'
-  [2] = DirectCall '#lib::foo1', ArgDesc num-args 2, num-type-args 0, names []
-  [3] = Reserved
-  [4] = ObjectRef 'fixed_y'
-  [5] = ObjectRef 'fixed_z'
-  [6] = DirectCall '#lib::foo2', ArgDesc num-args 3, num-type-args 0, names ['a']
-  [7] = Reserved
-}
-
-
-}
-]library #lib from "#lib" as #lib {
-
-  static method foo1(dynamic x, [dynamic a = #C1, dynamic b = #C2]) → void {
-    dart.core::print("x = ${x}");
-    dart.core::print("a = ${a}");
-    dart.core::print("b = ${b}");
-  }
-  static method foo2(dynamic y, dynamic z, {dynamic c = #C3, dynamic a = #C4, dynamic b = #C5}) → void {
-    dart.core::print("y = ${y}");
-    dart.core::print("z = ${z}");
-    dart.core::print("a = ${a}");
-    dart.core::print("b = ${b}");
-    dart.core::print("c = ${c}");
-  }
-  static method foo3<P extends dart.core::Object* = dynamic, Q extends dart.core::Object* = dynamic>(dynamic z, dynamic y, {dart.core::bool* a = #C6, dart.core::Map<#lib::foo3::P*, #lib::foo3::Q*>* b = #C7}) → void {
-    dart.core::print(#lib::foo3::P*);
-    dart.core::print(y);
-    dart.core::print(b);
-  }
-  static method main() → dynamic {
-    #lib::foo1("fixed_x", "concrete_a");
-    #lib::foo2("fixed_y", "fixed_z", a: "concrete_a");
-  }
-}
-constants  {
-  #C1 = "default_a"
-  #C2 = "default_b"
-  #C3 = "default_c"
-  #C4 = 42
-  #C5 = <dart.core::String*>[#C2]
-  #C6 = false
-  #C7 = null
-}
diff --git a/pkg/vm/testcases/bytecode/super_calls.dart b/pkg/vm/testcases/bytecode/super_calls.dart
deleted file mode 100644
index 8bd86b7..0000000
--- a/pkg/vm/testcases/bytecode/super_calls.dart
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Tests various super-calls.
-// Class B requires super-mixin semantics (used in Flutter).
-
-class Base1 {
-  void foo<T>(T a1, int a2) {}
-  get bar => 42;
-  set bazz(int x) {}
-}
-
-class A extends Base1 {
-  testSuperCall(int x) => super.foo<String>('a1', 2);
-  testSuperTearOff() => super.foo;
-  testSuperGet() => super.bar;
-  testSuperCallViaGetter() => super.bar<int>('param');
-  testSuperSet() {
-    super.bazz = 3;
-  }
-}
-
-abstract class Base2 {
-  void foo<T>(String a1, T a2, int a3);
-  get bar;
-  set bazz(int x);
-}
-
-abstract class B extends Base2 {
-  testSuperCall(int x) => super.foo<double>('a1', 3.14, 5);
-  testSuperTearOff() => super.foo;
-  testSuperGet() => super.bar;
-  testSuperCallViaGetter() => super.bar<int>('param');
-  testSuperSet() {
-    super.bazz = 3;
-  }
-}
-
-main() {}
diff --git a/pkg/vm/testcases/bytecode/super_calls.dart.expect b/pkg/vm/testcases/bytecode/super_calls.dart.expect
deleted file mode 100644
index 2f8ccc5..0000000
--- a/pkg/vm/testcases/bytecode/super_calls.dart.expect
+++ /dev/null
@@ -1,627 +0,0 @@
-main = #lib::main;
- [@vm.bytecode=
-BytecodeMetadata {
-Bytecode (version: stable)
-Main library: #lib
-Library '#lib'
-    name '#lib'
-    script '#lib'
-
-Class '', script = '#lib'
-
-
-Function 'main', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-}
-
-Class 'Base1', script = '#lib'
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::Base1*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'foo', reflectable, debuggable
-    type-params <dart:core::Object* T>
-    parameters [#lib::Base1::foo::TypeParam/0* 'a1', dart:core::int* 'a2'] (required: 2)
-    return-type void
-
-Bytecode {
-  Entry                1
-  CheckFunctionTypeArgs 1, r0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-}
-
-
-Function 'get:bar', getter, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushInt              42
-  ReturnTOS
-}
-ConstantPool {
-}
-
-
-Function 'set:bazz', setter, reflectable, debuggable
-    parameters [dart:core::int* 'x'] (required: 1)
-    return-type void
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'A', script = '#lib'
-    extends #lib::Base1*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::A*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::Base1:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'testSuperCall', reflectable, debuggable
-    parameters [dart:core::int* 'x'] (required: 1)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  PushConstant         CP#0
-  Push                 FP[-6]
-  PushConstant         CP#1
-  PushInt              2
-  UncheckedDirectCall  CP#2, 4
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef < dart:core::String* >
-  [1] = ObjectRef 'a1'
-  [2] = DirectCall '#lib::Base1::foo', ArgDesc num-args 3, num-type-args 1, names []
-  [3] = Reserved
-}
-
-
-Function 'testSuperTearOff', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::Base1::get:foo', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'testSuperGet', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::Base1::get:bar', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'testSuperCallViaGetter', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  PushConstant         CP#0
-  Push                 FP[-5]
-  DirectCall           CP#1, 1
-  PushConstant         CP#3
-  DynamicCall          CP#4, 3
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef < dart:core::int* >
-  [1] = DirectCall '#lib::Base1::get:bar', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-  [3] = ObjectRef 'param'
-  [4] = DynamicCall 'call', ArgDesc num-args 2, num-type-args 1, names []
-  [5] = Reserved
-}
-
-
-Function 'testSuperSet', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-5]
-  PushInt              3
-  UncheckedDirectCall  CP#0, 2
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::Base1::set:bazz', ArgDesc num-args 2, num-type-args 0, names []
-  [1] = Reserved
-}
-
-Class 'Base2', script = '#lib', abstract
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::Base2*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'foo', abstract, reflectable, debuggable
-    type-params <dart:core::Object* T>
-    parameters [dart:core::String* 'a1', #lib::Base2::foo::TypeParam/0* 'a2', dart:core::int* 'a3'] (required: 3)
-    return-type void
-
-Function 'get:bar', getter, abstract, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Function 'set:bazz', setter, abstract, reflectable, debuggable
-    parameters [dart:core::int* 'x'] (required: 1)
-    return-type void
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'B', script = '#lib', abstract
-    extends #lib::Base2*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::B*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::Base2:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'testSuperCall', reflectable, debuggable
-    parameters [dart:core::int* 'x'] (required: 1)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-6]
-  PushConstant         CP#1
-  PushConstant         CP#0
-  PushConstant         CP#2
-  PushInt              5
-  CreateArrayTOS
-  StoreLocal           r0
-  Push                 r0
-  PushInt              0
-  PushConstant         CP#3
-  StoreIndexedTOS
-  Push                 r0
-  PushInt              1
-  Push                 FP[-6]
-  StoreIndexedTOS
-  Push                 r0
-  PushInt              2
-  PushConstant         CP#4
-  StoreIndexedTOS
-  Push                 r0
-  PushInt              3
-  PushConstant         CP#5
-  StoreIndexedTOS
-  Push                 r0
-  PushInt              4
-  PushInt              5
-  StoreIndexedTOS
-  PushTrue
-  DirectCall           CP#6, 4
-  DirectCall           CP#8, 2
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef ArgDesc num-args 4, num-type-args 1, names []
-  [1] = ObjectRef 'foo'
-  [2] = ObjectRef < dynamic >
-  [3] = ObjectRef < dart:core::double* >
-  [4] = ObjectRef 'a1'
-  [5] = ObjectRef const 3.14
-  [6] = DirectCall 'dart:core::_InvocationMirror::_allocateInvocationMirror', ArgDesc num-args 4, num-type-args 0, names []
-  [7] = Reserved
-  [8] = DirectCall 'dart:core::Object::noSuchMethod', ArgDesc num-args 2, num-type-args 0, names []
-  [9] = Reserved
-}
-
-
-Function 'testSuperTearOff', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-5]
-  PushConstant         CP#1
-  PushConstant         CP#0
-  PushConstant         CP#2
-  PushInt              1
-  CreateArrayTOS
-  StoreLocal           r0
-  Push                 r0
-  PushInt              0
-  Push                 FP[-5]
-  StoreIndexedTOS
-  PushTrue
-  DirectCall           CP#3, 4
-  DirectCall           CP#5, 2
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
-  [1] = ObjectRef 'foo'
-  [2] = ObjectRef < dynamic >
-  [3] = DirectCall 'dart:core::_InvocationMirror::_allocateInvocationMirror', ArgDesc num-args 4, num-type-args 0, names []
-  [4] = Reserved
-  [5] = DirectCall 'dart:core::Object::noSuchMethod', ArgDesc num-args 2, num-type-args 0, names []
-  [6] = Reserved
-}
-
-
-Function 'testSuperGet', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-5]
-  PushConstant         CP#1
-  PushConstant         CP#0
-  PushConstant         CP#2
-  PushInt              1
-  CreateArrayTOS
-  StoreLocal           r0
-  Push                 r0
-  PushInt              0
-  Push                 FP[-5]
-  StoreIndexedTOS
-  PushTrue
-  DirectCall           CP#3, 4
-  DirectCall           CP#5, 2
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
-  [1] = ObjectRef 'bar'
-  [2] = ObjectRef < dynamic >
-  [3] = DirectCall 'dart:core::_InvocationMirror::_allocateInvocationMirror', ArgDesc num-args 4, num-type-args 0, names []
-  [4] = Reserved
-  [5] = DirectCall 'dart:core::Object::noSuchMethod', ArgDesc num-args 2, num-type-args 0, names []
-  [6] = Reserved
-}
-
-
-Function 'testSuperCallViaGetter', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  PushConstant         CP#0
-  Push                 FP[-5]
-  PushConstant         CP#2
-  PushConstant         CP#1
-  PushConstant         CP#3
-  PushInt              1
-  CreateArrayTOS
-  StoreLocal           r0
-  Push                 r0
-  PushInt              0
-  Push                 FP[-5]
-  StoreIndexedTOS
-  PushTrue
-  DirectCall           CP#4, 4
-  DirectCall           CP#6, 2
-  PushConstant         CP#8
-  DynamicCall          CP#9, 3
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef < dart:core::int* >
-  [1] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
-  [2] = ObjectRef 'bar'
-  [3] = ObjectRef < dynamic >
-  [4] = DirectCall 'dart:core::_InvocationMirror::_allocateInvocationMirror', ArgDesc num-args 4, num-type-args 0, names []
-  [5] = Reserved
-  [6] = DirectCall 'dart:core::Object::noSuchMethod', ArgDesc num-args 2, num-type-args 0, names []
-  [7] = Reserved
-  [8] = ObjectRef 'param'
-  [9] = DynamicCall 'call', ArgDesc num-args 2, num-type-args 1, names []
-  [10] = Reserved
-}
-
-
-Function 'testSuperSet', reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-5]
-  PushConstant         CP#1
-  PushConstant         CP#0
-  PushConstant         CP#2
-  PushInt              2
-  CreateArrayTOS
-  StoreLocal           r0
-  Push                 r0
-  PushInt              0
-  Push                 FP[-5]
-  StoreIndexedTOS
-  Push                 r0
-  PushInt              1
-  PushInt              3
-  StoreIndexedTOS
-  PushTrue
-  DirectCall           CP#3, 4
-  DirectCall           CP#5, 2
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
-  [1] = ObjectRef 'bazz'
-  [2] = ObjectRef < dynamic >
-  [3] = DirectCall 'dart:core::_InvocationMirror::_allocateInvocationMirror', ArgDesc num-args 4, num-type-args 0, names []
-  [4] = Reserved
-  [5] = DirectCall 'dart:core::Object::noSuchMethod', ArgDesc num-args 2, num-type-args 0, names []
-  [6] = Reserved
-}
-
-
-}
-]library #lib from "#lib" as #lib {
-
-  class Base1 extends dart.core::Object {
-    synthetic constructor •() → #lib::Base1*
-      : super dart.core::Object::•()
-      ;
-    method foo<T extends dart.core::Object* = dynamic>(#lib::Base1::foo::T* a1, dart.core::int* a2) → void {}
-    get bar() → dynamic
-      return 42;
-    set bazz(dart.core::int* x) → void {}
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class A extends #lib::Base1 {
-    synthetic constructor •() → #lib::A*
-      : super #lib::Base1::•()
-      ;
-    method testSuperCall(dart.core::int* x) → dynamic
-      return super.{#lib::Base1::foo}<dart.core::String*>("a1", 2);
-    method testSuperTearOff() → dynamic
-      return super.{#lib::Base1::foo};
-    method testSuperGet() → dynamic
-      return super.{#lib::Base1::bar};
-    method testSuperCallViaGetter() → dynamic
-      return [@vm.call-site-attributes.metadata=receiverType:dynamic] super.{#lib::Base1::bar}.call<dart.core::int*>("param");
-    method testSuperSet() → dynamic {
-      super.{#lib::Base1::bazz} = 3;
-    }
-  }
-  abstract class Base2 extends dart.core::Object {
-    synthetic constructor •() → #lib::Base2*
-      : super dart.core::Object::•()
-      ;
-    abstract method foo<T extends dart.core::Object* = dynamic>(dart.core::String* a1, #lib::Base2::foo::T* a2, dart.core::int* a3) → void;
-    abstract get bar() → dynamic;
-    abstract set bazz(dart.core::int* x) → void;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  abstract class B extends #lib::Base2 {
-    synthetic constructor •() → #lib::B*
-      : super #lib::Base2::•()
-      ;
-    method testSuperCall(dart.core::int* x) → dynamic
-      return super.{#lib::Base2::foo}<dart.core::double*>("a1", 3.14, 5);
-    method testSuperTearOff() → dynamic
-      return super.{#lib::Base2::foo};
-    method testSuperGet() → dynamic
-      return super.{#lib::Base2::bar};
-    method testSuperCallViaGetter() → dynamic
-      return [@vm.call-site-attributes.metadata=receiverType:dynamic] super.{#lib::Base2::bar}.call<dart.core::int*>("param");
-    method testSuperSet() → dynamic {
-      super.{#lib::Base2::bazz} = 3;
-    }
-  }
-  static method main() → dynamic {}
-}
diff --git a/pkg/vm/testcases/bytecode/switch.dart b/pkg/vm/testcases/bytecode/switch.dart
deleted file mode 100644
index da20adb..0000000
--- a/pkg/vm/testcases/bytecode/switch.dart
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-int foo1(int x) {
-  int y;
-  switch (x) {
-    case 1:
-      y = 11;
-      break;
-    case 2:
-      y = 22;
-      break;
-    case 3:
-      y = 33;
-      break;
-  }
-  return y;
-}
-
-int foo2(int x) {
-  int y;
-  switch (x) {
-    case 1:
-    case 2:
-    case 3:
-      y = 11;
-      break;
-    case 4:
-    case 5:
-    case 6:
-      y = 22;
-      break;
-    default:
-      y = 33;
-  }
-  return y;
-}
-
-int foo3(int x) {
-  int y;
-  switch (x) {
-    case 1:
-    case 2:
-    case 3:
-      y = 11;
-      continue L5;
-    case 4:
-    L5:
-    case 5:
-    case 6:
-      y = 22;
-      return 42;
-    default:
-      y = 33;
-  }
-  return y;
-}
-
-main() {}
diff --git a/pkg/vm/testcases/bytecode/switch.dart.expect b/pkg/vm/testcases/bytecode/switch.dart.expect
deleted file mode 100644
index 555f7a8..0000000
--- a/pkg/vm/testcases/bytecode/switch.dart.expect
+++ /dev/null
@@ -1,279 +0,0 @@
-main = #lib::main;
- [@vm.bytecode=
-BytecodeMetadata {
-Bytecode (version: stable)
-Main library: #lib
-Library '#lib'
-    name '#lib'
-    script '#lib'
-
-Class '', script = '#lib'
-
-
-Function 'foo1', static, reflectable, debuggable
-    parameters [dart:core::int* 'x'] (required: 1)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                2
-  CheckStack           0
-  PushNull
-  PopLocal             r0
-  Push                 FP[-5]
-  PopLocal             r1
-  PushInt              1
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L1
-  PushInt              2
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L2
-  PushInt              3
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L3
-  Jump                 L4
-L1:
-  PushInt              11
-  PopLocal             r0
-  Jump                 L4
-L2:
-  PushInt              22
-  PopLocal             r0
-  Jump                 L4
-L3:
-  PushInt              33
-  PopLocal             r0
-  Jump                 L4
-L4:
-  Push                 r0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall 'dart:core::Object::==', ArgDesc num-args 2, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'foo2', static, reflectable, debuggable
-    parameters [dart:core::int* 'x'] (required: 1)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                2
-  CheckStack           0
-  PushNull
-  PopLocal             r0
-  Push                 FP[-5]
-  PopLocal             r1
-  PushInt              1
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L1
-  PushInt              2
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L1
-  PushInt              3
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L1
-  PushInt              4
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L2
-  PushInt              5
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L2
-  PushInt              6
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L2
-  Jump                 L3
-L1:
-  PushInt              11
-  PopLocal             r0
-  Jump                 L4
-L2:
-  PushInt              22
-  PopLocal             r0
-  Jump                 L4
-L3:
-  PushInt              33
-  PopLocal             r0
-L4:
-  Push                 r0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall 'dart:core::Object::==', ArgDesc num-args 2, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'foo3', static, reflectable, debuggable
-    parameters [dart:core::int* 'x'] (required: 1)
-    return-type dart:core::int*
-
-Bytecode {
-  Entry                2
-  CheckStack           0
-  PushNull
-  PopLocal             r0
-  Push                 FP[-5]
-  PopLocal             r1
-  PushInt              1
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L1
-  PushInt              2
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L1
-  PushInt              3
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L1
-  PushInt              4
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L2
-  PushInt              5
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L2
-  PushInt              6
-  Push                 r1
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L2
-  Jump                 L3
-L1:
-  PushInt              11
-  PopLocal             r0
-  Jump                 L2
-L2:
-  PushInt              22
-  PopLocal             r0
-  PushInt              42
-  ReturnTOS
-L3:
-  PushInt              33
-  PopLocal             r0
-  Push                 r0
-  ReturnTOS
-}
-ConstantPool {
-  [0] = InterfaceCall 'dart:core::Object::==', ArgDesc num-args 2, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'main', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-}
-
-
-}
-]library #lib from "#lib" as #lib {
-
-  static method foo1(dart.core::int* x) → dart.core::int* {
-    dart.core::int* y;
-    #L1:
-    switch(x) {
-      #L2:
-      case #C1:
-        {
-          y = 11;
-          break #L1;
-        }
-      #L3:
-      case #C2:
-        {
-          y = 22;
-          break #L1;
-        }
-      #L4:
-      case #C3:
-        {
-          y = 33;
-          break #L1;
-        }
-    }
-    return y;
-  }
-  static method foo2(dart.core::int* x) → dart.core::int* {
-    dart.core::int* y;
-    #L5:
-    switch(x) {
-      #L6:
-      case #C1:
-      case #C2:
-      case #C3:
-        {
-          y = 11;
-          break #L5;
-        }
-      #L7:
-      case #C4:
-      case #C5:
-      case #C6:
-        {
-          y = 22;
-          break #L5;
-        }
-      #L8:
-      default:
-        {
-          y = 33;
-        }
-    }
-    return y;
-  }
-  static method foo3(dart.core::int* x) → dart.core::int* {
-    dart.core::int* y;
-    switch(x) {
-      #L9:
-      case #C1:
-      case #C2:
-      case #C3:
-        {
-          y = 11;
-          continue #L10;
-        }
-      #L10:
-      case #C4:
-      case #C5:
-      case #C6:
-        {
-          y = 22;
-          return 42;
-        }
-      #L11:
-      default:
-        {
-          y = 33;
-        }
-    }
-    return y;
-  }
-  static method main() → dynamic {}
-}
-constants  {
-  #C1 = 1
-  #C2 = 2
-  #C3 = 3
-  #C4 = 4
-  #C5 = 5
-  #C6 = 6
-}
diff --git a/pkg/vm/testcases/bytecode/try_blocks.dart b/pkg/vm/testcases/bytecode/try_blocks.dart
deleted file mode 100644
index d07c18f..0000000
--- a/pkg/vm/testcases/bytecode/try_blocks.dart
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-testTryCatch1() {
-  try {
-    print('danger!');
-  } catch (e) {
-    print('caught $e');
-  }
-}
-
-testTryCatch2() {
-  try {
-    print('danger!');
-  } on TypeError {
-    print('caught type error');
-  } on AssertionError catch (e) {
-    print('caught assertion error $e');
-  } on Error catch (e, st) {
-    print('caught error $e $st');
-  } catch (e, st) {
-    print('caught something $e $st');
-  }
-}
-
-testTryCatch3() {
-  int x = 1;
-  try {
-    int y = 2;
-    void foo() {
-      try {
-        print('danger foo');
-      } catch (e) {
-        print(x);
-        y = 3;
-      }
-    }
-
-    foo();
-    print(y);
-  } catch (e, st) {
-    print('caught $e $st');
-
-    void bar() {
-      try {
-        print('danger bar');
-      } on Error catch (e) {
-        print('error $e, captured stack trace: $st');
-      }
-    }
-
-    return bar;
-  }
-}
-
-testRethrow(bool cond) {
-  try {
-    try {
-      print('try 1 > try 2');
-    } catch (e) {
-      try {
-        print('try 1 > catch 2 > try 3');
-        if (cond) {
-          rethrow;
-        }
-      } catch (e) {
-        print('try 1 > catch 2 > catch 3');
-      }
-    }
-  } catch (e, st) {
-    print('catch 1');
-    print(st);
-  }
-}
-
-testTryFinally1() {
-  for (int i = 0; i < 10; i++) {
-    try {
-      if (i > 5) {
-        break;
-      }
-    } finally {
-      print(i);
-    }
-  }
-}
-
-testTryFinally2(int x) {
-  switch (x) {
-    case 1:
-      try {
-        print('before try 1');
-        int y = 3;
-        try {
-          print('try');
-          void foo() {
-            print(x);
-            print(y);
-          }
-
-          foo();
-          continue L;
-        } finally {
-          print('finally 1');
-        }
-        print('after try 1');
-      } finally {
-        print('finally 2');
-      }
-      break;
-    L:
-    case 2:
-      print('case 2');
-      break;
-  }
-}
-
-testTryFinally3() {
-  int x = 11;
-  var y;
-  try {
-    y = () {
-      print(x);
-      try {
-        print('try 1');
-        return 42;
-      } finally {
-        try {
-          print('try 2');
-          return 43;
-        } finally {
-          print(x);
-        }
-      }
-    };
-  } finally {
-    print(x);
-    y();
-  }
-}
-
-testTryCatchFinally() {
-  try {
-    print('try');
-  } catch (e) {
-    print('catch');
-  } finally {
-    print('finally');
-  }
-}
-
-main() {}
diff --git a/pkg/vm/testcases/bytecode/try_blocks.dart.expect b/pkg/vm/testcases/bytecode/try_blocks.dart.expect
deleted file mode 100644
index 8ce1cbf..0000000
--- a/pkg/vm/testcases/bytecode/try_blocks.dart.expect
+++ /dev/null
@@ -1,1162 +0,0 @@
-main = #lib::main;
- [@vm.bytecode=
-BytecodeMetadata {
-Bytecode (version: stable)
-Main library: #lib
-Library '#lib'
-    name '#lib'
-    script '#lib'
-
-Class '', script = '#lib'
-
-
-Function 'testTryCatch1', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                4
-  CheckStack           0
-Try #0 start:
-  PushConstant         CP#0
-  DirectCall           CP#1, 1
-  Drop1
-  Jump                 L1
-Try #0 end:
-Try #0 handler:
-  SetFrame             4
-  MoveSpecial          exception, r0
-  MoveSpecial          stackTrace, r1
-  Push                 r0
-  PopLocal             r2
-  PushNull
-  PushInt              2
-  CreateArrayTOS
-  StoreLocal           r3
-  Push                 r3
-  PushInt              0
-  PushConstant         CP#4
-  StoreIndexedTOS
-  Push                 r3
-  PushInt              1
-  Push                 r2
-  StoreIndexedTOS
-  DirectCall           CP#5, 1
-  DirectCall           CP#1, 1
-  Drop1
-  Jump                 L1
-L1:
-  PushNull
-  ReturnTOS
-}
-ExceptionsTable {
-  try-index 0, outer -1, start 4, end 14, handler 14, types [CP#3]
-}
-ConstantPool {
-  [0] = ObjectRef 'danger!'
-  [1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-  [3] = Type dynamic
-  [4] = ObjectRef 'caught '
-  [5] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
-  [6] = Reserved
-}
-
-
-Function 'testTryCatch2', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                5
-  CheckStack           0
-Try #0 start:
-  PushConstant         CP#0
-  DirectCall           CP#1, 1
-  Drop1
-  Jump                 L1
-Try #0 end:
-Try #0 handler:
-  SetFrame             5
-  MoveSpecial          exception, r0
-  MoveSpecial          stackTrace, r1
-  Push                 r0
-  PushConstant         CP#3
-  InterfaceCall        CP#4, 2
-  JumpIfFalse          L2
-  PushConstant         CP#6
-  DirectCall           CP#1, 1
-  Drop1
-  Jump                 L1
-L2:
-  Push                 r0
-  PushConstant         CP#7
-  InterfaceCall        CP#4, 2
-  JumpIfFalse          L3
-  Push                 r0
-  PopLocal             r2
-  PushNull
-  PushInt              2
-  CreateArrayTOS
-  StoreLocal           r3
-  Push                 r3
-  PushInt              0
-  PushConstant         CP#8
-  StoreIndexedTOS
-  Push                 r3
-  PushInt              1
-  Push                 r2
-  StoreIndexedTOS
-  DirectCall           CP#9, 1
-  DirectCall           CP#1, 1
-  Drop1
-  Jump                 L1
-L3:
-  Push                 r0
-  PushConstant         CP#11
-  InterfaceCall        CP#4, 2
-  JumpIfFalse          L4
-  Push                 r0
-  PopLocal             r2
-  Push                 r1
-  PopLocal             r3
-  PushNull
-  PushInt              4
-  CreateArrayTOS
-  StoreLocal           r4
-  Push                 r4
-  PushInt              0
-  PushConstant         CP#12
-  StoreIndexedTOS
-  Push                 r4
-  PushInt              1
-  Push                 r2
-  StoreIndexedTOS
-  Push                 r4
-  PushInt              2
-  PushConstant         CP#13
-  StoreIndexedTOS
-  Push                 r4
-  PushInt              3
-  Push                 r3
-  StoreIndexedTOS
-  DirectCall           CP#9, 1
-  DirectCall           CP#1, 1
-  Drop1
-  Jump                 L1
-L4:
-  Push                 r0
-  PopLocal             r2
-  Push                 r1
-  PopLocal             r3
-  PushNull
-  PushInt              4
-  CreateArrayTOS
-  StoreLocal           r4
-  Push                 r4
-  PushInt              0
-  PushConstant         CP#15
-  StoreIndexedTOS
-  Push                 r4
-  PushInt              1
-  Push                 r2
-  StoreIndexedTOS
-  Push                 r4
-  PushInt              2
-  PushConstant         CP#13
-  StoreIndexedTOS
-  Push                 r4
-  PushInt              3
-  Push                 r3
-  StoreIndexedTOS
-  DirectCall           CP#9, 1
-  DirectCall           CP#1, 1
-  Drop1
-  Jump                 L1
-L1:
-  PushNull
-  ReturnTOS
-}
-ExceptionsTable {
-  try-index 0, outer -1, start 4, end 14, handler 14, needs-stack-trace, types [CP#3, CP#7, CP#11, CP#14]
-}
-ConstantPool {
-  [0] = ObjectRef 'danger!'
-  [1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-  [3] = Type dart:core::TypeError*
-  [4] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
-  [5] = Reserved
-  [6] = ObjectRef 'caught type error'
-  [7] = Type dart:core::AssertionError*
-  [8] = ObjectRef 'caught assertion error '
-  [9] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
-  [10] = Reserved
-  [11] = Type dart:core::Error*
-  [12] = ObjectRef 'caught error '
-  [13] = ObjectRef ' '
-  [14] = Type dynamic
-  [15] = ObjectRef 'caught something '
-}
-
-
-Function 'testTryCatch3', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                7
-  CheckStack           0
-  AllocateContext      0, 3
-  PopLocal             r0
-  Push                 r0
-  PushInt              1
-  StoreContextVar      0, 0
-  Push                 r0
-  PopLocal             r2
-Try #0 start:
-  Push                 r0
-  PushInt              2
-  StoreContextVar      0, 1
-  AllocateClosure      CP#0
-  StoreLocal           r5
-  Push                 r5
-  PushNull
-  StoreFieldTOS        CP#8
-  Push                 r5
-  PushNull
-  StoreFieldTOS        CP#10
-  Push                 r5
-  PushConstant         CP#0
-  StoreFieldTOS        CP#12
-  Push                 r5
-  Push                 r0
-  StoreFieldTOS        CP#1
-  PopLocal             r4
-  Push                 r4
-  StoreLocal           r5
-  Push                 r5
-  UncheckedClosureCall CP#14, 1
-  Drop1
-  Push                 r0
-  LoadContextVar       0, 1
-  DirectCall           CP#4, 1
-  Drop1
-  Jump                 L1
-Try #0 end:
-Try #0 handler:
-  SetFrame             7
-  Push                 r2
-  PopLocal             r0
-  MoveSpecial          exception, r2
-  MoveSpecial          stackTrace, r3
-  Push                 r2
-  PopLocal             r4
-  Push                 r0
-  Push                 r3
-  StoreContextVar      0, 2
-  PushNull
-  PushInt              4
-  CreateArrayTOS
-  StoreLocal           r5
-  Push                 r5
-  PushInt              0
-  PushConstant         CP#15
-  StoreIndexedTOS
-  Push                 r5
-  PushInt              1
-  Push                 r4
-  StoreIndexedTOS
-  Push                 r5
-  PushInt              2
-  PushConstant         CP#16
-  StoreIndexedTOS
-  Push                 r5
-  PushInt              3
-  Push                 r0
-  LoadContextVar       0, 2
-  StoreIndexedTOS
-  DirectCall           CP#17, 1
-  DirectCall           CP#4, 1
-  Drop1
-  AllocateClosure      CP#19
-  StoreLocal           r5
-  Push                 r5
-  PushNull
-  StoreFieldTOS        CP#8
-  Push                 r5
-  PushNull
-  StoreFieldTOS        CP#10
-  Push                 r5
-  PushConstant         CP#19
-  StoreFieldTOS        CP#12
-  Push                 r5
-  Push                 r0
-  StoreFieldTOS        CP#1
-  PopLocal             r6
-  Push                 r6
-  ReturnTOS
-L1:
-  Push                 r0
-  LoadContextParent
-  PopLocal             r0
-  PushNull
-  ReturnTOS
-}
-ExceptionsTable {
-  try-index 0, outer -1, start 20, end 78, handler 78, needs-stack-trace, types [CP#6]
-}
-ConstantPool {
-  [0] = ClosureFunction 0
-  [1] = InstanceField dart:core::_Closure::_context (field)
-  [2] = Reserved
-  [3] = ObjectRef 'danger foo'
-  [4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [5] = Reserved
-  [6] = Type dynamic
-  [7] = EndClosureFunctionScope
-  [8] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [9] = Reserved
-  [10] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [11] = Reserved
-  [12] = InstanceField dart:core::_Closure::_function (field)
-  [13] = Reserved
-  [14] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
-  [15] = ObjectRef 'caught '
-  [16] = ObjectRef ' '
-  [17] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
-  [18] = Reserved
-  [19] = ClosureFunction 1
-  [20] = ObjectRef 'danger bar'
-  [21] = Type dart:core::Error*
-  [22] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
-  [23] = Reserved
-  [24] = ObjectRef 'error '
-  [25] = ObjectRef ', captured stack trace: '
-  [26] = EndClosureFunctionScope
-}
-Closure #lib::testTryCatch3::'foo' () -> void
-ClosureCode {
-  Entry                6
-  Push                 FP[-5]
-  LoadFieldTOS         CP#1
-  PopLocal             r0
-  CheckStack           0
-  Push                 r0
-  PopLocal             r2
-Try #0 start:
-  PushConstant         CP#3
-  DirectCall           CP#4, 1
-  Drop1
-  Jump                 L1
-Try #0 end:
-Try #0 handler:
-  SetFrame             6
-  Push                 r2
-  PopLocal             r0
-  MoveSpecial          exception, r2
-  MoveSpecial          stackTrace, r3
-  Push                 r2
-  PopLocal             r4
-  Push                 r0
-  LoadContextVar       0, 0
-  DirectCall           CP#4, 1
-  Drop1
-  Push                 r0
-  PushInt              3
-  StoreContextVar      0, 1
-  Jump                 L1
-L1:
-  PushNull
-  ReturnTOS
-}
-
-Closure #lib::testTryCatch3::'bar' () -> void
-ClosureCode {
-  Entry                6
-  Push                 FP[-5]
-  LoadFieldTOS         CP#1
-  PopLocal             r0
-  CheckStack           0
-  Push                 r0
-  PopLocal             r2
-Try #0 start:
-  PushConstant         CP#20
-  DirectCall           CP#4, 1
-  Drop1
-  Jump                 L1
-Try #0 end:
-Try #0 handler:
-  SetFrame             6
-  Push                 r2
-  PopLocal             r0
-  MoveSpecial          exception, r2
-  MoveSpecial          stackTrace, r3
-  Push                 r2
-  PushConstant         CP#21
-  InterfaceCall        CP#22, 2
-  JumpIfFalse          L2
-  Push                 r2
-  PopLocal             r4
-  PushNull
-  PushInt              4
-  CreateArrayTOS
-  StoreLocal           r5
-  Push                 r5
-  PushInt              0
-  PushConstant         CP#24
-  StoreIndexedTOS
-  Push                 r5
-  PushInt              1
-  Push                 r4
-  StoreIndexedTOS
-  Push                 r5
-  PushInt              2
-  PushConstant         CP#25
-  StoreIndexedTOS
-  Push                 r5
-  PushInt              3
-  Push                 r0
-  LoadContextVar       0, 2
-  StoreIndexedTOS
-  DirectCall           CP#17, 1
-  DirectCall           CP#4, 1
-  Drop1
-  Jump                 L1
-L2:
-  Push                 r2
-  Push                 r3
-  Throw                1
-L1:
-  PushNull
-  ReturnTOS
-}
-
-
-Function 'testRethrow', static, reflectable, debuggable
-    parameters [dart:core::bool* 'cond'] (required: 1)
-    return-type dynamic
-
-Bytecode {
-  Entry                8
-  CheckStack           0
-Try #0 start:
-Try #1 start:
-  PushConstant         CP#0
-  DirectCall           CP#1, 1
-  Drop1
-  Jump                 L1
-Try #1 end:
-Try #1 handler:
-  SetFrame             8
-  MoveSpecial          exception, r2
-  MoveSpecial          stackTrace, r3
-  Push                 r2
-  PopLocal             r4
-Try #2 start:
-  PushConstant         CP#4
-  DirectCall           CP#1, 1
-  Drop1
-  Push                 FP[-5]
-  AssertBoolean        0
-  JumpIfFalse          L2
-  Push                 r2
-  Push                 r3
-  Throw                1
-L2:
-  Jump                 L3
-Try #2 end:
-Try #2 handler:
-  SetFrame             8
-  MoveSpecial          exception, r5
-  MoveSpecial          stackTrace, r6
-  Push                 r5
-  PopLocal             r7
-  PushConstant         CP#5
-  DirectCall           CP#1, 1
-  Drop1
-  Jump                 L3
-L3:
-  Jump                 L1
-L1:
-  Jump                 L4
-Try #0 end:
-Try #0 handler:
-  SetFrame             8
-  MoveSpecial          exception, r0
-  MoveSpecial          stackTrace, r1
-  Push                 r0
-  PopLocal             r2
-  Push                 r1
-  PopLocal             r3
-  PushConstant         CP#6
-  DirectCall           CP#1, 1
-  Drop1
-  Push                 r3
-  DirectCall           CP#1, 1
-  Drop1
-  Jump                 L4
-L4:
-  PushNull
-  ReturnTOS
-}
-ExceptionsTable {
-  try-index 0, outer -1, start 4, end 80, handler 80, needs-stack-trace, types [CP#3]
-  try-index 1, outer 0, start 4, end 14, handler 14, needs-stack-trace, types [CP#3]
-  try-index 2, outer 0, start 26, end 50, handler 50, types [CP#3]
-}
-ConstantPool {
-  [0] = ObjectRef 'try 1 > try 2'
-  [1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-  [3] = Type dynamic
-  [4] = ObjectRef 'try 1 > catch 2 > try 3'
-  [5] = ObjectRef 'try 1 > catch 2 > catch 3'
-  [6] = ObjectRef 'catch 1'
-}
-
-
-Function 'testTryFinally1', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                3
-  CheckStack           0
-  PushInt              0
-  PopLocal             r0
-L5:
-  CheckStack           1
-  Push                 r0
-  PushInt              10
-  CompareIntLt
-  JumpIfFalse          L1
-Try #0 start:
-  Push                 r0
-  PushInt              5
-  CompareIntGt
-  JumpIfFalse          L2
-  Jump                 L3
-L2:
-  Jump                 L4
-Try #0 end:
-Try #0 handler:
-  SetFrame             3
-  MoveSpecial          exception, r1
-  MoveSpecial          stackTrace, r2
-  Push                 r0
-  DirectCall           CP#1, 1
-  Drop1
-  Push                 r1
-  Push                 r2
-  Throw                1
-L3:
-  Push                 r0
-  DirectCall           CP#1, 1
-  Drop1
-  Jump                 L1
-L4:
-  Push                 r0
-  DirectCall           CP#1, 1
-  Drop1
-  Push                 r0
-  PushInt              1
-  AddInt
-  StoreLocal           r0
-  Drop1
-  Jump                 L5
-L1:
-  PushNull
-  ReturnTOS
-}
-ExceptionsTable {
-  try-index 0, outer -1, start 19, end 36, handler 36, needs-stack-trace, synthetic, types [CP#0]
-}
-ConstantPool {
-  [0] = Type dynamic
-  [1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-}
-
-
-Function 'testTryFinally2', static, reflectable, debuggable
-    parameters [dart:core::int* 'x'] (required: 1)
-    return-type dynamic
-
-Bytecode {
-  Entry                9
-  CheckStack           0
-  AllocateContext      0, 2
-  PopLocal             r0
-  Push                 r0
-  Push                 FP[-5]
-  StoreContextVar      0, 0
-  Push                 r0
-  LoadContextVar       0, 0
-  PopLocal             r2
-  PushInt              1
-  Push                 r2
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L1
-  PushInt              2
-  Push                 r2
-  InterfaceCall        CP#0, 2
-  JumpIfTrue           L2
-  Jump                 L3
-L1:
-  Push                 r0
-  PopLocal             r3
-Try #0 start:
-  PushConstant         CP#2
-  DirectCall           CP#3, 1
-  Drop1
-  Push                 r0
-  PushInt              3
-  StoreContextVar      0, 1
-  Push                 r0
-  PopLocal             r5
-Try #1 start:
-  PushConstant         CP#5
-  DirectCall           CP#3, 1
-  Drop1
-  AllocateClosure      CP#6
-  StoreLocal           r8
-  Push                 r8
-  PushNull
-  StoreFieldTOS        CP#10
-  Push                 r8
-  PushNull
-  StoreFieldTOS        CP#12
-  Push                 r8
-  PushConstant         CP#6
-  StoreFieldTOS        CP#14
-  Push                 r8
-  Push                 r0
-  StoreFieldTOS        CP#7
-  PopLocal             r7
-  Push                 r7
-  StoreLocal           r8
-  Push                 r8
-  UncheckedClosureCall CP#16, 1
-  Drop1
-  Jump                 L4
-Try #1 end:
-Try #1 handler:
-  SetFrame             9
-  Push                 r5
-  PopLocal             r0
-  MoveSpecial          exception, r5
-  MoveSpecial          stackTrace, r6
-  PushConstant         CP#18
-  DirectCall           CP#3, 1
-  Drop1
-  Push                 r5
-  Push                 r6
-  Throw                1
-L4:
-  Push                 r5
-  PopLocal             r0
-  PushConstant         CP#18
-  DirectCall           CP#3, 1
-  Drop1
-  Jump                 L5
-Try #0 end:
-Try #0 handler:
-  SetFrame             9
-  Push                 r3
-  PopLocal             r0
-  MoveSpecial          exception, r3
-  MoveSpecial          stackTrace, r4
-  PushConstant         CP#20
-  DirectCall           CP#3, 1
-  Drop1
-  Push                 r3
-  Push                 r4
-  Throw                1
-L5:
-  Push                 r3
-  PopLocal             r0
-  PushConstant         CP#20
-  DirectCall           CP#3, 1
-  Drop1
-  Jump                 L2
-L2:
-  PushConstant         CP#21
-  DirectCall           CP#3, 1
-  Drop1
-  Jump                 L3
-L3:
-  PushNull
-  ReturnTOS
-}
-ExceptionsTable {
-  try-index 0, outer -1, start 53, end 156, handler 156, needs-stack-trace, synthetic, types [CP#17]
-  try-index 1, outer 0, start 70, end 118, handler 118, needs-stack-trace, synthetic, types [CP#17]
-}
-ConstantPool {
-  [0] = InterfaceCall 'dart:core::Object::==', ArgDesc num-args 2, num-type-args 0, names []
-  [1] = Reserved
-  [2] = ObjectRef 'before try 1'
-  [3] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [4] = Reserved
-  [5] = ObjectRef 'try'
-  [6] = ClosureFunction 0
-  [7] = InstanceField dart:core::_Closure::_context (field)
-  [8] = Reserved
-  [9] = EndClosureFunctionScope
-  [10] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [11] = Reserved
-  [12] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [13] = Reserved
-  [14] = InstanceField dart:core::_Closure::_function (field)
-  [15] = Reserved
-  [16] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
-  [17] = Type dynamic
-  [18] = ObjectRef 'finally 1'
-  [19] = ObjectRef 'after try 1'
-  [20] = ObjectRef 'finally 2'
-  [21] = ObjectRef 'case 2'
-}
-Closure #lib::testTryFinally2::'foo' () -> void
-ClosureCode {
-  Entry                2
-  Push                 FP[-5]
-  LoadFieldTOS         CP#7
-  PopLocal             r0
-  CheckStack           0
-  Push                 r0
-  LoadContextVar       0, 0
-  DirectCall           CP#3, 1
-  Drop1
-  Push                 r0
-  LoadContextVar       0, 1
-  DirectCall           CP#3, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-
-
-Function 'testTryFinally3', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                6
-  CheckStack           0
-  AllocateContext      0, 1
-  PopLocal             r0
-  Push                 r0
-  PushInt              11
-  StoreContextVar      0, 0
-  PushNull
-  PopLocal             r2
-  Push                 r0
-  PopLocal             r3
-Try #0 start:
-  AllocateClosure      CP#0
-  StoreLocal           r5
-  Push                 r5
-  PushNull
-  StoreFieldTOS        CP#9
-  Push                 r5
-  PushNull
-  StoreFieldTOS        CP#11
-  Push                 r5
-  PushConstant         CP#0
-  StoreFieldTOS        CP#13
-  Push                 r5
-  Push                 r0
-  StoreFieldTOS        CP#1
-  PopLocal             r2
-  Jump                 L1
-Try #0 end:
-Try #0 handler:
-  SetFrame             6
-  Push                 r3
-  PopLocal             r0
-  MoveSpecial          exception, r3
-  MoveSpecial          stackTrace, r4
-  Push                 r0
-  LoadContextVar       0, 0
-  DirectCall           CP#3, 1
-  Drop1
-  Push                 r2
-  DynamicCall          CP#15, 1
-  Drop1
-  Push                 r3
-  Push                 r4
-  Throw                1
-L1:
-  Push                 r3
-  PopLocal             r0
-  Push                 r0
-  LoadContextVar       0, 0
-  DirectCall           CP#3, 1
-  Drop1
-  Push                 r2
-  DynamicCall          CP#15, 1
-  Drop1
-  Push                 r0
-  LoadContextParent
-  PopLocal             r0
-  PushNull
-  ReturnTOS
-}
-ExceptionsTable {
-  try-index 0, outer -1, start 23, end 55, handler 55, needs-stack-trace, synthetic, types [CP#6]
-}
-ConstantPool {
-  [0] = ClosureFunction 0
-  [1] = InstanceField dart:core::_Closure::_context (field)
-  [2] = Reserved
-  [3] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [4] = Reserved
-  [5] = ObjectRef 'try 1'
-  [6] = Type dynamic
-  [7] = ObjectRef 'try 2'
-  [8] = EndClosureFunctionScope
-  [9] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
-  [10] = Reserved
-  [11] = InstanceField dart:core::_Closure::_function_type_arguments (field)
-  [12] = Reserved
-  [13] = InstanceField dart:core::_Closure::_function (field)
-  [14] = Reserved
-  [15] = DynamicCall 'call', ArgDesc num-args 1, num-type-args 0, names []
-  [16] = Reserved
-}
-Closure #lib::testTryFinally3::'<anonymous closure>' () -> dart:core::int*
-ClosureCode {
-  Entry                6
-  Push                 FP[-5]
-  LoadFieldTOS         CP#1
-  PopLocal             r0
-  CheckStack           0
-  Push                 r0
-  LoadContextVar       0, 0
-  DirectCall           CP#3, 1
-  Drop1
-  Push                 r0
-  PopLocal             r2
-Try #0 start:
-  PushConstant         CP#5
-  DirectCall           CP#3, 1
-  Drop1
-  Jump                 L1
-Try #0 end:
-Try #0 handler:
-  SetFrame             6
-  Push                 r2
-  PopLocal             r0
-  MoveSpecial          exception, r2
-  MoveSpecial          stackTrace, r3
-  Push                 r0
-  PopLocal             r4
-Try #1 start:
-  PushConstant         CP#7
-  DirectCall           CP#3, 1
-  Drop1
-  Jump                 L2
-Try #1 end:
-Try #1 handler:
-  SetFrame             6
-  Push                 r4
-  PopLocal             r0
-  MoveSpecial          exception, r4
-  MoveSpecial          stackTrace, r5
-  Push                 r0
-  LoadContextVar       0, 0
-  DirectCall           CP#3, 1
-  Drop1
-  Push                 r4
-  Push                 r5
-  Throw                1
-L2:
-  Push                 r4
-  PopLocal             r0
-  Push                 r0
-  LoadContextVar       0, 0
-  DirectCall           CP#3, 1
-  Drop1
-  PushInt              43
-  ReturnTOS
-L1:
-  Push                 r2
-  PopLocal             r0
-  Push                 r0
-  PopLocal             r4
-Try #2 start:
-  PushConstant         CP#7
-  DirectCall           CP#3, 1
-  Drop1
-  Jump                 L3
-Try #2 end:
-Try #2 handler:
-  SetFrame             6
-  Push                 r4
-  PopLocal             r0
-  MoveSpecial          exception, r4
-  MoveSpecial          stackTrace, r5
-  Push                 r0
-  LoadContextVar       0, 0
-  DirectCall           CP#3, 1
-  Drop1
-  Push                 r4
-  Push                 r5
-  Throw                1
-L3:
-  Push                 r4
-  PopLocal             r0
-  Push                 r0
-  LoadContextVar       0, 0
-  DirectCall           CP#3, 1
-  Drop1
-  PushInt              43
-  ReturnTOS
-}
-
-
-Function 'testTryCatchFinally', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                5
-  CheckStack           0
-Try #0 start:
-Try #1 start:
-  PushConstant         CP#0
-  DirectCall           CP#1, 1
-  Drop1
-  Jump                 L1
-Try #1 end:
-Try #1 handler:
-  SetFrame             5
-  MoveSpecial          exception, r2
-  MoveSpecial          stackTrace, r3
-  Push                 r2
-  PopLocal             r4
-  PushConstant         CP#4
-  DirectCall           CP#1, 1
-  Drop1
-  Jump                 L1
-L1:
-  Jump                 L2
-Try #0 end:
-Try #0 handler:
-  SetFrame             5
-  MoveSpecial          exception, r0
-  MoveSpecial          stackTrace, r1
-  PushConstant         CP#5
-  DirectCall           CP#1, 1
-  Drop1
-  Push                 r0
-  Push                 r1
-  Throw                1
-L2:
-  PushConstant         CP#5
-  DirectCall           CP#1, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ExceptionsTable {
-  try-index 0, outer -1, start 4, end 40, handler 40, needs-stack-trace, synthetic, types [CP#3]
-  try-index 1, outer 0, start 4, end 14, handler 14, types [CP#3]
-}
-ConstantPool {
-  [0] = ObjectRef 'try'
-  [1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [2] = Reserved
-  [3] = Type dynamic
-  [4] = ObjectRef 'catch'
-  [5] = ObjectRef 'finally'
-}
-
-
-Function 'main', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-}
-
-
-}
-]library #lib from "#lib" as #lib {
-
-  static method testTryCatch1() → dynamic {
-    try {
-      dart.core::print("danger!");
-    }
-    on dynamic catch(final dynamic e) {
-      dart.core::print("caught ${e}");
-    }
-  }
-  static method testTryCatch2() → dynamic {
-    try {
-      dart.core::print("danger!");
-    }
-    on dart.core::TypeError* catch(no-exception-var) {
-      dart.core::print("caught type error");
-    }
-    on dart.core::AssertionError* catch(final dart.core::AssertionError* e) {
-      dart.core::print("caught assertion error ${e}");
-    }
-    on dart.core::Error* catch(final dart.core::Error* e, final dart.core::StackTrace* st) {
-      dart.core::print("caught error ${e} ${st}");
-    }
-    on dynamic catch(final dynamic e, final dart.core::StackTrace* st) {
-      dart.core::print("caught something ${e} ${st}");
-    }
-  }
-  static method testTryCatch3() → dynamic {
-    dart.core::int* x = 1;
-    try {
-      dart.core::int* y = 2;
-      function foo() → void {
-        try {
-          dart.core::print("danger foo");
-        }
-        on dynamic catch(final dynamic e) {
-          dart.core::print(x);
-          y = 3;
-        }
-      }
-      [@vm.call-site-attributes.metadata=receiverType:void Function()*] foo.call();
-      dart.core::print(y);
-    }
-    on dynamic catch(final dynamic e, final dart.core::StackTrace* st) {
-      dart.core::print("caught ${e} ${st}");
-      function bar() → void {
-        try {
-          dart.core::print("danger bar");
-        }
-        on dart.core::Error* catch(final dart.core::Error* e) {
-          dart.core::print("error ${e}, captured stack trace: ${st}");
-        }
-      }
-      return bar;
-    }
-  }
-  static method testRethrow(dart.core::bool* cond) → dynamic {
-    try {
-      try {
-        dart.core::print("try 1 > try 2");
-      }
-      on dynamic catch(final dynamic e) {
-        try {
-          dart.core::print("try 1 > catch 2 > try 3");
-          if(cond) {
-            rethrow;
-          }
-        }
-        on dynamic catch(final dynamic e) {
-          dart.core::print("try 1 > catch 2 > catch 3");
-        }
-      }
-    }
-    on dynamic catch(final dynamic e, final dart.core::StackTrace* st) {
-      dart.core::print("catch 1");
-      dart.core::print(st);
-    }
-  }
-  static method testTryFinally1() → dynamic {
-    #L1:
-    for (dart.core::int* i = 0; i.{dart.core::num::<}(10); i = i.{dart.core::num::+}(1)) {
-      try {
-        if(i.{dart.core::num::>}(5)) {
-          break #L1;
-        }
-      }
-      finally {
-        dart.core::print(i);
-      }
-    }
-  }
-  static method testTryFinally2(dart.core::int* x) → dynamic {
-    #L2:
-    switch(x) {
-      #L3:
-      case #C1:
-        {
-          try {
-            dart.core::print("before try 1");
-            dart.core::int* y = 3;
-            try {
-              dart.core::print("try");
-              function foo() → void {
-                dart.core::print(x);
-                dart.core::print(y);
-              }
-              [@vm.call-site-attributes.metadata=receiverType:void Function()*] foo.call();
-              continue #L4;
-            }
-            finally {
-              dart.core::print("finally 1");
-            }
-            dart.core::print("after try 1");
-          }
-          finally {
-            dart.core::print("finally 2");
-          }
-          break #L2;
-        }
-      #L4:
-      case #C2:
-        {
-          dart.core::print("case 2");
-          break #L2;
-        }
-    }
-  }
-  static method testTryFinally3() → dynamic {
-    dart.core::int* x = 11;
-    dynamic y;
-    try {
-      y = () → dart.core::int* {
-        dart.core::print(x);
-        try {
-          dart.core::print("try 1");
-          return 42;
-        }
-        finally {
-          try {
-            dart.core::print("try 2");
-            return 43;
-          }
-          finally {
-            dart.core::print(x);
-          }
-        }
-      };
-    }
-    finally {
-      dart.core::print(x);
-      [@vm.call-site-attributes.metadata=receiverType:dynamic] y.call();
-    }
-  }
-  static method testTryCatchFinally() → dynamic {
-    try
-      try {
-        dart.core::print("try");
-      }
-      on dynamic catch(final dynamic e) {
-        dart.core::print("catch");
-      }
-    finally {
-      dart.core::print("finally");
-    }
-  }
-  static method main() → dynamic {}
-}
-constants  {
-  #C1 = 1
-  #C2 = 2
-}
diff --git a/pkg/vm/testcases/bytecode/type_ops.dart b/pkg/vm/testcases/bytecode/type_ops.dart
deleted file mode 100644
index d9ff5eb..0000000
--- a/pkg/vm/testcases/bytecode/type_ops.dart
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-class A<T> {}
-
-class B extends A<String> {}
-
-class C<T1, T2, T3> extends B {}
-
-foo1(x) {
-  if (x is B) {
-    print('11');
-  }
-  if (x is C<int, Object, dynamic>) {
-    print('12');
-  }
-  return x as A<int>;
-}
-
-class D<P, Q> extends C<int, Q, P> {
-  Map<P, Q> foo;
-
-  D(tt) : foo = tt;
-
-  foo2(y) {
-    if (y is A<P>) {
-      print('21');
-    }
-    if (y is C<dynamic, Q, List<P>>) {
-      print('22');
-    }
-    foo = y;
-  }
-
-  foo3<T1, T2>(z) {
-    if (z is A<T1>) {
-      print('31');
-    }
-    if (z is C<Map<T1, P>, List<T2>, Q>) {
-      print('32');
-    }
-    return (z as Map<T2, Q>).values;
-  }
-
-  Map<P, Q> foo4(w) {
-    List<Map<P, Q>> list = [w];
-    return w;
-  }
-}
-
-List<Iterable> globalVar;
-
-void foo5(x) {
-  globalVar = x;
-}
-
-class E<P extends String> {
-  factory E() => null;
-  void foo6<T extends P, U extends List<T>>(Map<T, U> map) {}
-}
-
-abstract class F<T> {
-  void foo7<Q extends T>(Q a, covariant num b, T c);
-  void foo8<Q extends T>(Q a, covariant num b, T c);
-}
-
-class G<T> {
-  void foo7<Q extends T>(Q a, int b, T c) {}
-}
-
-class H<T> extends G<T> implements F<T> {
-  void foo8<Q extends T>(Q a, int b, T c) {}
-}
-
-main() {}
diff --git a/pkg/vm/testcases/bytecode/type_ops.dart.expect b/pkg/vm/testcases/bytecode/type_ops.dart.expect
deleted file mode 100644
index e97a149..0000000
--- a/pkg/vm/testcases/bytecode/type_ops.dart.expect
+++ /dev/null
@@ -1,977 +0,0 @@
-main = #lib::main;
- [@vm.bytecode=
-BytecodeMetadata {
-Bytecode (version: stable)
-Main library: #lib
-Library '#lib'
-    name '#lib'
-    script '#lib'
-
-Class '', script = '#lib'
-
-Field 'globalVar', type = dart:core::List < dart:core::Iterable null* >*, reflectable, static
-    value = null
-
-Function 'foo1', static, reflectable, debuggable
-    parameters [dynamic 'x'] (required: 1)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  PushConstant         CP#0
-  InterfaceCall        CP#1, 2
-  JumpIfFalse          L1
-  PushConstant         CP#3
-  DirectCall           CP#4, 1
-  Drop1
-L1:
-  Push                 FP[-5]
-  PushNull
-  PushNull
-  PushConstant         CP#6
-  InterfaceCall        CP#7, 4
-  JumpIfFalse          L2
-  PushConstant         CP#9
-  DirectCall           CP#4, 1
-  Drop1
-L2:
-  Push                 FP[-5]
-  PushConstant         CP#10
-  PushNull
-  PushNull
-  PushConstant         CP#11
-  AssertAssignable     0, CP#12
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Type #lib::B < dart:core::String* >*
-  [1] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
-  [2] = Reserved
-  [3] = ObjectRef '11'
-  [4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [5] = Reserved
-  [6] = Type #lib::C < dart:core::String*, dart:core::int*, dart:core::Object*, dynamic >*
-  [7] = InterfaceCall 'dart:core::Object::_instanceOf', ArgDesc num-args 4, num-type-args 0, names []
-  [8] = Reserved
-  [9] = ObjectRef '12'
-  [10] = Type #lib::A < dart:core::int* >*
-  [11] = ObjectRef ' in type cast'
-  [12] = SubtypeTestCache
-}
-
-
-Function 'foo5', static, reflectable, debuggable
-    parameters [dynamic 'x'] (required: 1)
-    return-type void
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-5]
-  PushConstant         CP#0
-  PushNull
-  PushNull
-  PushConstant         CP#1
-  AssertAssignable     0, CP#2
-  StoreStaticTOS       CP#3
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Type dart:core::List < dart:core::Iterable null* >*
-  [1] = ObjectRef ''
-  [2] = SubtypeTestCache
-  [3] = StaticField #lib::globalVar (field)
-}
-
-
-Function 'main', static, reflectable, debuggable
-    parameters [] (required: 0)
-    return-type dynamic
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-}
-
-Class 'A', script = '#lib'
-    type-params <dart:core::Object* T> (args: 1)
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::A < #lib::A::TypeParam/0* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'B', script = '#lib'
-    extends #lib::A < dart:core::String* >*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::B < dart:core::String* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::A:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-Class 'C', script = '#lib'
-    type-params <dart:core::Object* T1, dart:core::Object* T2, dart:core::Object* T3> (args: 4)
-    extends #lib::B < dart:core::String* >*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::C < dart:core::String*, #lib::C::TypeParam/0*, #lib::C::TypeParam/1*, #lib::C::TypeParam/2* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::B:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-Class 'D', script = '#lib'
-    type-params <dart:core::Object* P, dart:core::Object* Q> (args: 5)
-    extends #lib::C < dart:core::String*, dart:core::int*, #lib::D::TypeParam/1*, #lib::D::TypeParam/0* >*
-
-Field 'foo', type = dart:core::Map < #lib::D::TypeParam/0*, #lib::D::TypeParam/1* >*, getter = 'get:foo', setter = 'set:foo', reflectable
-    value = null
-
-Function '', constructor, reflectable, debuggable
-    parameters [dynamic 'tt'] (required: 1)
-    return-type #lib::D < dart:core::String*, dart:core::int*, #lib::D::TypeParam/1*, #lib::D::TypeParam/0*, #lib::D::TypeParam/1* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-6]
-  Push                 FP[-5]
-  PushConstant         CP#0
-  Push                 FP[-6]
-  LoadTypeArgumentsField CP#1
-  PushNull
-  PushConstant         CP#2
-  AssertAssignable     0, CP#3
-  StoreFieldTOS        CP#4
-  Push                 FP[-6]
-  DirectCall           CP#6, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Type dart:core::Map < #lib::D::TypeParam/0*, #lib::D::TypeParam/1* >*
-  [1] = TypeArgumentsField #lib::D
-  [2] = ObjectRef ''
-  [3] = SubtypeTestCache
-  [4] = InstanceField #lib::D::foo (field)
-  [5] = Reserved
-  [6] = DirectCall '#lib::C:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [7] = Reserved
-}
-
-
-Function 'foo2', reflectable, debuggable
-    parameters [dynamic 'y'] (required: 1)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckStack           0
-  Push                 FP[-5]
-  Push                 FP[-6]
-  LoadTypeArgumentsField CP#0
-  PushNull
-  PushConstant         CP#1
-  InterfaceCall        CP#2, 4
-  JumpIfFalse          L1
-  PushConstant         CP#4
-  DirectCall           CP#5, 1
-  Drop1
-L1:
-  Push                 FP[-5]
-  Push                 FP[-6]
-  LoadTypeArgumentsField CP#0
-  PushNull
-  PushConstant         CP#7
-  InterfaceCall        CP#2, 4
-  JumpIfFalse          L2
-  PushConstant         CP#8
-  DirectCall           CP#5, 1
-  Drop1
-L2:
-  Push                 FP[-6]
-  Push                 FP[-5]
-  PushConstant         CP#9
-  Push                 FP[-6]
-  LoadTypeArgumentsField CP#0
-  PushNull
-  PushConstant         CP#10
-  AssertAssignable     0, CP#11
-  UncheckedInterfaceCall CP#12, 2
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = TypeArgumentsField #lib::D
-  [1] = Type #lib::A < #lib::D::TypeParam/0* >*
-  [2] = InterfaceCall 'dart:core::Object::_instanceOf', ArgDesc num-args 4, num-type-args 0, names []
-  [3] = Reserved
-  [4] = ObjectRef '21'
-  [5] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [6] = Reserved
-  [7] = Type #lib::C < dart:core::String*, dynamic, #lib::D::TypeParam/1*, dart:core::List < #lib::D::TypeParam/0* >* >*
-  [8] = ObjectRef '22'
-  [9] = Type dart:core::Map < #lib::D::TypeParam/0*, #lib::D::TypeParam/1* >*
-  [10] = ObjectRef ''
-  [11] = SubtypeTestCache
-  [12] = InterfaceCall '#lib::D::set:foo', ArgDesc num-args 2, num-type-args 0, names []
-  [13] = Reserved
-}
-
-
-Function 'foo3', reflectable, debuggable
-    type-params <dart:core::Object* T1, dart:core::Object* T2>
-    parameters [dynamic 'z'] (required: 1)
-    return-type dynamic
-
-Bytecode {
-  Entry                1
-  CheckFunctionTypeArgs 2, r0
-  CheckStack           0
-  Push                 FP[-5]
-  PushNull
-  Push                 r0
-  PushConstant         CP#0
-  InterfaceCall        CP#1, 4
-  JumpIfFalse          L1
-  PushConstant         CP#3
-  DirectCall           CP#4, 1
-  Drop1
-L1:
-  Push                 FP[-5]
-  Push                 FP[-6]
-  LoadTypeArgumentsField CP#6
-  Push                 r0
-  PushConstant         CP#7
-  InterfaceCall        CP#1, 4
-  JumpIfFalse          L2
-  PushConstant         CP#8
-  DirectCall           CP#4, 1
-  Drop1
-L2:
-  Push                 FP[-5]
-  PushConstant         CP#9
-  Push                 FP[-6]
-  LoadTypeArgumentsField CP#6
-  Push                 r0
-  PushConstant         CP#10
-  AssertAssignable     0, CP#11
-  InterfaceCall        CP#12, 1
-  ReturnTOS
-}
-ConstantPool {
-  [0] = Type #lib::A < #lib::D::foo3::TypeParam/0* >*
-  [1] = InterfaceCall 'dart:core::Object::_instanceOf', ArgDesc num-args 4, num-type-args 0, names []
-  [2] = Reserved
-  [3] = ObjectRef '31'
-  [4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
-  [5] = Reserved
-  [6] = TypeArgumentsField #lib::D
-  [7] = Type #lib::C < dart:core::String*, dart:core::Map < #lib::D::foo3::TypeParam/0*, #lib::D::TypeParam/0* >*, dart:core::List < #lib::D::foo3::TypeParam/1* >*, #lib::D::TypeParam/1* >*
-  [8] = ObjectRef '32'
-  [9] = Type dart:core::Map < #lib::D::foo3::TypeParam/1*, #lib::D::TypeParam/1* >*
-  [10] = ObjectRef ' in type cast'
-  [11] = SubtypeTestCache
-  [12] = InterfaceCall 'dart:core::Map::get:values', ArgDesc num-args 1, num-type-args 0, names []
-  [13] = Reserved
-}
-
-
-Function 'foo4', reflectable, debuggable
-    parameters [dynamic 'w'] (required: 1)
-    return-type dart:core::Map < #lib::D::TypeParam/0*, #lib::D::TypeParam/1* >*
-
-Bytecode {
-  Entry                2
-  CheckStack           0
-  Push                 FP[-6]
-  LoadTypeArgumentsField CP#0
-  PushNull
-  InstantiateTypeArgumentsTOS 0, CP#1
-  StoreLocal           r1
-  Push                 r1
-  PushInt              1
-  CreateArrayTOS
-  StoreLocal           r1
-  Push                 r1
-  PushInt              0
-  Push                 FP[-5]
-  PushConstant         CP#2
-  Push                 FP[-6]
-  LoadTypeArgumentsField CP#0
-  PushNull
-  PushConstant         CP#3
-  AssertAssignable     0, CP#4
-  StoreIndexedTOS
-  DirectCall           CP#5, 2
-  PopLocal             r0
-  Push                 FP[-5]
-  PushConstant         CP#2
-  Push                 FP[-6]
-  LoadTypeArgumentsField CP#0
-  PushNull
-  PushConstant         CP#3
-  AssertAssignable     0, CP#7
-  ReturnTOS
-}
-ConstantPool {
-  [0] = TypeArgumentsField #lib::D
-  [1] = ObjectRef < dart:core::Map < #lib::D::TypeParam/0*, #lib::D::TypeParam/1* >* >
-  [2] = Type dart:core::Map < #lib::D::TypeParam/0*, #lib::D::TypeParam/1* >*
-  [3] = ObjectRef ''
-  [4] = SubtypeTestCache
-  [5] = DirectCall 'dart:core::List::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
-  [6] = Reserved
-  [7] = SubtypeTestCache
-}
-
-Class 'E', script = '#lib'
-    type-params <dart:core::String* P> (args: 1)
-    extends dart:core::Object*
-
-
-Function '', factory, static, reflectable, debuggable
-    type-params <dart:core::String* P>
-    parameters [] (required: 0)
-    return-type #lib::E < #lib::E:: (constructor)::TypeParam/0* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  PushNull
-  ReturnTOS
-}
-Default function type arguments: CP#0
-ConstantPool {
-  [0] = ObjectRef < dart:core::String* >
-}
-
-
-Function 'foo6', reflectable, debuggable
-    type-params <#lib::E::TypeParam/0* T, dart:core::List < #lib::E::foo6::TypeParam/0* >* U>
-    parameters [dart:core::Map < #lib::E::foo6::TypeParam/0*, #lib::E::foo6::TypeParam/1* >* 'map'] (required: 1)
-    return-type void
-
-Bytecode {
-  Entry                1
-  CheckFunctionTypeArgs 2, r0
-  JumpIfNotZeroTypeArgs L1
-  Push                 FP[-6]
-  LoadTypeArgumentsField CP#0
-  PushNull
-  InstantiateTypeArgumentsTOS 0, CP#1
-  PopLocal             r0
-L1:
-  CheckStack           0
-  JumpIfUnchecked      L2
-  Push                 FP[-6]
-  LoadTypeArgumentsField CP#0
-  Push                 r0
-  PushConstant         CP#2
-  PushConstant         CP#3
-  PushConstant         CP#4
-  AssertSubtype
-L2:
-  PushNull
-  ReturnTOS
-}
-Default function type arguments: CP#1
-ConstantPool {
-  [0] = TypeArgumentsField #lib::E
-  [1] = ObjectRef < #lib::E::TypeParam/0*, dart:core::List < #lib::E::TypeParam/0* >* >
-  [2] = Type #lib::E::foo6::TypeParam/0*
-  [3] = Type #lib::E::TypeParam/0*
-  [4] = ObjectRef 'T'
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'F', script = '#lib', abstract
-    type-params <dart:core::Object* T> (args: 1)
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::F < #lib::F::TypeParam/0* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'foo7', abstract, reflectable, debuggable
-    type-params <#lib::F::TypeParam/0* Q>
-    parameters [#lib::F::foo7::TypeParam/0* 'a', dart:core::num* 'b', #lib::F::TypeParam/0* 'c'] (required: 3)
-    return-type void
-
-Function 'foo8', abstract, reflectable, debuggable
-    type-params <#lib::F::TypeParam/0* Q>
-    parameters [#lib::F::foo8::TypeParam/0* 'a', dart:core::num* 'b', #lib::F::TypeParam/0* 'c'] (required: 3)
-    return-type void
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'G', script = '#lib'
-    type-params <dart:core::Object* T> (args: 1)
-    extends dart:core::Object*
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::G < #lib::G::TypeParam/0* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'foo7', reflectable, debuggable
-    type-params <#lib::G::TypeParam/0* Q>
-    parameters [#lib::G::foo7::TypeParam/0* 'a', dart:core::int* 'b', #lib::G::TypeParam/0* 'c'] (required: 3)
-    return-type void
-
-Bytecode {
-  Entry                1
-  CheckFunctionTypeArgs 1, r0
-  JumpIfNotZeroTypeArgs L1
-  Push                 FP[-8]
-  LoadTypeArgumentsField CP#0
-  PopLocal             r0
-L1:
-  CheckStack           0
-  JumpIfUnchecked      L2
-  Push                 FP[-8]
-  LoadTypeArgumentsField CP#0
-  Push                 r0
-  PushConstant         CP#1
-  PushConstant         CP#2
-  PushConstant         CP#3
-  AssertSubtype
-  Push                 FP[-5]
-  PushConstant         CP#2
-  Push                 FP[-8]
-  LoadTypeArgumentsField CP#0
-  PushNull
-  PushConstant         CP#4
-  AssertAssignable     0, CP#5
-  Drop1
-L2:
-  PushNull
-  ReturnTOS
-}
-Parameter flags: [0, 0, 2]
-Default function type arguments: CP#6
-ConstantPool {
-  [0] = TypeArgumentsField #lib::G
-  [1] = Type #lib::G::foo7::TypeParam/0*
-  [2] = Type #lib::G::TypeParam/0*
-  [3] = ObjectRef 'Q'
-  [4] = ObjectRef 'c'
-  [5] = SubtypeTestCache
-  [6] = ObjectRef < #lib::G::TypeParam/0* >
-}
-
-
-Function 'get:_identityHashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function '_instanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOf', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfTrue', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '_simpleInstanceOfFalse', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool*
-
-Function '==', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool*
-
-Function 'get:hashCode', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::int*
-
-Function 'toString', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::String*
-
-Function 'noSuchMethod', abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [dart:core::Invocation* 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable, custom-script = 'org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart'
-    parameters [] (required: 0)
-    return-type dart:core::Type*
-Class 'H', script = '#lib'
-    type-params <dart:core::Object* T> (args: 1)
-    extends #lib::G < #lib::H::TypeParam/0* >*
-    implements [#lib::F < #lib::H::TypeParam/0* >*]
-
-
-Function '', constructor, reflectable
-    parameters [] (required: 0)
-    return-type #lib::H < #lib::H::TypeParam/0* >*
-
-Bytecode {
-  Entry                0
-  CheckStack           0
-  Push                 FP[-5]
-  DirectCall           CP#0, 1
-  Drop1
-  PushNull
-  ReturnTOS
-}
-ConstantPool {
-  [0] = DirectCall '#lib::G:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
-  [1] = Reserved
-}
-
-
-Function 'foo8', reflectable, debuggable
-    type-params <#lib::H::TypeParam/0* Q>
-    parameters [#lib::H::foo8::TypeParam/0* 'a', dart:core::int* 'b', #lib::H::TypeParam/0* 'c'] (required: 3)
-    return-type void
-
-Bytecode {
-  Entry                1
-  CheckFunctionTypeArgs 1, r0
-  JumpIfNotZeroTypeArgs L1
-  Push                 FP[-8]
-  LoadTypeArgumentsField CP#0
-  PopLocal             r0
-L1:
-  CheckStack           0
-  JumpIfUnchecked      L2
-  Push                 FP[-8]
-  LoadTypeArgumentsField CP#0
-  Push                 r0
-  PushConstant         CP#1
-  PushConstant         CP#2
-  PushConstant         CP#3
-  AssertSubtype
-  Push                 FP[-5]
-  PushConstant         CP#2
-  Push                 FP[-8]
-  LoadTypeArgumentsField CP#0
-  PushNull
-  PushConstant         CP#4
-  AssertAssignable     0, CP#5
-  Drop1
-L2:
-  Push                 FP[-6]
-  PushConstant         CP#6
-  PushNull
-  PushNull
-  PushConstant         CP#7
-  AssertAssignable     1, CP#8
-  Drop1
-  PushNull
-  ReturnTOS
-}
-Parameter flags: [0, 1, 2]
-Default function type arguments: CP#9
-ConstantPool {
-  [0] = TypeArgumentsField #lib::H
-  [1] = Type #lib::H::foo8::TypeParam/0*
-  [2] = Type #lib::H::TypeParam/0*
-  [3] = ObjectRef 'Q'
-  [4] = ObjectRef 'c'
-  [5] = SubtypeTestCache
-  [6] = Type dart:core::int*
-  [7] = ObjectRef 'b'
-  [8] = SubtypeTestCache
-  [9] = ObjectRef < #lib::H::TypeParam/0* >
-}
-
-
-Function 'foo7', reflectable, debuggable, forwarding-stub
-    type-params <#lib::H::TypeParam/0* Q>
-    parameters [#lib::H::foo7::TypeParam/0* 'a', dart:core::num* 'b', #lib::H::TypeParam/0* 'c'] (required: 3)
-    return-type void
-
-Bytecode {
-  Entry                2
-  CheckFunctionTypeArgs 1, r0
-  JumpIfNotZeroTypeArgs L1
-  Push                 FP[-8]
-  LoadTypeArgumentsField CP#0
-  PopLocal             r0
-L1:
-  CheckStack           0
-  JumpIfUnchecked      L2
-  Push                 FP[-8]
-  LoadTypeArgumentsField CP#0
-  Push                 r0
-  PushConstant         CP#1
-  PushConstant         CP#2
-  PushConstant         CP#3
-  AssertSubtype
-  Push                 FP[-5]
-  PushConstant         CP#2
-  Push                 FP[-8]
-  LoadTypeArgumentsField CP#0
-  PushNull
-  PushConstant         CP#4
-  AssertAssignable     0, CP#5
-  Drop1
-L2:
-  Push                 FP[-6]
-  PushConstant         CP#6
-  PushNull
-  PushNull
-  PushConstant         CP#7
-  AssertAssignable     1, CP#8
-  Drop1
-  PushNull
-  Push                 r0
-  InstantiateTypeArgumentsTOS 0, CP#9
-  Push                 FP[-8]
-  Push                 FP[-7]
-  Push                 FP[-6]
-  Push                 FP[-5]
-  UncheckedDirectCall  CP#10, 5
-  ReturnTOS
-}
-Parameter flags: [0, 1, 2]
-Forwarding stub target: CP#12
-Default function type arguments: CP#13
-ConstantPool {
-  [0] = TypeArgumentsField #lib::H
-  [1] = Type #lib::H::foo7::TypeParam/0*
-  [2] = Type #lib::H::TypeParam/0*
-  [3] = ObjectRef 'Q'
-  [4] = ObjectRef 'c'
-  [5] = SubtypeTestCache
-  [6] = Type dart:core::int*
-  [7] = ObjectRef 'b'
-  [8] = SubtypeTestCache
-  [9] = ObjectRef < #lib::H::foo7::TypeParam/0* >
-  [10] = DirectCall '#lib::G::foo7', ArgDesc num-args 4, num-type-args 1, names []
-  [11] = Reserved
-  [12] = ObjectRef #lib::G::foo7
-  [13] = ObjectRef < #lib::H::TypeParam/0* >
-}
-
-
-}
-]library #lib from "#lib" as #lib {
-
-  class A<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → #lib::A<#lib::A::T*>*
-      : super dart.core::Object::•()
-      ;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class B extends #lib::A<dart.core::String*> {
-    synthetic constructor •() → #lib::B*
-      : super #lib::A::•()
-      ;
-  }
-  class C<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic, T3 extends dart.core::Object* = dynamic> extends #lib::B {
-    synthetic constructor •() → #lib::C<#lib::C::T1*, #lib::C::T2*, #lib::C::T3*>*
-      : super #lib::B::•()
-      ;
-  }
-  class D<P extends dart.core::Object* = dynamic, Q extends dart.core::Object* = dynamic> extends #lib::C<dart.core::int*, #lib::D::Q*, #lib::D::P*> {
-    generic-covariant-impl field dart.core::Map<#lib::D::P*, #lib::D::Q*>* foo;
-    constructor •(dynamic tt) → #lib::D<#lib::D::P*, #lib::D::Q*>*
-      : #lib::D::foo = tt as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*, super #lib::C::•()
-      ;
-    method foo2(dynamic y) → dynamic {
-      if(y is #lib::A<#lib::D::P*>*) {
-        dart.core::print("21");
-      }
-      if(y is #lib::C<dynamic, #lib::D::Q*, dart.core::List<#lib::D::P*>*>*) {
-        dart.core::print("22");
-      }
-      [@vm.call-site-attributes.metadata=receiverType:#lib::D<#lib::D.P*, #lib::D.Q*>*] this.{#lib::D::foo} = y as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*;
-    }
-    method foo3<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic>(dynamic z) → dynamic {
-      if(z is #lib::A<#lib::D::foo3::T1*>*) {
-        dart.core::print("31");
-      }
-      if(z is #lib::C<dart.core::Map<#lib::D::foo3::T1*, #lib::D::P*>*, dart.core::List<#lib::D::foo3::T2*>*, #lib::D::Q*>*) {
-        dart.core::print("32");
-      }
-      return (z as dart.core::Map<#lib::D::foo3::T2*, #lib::D::Q*>*).{dart.core::Map::values};
-    }
-    method foo4(dynamic w) → dart.core::Map<#lib::D::P*, #lib::D::Q*>* {
-      dart.core::List<dart.core::Map<#lib::D::P*, #lib::D::Q*>*>* list = <dart.core::Map<#lib::D::P*, #lib::D::Q*>*>[w as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*];
-      return w as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*;
-    }
-  }
-  class E<P extends dart.core::String* = dart.core::String*> extends dart.core::Object {
-    static factory •<P extends dart.core::String* = dart.core::String*>() → #lib::E<#lib::E::•::P*>*
-      return null;
-    method foo6<generic-covariant-impl T extends #lib::E::P* = #lib::E::P*, U extends dart.core::List<#lib::E::foo6::T*>* = dart.core::List<#lib::E::P*>*>(dart.core::Map<#lib::E::foo6::T*, #lib::E::foo6::U*>* map) → void {}
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  abstract class F<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → #lib::F<#lib::F::T*>*
-      : super dart.core::Object::•()
-      ;
-    abstract method foo7<generic-covariant-impl Q extends #lib::F::T* = #lib::F::T*>(#lib::F::foo7::Q* a, covariant dart.core::num* b, generic-covariant-impl #lib::F::T* c) → void;
-    abstract method foo8<generic-covariant-impl Q extends #lib::F::T* = #lib::F::T*>(#lib::F::foo8::Q* a, covariant dart.core::num* b, generic-covariant-impl #lib::F::T* c) → void;
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class G<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → #lib::G<#lib::G::T*>*
-      : super dart.core::Object::•()
-      ;
-    method foo7<generic-covariant-impl Q extends #lib::G::T* = #lib::G::T*>(#lib::G::foo7::Q* a, dart.core::int* b, generic-covariant-impl #lib::G::T* c) → void {}
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-  }
-  class H<T extends dart.core::Object* = dynamic> extends #lib::G<#lib::H::T*> implements #lib::F<#lib::H::T*> {
-    synthetic constructor •() → #lib::H<#lib::H::T*>*
-      : super #lib::G::•()
-      ;
-    method foo8<generic-covariant-impl Q extends #lib::H::T* = #lib::H::T*>(#lib::H::foo8::Q* a, covariant dart.core::int* b, generic-covariant-impl #lib::H::T* c) → void {}
-    forwarding-stub method foo7<generic-covariant-impl Q extends #lib::H::T* = #lib::H::T*>(#lib::H::foo7::Q* a, covariant dart.core::num* b, generic-covariant-impl #lib::H::T* c) → void
-      return super.{#lib::G::foo7}<#lib::H::foo7::Q*>(a, b, c);
-  }
-  static field dart.core::List<dart.core::Iterable<dynamic>*>* globalVar;
-  static method foo1(dynamic x) → dynamic {
-    if(x is #lib::B*) {
-      dart.core::print("11");
-    }
-    if(x is #lib::C<dart.core::int*, dart.core::Object*, dynamic>*) {
-      dart.core::print("12");
-    }
-    return x as #lib::A<dart.core::int*>*;
-  }
-  static method foo5(dynamic x) → void {
-    #lib::globalVar = x as{TypeError,ForDynamic} dart.core::List<dart.core::Iterable<dynamic>*>*;
-  }
-  static method main() → dynamic {}
-}
diff --git a/pkg/vm/tool/precompiler2 b/pkg/vm/tool/precompiler2
index ef80061..6010ee8 100755
--- a/pkg/vm/tool/precompiler2
+++ b/pkg/vm/tool/precompiler2
@@ -36,9 +36,6 @@
     --no-tfa | \
     --protobuf-tree-shaker | \
     --protobuf-tree-shaker-v2 | \
-    --gen-bytecode | \
-    --no-gen-bytecode | \
-    --bytecode-options=* | \
     --minimal-kernel | \
     --no-embed-sources | \
     -D* )
diff --git a/runtime/tests/vm/dart/product_aot_kernel_test.dart b/runtime/tests/vm/dart/product_aot_kernel_test.dart
index 5bc2f13..d46dd14 100644
--- a/runtime/tests/vm/dart/product_aot_kernel_test.dart
+++ b/runtime/tests/vm/dart/product_aot_kernel_test.dart
@@ -13,7 +13,6 @@
     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';
 
@@ -48,45 +47,22 @@
     // 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 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 = 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);
+    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(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);
-    }
+    // 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/product_aot_kernel_test.dart b/runtime/tests/vm/dart_2/product_aot_kernel_test.dart
index 5bc2f13..d46dd14 100644
--- a/runtime/tests/vm/dart_2/product_aot_kernel_test.dart
+++ b/runtime/tests/vm/dart_2/product_aot_kernel_test.dart
@@ -13,7 +13,6 @@
     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';
 
@@ -48,45 +47,22 @@
     // 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 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 = 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);
+    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(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);
-    }
+    // Those fields are currently accessed by by the embedder, even in product
+    // mode.
+    Expect.isTrue(libVmServiceIo.fields.length <= 11);
   });
 }
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index e989d38..475ad93 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -817,7 +817,7 @@
                                        FinalizationKind finalization) {
   AbstractType& type = AbstractType::Handle();
   AbstractType& finalized_type = AbstractType::Handle();
-  // Finalize function type parameters and their upper bounds.
+  // Finalize function type parameters, including their bounds and default args.
   const intptr_t num_parent_type_params = function.NumParentTypeParameters();
   const intptr_t num_type_params = function.NumTypeParameters();
   if (num_type_params > 0) {
@@ -841,6 +841,11 @@
       if (finalized_type.raw() != type.raw()) {
         type_param.set_bound(finalized_type);
       }
+      type = type_param.default_argument();
+      finalized_type = FinalizeType(type, finalization);
+      if (finalized_type.raw() != type.raw()) {
+        type_param.set_default_argument(finalized_type);
+      }
     }
   }
   // Finalize result type.
@@ -860,26 +865,31 @@
   }
 }
 
-// Finalize the upper bounds of the type parameters of class cls.
+// Finalize bounds and default arguments of the type parameters of class cls.
 void ClassFinalizer::FinalizeUpperBounds(const Class& cls,
                                          FinalizationKind finalization) {
   const intptr_t num_type_params = cls.NumTypeParameters();
   TypeParameter& type_param = TypeParameter::Handle();
-  AbstractType& bound = AbstractType::Handle();
+  AbstractType& type = AbstractType::Handle();
   const TypeArguments& type_params =
       TypeArguments::Handle(cls.type_parameters());
   ASSERT((type_params.IsNull() && (num_type_params == 0)) ||
          (type_params.Length() == num_type_params));
   for (intptr_t i = 0; i < num_type_params; i++) {
     type_param ^= type_params.TypeAt(i);
-    bound = type_param.bound();
+    // First, finalize the default argument (no cycles possible here).
+    type = type_param.default_argument();
+    type = FinalizeType(type, finalization);
+    type_param.set_default_argument(type);
+    // Next, finalize the bound.
+    type = type_param.bound();
     // Bound may be finalized, but not canonical yet.
-    if (bound.IsCanonical() || bound.IsBeingFinalized()) {
+    if (type.IsCanonical() || type.IsBeingFinalized()) {
       // A bound involved in F-bounded quantification may form a cycle.
       continue;
     }
-    bound = FinalizeType(bound, finalization);
-    type_param.set_bound(bound);
+    type = FinalizeType(type, finalization);
+    type_param.set_bound(type);
   }
 }
 
diff --git a/runtime/vm/compiler/frontend/bytecode_reader.cc b/runtime/vm/compiler/frontend/bytecode_reader.cc
index ef3a137..15f3dda 100644
--- a/runtime/vm/compiler/frontend/bytecode_reader.cc
+++ b/runtime/vm/compiler/frontend/bytecode_reader.cc
@@ -649,18 +649,22 @@
       TypeArguments::Handle(Z, TypeArguments::New(num_type_params));
   String& name = String::Handle(Z);
   TypeParameter& parameter = TypeParameter::Handle(Z);
-  AbstractType& bound = AbstractType::Handle(Z);
+  AbstractType& type = AbstractType::Handle(Z);
   for (intptr_t i = 0; i < num_type_params; ++i) {
     name ^= ReadObject();
     ASSERT(name.IsSymbol());
     parameter = TypeParameter::New(parameterized_class, parameterized_function,
-                                   i, name, bound,
+                                   i, name, /* bound = */ type,
                                    /* is_generic_covariant_impl = */ false,
                                    nullability, TokenPosition::kNoSource);
     parameter.set_index(offset + i);
     parameter.SetIsFinalized();
     parameter.SetCanonical();
     parameter.SetDeclaration(true);
+    // For functions, default type arguments aren't available here but with the
+    // bytecode, so update any non-dynamic default arguments when reading the
+    // bytecode. (For classes, we don't currently use this, so dynamic is fine.)
+    parameter.set_default_argument(Object::dynamic_type());
     type_parameters.SetTypeAt(i, parameter);
   }
 
@@ -686,23 +690,22 @@
   // Step b) Fill in the bounds of all [TypeParameter]s.
   for (intptr_t i = 0; i < num_type_params; ++i) {
     parameter ^= type_parameters.TypeAt(i);
-    bound ^= ReadObject();
+    type ^= ReadObject();
     // Convert dynamic to Object? or Object* in bounds of type parameters so
     // they are equivalent when doing subtype checks for function types.
     // TODO(https://github.com/dart-lang/language/issues/495): revise this
     // when function subtyping is fixed.
-    if (bound.IsDynamicType()) {
-      bound = nnbd_mode == NNBDMode::kOptedInLib
-                  ? I->object_store()->nullable_object_type()
-                  : I->object_store()->legacy_object_type();
+    if (type.IsDynamicType()) {
+      type = nnbd_mode == NNBDMode::kOptedInLib
+                 ? I->object_store()->nullable_object_type()
+                 : I->object_store()->legacy_object_type();
     }
-    parameter.set_bound(bound);
+    parameter.set_bound(type);
   }
 
   // Fix bounds in all derived type parameters (with different nullabilities).
   if (active_class_->derived_type_parameters != nullptr) {
     auto& derived = TypeParameter::Handle(Z);
-    auto& bound = AbstractType::Handle(Z);
     for (intptr_t i = 0, n = active_class_->derived_type_parameters->Length();
          i < n; ++i) {
       derived ^= active_class_->derived_type_parameters->At(i);
@@ -714,8 +717,10 @@
                 parameterized_function.raw()))) {
         ASSERT(derived.IsFinalized());
         parameter ^= type_parameters.TypeAt(derived.index() - offset);
-        bound = parameter.bound();
-        derived.set_bound(bound);
+        type = parameter.bound();
+        derived.set_bound(type);
+        type = parameter.default_argument();
+        derived.set_default_argument(type);
       }
     }
   }
@@ -3119,7 +3124,19 @@
     const intptr_t cp_index = reader_.ReadUInt();
     const auto& type_args =
         TypeArguments::CheckedHandle(Z, obj_pool.ObjectAt(cp_index));
-    parsed_function->SetDefaultFunctionTypeArguments(type_args);
+    // In bytecode mode, all type parameters are created with a default
+    // argument of dynamic, so only need to update if not the all-dynamic TAV.
+    if (!type_args.IsNull()) {
+      auto& type_params = TypeArguments::Handle(Z, function.type_parameters());
+      ASSERT_EQUAL(type_params.Length(), type_args.Length());
+      auto& param = TypeParameter::Handle(Z);
+      auto& type = AbstractType::Handle(Z);
+      for (intptr_t i = 0; i < type_params.Length(); i++) {
+        param ^= type_params.TypeAt(i);
+        type = type_args.TypeAt(i);
+        param.set_default_argument(type);
+      }
+    }
   }
 
   if (function.HasOptionalParameters()) {
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 7c7d7e7..da8192e 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -457,32 +457,6 @@
   return instructions;
 }
 
-void StreamingFlowGraphBuilder::ReadDefaultFunctionTypeArguments(
-    const Function& function) {
-  if (!function.IsGeneric()) {
-    return;
-  }
-  AlternativeReadingScope alt(&reader_);
-  FunctionNodeHelper function_node_helper(this);
-  function_node_helper.ReadUntilExcluding(FunctionNodeHelper::kTypeParameters);
-  intptr_t num_type_params = ReadListLength();
-  ASSERT(num_type_params == function.NumTypeParameters());
-  TypeArguments& default_types =
-      TypeArguments::Handle(Z, TypeArguments::New(num_type_params));
-  for (intptr_t i = 0; i < num_type_params; ++i) {
-    TypeParameterHelper helper(this);
-    helper.ReadUntilExcludingAndSetJustRead(TypeParameterHelper::kDefaultType);
-    if (ReadTag() == kSomething) {
-      default_types.SetTypeAt(i, T.BuildType());
-    } else {
-      default_types.SetTypeAt(i, Object::dynamic_type());
-    }
-    helper.Finish();
-  }
-  default_types = default_types.Canonicalize(thread(), nullptr);
-  parsed_function()->SetDefaultFunctionTypeArguments(default_types);
-}
-
 Fragment StreamingFlowGraphBuilder::DebugStepCheckInPrologue(
     const Function& dart_function,
     TokenPosition position) {
@@ -1215,7 +1189,6 @@
     case FunctionLayout::kImplicitClosureFunction:
       ReadUntilFunctionNode();
       SetupDefaultParameterValues();
-      ReadDefaultFunctionTypeArguments(function);
       break;
     case FunctionLayout::kImplicitGetter:
     case FunctionLayout::kImplicitStaticGetter:
@@ -1230,7 +1203,6 @@
       if (PeekTag() != kField) {
         ReadUntilFunctionNode();
         SetupDefaultParameterValues();
-        ReadDefaultFunctionTypeArguments(function);
       }
       break;
     case FunctionLayout::kSignatureFunction:
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index 2f4b90f..ebaa6fb 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -63,7 +63,6 @@
   void ReadForwardingStubTarget(const Function& function);
   void EvaluateConstFieldValue(const Field& field);
   void SetupDefaultParameterValues();
-  void ReadDefaultFunctionTypeArguments(const Function& function);
 
   FlowGraph* BuildGraphOfFieldInitializer();
   Fragment BuildFieldInitializer(const Field& field,
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 991a552..46daea0 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -2816,8 +2816,8 @@
 
 Fragment FlowGraphBuilder::BuildDefaultTypeHandling(const Function& function) {
   if (function.IsGeneric()) {
-    const TypeArguments& default_types =
-        parsed_function_->DefaultFunctionTypeArguments();
+    auto& default_types =
+        TypeArguments::ZoneHandle(Z, function.InstantiateToBounds(thread_));
 
     if (!default_types.IsNull()) {
       Fragment then;
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index a262192..b0af83b 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -3331,7 +3331,7 @@
   }
   ActiveTypeParametersScope scope(active_class, enclosing, type_parameters, Z);
 
-  // Step b) Fill in the bounds of all [TypeParameter]s.
+  // Step b) Fill in the bounds and default arguments of all [TypeParameter]s.
   for (intptr_t i = 0; i < type_parameter_count; i++) {
     TypeParameterHelper helper(helper_);
     helper.ReadUntilExcludingAndSetJustRead(TypeParameterHelper::kBound);
@@ -3350,14 +3350,21 @@
       AbstractType& bound = BuildTypeWithoutFinalization();  // read ith bound.
       parameter.set_bound(bound);
     }
+    helper.ReadUntilExcludingAndSetJustRead(TypeParameterHelper::kDefaultType);
+    const AbstractType* default_arg = &Object::dynamic_type();
+    if (helper_->ReadTag() == kSomething) {
+      default_arg = &BuildTypeWithoutFinalization();
+    }
+    parameter.set_default_argument(*default_arg);
 
     helper.Finish();
   }
 
-  // Fix bounds in all derived type parameters (with different nullabilities).
+  // Fix bounds and default arguments in all derived type parameters (with
+  // different nullabilities).
   if (active_class->derived_type_parameters != nullptr) {
     auto& derived = TypeParameter::Handle(Z);
-    auto& bound = AbstractType::Handle(Z);
+    auto& type = AbstractType::Handle(Z);
     for (intptr_t i = 0, n = active_class->derived_type_parameters->Length();
          i < n; ++i) {
       derived ^= active_class->derived_type_parameters->At(i);
@@ -3366,8 +3373,10 @@
            derived.parameterized_function() == set_on.raw())) {
         ASSERT(!derived.IsFinalized());
         parameter ^= type_parameters.TypeAt(derived.index());
-        bound = parameter.bound();
-        derived.set_bound(bound);
+        type = parameter.bound();
+        derived.set_bound(type);
+        type = parameter.default_argument();
+        derived.set_default_argument(type);
       }
     }
   }
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 4a6d9e0..7873607 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -383,8 +383,8 @@
 static constexpr dart::compiler::target::word Type_type_state_offset = 32;
 static constexpr dart::compiler::target::word Type_nullability_offset = 33;
 static constexpr dart::compiler::target::word
-    TypeParameter_parameterized_class_id_offset = 28;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 36;
+    TypeParameter_parameterized_class_id_offset = 32;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 40;
 static constexpr dart::compiler::target::word
     TypeArguments_instantiations_offset = 4;
 static constexpr dart::compiler::target::word TypeArguments_length_offset = 8;
@@ -506,7 +506,7 @@
 static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 12;
 static constexpr dart::compiler::target::word Type_InstanceSize = 36;
 static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 20;
-static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 44;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 16;
 static constexpr dart::compiler::target::word TypedData_InstanceSize = 12;
 static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 12;
@@ -893,8 +893,8 @@
 static constexpr dart::compiler::target::word Type_type_state_offset = 60;
 static constexpr dart::compiler::target::word Type_nullability_offset = 61;
 static constexpr dart::compiler::target::word
-    TypeParameter_parameterized_class_id_offset = 56;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 64;
+    TypeParameter_parameterized_class_id_offset = 64;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 72;
 static constexpr dart::compiler::target::word
     TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word TypeArguments_length_offset = 16;
@@ -1018,7 +1018,7 @@
 static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 16;
 static constexpr dart::compiler::target::word Type_InstanceSize = 64;
 static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 40;
-static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 72;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 80;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word TypedData_InstanceSize = 24;
 static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
@@ -1399,8 +1399,8 @@
 static constexpr dart::compiler::target::word Type_type_state_offset = 32;
 static constexpr dart::compiler::target::word Type_nullability_offset = 33;
 static constexpr dart::compiler::target::word
-    TypeParameter_parameterized_class_id_offset = 28;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 36;
+    TypeParameter_parameterized_class_id_offset = 32;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 40;
 static constexpr dart::compiler::target::word
     TypeArguments_instantiations_offset = 4;
 static constexpr dart::compiler::target::word TypeArguments_length_offset = 8;
@@ -1519,7 +1519,7 @@
 static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 12;
 static constexpr dart::compiler::target::word Type_InstanceSize = 36;
 static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 20;
-static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 44;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 16;
 static constexpr dart::compiler::target::word TypedData_InstanceSize = 12;
 static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 12;
@@ -1906,8 +1906,8 @@
 static constexpr dart::compiler::target::word Type_type_state_offset = 60;
 static constexpr dart::compiler::target::word Type_nullability_offset = 61;
 static constexpr dart::compiler::target::word
-    TypeParameter_parameterized_class_id_offset = 56;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 64;
+    TypeParameter_parameterized_class_id_offset = 64;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 72;
 static constexpr dart::compiler::target::word
     TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word TypeArguments_length_offset = 16;
@@ -2032,7 +2032,7 @@
 static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 16;
 static constexpr dart::compiler::target::word Type_InstanceSize = 64;
 static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 40;
-static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 72;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 80;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word TypedData_InstanceSize = 24;
 static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
@@ -2412,8 +2412,8 @@
 static constexpr dart::compiler::target::word Type_type_state_offset = 32;
 static constexpr dart::compiler::target::word Type_nullability_offset = 33;
 static constexpr dart::compiler::target::word
-    TypeParameter_parameterized_class_id_offset = 28;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 36;
+    TypeParameter_parameterized_class_id_offset = 32;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 40;
 static constexpr dart::compiler::target::word
     TypeArguments_instantiations_offset = 4;
 static constexpr dart::compiler::target::word TypeArguments_length_offset = 8;
@@ -2532,7 +2532,7 @@
 static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 12;
 static constexpr dart::compiler::target::word Type_InstanceSize = 36;
 static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 20;
-static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 44;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 16;
 static constexpr dart::compiler::target::word TypedData_InstanceSize = 12;
 static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 12;
@@ -2916,8 +2916,8 @@
 static constexpr dart::compiler::target::word Type_type_state_offset = 60;
 static constexpr dart::compiler::target::word Type_nullability_offset = 61;
 static constexpr dart::compiler::target::word
-    TypeParameter_parameterized_class_id_offset = 56;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 64;
+    TypeParameter_parameterized_class_id_offset = 64;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 72;
 static constexpr dart::compiler::target::word
     TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word TypeArguments_length_offset = 16;
@@ -3038,7 +3038,7 @@
 static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 16;
 static constexpr dart::compiler::target::word Type_InstanceSize = 64;
 static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 40;
-static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 72;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 80;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word TypedData_InstanceSize = 24;
 static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
@@ -3416,8 +3416,8 @@
 static constexpr dart::compiler::target::word Type_type_state_offset = 32;
 static constexpr dart::compiler::target::word Type_nullability_offset = 33;
 static constexpr dart::compiler::target::word
-    TypeParameter_parameterized_class_id_offset = 28;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 36;
+    TypeParameter_parameterized_class_id_offset = 32;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 40;
 static constexpr dart::compiler::target::word
     TypeArguments_instantiations_offset = 4;
 static constexpr dart::compiler::target::word TypeArguments_length_offset = 8;
@@ -3533,7 +3533,7 @@
 static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 12;
 static constexpr dart::compiler::target::word Type_InstanceSize = 36;
 static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 20;
-static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 44;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 16;
 static constexpr dart::compiler::target::word TypedData_InstanceSize = 12;
 static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 12;
@@ -3917,8 +3917,8 @@
 static constexpr dart::compiler::target::word Type_type_state_offset = 60;
 static constexpr dart::compiler::target::word Type_nullability_offset = 61;
 static constexpr dart::compiler::target::word
-    TypeParameter_parameterized_class_id_offset = 56;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 64;
+    TypeParameter_parameterized_class_id_offset = 64;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 72;
 static constexpr dart::compiler::target::word
     TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word TypeArguments_length_offset = 16;
@@ -4040,7 +4040,7 @@
 static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 16;
 static constexpr dart::compiler::target::word Type_InstanceSize = 64;
 static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 40;
-static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 72;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 80;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word TypedData_InstanceSize = 24;
 static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
@@ -4454,9 +4454,9 @@
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 32;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 33;
 static constexpr dart::compiler::target::word
-    AOT_TypeParameter_parameterized_class_id_offset = 28;
+    AOT_TypeParameter_parameterized_class_id_offset = 32;
 static constexpr dart::compiler::target::word AOT_TypeParameter_index_offset =
-    36;
+    40;
 static constexpr dart::compiler::target::word
     AOT_TypeArguments_instantiations_offset = 4;
 static constexpr dart::compiler::target::word AOT_TypeArguments_length_offset =
@@ -4597,7 +4597,7 @@
 static constexpr dart::compiler::target::word AOT_TypeArguments_InstanceSize =
     20;
 static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
-    40;
+    44;
 static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 12;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
@@ -5013,9 +5013,9 @@
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 60;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 61;
 static constexpr dart::compiler::target::word
-    AOT_TypeParameter_parameterized_class_id_offset = 56;
+    AOT_TypeParameter_parameterized_class_id_offset = 64;
 static constexpr dart::compiler::target::word AOT_TypeParameter_index_offset =
-    64;
+    72;
 static constexpr dart::compiler::target::word
     AOT_TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word AOT_TypeArguments_length_offset =
@@ -5157,7 +5157,7 @@
 static constexpr dart::compiler::target::word AOT_TypeArguments_InstanceSize =
     40;
 static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
-    72;
+    80;
 static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
@@ -5576,9 +5576,9 @@
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 60;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 61;
 static constexpr dart::compiler::target::word
-    AOT_TypeParameter_parameterized_class_id_offset = 56;
+    AOT_TypeParameter_parameterized_class_id_offset = 64;
 static constexpr dart::compiler::target::word AOT_TypeParameter_index_offset =
-    64;
+    72;
 static constexpr dart::compiler::target::word
     AOT_TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word AOT_TypeArguments_length_offset =
@@ -5721,7 +5721,7 @@
 static constexpr dart::compiler::target::word AOT_TypeArguments_InstanceSize =
     40;
 static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
-    72;
+    80;
 static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
@@ -6133,9 +6133,9 @@
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 32;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 33;
 static constexpr dart::compiler::target::word
-    AOT_TypeParameter_parameterized_class_id_offset = 28;
+    AOT_TypeParameter_parameterized_class_id_offset = 32;
 static constexpr dart::compiler::target::word AOT_TypeParameter_index_offset =
-    36;
+    40;
 static constexpr dart::compiler::target::word
     AOT_TypeArguments_instantiations_offset = 4;
 static constexpr dart::compiler::target::word AOT_TypeArguments_length_offset =
@@ -6273,7 +6273,7 @@
 static constexpr dart::compiler::target::word AOT_TypeArguments_InstanceSize =
     20;
 static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
-    40;
+    44;
 static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 12;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
@@ -6685,9 +6685,9 @@
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 60;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 61;
 static constexpr dart::compiler::target::word
-    AOT_TypeParameter_parameterized_class_id_offset = 56;
+    AOT_TypeParameter_parameterized_class_id_offset = 64;
 static constexpr dart::compiler::target::word AOT_TypeParameter_index_offset =
-    64;
+    72;
 static constexpr dart::compiler::target::word
     AOT_TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word AOT_TypeArguments_length_offset =
@@ -6826,7 +6826,7 @@
 static constexpr dart::compiler::target::word AOT_TypeArguments_InstanceSize =
     40;
 static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
-    72;
+    80;
 static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
@@ -7241,9 +7241,9 @@
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 60;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 61;
 static constexpr dart::compiler::target::word
-    AOT_TypeParameter_parameterized_class_id_offset = 56;
+    AOT_TypeParameter_parameterized_class_id_offset = 64;
 static constexpr dart::compiler::target::word AOT_TypeParameter_index_offset =
-    64;
+    72;
 static constexpr dart::compiler::target::word
     AOT_TypeArguments_instantiations_offset = 8;
 static constexpr dart::compiler::target::word AOT_TypeArguments_length_offset =
@@ -7383,7 +7383,7 @@
 static constexpr dart::compiler::target::word AOT_TypeArguments_InstanceSize =
     40;
 static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
-    72;
+    80;
 static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index ab6f5b5..a35ccf7 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -3284,6 +3284,33 @@
   return num_type_args;
 }
 
+static TypeArgumentsPtr InstantiateTypeArgumentsToBounds(
+    Thread* thread,
+    const TypeArguments& parameters) {
+  ASSERT(thread != nullptr);
+  if (parameters.IsNull()) {
+    return Object::empty_type_arguments().raw();
+  }
+  auto const zone = thread->zone();
+  const auto& result = TypeArguments::Handle(
+      zone, TypeArguments::New(parameters.Length(), Heap::kNew));
+  auto& param = TypeParameter::Handle(zone);
+  auto& type = AbstractType::Handle(zone);
+  for (intptr_t i = 0, n = parameters.Length(); i < n; i++) {
+    param ^= parameters.TypeAt(i);
+    type = param.default_argument();
+    ASSERT(type.IsFinalized());
+    result.SetTypeAt(i, type);
+  }
+  return result.Canonicalize(thread);
+}
+
+TypeArgumentsPtr Class::InstantiateToBounds(Thread* thread) const {
+  const auto& type_params =
+      TypeArguments::Handle(thread->zone(), type_parameters());
+  return InstantiateTypeArgumentsToBounds(thread, type_params);
+}
+
 ClassPtr Class::SuperClass(bool original_classes) const {
   Thread* thread = Thread::Current();
   Zone* zone = thread->zone();
@@ -7010,6 +7037,12 @@
   }
 }
 
+TypeArgumentsPtr Function::InstantiateToBounds(Thread* thread) const {
+  const auto& type_params =
+      TypeArguments::Handle(thread->zone(), type_parameters());
+  return InstantiateTypeArgumentsToBounds(thread, type_params);
+}
+
 FunctionPtr Function::GetGeneratedClosure() const {
   const auto& closure_functions = GrowableObjectArray::Handle(
       Isolate::Current()->object_store()->closure_functions());
@@ -7967,90 +8000,6 @@
   return Error::null();
 }
 
-// Returns a TypeArguments object where, for each type parameter local to this
-// function, the entry in the TypeArguments is an instantiated version of its
-// bound. In the instantiated bound, any local function type parameter
-// references are replaced with the corresponding bound if that bound can be
-// fully instantiated without local function type parameters, otherwise dynamic.
-static TypeArgumentsPtr InstantiateTypeParametersToBounds(
-    Thread* thread,
-    const TokenPosition& token_pos,
-    const TypeArguments& type_parameters,
-    const TypeArguments& instantiator_type_args,
-    intptr_t num_parent_type_args,
-    const TypeArguments& parent_type_args) {
-  ASSERT(!type_parameters.IsNull());
-  auto const zone = thread->zone();
-  const intptr_t kNumCurrentTypeArgs = type_parameters.Length();
-  const intptr_t kNumTypeArgs = kNumCurrentTypeArgs + num_parent_type_args;
-  auto& function_type_args = TypeArguments::Handle(zone);
-
-  bool all_bounds_instantiated = true;
-
-  // Create a type argument vector large enough for the parents' and current
-  // type arguments.
-  function_type_args = TypeArguments::New(kNumTypeArgs);
-  auto& type = AbstractType::Handle(zone);
-  auto& bound = AbstractType::Handle(zone);
-  // First copy over the parent type args (or the dynamic type if null).
-  for (intptr_t i = 0; i < num_parent_type_args; i++) {
-    type = parent_type_args.IsNull() ? Type::DynamicType()
-                                     : parent_type_args.TypeAt(i);
-    function_type_args.SetTypeAt(i, type);
-  }
-  // Now try fully instantiating the bounds of each parameter using only
-  // the instantiator and parent function type arguments. If possible, keep the
-  // instantiated bound as the entry. Otherwise, just set that entry to dynamic.
-  for (intptr_t i = num_parent_type_args; i < kNumTypeArgs; i++) {
-    type = type_parameters.TypeAt(i - num_parent_type_args);
-    const auto& param = TypeParameter::Cast(type);
-    bound = param.bound();
-    // Only instantiate up to the parent type parameters.
-    if (!bound.IsInstantiated(kAny, num_parent_type_args)) {
-      bound = bound.InstantiateFrom(instantiator_type_args, function_type_args,
-                                    num_parent_type_args, Heap::kNew);
-    }
-    if (!bound.IsInstantiated()) {
-      // There are local type variables used in this bound.
-      bound = Type::DynamicType();
-      all_bounds_instantiated = false;
-    }
-    function_type_args.SetTypeAt(i, bound);
-  }
-
-  // If all the bounds were instantiated in the first pass, then there can't
-  // be any self or mutual recursion, so skip the bounds subtype check.
-  if (all_bounds_instantiated) return function_type_args.raw();
-
-  // Do another pass, using the set of TypeArguments we just created. If a given
-  // bound was instantiated in the last pass, just copy it over. (We don't need
-  // to iterate to a fixed point, since there should be no self or mutual
-  // recursion in the bounds.)
-  const auto& first_round =
-      TypeArguments::Handle(zone, function_type_args.raw());
-  function_type_args = TypeArguments::New(kNumTypeArgs);
-  // Again, copy over the parent type arguments first.
-  for (intptr_t i = 0; i < num_parent_type_args; i++) {
-    type = first_round.TypeAt(i);
-    function_type_args.SetTypeAt(i, type);
-  }
-  for (intptr_t i = num_parent_type_args; i < kNumTypeArgs; i++) {
-    type = type_parameters.TypeAt(i - num_parent_type_args);
-    const auto& param = TypeParameter::Cast(type);
-    bound = first_round.TypeAt(i);
-    // The dynamic type is never a bound, even when implicit, so it also marks
-    // bounds that were not already fully instantiated.
-    if (bound.raw() == Type::DynamicType()) {
-      bound = param.bound();
-      bound = bound.InstantiateFrom(instantiator_type_args, first_round,
-                                    kAllFree, Heap::kNew);
-    }
-    function_type_args.SetTypeAt(i, bound);
-  }
-
-  return function_type_args.Canonicalize(thread);
-}
-
 // Retrieves the function type arguments, if any. This could be explicitly
 // passed type from the arguments array, delayed type arguments in closures,
 // or instantiated bounds for the type parameters if no other source for
@@ -8087,31 +8036,27 @@
   if (kNumCurrentTypeArgs == 0) return parent_type_args.raw();
 
   auto& function_type_args = TypeArguments::Handle(zone);
+  // First check for delayed type arguments before using either provided or
+  // default type arguments.
+  bool has_delayed_type_args = false;
   if (function.IsClosureFunction()) {
     const auto& closure = Closure::Cast(receiver);
     function_type_args = closure.delayed_type_arguments();
-    if (function_type_args.raw() == Object::empty_type_arguments().raw()) {
-      // There are no delayed type arguments, so set back to null.
-      function_type_args = TypeArguments::null();
-    } else {
-      // We should never end up here when the receiver is a closure with delayed
-      // type arguments unless this dynamically called closure function was
-      // retrieved directly from the closure instead of going through
-      // DartEntry::ResolveCallable, which appropriately checks for this case.
-      ASSERT(args_desc.TypeArgsLen() == 0);
-    }
+    has_delayed_type_args =
+        function_type_args.raw() != Object::empty_type_arguments().raw();
   }
 
   if (args_desc.TypeArgsLen() > 0) {
+    // We should never end up here when the receiver is a closure with delayed
+    // type arguments unless this dynamically called closure function was
+    // retrieved directly from the closure instead of going through
+    // DartEntry::ResolveCallable, which appropriately checks for this case.
+    ASSERT(!has_delayed_type_args);
     function_type_args ^= args.At(0);
-  }
-
-  if (function_type_args.IsNull()) {
-    // We have no explicitly provided function type arguments, so generate
-    // some by instantiating the parameters to bounds.
-    return InstantiateTypeParametersToBounds(
-        thread, function.token_pos(), type_params, instantiator_type_args,
-        kNumParentTypeArgs, parent_type_args);
+  } else if (!has_delayed_type_args) {
+    // We have no explicitly provided function type arguments, so instantiate
+    // the type parameters to bounds.
+    function_type_args = function.InstantiateToBounds(thread);
   }
 
   return function_type_args.Prepend(zone, parent_type_args, kNumParentTypeArgs,
@@ -21025,6 +20970,10 @@
   StorePointer(&raw_ptr()->bound_, value.raw());
 }
 
+void TypeParameter::set_default_argument(const AbstractType& value) const {
+  StorePointer(&raw_ptr()->default_argument_, value.raw());
+}
+
 AbstractTypePtr TypeParameter::GetFromTypeArguments(
     const TypeArguments& instantiator_type_arguments,
     const TypeArguments& function_type_arguments) const {
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 33f8660..7a6fc07 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -1114,6 +1114,10 @@
   // Return true if this class declares type parameters.
   bool IsGeneric() const { return NumTypeParameters(Thread::Current()) > 0; }
 
+  // Returns a canonicalized vector of the type parameters instantiated
+  // to bounds. If non-generic, the empty type arguments vector is returned.
+  TypeArgumentsPtr InstantiateToBounds(Thread* thread) const;
+
   // If this class is parameterized, each instance has a type_arguments field.
   static const intptr_t kNoTypeArguments = -1;
   intptr_t host_type_arguments_field_offset() const {
@@ -2768,6 +2772,10 @@
   // Enclosing function of this local function.
   FunctionPtr parent_function() const;
 
+  // Returns a canonicalized vector of the type parameters instantiated
+  // to bounds. If non-generic, the empty type arguments vector is returned.
+  TypeArgumentsPtr InstantiateToBounds(Thread* thread) const;
+
   // Enclosed generated closure function of this local function.
   // This will only work after the closure function has been allocated in the
   // isolate's object_store.
@@ -8517,6 +8525,10 @@
   void set_index(intptr_t value) const;
   AbstractTypePtr bound() const { return raw_ptr()->bound_; }
   void set_bound(const AbstractType& value) const;
+  AbstractTypePtr default_argument() const {
+    return raw_ptr()->default_argument_;
+  }
+  void set_default_argument(const AbstractType& value) const;
   virtual TokenPosition token_pos() const { return raw_ptr()->token_pos_; }
   virtual bool IsInstantiated(Genericity genericity = kAny,
                               intptr_t num_free_fun_type_params = kAllFree,
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 9902dc6..fefbb4a 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -66,8 +66,7 @@
       first_parameter_index_(),
       num_stack_locals_(0),
       have_seen_await_expr_(false),
-      kernel_scopes_(NULL),
-      default_function_type_arguments_(TypeArguments::ZoneHandle(zone())) {
+      kernel_scopes_(NULL) {
   ASSERT(function.IsZoneHandle());
   // Every function has a local variable for the current context.
   LocalVariable* temp = new (zone())
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index 9c56692..22ae1f4 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.h
@@ -213,14 +213,6 @@
     return scope()->VariableAt(i);
   }
 
-  void SetDefaultFunctionTypeArguments(const TypeArguments& value) {
-    default_function_type_arguments_ = value.raw();
-  }
-
-  const TypeArguments& DefaultFunctionTypeArguments() const {
-    return default_function_type_arguments_;
-  }
-
   // Remembers the set of covariant parameters.
   // [covariant_parameters] is a bitvector of function.NumParameters() length.
   void SetCovariantParameters(const BitVector* covariant_parameters);
@@ -288,8 +280,6 @@
   const Function* forwarding_stub_super_target_ = nullptr;
   kernel::ScopeBuildingResult* kernel_scopes_;
 
-  TypeArguments& default_function_type_arguments_;
-
   const BitVector* covariant_parameters_ = nullptr;
   const BitVector* generic_covariant_impl_parameters_ = nullptr;
 
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 498fd5d..6436338 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -2289,6 +2289,11 @@
   StringPtr name_;
   SmiPtr hash_;
   AbstractTypePtr bound_;  // ObjectType if no explicit bound specified.
+  // The instantiation to bounds of this parameter as calculated by the CFE.
+  //
+  // TODO(dartbug.com/43901): Once a separate TypeParameters class has been
+  // added, move these there and remove them from TypeParameter objects.
+  AbstractTypePtr default_argument_;
   FunctionPtr parameterized_function_;
   VISIT_TO(ObjectPtr, parameterized_function_)
   ClassIdTagType parameterized_class_id_;
diff --git a/tools/VERSION b/tools/VERSION
index 8b1debf..2f9367b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 11
 PATCH 0
-PRERELEASE 251
+PRERELEASE 252
 PRERELEASE_PATCH 0
\ No newline at end of file