diff --git a/pkg/compiler/lib/src/common/codegen.dart b/pkg/compiler/lib/src/common/codegen.dart
index e8b8488..3f766ba 100644
--- a/pkg/compiler/lib/src/common/codegen.dart
+++ b/pkg/compiler/lib/src/common/codegen.dart
@@ -23,6 +23,7 @@
 import '../js_backend/string_reference.dart' show StringReference;
 import '../js_backend/type_reference.dart' show TypeReference;
 import '../js_emitter/code_emitter_task.dart' show Emitter;
+import '../js_model/elements.dart' show JGeneratorBody;
 import '../js_model/type_recipe.dart' show TypeRecipe;
 import '../native/behavior.dart';
 import '../serialization/serialization.dart';
@@ -720,32 +721,35 @@
     sink.end(tag);
   }
 
+  @override
+  bool get isFinalized => _value != null;
+
   js.Name get value {
-    assert(_value != null, 'value not set for $this');
+    assert(isFinalized, 'value not set for $this');
     return _value;
   }
 
   void set value(js.Name node) {
-    assert(_value == null);
+    assert(!isFinalized);
     assert(node != null);
     _value = node.withSourceInformation(sourceInformation);
   }
 
   @override
   String get key {
-    assert(_value != null);
+    assert(isFinalized);
     return _value.key;
   }
 
   @override
   String get name {
-    assert(_value != null, 'value not set for $this');
+    assert(isFinalized, 'value not set for $this');
     return _value.name;
   }
 
   @override
   bool get allowRename {
-    assert(_value != null, 'value not set for $this');
+    assert(isFinalized, 'value not set for $this');
     return _value.allowRename;
   }
 
@@ -771,6 +775,98 @@
   @override
   String toString() =>
       'ModularName(kind=$kind, data=$data, value=${_value?.key})';
+
+  @override
+  String nonfinalizedDebugText() {
+    switch (kind) {
+      case ModularNameKind.rtiField:
+        return r'ModularName"$ti"';
+      case ModularNameKind.instanceField:
+        return 'ModularName"field:${(data as Entity).name}"';
+      case ModularNameKind.instanceMethod:
+        return 'ModularName"${_instanceMethodName(data)}"';
+      case ModularNameKind.methodProperty:
+        return 'ModularName"methodProperty:${(data as Entity).name}"';
+      case ModularNameKind.operatorIs:
+        return 'ModularName"is:${_className(data)}"';
+      case ModularNameKind.className:
+        return 'ModularName"class:${_className(data)}"';
+      case ModularNameKind.globalPropertyNameForClass:
+        return 'ModularName"classref:${_className(data)}"';
+      case ModularNameKind.aliasedSuperMember:
+        MemberEntity member = (data as MemberEntity);
+        String className = _className(member.enclosingClass);
+        String invocationName = Namer.operatorNameToIdentifier(member.name);
+        final description = "$className.$invocationName";
+        return 'ModularName"alias:$description"';
+      case ModularNameKind.staticClosure:
+        return 'ModularName"closure:${_qualifiedStaticName(data)}"';
+      case ModularNameKind.lazyInitializer:
+        return 'ModularName"lazy:${(data as MemberEntity).name}"';
+      case ModularNameKind.globalPropertyNameForMember:
+        MemberEntity member = data as MemberEntity;
+        return 'ModularName"ref:${_qualifiedStaticName(member)}"';
+      case ModularNameKind.invocation:
+        return 'ModularName"selector:${_selectorText(data as Selector)}"';
+      case ModularNameKind.nameForOneShotInterceptor:
+        return 'ModularName"oneshot:${_selectorText(data as Selector)}"';
+      case ModularNameKind.globalNameForInterfaceTypeVariable:
+        break;
+      case ModularNameKind.nameForGetInterceptor:
+        return 'ModularName"getInterceptor"';
+      case ModularNameKind.asName:
+        return 'ModularName"asName:$data"';
+    }
+    return super.nonfinalizedDebugText();
+  }
+
+  String _className(ClassEntity cls) {
+    return cls.name.replaceAll('&', '_');
+  }
+
+  String _qualifiedStaticName(MemberEntity member) {
+    if (member.isConstructor || member.isStatic) {
+      return '${_className(member.enclosingClass)}.${member.name}';
+    }
+    return member.name;
+  }
+
+  String _instanceMethodInvocationName(MemberEntity member) {
+    String invocationName = Namer.operatorNameToIdentifier(member.name);
+    if (member.isGetter) invocationName = r'get$' + invocationName;
+    if (member.isSetter) invocationName = r'set$' + invocationName;
+    return invocationName;
+  }
+
+  String _instanceMethodName(MemberEntity member) {
+    if (member is ConstructorBodyEntity) {
+      return 'constructorBody:${_qualifiedStaticName(member.constructor)}';
+    }
+    if (member is JGeneratorBody) {
+      MemberEntity function = member.function;
+      return 'generatorBody:'
+          '${_className(function.enclosingClass)}.'
+          '${_instanceMethodInvocationName(function)}';
+    }
+    return 'instanceMethod:${_instanceMethodInvocationName(member)}';
+  }
+
+  String _selectorText(Selector selector) {
+    // Approximation to unminified selector.
+    if (selector.isGetter) return r'get$' + selector.name;
+    if (selector.isSetter) return r'set$' + selector.name;
+    if (selector.isOperator || selector.isIndex || selector.isIndexSet) {
+      return Namer.operatorNameToIdentifier(selector.name);
+    }
+    List<String> parts = [
+      selector.name,
+      if (selector.callStructure.typeArgumentCount > 0)
+        '${selector.callStructure.typeArgumentCount}',
+      '${selector.callStructure.argumentCount}',
+      ...selector.callStructure.getOrderedNamedArguments()
+    ];
+    return parts.join(r'$');
+  }
 }
 
 enum ModularExpressionKind {
@@ -819,13 +915,16 @@
   }
 
   @override
+  bool get isFinalized => _value != null;
+
+  @override
   js.Expression get value {
-    assert(_value != null);
+    assert(isFinalized);
     return _value;
   }
 
   void set value(js.Expression node) {
-    assert(_value == null);
+    assert(!isFinalized);
     assert(node != null);
     _value = node.withSourceInformation(sourceInformation);
   }
@@ -863,6 +962,17 @@
     sb.write(',value=$_value)');
     return sb.toString();
   }
+
+  @override
+  String nonfinalizedDebugText() {
+    switch (kind) {
+      case ModularExpressionKind.constant:
+        return 'ModularExpression"<constant>"';
+      case ModularExpressionKind.embeddedGlobalAccess:
+        return 'ModularExpression"init.$data"';
+    }
+    return super.nonfinalizedDebugText();
+  }
 }
 
 enum JsNodeKind {
diff --git a/pkg/compiler/lib/src/constants/values.dart b/pkg/compiler/lib/src/constants/values.dart
index 144d936..86abfd0 100644
--- a/pkg/compiler/lib/src/constants/values.dart
+++ b/pkg/compiler/lib/src/constants/values.dart
@@ -857,10 +857,16 @@
   ConstantValueKind get kind => ConstantValueKind.JS_NAME;
 
   @override
-  String toDartText(DartTypes dartTypes) => 'js_name(${name})';
+  String toDartText(DartTypes dartTypes) {
+    if (name.isFinalized) 'js_name(${name})';
+    return 'js_name(name.nonfinalizedDebugText())';
+  }
 
   @override
-  String toStructuredText(DartTypes dartTypes) => 'JsNameConstant(${name})';
+  String toStructuredText(DartTypes dartTypes) {
+    if (name.isFinalized) return 'JsNameConstant(${name})';
+    return 'JsNameConstant(name.nonfinalizedDebugText())';
+  }
 }
 
 /// A constant used as the dummy receiver value for intercepted calls with
diff --git a/pkg/compiler/lib/src/js/js.dart b/pkg/compiler/lib/src/js/js.dart
index 1b1ac8e..c8f5a30 100644
--- a/pkg/compiler/lib/src/js/js.dart
+++ b/pkg/compiler/lib/src/js/js.dart
@@ -83,6 +83,9 @@
     codePositionListener.onPositions(
         node, startPosition, endPosition, closingPosition);
   }
+
+  @override
+  bool get isDebugContext => false;
 }
 
 /// Interface for ast nodes that encapsulate an ast that needs to be
diff --git a/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart b/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
index 3df93c3..8b46bb4 100644
--- a/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
+++ b/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
@@ -147,6 +147,32 @@
   }
 
   @override
+  String nonfinalizedDebugText() {
+    switch (kind) {
+      case DeferredHolderExpressionKind.globalObjectForClass:
+        return 'Holder"${_className(data)}"';
+      case DeferredHolderExpressionKind.globalObjectForMember:
+        return 'Holder"${_qualifiedStaticName(data)}"';
+      case DeferredHolderExpressionKind.globalObjectForInterceptors:
+        return 'J';
+      case DeferredHolderExpressionKind.globalObjectForConstant:
+        return 'Holder"constants"';
+      case DeferredHolderExpressionKind.globalObjectForStaticState:
+        return r'$';
+    }
+    return super.nonfinalizedDebugText();
+  }
+
+  String _className(ClassEntity cls) => cls.name.replaceAll('&', '_');
+
+  String _qualifiedStaticName(MemberEntity member) {
+    if (member.isConstructor || member.isStatic) {
+      return '${_className(member.enclosingClass)}.${member.name}';
+    }
+    return member.name;
+  }
+
+  @override
   Iterable<js.Node> get containedNodes => isFinalized ? [_value] : const [];
 }
 
diff --git a/pkg/compiler/lib/src/js_backend/minify_namer.dart b/pkg/compiler/lib/src/js_backend/minify_namer.dart
index 94f28fc..82c7200 100644
--- a/pkg/compiler/lib/src/js_backend/minify_namer.dart
+++ b/pkg/compiler/lib/src/js_backend/minify_namer.dart
@@ -380,7 +380,7 @@
   jsAst.Name nameForOneShotInterceptor(
       Selector selector, Iterable<ClassEntity> classes) {
     String root = selector.isOperator
-        ? operatorNameToIdentifier(selector.name)
+        ? Namer.operatorNameToIdentifier(selector.name)
         : privateName(selector.memberName);
     String prefix = selector.isGetter
         ? r"$get"
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index 11d3b51..83c7797 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -1425,7 +1425,7 @@
     return StringBackedName(name);
   }
 
-  String operatorNameToIdentifier(String name) {
+  static String operatorNameToIdentifier(String name) {
     if (name == null) return null;
     if (name == '==') {
       return r'$eq';
diff --git a/pkg/compiler/lib/src/js_backend/string_reference.dart b/pkg/compiler/lib/src/js_backend/string_reference.dart
index 62c378b..69d1a2d 100644
--- a/pkg/compiler/lib/src/js_backend/string_reference.dart
+++ b/pkg/compiler/lib/src/js_backend/string_reference.dart
@@ -143,6 +143,26 @@
 
   @override
   Iterable<js.Node> get containedNodes => isFinalized ? [_value] : const [];
+
+  @override
+  String nonfinalizedDebugText() {
+    const doubleQuote = 0x22;
+    final buffer = StringBuffer('StringReference');
+    if (constant.stringValue.length <= 1000) {
+      buffer.writeCharCode(doubleQuote);
+      for (int rune in constant.stringValue.runes) {
+        if (rune >= 0x20 && rune < 0x7F && rune != doubleQuote) {
+          buffer.writeCharCode(rune);
+        } else {
+          buffer.write(r'\u{');
+          buffer.write(rune.toRadixString(16));
+          buffer.write(r'}');
+        }
+      }
+      buffer.writeCharCode(doubleQuote);
+    }
+    return '$buffer';
+  }
 }
 
 /// A [StringReferenceResource] is a deferred JavaScript statement determined
diff --git a/pkg/compiler/lib/src/js_backend/type_reference.dart b/pkg/compiler/lib/src/js_backend/type_reference.dart
index d488b24..7bfc470 100644
--- a/pkg/compiler/lib/src/js_backend/type_reference.dart
+++ b/pkg/compiler/lib/src/js_backend/type_reference.dart
@@ -161,6 +161,15 @@
 
   @override
   Iterable<js.Node> get containedNodes => isFinalized ? [_value] : const [];
+
+  @override
+  String nonfinalizedDebugText() {
+    TypeRecipe typeRecipe = this.typeRecipe;
+    if (typeRecipe is TypeExpressionRecipe) {
+      return 'TypeReference"${typeRecipe.type.toString()}"';
+    }
+    return super.nonfinalizedDebugText();
+  }
 }
 
 /// A [TypeReferenceResource] is a deferred JavaScript statement determined by
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index e7ec92f..5e44fa5 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -95,13 +95,18 @@
       CodegenRegistry registry,
       ModularNamer namer,
       ModularEmitter emitter) {
+    js.Expression code;
     if (member.isField) {
-      return generateLazyInitializer(
+      code = generateLazyInitializer(
           member, graph, codegen, closedWorld, registry, namer, emitter);
     } else {
-      return generateMethod(
+      code = generateMethod(
           member, graph, codegen, closedWorld, registry, namer, emitter);
     }
+    if (code != null) {
+      codegen.tracer.traceJavaScriptText('JavaScript', code.debugPrint);
+    }
+    return code;
   }
 
   js.Expression generateLazyInitializer(
@@ -113,7 +118,6 @@
       ModularNamer namer,
       ModularEmitter emitter) {
     return measure(() {
-      codegen.tracer.traceGraph("codegen", graph);
       SourceInformation sourceInformation = sourceInformationStrategy
           .createBuilderForContext(field)
           .buildDeclaration(field);
@@ -129,6 +133,7 @@
           closedWorld,
           registry);
       codeGenerator.visitGraph(graph);
+      codegen.tracer.traceGraph("codegen", graph);
       return js.Fun(codeGenerator.parameters, codeGenerator.body)
           .withSourceInformation(sourceInformation);
     });
diff --git a/pkg/compiler/lib/src/ssa/ssa.dart b/pkg/compiler/lib/src/ssa/ssa.dart
index 5b825ce..39c3355 100644
--- a/pkg/compiler/lib/src/ssa/ssa.dart
+++ b/pkg/compiler/lib/src/ssa/ssa.dart
@@ -101,6 +101,8 @@
           graph.asyncElementType,
           sourceInformationBuilder.buildAsyncBody(),
           sourceInformationBuilder.buildAsyncExit());
+      _codegen.tracer
+          .traceJavaScriptText('JavaScript.rewrite', result.debugPrint);
     }
     if (result.sourceInformation == null) {
       result = result.withSourceInformation(
diff --git a/pkg/compiler/lib/src/ssa/ssa_tracer.dart b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
index 8887610..c8a843f 100644
--- a/pkg/compiler/lib/src/ssa/ssa_tracer.dart
+++ b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
@@ -30,6 +30,35 @@
     });
   }
 
+  void traceJavaScriptText(String name, String data) {
+    DEBUG_MODE = true;
+    tag("cfg", () {
+      printProperty("name", name);
+      // Emit a fake basic block, with one 'instruction' per line of text.
+      tag("block", () {
+        printProperty("name", "B1");
+        printProperty("from_bci", -1);
+        printProperty("to_bci", -1);
+        printEmptyProperty("predecessors");
+        printEmptyProperty("successors");
+        printEmptyProperty("xhandlers");
+        printEmptyProperty("flags");
+        tag("states", () {
+          tag("locals", () {
+            printProperty("size", 0);
+            printProperty("method", "None");
+          });
+        });
+        tag("HIR", () {
+          for (final line in data.split('\n')) {
+            addIndent();
+            add("0 0 i0 js | $line<|@\n");
+          }
+        });
+      });
+    });
+  }
+
   void addPredecessors(HBasicBlock block) {
     if (block.predecessors.isEmpty) {
       printEmptyProperty("predecessors");
diff --git a/pkg/compiler/lib/src/tracer.dart b/pkg/compiler/lib/src/tracer.dart
index 3386c81..26f4bb3d 100644
--- a/pkg/compiler/lib/src/tracer.dart
+++ b/pkg/compiler/lib/src/tracer.dart
@@ -55,6 +55,11 @@
     }
   }
 
+  void traceJavaScriptText(String name, String Function() getText) {
+    if (!traceActive) return;
+    HTracer(output, closedWorld).traceJavaScriptText(name, getText());
+  }
+
   void close() {
     if (output != null) {
       output.close();
diff --git a/pkg/front_end/testcases/general/ffi_sample.dart.weak.transformed.expect b/pkg/front_end/testcases/general/ffi_sample.dart.weak.transformed.expect
index 8f1e1c3..57cc30b 100644
--- a/pkg/front_end/testcases/general/ffi_sample.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/ffi_sample.dart.weak.transformed.expect
@@ -59,16 +59,16 @@
   #C7 = core::pragma {name:#C1, options:#C6}
   #C8 = ffi::Double {}
   #C9 = 0
-  #C10 = <core::int*>[#C9, #C9, #C9]
+  #C10 = <core::int*>[#C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9]
   #C11 = 8
-  #C12 = <core::int*>[#C11, #C11, #C11]
+  #C12 = <core::int*>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
   #C13 = 16
-  #C14 = <core::int*>[#C13, #C13, #C13]
+  #C14 = <core::int*>[#C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13]
   #C15 = "vm:prefer-inline"
   #C16 = core::pragma {name:#C15, options:#C5}
   #C17 = 24
   #C18 = 20
-  #C19 = <core::int*>[#C17, #C18, #C17]
+  #C19 = <core::int*>[#C17, #C17, #C18, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17]
 }
 
 
diff --git a/pkg/front_end/testcases/incremental/crash_05.yaml.world.1.expect b/pkg/front_end/testcases/incremental/crash_05.yaml.world.1.expect
index 9ecd41a..cd22c39 100644
--- a/pkg/front_end/testcases/incremental/crash_05.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/crash_05.yaml.world.1.expect
@@ -56,11 +56,11 @@
   #C6 = dart.core::pragma {name:#C1, options:#C5}
   #C7 = dart.ffi::Uint32 {}
   #C8 = 0
-  #C9 = <dart.core::int*>[#C8, #C8, #C8]
+  #C9 = <dart.core::int*>[#C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8]
   #C10 = "vm:prefer-inline"
   #C11 = dart.core::pragma {name:#C10, options:#C4}
   #C12 = 4
-  #C13 = <dart.core::int*>[#C12, #C12, #C12]
+  #C13 = <dart.core::int*>[#C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12]
   #C14 = TypeLiteralConstant(lib::Y)
   #C15 = <dart.core::Type>[#C14]
   #C16 = dart.ffi::_FfiStructLayout {fieldTypes:#C15, packing:#C4}
diff --git a/pkg/front_end/testcases/incremental/crash_05.yaml.world.2.expect b/pkg/front_end/testcases/incremental/crash_05.yaml.world.2.expect
index 9ecd41a..cd22c39 100644
--- a/pkg/front_end/testcases/incremental/crash_05.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/crash_05.yaml.world.2.expect
@@ -56,11 +56,11 @@
   #C6 = dart.core::pragma {name:#C1, options:#C5}
   #C7 = dart.ffi::Uint32 {}
   #C8 = 0
-  #C9 = <dart.core::int*>[#C8, #C8, #C8]
+  #C9 = <dart.core::int*>[#C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8]
   #C10 = "vm:prefer-inline"
   #C11 = dart.core::pragma {name:#C10, options:#C4}
   #C12 = 4
-  #C13 = <dart.core::int*>[#C12, #C12, #C12]
+  #C13 = <dart.core::int*>[#C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12, #C12]
   #C14 = TypeLiteralConstant(lib::Y)
   #C15 = <dart.core::Type>[#C14]
   #C16 = dart.ffi::_FfiStructLayout {fieldTypes:#C15, packing:#C4}
diff --git a/pkg/front_end/testcases/incremental/crash_06.yaml.world.1.expect b/pkg/front_end/testcases/incremental/crash_06.yaml.world.1.expect
index e06b9d6..2b217e2 100644
--- a/pkg/front_end/testcases/incremental/crash_06.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/crash_06.yaml.world.1.expect
@@ -62,7 +62,7 @@
   #C5 = dart.ffi::_FfiStructLayout {fieldTypes:#C3, packing:#C4}
   #C6 = dart.core::pragma {name:#C1, options:#C5}
   #C7 = 0
-  #C8 = <dart.core::int*>[#C7, #C7, #C7]
+  #C8 = <dart.core::int*>[#C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7]
   #C9 = "vm:prefer-inline"
   #C10 = dart.core::pragma {name:#C9, options:#C4}
 }
diff --git a/pkg/front_end/testcases/incremental/crash_06.yaml.world.2.expect b/pkg/front_end/testcases/incremental/crash_06.yaml.world.2.expect
index e06b9d6..2b217e2 100644
--- a/pkg/front_end/testcases/incremental/crash_06.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/crash_06.yaml.world.2.expect
@@ -62,7 +62,7 @@
   #C5 = dart.ffi::_FfiStructLayout {fieldTypes:#C3, packing:#C4}
   #C6 = dart.core::pragma {name:#C1, options:#C5}
   #C7 = 0
-  #C8 = <dart.core::int*>[#C7, #C7, #C7]
+  #C8 = <dart.core::int*>[#C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7]
   #C9 = "vm:prefer-inline"
   #C10 = dart.core::pragma {name:#C9, options:#C4}
 }
diff --git a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect
index 7f32b12..2e5c180 100644
--- a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect
@@ -62,14 +62,14 @@
   #C7 = dart.core::pragma {name:#C1, options:#C6}
   #C8 = dart.ffi::Double {}
   #C9 = 0
-  #C10 = <dart.core::int*>[#C9, #C9, #C9]
+  #C10 = <dart.core::int*>[#C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9]
   #C11 = 8
-  #C12 = <dart.core::int*>[#C11, #C11, #C11]
+  #C12 = <dart.core::int*>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
   #C13 = 16
-  #C14 = <dart.core::int*>[#C13, #C13, #C13]
+  #C14 = <dart.core::int*>[#C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13]
   #C15 = "vm:prefer-inline"
   #C16 = dart.core::pragma {name:#C15, options:#C5}
   #C17 = 24
   #C18 = 20
-  #C19 = <dart.core::int*>[#C17, #C18, #C17]
+  #C19 = <dart.core::int*>[#C17, #C17, #C18, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17]
 }
diff --git a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect
index 17f1531..a82af2e 100644
--- a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect
@@ -66,14 +66,14 @@
   #C7 = dart.core::pragma {name:#C1, options:#C6}
   #C8 = dart.ffi::Double {}
   #C9 = 0
-  #C10 = <dart.core::int*>[#C9, #C9, #C9]
+  #C10 = <dart.core::int*>[#C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9]
   #C11 = 8
-  #C12 = <dart.core::int*>[#C11, #C11, #C11]
+  #C12 = <dart.core::int*>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
   #C13 = 16
-  #C14 = <dart.core::int*>[#C13, #C13, #C13]
+  #C14 = <dart.core::int*>[#C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13]
   #C15 = "vm:prefer-inline"
   #C16 = dart.core::pragma {name:#C15, options:#C5}
   #C17 = 24
   #C18 = 20
-  #C19 = <dart.core::int*>[#C17, #C18, #C17]
+  #C19 = <dart.core::int*>[#C17, #C17, #C18, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17]
 }
diff --git a/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect b/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect
index 583ebfd..68633a6 100644
--- a/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect
@@ -63,14 +63,14 @@
   #C7 = dart.core::pragma {name:#C1, options:#C6}
   #C8 = dart.ffi::Double {}
   #C9 = 0
-  #C10 = <dart.core::int*>[#C9, #C9, #C9]
+  #C10 = <dart.core::int*>[#C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9]
   #C11 = 8
-  #C12 = <dart.core::int*>[#C11, #C11, #C11]
+  #C12 = <dart.core::int*>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
   #C13 = 16
-  #C14 = <dart.core::int*>[#C13, #C13, #C13]
+  #C14 = <dart.core::int*>[#C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13]
   #C15 = "vm:prefer-inline"
   #C16 = dart.core::pragma {name:#C15, options:#C5}
   #C17 = 24
   #C18 = 20
-  #C19 = <dart.core::int*>[#C17, #C18, #C17]
+  #C19 = <dart.core::int*>[#C17, #C17, #C18, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17]
 }
diff --git a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect
index 3456d148..e925f93 100644
--- a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect
@@ -101,19 +101,19 @@
   #C6 = dart.ffi::_FfiStructLayout {fieldTypes:#C4, packing:#C5}
   #C7 = dart.core::pragma {name:#C1, options:#C6}
   #C8 = 0
-  #C9 = <dart.core::int*>[#C8, #C8, #C8]
-  #C10 = 8
-  #C11 = 4
-  #C12 = <dart.core::int*>[#C10, #C11, #C11]
+  #C9 = <dart.core::int*>[#C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8]
+  #C10 = 4
+  #C11 = 8
+  #C12 = <dart.core::int*>[#C10, #C11, #C10, #C11, #C11, #C11, #C10, #C11, #C11, #C10, #C11, #C10, #C11, #C11, #C11, #C11, #C10, #C11]
   #C13 = 16
-  #C14 = <dart.core::int*>[#C13, #C10, #C10]
-  #C15 = 24
-  #C16 = 12
-  #C17 = <dart.core::int*>[#C15, #C16, #C16]
+  #C14 = <dart.core::int*>[#C11, #C13, #C11, #C13, #C13, #C13, #C11, #C13, #C13, #C11, #C13, #C11, #C13, #C13, #C13, #C13, #C11, #C13]
+  #C15 = 12
+  #C16 = 24
+  #C17 = <dart.core::int*>[#C15, #C16, #C15, #C16, #C16, #C16, #C15, #C16, #C16, #C15, #C16, #C15, #C16, #C16, #C16, #C16, #C15, #C16]
   #C18 = "vm:prefer-inline"
   #C19 = dart.core::pragma {name:#C18, options:#C5}
   #C20 = 48
-  #C21 = <dart.core::int*>[#C20, #C15, #C15]
+  #C21 = <dart.core::int*>[#C16, #C20, #C16, #C20, #C20, #C20, #C16, #C20, #C20, #C16, #C20, #C16, #C20, #C20, #C20, #C20, #C16, #C20]
   #C22 = <dart.core::Type>[#C2, #C2, #C2]
   #C23 = dart.ffi::_FfiStructLayout {fieldTypes:#C22, packing:#C5}
   #C24 = dart.core::pragma {name:#C1, options:#C23}
diff --git a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect
index 3456d148..e925f93 100644
--- a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect
@@ -101,19 +101,19 @@
   #C6 = dart.ffi::_FfiStructLayout {fieldTypes:#C4, packing:#C5}
   #C7 = dart.core::pragma {name:#C1, options:#C6}
   #C8 = 0
-  #C9 = <dart.core::int*>[#C8, #C8, #C8]
-  #C10 = 8
-  #C11 = 4
-  #C12 = <dart.core::int*>[#C10, #C11, #C11]
+  #C9 = <dart.core::int*>[#C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8, #C8]
+  #C10 = 4
+  #C11 = 8
+  #C12 = <dart.core::int*>[#C10, #C11, #C10, #C11, #C11, #C11, #C10, #C11, #C11, #C10, #C11, #C10, #C11, #C11, #C11, #C11, #C10, #C11]
   #C13 = 16
-  #C14 = <dart.core::int*>[#C13, #C10, #C10]
-  #C15 = 24
-  #C16 = 12
-  #C17 = <dart.core::int*>[#C15, #C16, #C16]
+  #C14 = <dart.core::int*>[#C11, #C13, #C11, #C13, #C13, #C13, #C11, #C13, #C13, #C11, #C13, #C11, #C13, #C13, #C13, #C13, #C11, #C13]
+  #C15 = 12
+  #C16 = 24
+  #C17 = <dart.core::int*>[#C15, #C16, #C15, #C16, #C16, #C16, #C15, #C16, #C16, #C15, #C16, #C15, #C16, #C16, #C16, #C16, #C15, #C16]
   #C18 = "vm:prefer-inline"
   #C19 = dart.core::pragma {name:#C18, options:#C5}
   #C20 = 48
-  #C21 = <dart.core::int*>[#C20, #C15, #C15]
+  #C21 = <dart.core::int*>[#C16, #C20, #C16, #C20, #C20, #C20, #C16, #C20, #C20, #C16, #C20, #C16, #C20, #C20, #C20, #C20, #C16, #C20]
   #C22 = <dart.core::Type>[#C2, #C2, #C2]
   #C23 = dart.ffi::_FfiStructLayout {fieldTypes:#C22, packing:#C5}
   #C24 = dart.core::pragma {name:#C1, options:#C23}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect
index 7f32b12..2e5c180 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect
@@ -62,14 +62,14 @@
   #C7 = dart.core::pragma {name:#C1, options:#C6}
   #C8 = dart.ffi::Double {}
   #C9 = 0
-  #C10 = <dart.core::int*>[#C9, #C9, #C9]
+  #C10 = <dart.core::int*>[#C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9]
   #C11 = 8
-  #C12 = <dart.core::int*>[#C11, #C11, #C11]
+  #C12 = <dart.core::int*>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
   #C13 = 16
-  #C14 = <dart.core::int*>[#C13, #C13, #C13]
+  #C14 = <dart.core::int*>[#C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13]
   #C15 = "vm:prefer-inline"
   #C16 = dart.core::pragma {name:#C15, options:#C5}
   #C17 = 24
   #C18 = 20
-  #C19 = <dart.core::int*>[#C17, #C18, #C17]
+  #C19 = <dart.core::int*>[#C17, #C17, #C18, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17]
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect
index ea6646e..9d91273 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect
@@ -63,14 +63,14 @@
   #C7 = dart.core::pragma {name:#C1, options:#C6}
   #C8 = dart.ffi::Double {}
   #C9 = 0
-  #C10 = <dart.core::int*>[#C9, #C9, #C9]
+  #C10 = <dart.core::int*>[#C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9]
   #C11 = 8
-  #C12 = <dart.core::int*>[#C11, #C11, #C11]
+  #C12 = <dart.core::int*>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
   #C13 = 16
-  #C14 = <dart.core::int*>[#C13, #C13, #C13]
+  #C14 = <dart.core::int*>[#C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13]
   #C15 = "vm:prefer-inline"
   #C16 = dart.core::pragma {name:#C15, options:#C5}
   #C17 = 24
   #C18 = 20
-  #C19 = <dart.core::int*>[#C17, #C18, #C17]
+  #C19 = <dart.core::int*>[#C17, #C17, #C18, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17]
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect
index 127f040..afef6e0 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect
@@ -64,14 +64,14 @@
   #C7 = dart.core::pragma {name:#C1, options:#C6}
   #C8 = dart.ffi::Double {}
   #C9 = 0
-  #C10 = <dart.core::int*>[#C9, #C9, #C9]
+  #C10 = <dart.core::int*>[#C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9]
   #C11 = 8
-  #C12 = <dart.core::int*>[#C11, #C11, #C11]
+  #C12 = <dart.core::int*>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
   #C13 = 16
-  #C14 = <dart.core::int*>[#C13, #C13, #C13]
+  #C14 = <dart.core::int*>[#C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13]
   #C15 = "vm:prefer-inline"
   #C16 = dart.core::pragma {name:#C15, options:#C5}
   #C17 = 24
   #C18 = 20
-  #C19 = <dart.core::int*>[#C17, #C18, #C17]
+  #C19 = <dart.core::int*>[#C17, #C17, #C18, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17]
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.1.expect
index e53139b..3f3d73e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.1.expect
@@ -82,26 +82,26 @@
   #C7 = dart.core::pragma {name:#C1, options:#C6}
   #C8 = dart.ffi::Uint8 {}
   #C9 = 0
-  #C10 = <dart.core::int*>[#C9, #C9, #C9]
+  #C10 = <dart.core::int*>[#C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9]
   #C11 = 1
-  #C12 = <dart.core::int*>[#C11, #C11, #C11]
+  #C12 = <dart.core::int*>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
   #C13 = dart.ffi::Uint64 {}
   #C14 = 8
   #C15 = 4
-  #C16 = <dart.core::int*>[#C14, #C15, #C14]
+  #C16 = <dart.core::int*>[#C14, #C14, #C15, #C14, #C14, #C14, #C15, #C14, #C14, #C14, #C14, #C15, #C14, #C14, #C14, #C14, #C14, #C14]
   #C17 = "vm:prefer-inline"
   #C18 = dart.core::pragma {name:#C17, options:#C5}
   #C19 = 16
   #C20 = 12
-  #C21 = <dart.core::int*>[#C19, #C20, #C19]
+  #C21 = <dart.core::int*>[#C19, #C19, #C20, #C19, #C19, #C19, #C20, #C19, #C19, #C19, #C19, #C20, #C19, #C19, #C19, #C19, #C19, #C19]
   #C22 = TypeLiteralConstant(lib::Y)
   #C23 = <dart.core::Type>[#C22, #C22, #C2]
   #C24 = dart.ffi::_FfiStructLayout {fieldTypes:#C23, packing:#C5}
   #C25 = dart.core::pragma {name:#C1, options:#C24}
   #C26 = 32
   #C27 = 24
-  #C28 = <dart.core::int*>[#C26, #C27, #C26]
+  #C28 = <dart.core::int*>[#C26, #C26, #C27, #C26, #C26, #C26, #C27, #C26, #C26, #C26, #C26, #C27, #C26, #C26, #C26, #C26, #C26, #C26]
   #C29 = 40
   #C30 = 28
-  #C31 = <dart.core::int*>[#C29, #C30, #C29]
+  #C31 = <dart.core::int*>[#C29, #C29, #C30, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C29, #C29]
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.2.expect
index c5fa703..e241ee1 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.2.expect
@@ -82,26 +82,26 @@
   #C7 = dart.core::pragma {name:#C1, options:#C6}
   #C8 = dart.ffi::Uint8 {}
   #C9 = 0
-  #C10 = <dart.core::int*>[#C9, #C9, #C9]
+  #C10 = <dart.core::int*>[#C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9]
   #C11 = dart.ffi::Uint64 {}
   #C12 = 8
   #C13 = 4
-  #C14 = <dart.core::int*>[#C12, #C13, #C12]
+  #C14 = <dart.core::int*>[#C12, #C12, #C13, #C12, #C12, #C12, #C13, #C12, #C12, #C12, #C12, #C13, #C12, #C12, #C12, #C12, #C12, #C12]
   #C15 = 16
   #C16 = 12
-  #C17 = <dart.core::int*>[#C15, #C16, #C15]
+  #C17 = <dart.core::int*>[#C15, #C15, #C16, #C15, #C15, #C15, #C16, #C15, #C15, #C15, #C15, #C16, #C15, #C15, #C15, #C15, #C15, #C15]
   #C18 = "vm:prefer-inline"
   #C19 = dart.core::pragma {name:#C18, options:#C5}
   #C20 = 24
-  #C21 = <dart.core::int*>[#C20, #C15, #C20]
+  #C21 = <dart.core::int*>[#C20, #C20, #C15, #C20, #C20, #C20, #C15, #C20, #C20, #C20, #C20, #C15, #C20, #C20, #C20, #C20, #C20, #C20]
   #C22 = TypeLiteralConstant(lib::Y)
   #C23 = <dart.core::Type>[#C22, #C22, #C2]
   #C24 = dart.ffi::_FfiStructLayout {fieldTypes:#C23, packing:#C5}
   #C25 = dart.core::pragma {name:#C1, options:#C24}
   #C26 = 48
   #C27 = 32
-  #C28 = <dart.core::int*>[#C26, #C27, #C26]
+  #C28 = <dart.core::int*>[#C26, #C26, #C27, #C26, #C26, #C26, #C27, #C26, #C26, #C26, #C26, #C27, #C26, #C26, #C26, #C26, #C26, #C26]
   #C29 = 56
   #C30 = 36
-  #C31 = <dart.core::int*>[#C29, #C30, #C29]
+  #C31 = <dart.core::int*>[#C29, #C29, #C30, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C29, #C29]
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.1.expect
index e53139b..3f3d73e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.1.expect
@@ -82,26 +82,26 @@
   #C7 = dart.core::pragma {name:#C1, options:#C6}
   #C8 = dart.ffi::Uint8 {}
   #C9 = 0
-  #C10 = <dart.core::int*>[#C9, #C9, #C9]
+  #C10 = <dart.core::int*>[#C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9]
   #C11 = 1
-  #C12 = <dart.core::int*>[#C11, #C11, #C11]
+  #C12 = <dart.core::int*>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
   #C13 = dart.ffi::Uint64 {}
   #C14 = 8
   #C15 = 4
-  #C16 = <dart.core::int*>[#C14, #C15, #C14]
+  #C16 = <dart.core::int*>[#C14, #C14, #C15, #C14, #C14, #C14, #C15, #C14, #C14, #C14, #C14, #C15, #C14, #C14, #C14, #C14, #C14, #C14]
   #C17 = "vm:prefer-inline"
   #C18 = dart.core::pragma {name:#C17, options:#C5}
   #C19 = 16
   #C20 = 12
-  #C21 = <dart.core::int*>[#C19, #C20, #C19]
+  #C21 = <dart.core::int*>[#C19, #C19, #C20, #C19, #C19, #C19, #C20, #C19, #C19, #C19, #C19, #C20, #C19, #C19, #C19, #C19, #C19, #C19]
   #C22 = TypeLiteralConstant(lib::Y)
   #C23 = <dart.core::Type>[#C22, #C22, #C2]
   #C24 = dart.ffi::_FfiStructLayout {fieldTypes:#C23, packing:#C5}
   #C25 = dart.core::pragma {name:#C1, options:#C24}
   #C26 = 32
   #C27 = 24
-  #C28 = <dart.core::int*>[#C26, #C27, #C26]
+  #C28 = <dart.core::int*>[#C26, #C26, #C27, #C26, #C26, #C26, #C27, #C26, #C26, #C26, #C26, #C27, #C26, #C26, #C26, #C26, #C26, #C26]
   #C29 = 40
   #C30 = 28
-  #C31 = <dart.core::int*>[#C29, #C30, #C29]
+  #C31 = <dart.core::int*>[#C29, #C29, #C30, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C29, #C29]
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.2.expect
index c5fa703..e241ee1 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.2.expect
@@ -82,26 +82,26 @@
   #C7 = dart.core::pragma {name:#C1, options:#C6}
   #C8 = dart.ffi::Uint8 {}
   #C9 = 0
-  #C10 = <dart.core::int*>[#C9, #C9, #C9]
+  #C10 = <dart.core::int*>[#C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9]
   #C11 = dart.ffi::Uint64 {}
   #C12 = 8
   #C13 = 4
-  #C14 = <dart.core::int*>[#C12, #C13, #C12]
+  #C14 = <dart.core::int*>[#C12, #C12, #C13, #C12, #C12, #C12, #C13, #C12, #C12, #C12, #C12, #C13, #C12, #C12, #C12, #C12, #C12, #C12]
   #C15 = 16
   #C16 = 12
-  #C17 = <dart.core::int*>[#C15, #C16, #C15]
+  #C17 = <dart.core::int*>[#C15, #C15, #C16, #C15, #C15, #C15, #C16, #C15, #C15, #C15, #C15, #C16, #C15, #C15, #C15, #C15, #C15, #C15]
   #C18 = "vm:prefer-inline"
   #C19 = dart.core::pragma {name:#C18, options:#C5}
   #C20 = 24
-  #C21 = <dart.core::int*>[#C20, #C15, #C20]
+  #C21 = <dart.core::int*>[#C20, #C20, #C15, #C20, #C20, #C20, #C15, #C20, #C20, #C20, #C20, #C15, #C20, #C20, #C20, #C20, #C20, #C20]
   #C22 = TypeLiteralConstant(lib::Y)
   #C23 = <dart.core::Type>[#C22, #C22, #C2]
   #C24 = dart.ffi::_FfiStructLayout {fieldTypes:#C23, packing:#C5}
   #C25 = dart.core::pragma {name:#C1, options:#C24}
   #C26 = 48
   #C27 = 32
-  #C28 = <dart.core::int*>[#C26, #C27, #C26]
+  #C28 = <dart.core::int*>[#C26, #C26, #C27, #C26, #C26, #C26, #C27, #C26, #C26, #C26, #C26, #C27, #C26, #C26, #C26, #C26, #C26, #C26]
   #C29 = 56
   #C30 = 36
-  #C31 = <dart.core::int*>[#C29, #C30, #C29]
+  #C31 = <dart.core::int*>[#C29, #C29, #C30, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C29, #C29]
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect
index 1d8965d..1c2210e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect
@@ -228,26 +228,26 @@
   #C7 = dart.core::pragma {name:#C1, options:#C6}
   #C8 = dart.ffi::Uint8 {}
   #C9 = 0
-  #C10 = <dart.core::int*>[#C9, #C9, #C9]
+  #C10 = <dart.core::int*>[#C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9]
   #C11 = 1
-  #C12 = <dart.core::int*>[#C11, #C11, #C11]
+  #C12 = <dart.core::int*>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
   #C13 = dart.ffi::Uint64 {}
   #C14 = 8
   #C15 = 4
-  #C16 = <dart.core::int*>[#C14, #C15, #C14]
+  #C16 = <dart.core::int*>[#C14, #C14, #C15, #C14, #C14, #C14, #C15, #C14, #C14, #C14, #C14, #C15, #C14, #C14, #C14, #C14, #C14, #C14]
   #C17 = "vm:prefer-inline"
   #C18 = dart.core::pragma {name:#C17, options:#C5}
   #C19 = 16
   #C20 = 12
-  #C21 = <dart.core::int*>[#C19, #C20, #C19]
+  #C21 = <dart.core::int*>[#C19, #C19, #C20, #C19, #C19, #C19, #C20, #C19, #C19, #C19, #C19, #C20, #C19, #C19, #C19, #C19, #C19, #C19]
   #C22 = TypeLiteralConstant(lib::Y)
   #C23 = <dart.core::Type>[#C22, #C22, #C2]
   #C24 = dart.ffi::_FfiStructLayout {fieldTypes:#C23, packing:#C5}
   #C25 = dart.core::pragma {name:#C1, options:#C24}
   #C26 = 32
   #C27 = 24
-  #C28 = <dart.core::int*>[#C26, #C27, #C26]
+  #C28 = <dart.core::int*>[#C26, #C26, #C27, #C26, #C26, #C26, #C27, #C26, #C26, #C26, #C26, #C27, #C26, #C26, #C26, #C26, #C26, #C26]
   #C29 = 40
   #C30 = 28
-  #C31 = <dart.core::int*>[#C29, #C30, #C29]
+  #C31 = <dart.core::int*>[#C29, #C29, #C30, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C29, #C29]
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect
index 6bf1e19..ae09732 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect
@@ -228,26 +228,26 @@
   #C7 = dart.core::pragma {name:#C1, options:#C6}
   #C8 = dart.ffi::Uint8 {}
   #C9 = 0
-  #C10 = <dart.core::int*>[#C9, #C9, #C9]
+  #C10 = <dart.core::int*>[#C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9]
   #C11 = dart.ffi::Uint64 {}
   #C12 = 8
   #C13 = 4
-  #C14 = <dart.core::int*>[#C12, #C13, #C12]
+  #C14 = <dart.core::int*>[#C12, #C12, #C13, #C12, #C12, #C12, #C13, #C12, #C12, #C12, #C12, #C13, #C12, #C12, #C12, #C12, #C12, #C12]
   #C15 = 16
   #C16 = 12
-  #C17 = <dart.core::int*>[#C15, #C16, #C15]
+  #C17 = <dart.core::int*>[#C15, #C15, #C16, #C15, #C15, #C15, #C16, #C15, #C15, #C15, #C15, #C16, #C15, #C15, #C15, #C15, #C15, #C15]
   #C18 = "vm:prefer-inline"
   #C19 = dart.core::pragma {name:#C18, options:#C5}
   #C20 = 24
-  #C21 = <dart.core::int*>[#C20, #C15, #C20]
+  #C21 = <dart.core::int*>[#C20, #C20, #C15, #C20, #C20, #C20, #C15, #C20, #C20, #C20, #C20, #C15, #C20, #C20, #C20, #C20, #C20, #C20]
   #C22 = TypeLiteralConstant(lib::Y)
   #C23 = <dart.core::Type>[#C22, #C22, #C2]
   #C24 = dart.ffi::_FfiStructLayout {fieldTypes:#C23, packing:#C5}
   #C25 = dart.core::pragma {name:#C1, options:#C24}
   #C26 = 48
   #C27 = 32
-  #C28 = <dart.core::int*>[#C26, #C27, #C26]
+  #C28 = <dart.core::int*>[#C26, #C26, #C27, #C26, #C26, #C26, #C27, #C26, #C26, #C26, #C26, #C27, #C26, #C26, #C26, #C26, #C26, #C26]
   #C29 = 56
   #C30 = 36
-  #C31 = <dart.core::int*>[#C29, #C30, #C29]
+  #C31 = <dart.core::int*>[#C29, #C29, #C30, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C29, #C29]
 }
diff --git a/pkg/front_end/testcases/incremental/regress_46004.yaml.world.1.expect b/pkg/front_end/testcases/incremental/regress_46004.yaml.world.1.expect
index ef8614b..9cb7f28 100644
--- a/pkg/front_end/testcases/incremental/regress_46004.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/regress_46004.yaml.world.1.expect
@@ -55,12 +55,12 @@
   #C5 = dart.ffi::_FfiStructLayout {fieldTypes:#C3, packing:#C4}
   #C6 = dart.core::pragma {name:#C1, options:#C5}
   #C7 = 0
-  #C8 = <dart.core::int*>[#C7, #C7, #C7]
+  #C8 = <dart.core::int*>[#C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7]
   #C9 = "vm:prefer-inline"
   #C10 = dart.core::pragma {name:#C9, options:#C4}
-  #C11 = 8
-  #C12 = 4
-  #C13 = <dart.core::int*>[#C11, #C12, #C12]
+  #C11 = 4
+  #C12 = 8
+  #C13 = <dart.core::int*>[#C11, #C12, #C11, #C12, #C12, #C12, #C11, #C12, #C12, #C11, #C12, #C11, #C12, #C12, #C12, #C12, #C11, #C12]
   #C14 = TypeLiteralConstant(lib::COMObject)
   #C15 = <dart.core::Type>[#C14]
   #C16 = dart.ffi::_FfiStructLayout {fieldTypes:#C15, packing:#C4}
diff --git a/pkg/front_end/testcases/incremental/regress_46004.yaml.world.2.expect b/pkg/front_end/testcases/incremental/regress_46004.yaml.world.2.expect
index ef8614b..9cb7f28 100644
--- a/pkg/front_end/testcases/incremental/regress_46004.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/regress_46004.yaml.world.2.expect
@@ -55,12 +55,12 @@
   #C5 = dart.ffi::_FfiStructLayout {fieldTypes:#C3, packing:#C4}
   #C6 = dart.core::pragma {name:#C1, options:#C5}
   #C7 = 0
-  #C8 = <dart.core::int*>[#C7, #C7, #C7]
+  #C8 = <dart.core::int*>[#C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7, #C7]
   #C9 = "vm:prefer-inline"
   #C10 = dart.core::pragma {name:#C9, options:#C4}
-  #C11 = 8
-  #C12 = 4
-  #C13 = <dart.core::int*>[#C11, #C12, #C12]
+  #C11 = 4
+  #C12 = 8
+  #C13 = <dart.core::int*>[#C11, #C12, #C11, #C12, #C12, #C12, #C11, #C12, #C12, #C11, #C12, #C11, #C12, #C12, #C12, #C12, #C11, #C12]
   #C14 = TypeLiteralConstant(lib::COMObject)
   #C15 = <dart.core::Type>[#C14]
   #C16 = dart.ffi::_FfiStructLayout {fieldTypes:#C15, packing:#C4}
diff --git a/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.transformed.expect
index 1f2d2a4..6b19c1d 100644
--- a/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.transformed.expect
@@ -50,16 +50,16 @@
   #C7 = core::pragma {name:#C1, options:#C6}
   #C8 = ffi::Double {}
   #C9 = 0
-  #C10 = <core::int*>[#C9, #C9, #C9]
+  #C10 = <core::int*>[#C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9]
   #C11 = 8
-  #C12 = <core::int*>[#C11, #C11, #C11]
+  #C12 = <core::int*>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
   #C13 = 16
-  #C14 = <core::int*>[#C13, #C13, #C13]
+  #C14 = <core::int*>[#C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13]
   #C15 = "vm:prefer-inline"
   #C16 = core::pragma {name:#C15, options:#C5}
   #C17 = 24
   #C18 = 20
-  #C19 = <core::int*>[#C17, #C18, #C17]
+  #C19 = <core::int*>[#C17, #C17, #C18, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17]
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.transformed.expect
index 1f2d2a4..6b19c1d 100644
--- a/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.transformed.expect
@@ -50,16 +50,16 @@
   #C7 = core::pragma {name:#C1, options:#C6}
   #C8 = ffi::Double {}
   #C9 = 0
-  #C10 = <core::int*>[#C9, #C9, #C9]
+  #C10 = <core::int*>[#C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9, #C9]
   #C11 = 8
-  #C12 = <core::int*>[#C11, #C11, #C11]
+  #C12 = <core::int*>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
   #C13 = 16
-  #C14 = <core::int*>[#C13, #C13, #C13]
+  #C14 = <core::int*>[#C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13, #C13]
   #C15 = "vm:prefer-inline"
   #C16 = core::pragma {name:#C15, options:#C5}
   #C17 = 24
   #C18 = 20
-  #C19 = <core::int*>[#C17, #C18, #C17]
+  #C19 = <core::int*>[#C17, #C17, #C18, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17]
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.transformed.expect
index 1513405..0dc519f 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.transformed.expect
@@ -42,8 +42,8 @@
   #C8 = core::pragma {name:#C1, options:#C7}
   #C9 = ffi::_ArraySize<ffi::NativeType> {dimension1:#C3, dimension2:#C6, dimension3:#C6, dimension4:#C6, dimension5:#C6, dimensions:#C6}
   #C10 = 0
-  #C11 = <core::int*>[#C10, #C10, #C10]
-  #C12 = <core::int*>[#C3, #C3, #C3]
+  #C11 = <core::int*>[#C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10]
+  #C12 = <core::int*>[#C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3]
   #C13 = <core::int*>[]
   #C14 = "vm:prefer-inline"
   #C15 = core::pragma {name:#C14, options:#C6}
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.transformed.expect
index ce41031..6a48895 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.transformed.expect
@@ -42,8 +42,8 @@
   #C8 = core::pragma {name:#C1, options:#C7}
   #C9 = ffi::_ArraySize<ffi::NativeType*> {dimension1:#C3, dimension2:#C6, dimension3:#C6, dimension4:#C6, dimension5:#C6, dimensions:#C6}
   #C10 = 0
-  #C11 = <core::int*>[#C10, #C10, #C10]
-  #C12 = <core::int*>[#C3, #C3, #C3]
+  #C11 = <core::int*>[#C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10, #C10]
+  #C12 = <core::int*>[#C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3]
   #C13 = <core::int*>[]
   #C14 = "vm:prefer-inline"
   #C15 = core::pragma {name:#C14, options:#C6}
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.transformed.expect
index 1648007..036c491 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.transformed.expect
@@ -67,8 +67,8 @@
   #C9 = 2
   #C10 = ffi::_ArraySize<ffi::NativeType> {dimension1:#C9, dimension2:#C9, dimension3:#C9, dimension4:#C6, dimension5:#C6, dimensions:#C6}
   #C11 = 0
-  #C12 = <core::int*>[#C11, #C11, #C11]
-  #C13 = <core::int*>[#C3, #C3, #C3]
+  #C12 = <core::int*>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
+  #C13 = <core::int*>[#C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3]
   #C14 = <core::int*>[#C9, #C9]
   #C15 = "vm:prefer-inline"
   #C16 = core::pragma {name:#C15, options:#C6}
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.transformed.expect
index ca6f28b..8d6be3c 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.transformed.expect
@@ -67,8 +67,8 @@
   #C9 = 2
   #C10 = ffi::_ArraySize<ffi::NativeType*> {dimension1:#C9, dimension2:#C9, dimension3:#C9, dimension4:#C6, dimension5:#C6, dimensions:#C6}
   #C11 = 0
-  #C12 = <core::int*>[#C11, #C11, #C11]
-  #C13 = <core::int*>[#C3, #C3, #C3]
+  #C12 = <core::int*>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
+  #C13 = <core::int*>[#C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3, #C3]
   #C14 = <core::int*>[#C9, #C9]
   #C15 = "vm:prefer-inline"
   #C16 = core::pragma {name:#C15, options:#C6}
diff --git a/pkg/js_ast/lib/src/nodes.dart b/pkg/js_ast/lib/src/nodes.dart
index b84ef51..0d4e490 100644
--- a/pkg/js_ast/lib/src/nodes.dart
+++ b/pkg/js_ast/lib/src/nodes.dart
@@ -436,12 +436,12 @@
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg);
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg);
 
-  // Shallow clone of node.  Does not clone positions since the only use of this
-  // private method is create a copy with a new position.
+  /// Shallow clone of node.  Does not clone positions since the only use of
+  /// this private method is create a copy with a new position.
   Node _clone();
 
-  // Returns a node equivalent to [this], but with new source position and end
-  // source position.
+  /// Returns a node equivalent to [this], but with new source position and end
+  /// source position.
   Node withSourceInformation(
       JavaScriptNodeSourceInformation sourceInformation) {
     if (sourceInformation == _sourceInformation) {
@@ -456,13 +456,23 @@
 
   bool get isCommaOperator => false;
 
-  bool get isFinalized => true;
-
   Statement toStatement() {
     throw UnsupportedError('toStatement');
   }
 
   String debugPrint() => DebugPrint(this);
+
+  /// Some nodes, e.g. DeferredExpression, become finalized in a 'linking'
+  /// phase.
+  bool get isFinalized => true;
+
+  /// If a node is not finalized, debug printing can print something indicative
+  /// of the node instead of the finalized AST. This method returns the
+  /// replacement text.
+  String nonfinalizedDebugText() {
+    assert(!isFinalized);
+    return '$runtimeType';
+  }
 }
 
 class Program extends Node {
diff --git a/pkg/js_ast/lib/src/printer.dart b/pkg/js_ast/lib/src/printer.dart
index 5c5620e..0f3c329 100644
--- a/pkg/js_ast/lib/src/printer.dart
+++ b/pkg/js_ast/lib/src/printer.dart
@@ -45,6 +45,10 @@
   /// [enterNode] is called in post-traversal order.
   void exitNode(
       Node node, int startPosition, int endPosition, int closingPosition) {}
+
+  /// Should return `true` if the printing tolerates unfinalized deferred AST
+  /// nodes.
+  bool get isDebugContext => false;
 }
 
 /// A simple implementation of [JavaScriptPrintingContext] suitable for tests.
@@ -58,9 +62,13 @@
   String getText() => buffer.toString();
 }
 
+class _DebugJavaScriptPrintingContext extends SimpleJavaScriptPrintingContext {
+  bool get isDebugContext => true;
+}
+
 String DebugPrint(Node node, {bool utf8 = false}) {
   JavaScriptPrintingOptions options = JavaScriptPrintingOptions(utf8: utf8);
-  SimpleJavaScriptPrintingContext context = SimpleJavaScriptPrintingContext();
+  SimpleJavaScriptPrintingContext context = _DebugJavaScriptPrintingContext();
   Printer printer = Printer(options, context);
   printer.visit(node);
   return context.getText();
@@ -72,6 +80,7 @@
   final bool shouldCompressOutput;
   final DanglingElseVisitor danglingElseVisitor;
   final LocalNamer localNamer;
+  final bool isDebugContext;
 
   int _charCount = 0;
   bool inForInit = false;
@@ -90,6 +99,7 @@
   Printer(JavaScriptPrintingOptions options, JavaScriptPrintingContext context)
       : options = options,
         context = context,
+        isDebugContext = context.isDebugContext,
         shouldCompressOutput = options.shouldCompressOutput,
         danglingElseVisitor = DanglingElseVisitor(context),
         localNamer = determineRenamer(
@@ -220,7 +230,9 @@
   void startNode(Node node) {
     currentNode = EnterExitNode(currentNode, node);
     if (node is DeferredExpression) {
-      startNode(node.value);
+      if (!isDebugContext || node.isFinalized) {
+        startNode(node.value);
+      }
     }
   }
 
@@ -230,7 +242,9 @@
 
   void endNode(Node node) {
     if (node is DeferredExpression) {
-      endNode(node.value);
+      if (!isDebugContext || node.isFinalized) {
+        endNode(node.value);
+      }
     }
     assert(currentNode.node == node);
     currentNode = currentNode.exitNode(context, _charCount);
@@ -259,6 +273,12 @@
     nodes.forEach(visit);
   }
 
+  Node _undefer(Node node) {
+    if (isDebugContext && !node.isFinalized) return node;
+    if (node is DeferredExpression) return _undefer(node.value);
+    return node;
+  }
+
   @override
   void visitProgram(Program program) {
     if (program.body.isNotEmpty) {
@@ -657,10 +677,12 @@
 
   visitNestedExpression(Expression node, int requiredPrecedence,
       {bool newInForInit, bool newAtStatementBegin}) {
+    int precedenceLevel =
+        (isDebugContext && !node.isFinalized) ? CALL : node.precedenceLevel;
     bool needsParentheses =
         // a - (b + c).
         (requiredPrecedence != EXPRESSION &&
-                node.precedenceLevel < requiredPrecedence) ||
+                precedenceLevel < requiredPrecedence) ||
             // for (a = (x in o); ... ; ... ) { ... }
             (newInForInit && node is Binary && node.op == "in") ||
             // (function() { ... })().
@@ -720,9 +742,10 @@
     }
   }
 
-  static bool _isSmallInitialization(Node node) {
+  bool _isSmallInitialization(Node node) {
     if (node is VariableInitialization) {
-      Node value = undefer(node.value);
+      if (node.value == null) return true;
+      Node value = _undefer(node.value);
       if (value == null) return true;
       if (value is This) return true;
       if (value is LiteralNull) return true;
@@ -755,8 +778,9 @@
     /// `++a` and `a += b` in the face of [DeferredExpression]s we detect the
     /// pattern of the undeferred assignment.
     String op = assignment.op;
-    Node leftHandSide = undefer(assignment.leftHandSide);
-    Node rightHandSide = undefer(assignment.value);
+    Node leftHandSide = _undefer(assignment.leftHandSide);
+    Node value = assignment.value;
+    Node rightHandSide = value == null ? value : _undefer(value);
     if ((op == '+' || op == '-') &&
         leftHandSide is VariableUse &&
         rightHandSide is LiteralNumber &&
@@ -768,8 +792,8 @@
     if (!assignment.isCompound &&
         leftHandSide is VariableUse &&
         rightHandSide is Binary) {
-      Node rLeft = undefer(rightHandSide.left);
-      Node rRight = undefer(rightHandSide.right);
+      Node rLeft = _undefer(rightHandSide.left);
+      Node rRight = _undefer(rightHandSide.right);
       String op = rightHandSide.op;
       if (op == '+' ||
           op == '-' ||
@@ -804,12 +828,12 @@
     }
     visitNestedExpression(assignment.leftHandSide, CALL,
         newInForInit: inForInit, newAtStatementBegin: atStatementBegin);
-    if (assignment.value != null) {
+    if (value != null) {
       spaceOut();
       if (op != null) out(op);
       out("=");
       spaceOut();
-      visitNestedExpression(assignment.value, ASSIGNMENT,
+      visitNestedExpression(value, ASSIGNMENT,
           newInForInit: inForInit, newAtStatementBegin: false);
     }
   }
@@ -1045,15 +1069,23 @@
     visitNestedExpression(access.receiver, CALL,
         newInForInit: inForInit, newAtStatementBegin: atStatementBegin);
 
-    Node selector = undefer(access.selector);
+    Node selector = _undefer(access.selector);
+    if (isDebugContext && !selector.isFinalized) {
+      _dotString(
+          access.selector, access.receiver, selector.nonfinalizedDebugText(),
+          assumeValid: true);
+      return;
+    }
     if (selector is LiteralString) {
       _dotString(access.selector, access.receiver, selector.value);
       return;
-    } else if (selector is StringConcatenation) {
+    }
+    if (selector is StringConcatenation) {
       _dotString(access.selector, access.receiver,
-          _StringContentsCollector().collect(selector));
+          _StringContentsCollector(isDebugContext).collect(selector));
       return;
-    } else if (selector is Name) {
+    }
+    if (selector is Name) {
       _dotString(access.selector, access.receiver, selector.name);
       return;
     }
@@ -1064,9 +1096,10 @@
     out(']');
   }
 
-  void _dotString(Node selector, Node receiver, String selectorValue) {
-    if (isValidJavaScriptId(selectorValue)) {
-      if (undefer(receiver) is LiteralNumber &&
+  void _dotString(Node selector, Node receiver, String selectorValue,
+      {bool assumeValid = false}) {
+    if (assumeValid || isValidJavaScriptId(selectorValue)) {
+      if (_undefer(receiver) is LiteralNumber &&
           lastCharCode != charCodes.$CLOSE_PAREN) {
         out(' ', isWhitespace: true);
       }
@@ -1157,6 +1190,10 @@
 
   @override
   visitDeferredExpression(DeferredExpression node) {
+    if (isDebugContext && !node.isFinalized) {
+      out(node.nonfinalizedDebugText());
+      return;
+    }
     // Continue printing with the expression value.
     assert(node.precedenceLevel == node.value.precedenceLevel);
     node.value.accept(this);
@@ -1194,12 +1231,16 @@
 
   @override
   void visitLiteralString(LiteralString node) {
+    if (isDebugContext && !node.isFinalized) {
+      _handleString(node.nonfinalizedDebugText());
+      return;
+    }
     _handleString(node.value);
   }
 
   @override
   visitStringConcatenation(StringConcatenation node) {
-    _handleString(_StringContentsCollector().collect(node));
+    _handleString(_StringContentsCollector(isDebugContext).collect(node));
   }
 
   void _handleString(String value) {
@@ -1217,6 +1258,10 @@
 
   @override
   visitName(Name node) {
+    if (isDebugContext && !node.isFinalized) {
+      out(node.nonfinalizedDebugText());
+      return;
+    }
     out(node.name);
   }
 
@@ -1342,7 +1387,7 @@
 
   void propertyNameOut(Property node) {
     startNode(node.name);
-    Node name = undefer(node.name);
+    Node name = _undefer(node.name);
     if (name is LiteralString) {
       _outPropertyName(name.value);
     } else if (name is Name) {
@@ -1433,6 +1478,9 @@
 
 class _StringContentsCollector extends BaseVisitor<void> {
   final StringBuffer _buffer = StringBuffer();
+  final bool isDebugContext;
+
+  _StringContentsCollector(this.isDebugContext);
 
   String collect(Node node) {
     node.accept(this);
@@ -1450,17 +1498,29 @@
 
   @override
   void visitLiteralString(LiteralString node) {
-    _add(node.value);
+    if (isDebugContext && !node.isFinalized) {
+      _add(node.nonfinalizedDebugText());
+    } else {
+      _add(node.value);
+    }
   }
 
   @override
   void visitLiteralNumber(LiteralNumber node) {
-    _add(node.value);
+    if (isDebugContext && !node.isFinalized) {
+      _add(node.nonfinalizedDebugText());
+    } else {
+      _add(node.value);
+    }
   }
 
   @override
   void visitName(Name node) {
-    _add(node.name);
+    if (isDebugContext && !node.isFinalized) {
+      _add(node.nonfinalizedDebugText());
+    } else {
+      _add(node.name);
+    }
   }
 
   @override
@@ -1609,6 +1669,8 @@
   bool visitLabeledStatement(LabeledStatement node) => node.body.accept(this);
   bool visitLiteralStatement(LiteralStatement node) => true;
 
+  bool visitDartYield(DartYield node) => false;
+
   bool visitExpression(Expression node) => false;
 }
 
diff --git a/pkg/js_ast/test/deferred_expression_test.dart b/pkg/js_ast/test/deferred_expression_test.dart
index afd9805..29fc4d1 100644
--- a/pkg/js_ast/test/deferred_expression_test.dart
+++ b/pkg/js_ast/test/deferred_expression_test.dart
@@ -127,6 +127,9 @@
   Map<Node, _Position> exitPositions = {};
 
   @override
+  bool get isDebugContext => false;
+
+  @override
   void emit(String string) {
     sb.write(string);
   }
diff --git a/pkg/vm/lib/transformations/ffi/abi.dart b/pkg/vm/lib/transformations/ffi/abi.dart
new file mode 100644
index 0000000..795574a
--- /dev/null
+++ b/pkg/vm/lib/transformations/ffi/abi.dart
@@ -0,0 +1,175 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'common.dart';
+
+/// The hardware architectures the Dart VM runs on.
+enum _Architecture {
+  arm,
+  arm64,
+  ia32,
+  x64,
+}
+
+extension on _Architecture {
+  /// The size of integer registers and memory addresses in bytes.
+  int get wordSize {
+    switch (this) {
+      case _Architecture.arm:
+      case _Architecture.ia32:
+        return 4;
+      case _Architecture.arm64:
+      case _Architecture.x64:
+        return 8;
+    }
+  }
+}
+
+/// The operating systems the Dart VM runs on.
+enum _OS {
+  android,
+  fuchsia,
+  ios,
+  linux,
+  macos,
+  windows,
+}
+
+/// Application binary interface.
+///
+/// The Dart VM can run on a variety of [Abi]s, see [supportedAbis].
+class Abi {
+  /// The operating system of this [Abi].
+  // ignore: unused_field
+  final _OS _os;
+
+  /// The architecture of this [Abi].
+  final _Architecture _architecture;
+
+  /// The size of integer registers and memory addresses in bytes.
+  int get wordSize => _architecture.wordSize;
+
+  const Abi._(this._architecture, this._os);
+}
+
+const androidArm = Abi._(_Architecture.arm, _OS.android);
+const androidArm64 = Abi._(_Architecture.arm64, _OS.android);
+const androidIA32 = Abi._(_Architecture.ia32, _OS.android);
+const androidX64 = Abi._(_Architecture.x64, _OS.android);
+const fuchsiaArm64 = Abi._(_Architecture.arm64, _OS.fuchsia);
+const fuchsiaX64 = Abi._(_Architecture.x64, _OS.fuchsia);
+const iosArm = Abi._(_Architecture.arm, _OS.ios);
+const iosArm64 = Abi._(_Architecture.arm64, _OS.ios);
+const iosX64 = Abi._(_Architecture.x64, _OS.ios);
+const linuxArm = Abi._(_Architecture.arm, _OS.linux);
+const linuxArm64 = Abi._(_Architecture.arm64, _OS.linux);
+const linuxIA32 = Abi._(_Architecture.ia32, _OS.linux);
+const linuxX64 = Abi._(_Architecture.x64, _OS.linux);
+const macosArm64 = Abi._(_Architecture.arm64, _OS.macos);
+
+// No macosIA32, not intending to support.
+// https://github.com/dart-lang/sdk/issues/39810
+
+const macosX64 = Abi._(_Architecture.x64, _OS.macos);
+
+/// Currently not supported, but feature requested for Flutter.
+/// https://github.com/flutter/flutter/issues/53120
+const windowsArm64 = Abi._(_Architecture.arm64, _OS.windows);
+const windowsIA32 = Abi._(_Architecture.ia32, _OS.windows);
+const windowsX64 = Abi._(_Architecture.x64, _OS.windows);
+
+/// All ABIs that the DartVM can run on sorted alphabetically.
+///
+/// Keep consistent with runtime/vm/compiler/ffi/abi.cc.
+const supportedAbisOrdered = [
+  androidArm,
+  androidArm64,
+  androidIA32,
+  androidX64,
+  fuchsiaArm64,
+  fuchsiaX64,
+  iosArm,
+  iosArm64,
+  iosX64,
+  linuxArm,
+  linuxArm64,
+  linuxIA32,
+  linuxX64,
+  macosArm64,
+  macosX64,
+  windowsArm64,
+  windowsIA32,
+  windowsX64,
+];
+
+/// The size of integer registers and memory addresses in bytes per [Abi].
+// Keep consistent with sdk/lib/_internal/vm/lib/ffi_patch.dart
+final Map<Abi, int> wordSize = {
+  for (final abi in supportedAbisOrdered) abi: abi.wordSize
+};
+
+/// Struct and union fields that are not aligned to their size.
+///
+/// Has an entry for all Abis. Empty entries document that every native
+/// type is aligned to it's own size in this ABI.
+///
+/// See runtime/vm/compiler/ffi/abi.cc for asserts in the VM that verify these
+/// alignments.
+const nonSizeAlignment = <Abi, Map<NativeType, int>>{
+  // _wordSize64
+  androidArm64: _wordSize64,
+  androidX64: _wordSize64,
+  fuchsiaArm64: _wordSize64,
+  fuchsiaX64: _wordSize64,
+  iosArm64: _wordSize64,
+  iosX64: _wordSize64,
+  linuxArm64: _wordSize64,
+  linuxX64: _wordSize64,
+  macosArm64: _wordSize64,
+  macosX64: _wordSize64,
+  windowsArm64: _wordSize64,
+  windowsX64: _wordSize64,
+  // _wordSize32Align32
+  androidIA32: _wordSize32Align32,
+  iosArm: _wordSize32Align32,
+  linuxIA32: _wordSize32Align32,
+  // _wordSize32Align64
+  androidArm: _wordSize32Align64,
+  linuxArm: _wordSize32Align64,
+  windowsIA32: _wordSize32Align64,
+};
+
+// All 64 bit ABIs align struct fields to their size.
+const Map<NativeType, int> _wordSize64 = {};
+
+// x86 System V ABI:
+// > uint64_t | size 8 | alignment 4
+// > double   | size 8 | alignment 4
+// https://github.com/hjl-tools/x86-psABI/wiki/intel386-psABI-1.1.pdf page 8.
+//
+// ios 32 bit alignment:
+// https://developer.apple.com/documentation/uikit/app_and_environment/updating_your_app_from_32-bit_to_64-bit_architecture/updating_data_structures
+const Map<NativeType, int> _wordSize32Align32 = {
+  NativeType.kDouble: 4,
+  NativeType.kInt64: 4,
+  NativeType.kUint64: 4
+};
+
+// The default for MSVC x86:
+// > The alignment-requirement for all data except structures, unions, and
+// > arrays is either the size of the object or the current packing size
+// > (specified with either /Zp or the pack pragma, whichever is less).
+// https://docs.microsoft.com/en-us/cpp/c-language/padding-and-alignment-of-structure-members?view=vs-2019
+//
+// GCC _can_ compile on Linux to this alignment with -malign-double, but does
+// not do so by default:
+// > Warning: if you use the -malign-double switch, structures containing the
+// > above types are aligned differently than the published application
+// > binary interface specifications for the x86-32 and are not binary
+// > compatible with structures in code compiled without that switch.
+// https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html
+//
+// ARM always requires 8 byte alignment for 8 byte values:
+// http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf 4.1 Fundamental Data Types
+const Map<NativeType, int> _wordSize32Align64 = {};
diff --git a/pkg/vm/lib/transformations/ffi/common.dart b/pkg/vm/lib/transformations/ffi/common.dart
index dc51195..4d242a7 100644
--- a/pkg/vm/lib/transformations/ffi/common.dart
+++ b/pkg/vm/lib/transformations/ffi/common.dart
@@ -17,6 +17,8 @@
 import 'package:kernel/type_environment.dart'
     show TypeEnvironment, SubtypeCheckMode;
 
+import 'abi.dart';
+
 /// Represents the (instantiated) ffi.NativeType.
 enum NativeType {
   kNativeType,
@@ -107,78 +109,6 @@
   NativeType.kBool: 1,
 };
 
-/// The struct layout in various ABIs.
-///
-/// ABIs differ per architectures and with different compilers.
-/// We pick the default struct layout based on the architecture and OS.
-///
-/// Compilers _can_ deviate from the default layout, but this prevents
-/// executables from making system calls. So this seems rather uncommon.
-///
-/// In the future, we might support custom struct layouts. For more info see
-/// https://github.com/dart-lang/sdk/issues/35768.
-enum Abi {
-  /// Layout in all 64bit ABIs (x64 and arm64).
-  wordSize64,
-
-  /// Layout in System V ABI for x386 (ia32 on Linux) and in iOS Arm 32 bit.
-  wordSize32Align32,
-
-  /// Layout in both the Arm 32 bit ABI and the Windows ia32 ABI.
-  wordSize32Align64,
-}
-
-/// WORD_SIZE in bytes.
-const wordSize = <Abi, int>{
-  Abi.wordSize64: 8,
-  Abi.wordSize32Align32: 4,
-  Abi.wordSize32Align64: 4,
-};
-
-/// Elements that are not aligned to their size.
-///
-/// Has an entry for all Abis. Empty entries document that every native
-/// type is aligned to it's own size in this ABI.
-///
-/// See runtime/vm/ffi/abi.cc for asserts in the VM that verify these
-/// alignments.
-///
-/// TODO(37470): Add uncommon primitive data types when we want to support them.
-const nonSizeAlignment = <Abi, Map<NativeType, int>>{
-  Abi.wordSize64: {},
-
-  // x86 System V ABI:
-  // > uint64_t | size 8 | alignment 4
-  // > double   | size 8 | alignment 4
-  // https://github.com/hjl-tools/x86-psABI/wiki/intel386-psABI-1.1.pdf page 8.
-  //
-  // iOS 32 bit alignment:
-  // https://developer.apple.com/documentation/uikit/app_and_environment/updating_your_app_from_32-bit_to_64-bit_architecture/updating_data_structures
-  Abi.wordSize32Align32: {
-    NativeType.kDouble: 4,
-    NativeType.kInt64: 4,
-    NativeType.kUint64: 4
-  },
-
-  // The default for MSVC x86:
-  // > The alignment-requirement for all data except structures, unions, and
-  // > arrays is either the size of the object or the current packing size
-  // > (specified with either /Zp or the pack pragma, whichever is less).
-  // https://docs.microsoft.com/en-us/cpp/c-language/padding-and-alignment-of-structure-members?view=vs-2019
-  //
-  // GCC _can_ compile on Linux to this alignment with -malign-double, but does
-  // not do so by default:
-  // > Warning: if you use the -malign-double switch, structures containing the
-  // > above types are aligned differently than the published application
-  // > binary interface specifications for the x86-32 and are not binary
-  // > compatible with structures in code compiled without that switch.
-  // https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html
-  //
-  // Arm always requires 8 byte alignment for 8 byte values:
-  // http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf 4.1 Fundamental Data Types
-  Abi.wordSize32Align64: {},
-};
-
 /// Load, store, and elementAt are rewired to their static type for these types.
 const List<NativeType> optimizedTypes = [
   NativeType.kBool,
@@ -617,9 +547,7 @@
     return InstanceInvocation(
         InstanceAccessKind.Instance,
         intListConstantExpression([
-          values[Abi.wordSize64]!,
-          values[Abi.wordSize32Align32]!,
-          values[Abi.wordSize32Align64]!
+          for (final abi in supportedAbisOrdered) values[abi]!,
         ]),
         listElementAt.name,
         Arguments([StaticInvocation(abiMethod, Arguments([]))]),
diff --git a/pkg/vm/lib/transformations/ffi/definitions.dart b/pkg/vm/lib/transformations/ffi/definitions.dart
index 49a4b8d..f87519e 100644
--- a/pkg/vm/lib/transformations/ffi/definitions.dart
+++ b/pkg/vm/lib/transformations/ffi/definitions.dart
@@ -31,6 +31,7 @@
 import 'package:kernel/type_environment.dart' show SubtypeCheckMode;
 import 'package:kernel/util/graph.dart';
 
+import 'abi.dart';
 import 'common.dart';
 
 /// Checks and elaborates the dart:ffi compounds and their fields.
@@ -833,7 +834,8 @@
   void _addSizeOfField(Class compound, IndexedClass? indexedClass,
       [Map<Abi, int>? sizes = null]) {
     if (sizes == null) {
-      sizes = Map.fromEntries(Abi.values.map((abi) => MapEntry(abi, 0)));
+      sizes =
+          Map.fromEntries(supportedAbisOrdered.map((abi) => MapEntry(abi, 0)));
     }
     final name = Name("#sizeOf");
     final getterReference = indexedClass?.lookupGetterReference(name);
@@ -1079,12 +1081,14 @@
     if (size == WORD_SIZE) {
       return wordSize;
     }
-    return Map.fromEntries(Abi.values.map((abi) => MapEntry(abi, size)));
+    return Map.fromEntries(
+        supportedAbisOrdered.map((abi) => MapEntry(abi, size)));
   }
 
   @override
-  Map<Abi, int> get alignment => Map.fromEntries(Abi.values.map((abi) =>
-      MapEntry(abi, nonSizeAlignment[abi]![nativeType] ?? size[abi]!)));
+  Map<Abi, int> get alignment =>
+      Map.fromEntries(supportedAbisOrdered.map((abi) =>
+          MapEntry(abi, nonSizeAlignment[abi]![nativeType] ?? size[abi]!)));
 
   @override
   Constant generateConstant(FfiTransformer transformer) =>
@@ -1305,7 +1309,7 @@
 
   factory StructNativeTypeCfe(Class clazz, List<NativeTypeCfe> members,
       {int? packing}) {
-    final layout = Map.fromEntries(Abi.values
+    final layout = Map.fromEntries(supportedAbisOrdered
         .map((abi) => MapEntry(abi, _calculateLayout(members, packing, abi))));
     return StructNativeTypeCfe._(clazz, members, packing, layout);
   }
@@ -1341,8 +1345,8 @@
 
 class UnionNativeTypeCfe extends CompoundNativeTypeCfe {
   factory UnionNativeTypeCfe(Class clazz, List<NativeTypeCfe> members) {
-    final layout = Map.fromEntries(
-        Abi.values.map((abi) => MapEntry(abi, _calculateLayout(members, abi))));
+    final layout = Map.fromEntries(supportedAbisOrdered
+        .map((abi) => MapEntry(abi, _calculateLayout(members, abi))));
     return UnionNativeTypeCfe._(clazz, members, layout);
   }
 
diff --git a/pkg/vm/lib/transformations/ffi/use_sites.dart b/pkg/vm/lib/transformations/ffi/use_sites.dart
index 744bc00..69a52e5 100644
--- a/pkg/vm/lib/transformations/ffi/use_sites.dart
+++ b/pkg/vm/lib/transformations/ffi/use_sites.dart
@@ -26,14 +26,9 @@
 import 'package:kernel/type_algebra.dart' show Substitution;
 import 'package:kernel/type_environment.dart';
 
+import 'abi.dart' show wordSize;
 import 'common.dart'
-    show
-        NativeType,
-        FfiTransformer,
-        nativeTypeSizes,
-        WORD_SIZE,
-        UNKNOWN,
-        wordSize;
+    show NativeType, FfiTransformer, nativeTypeSizes, WORD_SIZE, UNKNOWN;
 
 /// Checks and replaces calls to dart:ffi compound fields and methods.
 void transformLibraries(
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/ffi_struct_constructors.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/ffi_struct_constructors.dart.expect
index f449731..c2c6faa 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/ffi_struct_constructors.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/ffi_struct_constructors.dart.expect
@@ -128,10 +128,10 @@
   #C9 = ffi::_FfiStructLayout {fieldTypes:#C8, packing:#C4}
   #C10 = core::pragma {name:#C1, options:#C9}
   #C11 = 0
-  #C12 = <core::int*>[#C11, #C11, #C11]
-  #C13 = 8
-  #C14 = 4
-  #C15 = <core::int*>[#C13, #C14, #C14]
+  #C12 = <core::int*>[#C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11, #C11]
+  #C13 = 4
+  #C14 = 8
+  #C15 = <core::int*>[#C13, #C14, #C13, #C14, #C14, #C14, #C13, #C14, #C14, #C13, #C14, #C13, #C14, #C14, #C14, #C14, #C13, #C14]
   #C16 = static-tearoff self::useStruct3
   #C17 = static-tearoff self::returnStruct7
   #C18 = 1
diff --git a/runtime/vm/compiler/ffi/abi.cc b/runtime/vm/compiler/ffi/abi.cc
index d71ad34..25900e4 100644
--- a/runtime/vm/compiler/ffi/abi.cc
+++ b/runtime/vm/compiler/ffi/abi.cc
@@ -12,7 +12,7 @@
 
 namespace ffi {
 
-// See pkg/vm/lib/transformations/ffi.dart, which makes these assumptions.
+// See pkg/vm/lib/transformations/ffi/abi.dart, which makes these assumptions.
 struct AbiAlignmentDouble {
   int8_t use_one_byte;
   double d;
@@ -45,20 +45,42 @@
 #error "Unknown platform. Please add alignment requirements for ABI."
 #endif
 
-Abi TargetAbi() {
-#if defined(TARGET_ARCH_X64) || defined(TARGET_ARCH_ARM64)
-  return Abi::kWordSize64;
-#elif (defined(TARGET_ARCH_IA32) && /* NOLINT(whitespace/parens) */            \
-       (defined(DART_TARGET_OS_LINUX) || defined(DART_TARGET_OS_MACOS) ||      \
-        defined(DART_TARGET_OS_ANDROID))) ||                                   \
-    (defined(TARGET_ARCH_ARM) && defined(DART_TARGET_OS_MACOS_IOS))
-  return Abi::kWordSize32Align32;
-#elif defined(TARGET_ARCH_IA32) && defined(DART_TARGET_OS_WINDOWS) ||          \
-    defined(TARGET_ARCH_ARM)
-  return Abi::kWordSize32Align64;
+#if defined(DART_TARGET_OS_ANDROID)
+#define DART_TARGET_OS_NAME Android
+#elif defined(DART_TARGET_OS_FUCHSIA)
+#define DART_TARGET_OS_NAME Fuchsia
+#elif defined(DART_TARGET_OS_LINUX)
+#define DART_TARGET_OS_NAME Linux
+#elif defined(DART_TARGET_OS_MACOS)
+#if DART_TARGET_OS_MACOS_IOS
+#define DART_TARGET_OS_NAME IOS
 #else
-#error "Unknown platform. Please add alignment requirements for ABI."
+#define DART_TARGET_OS_NAME MacOS
 #endif
+#elif defined(DART_TARGET_OS_WINDOWS)
+#define DART_TARGET_OS_NAME Windows
+#else
+#error Unknown OS
+#endif
+
+#if defined(TARGET_ARCH_IA32)
+#define TARGET_ARCH_NAME IA32
+#elif defined(TARGET_ARCH_X64)
+#define TARGET_ARCH_NAME X64
+#elif defined(TARGET_ARCH_ARM)
+#define TARGET_ARCH_NAME Arm
+#elif defined(TARGET_ARCH_ARM64)
+#define TARGET_ARCH_NAME Arm64
+#else
+#error Unknown arch
+#endif
+
+#define ABI_NAME1(os, arch) k##os##arch
+#define ABI_NAME2(os, arch) ABI_NAME1(os, arch)
+#define ABI_NAME3 ABI_NAME2(DART_TARGET_OS_NAME, TARGET_ARCH_NAME)
+
+Abi TargetAbi() {
+  return Abi::ABI_NAME3;
 }
 
 }  // namespace ffi
diff --git a/runtime/vm/compiler/ffi/abi.h b/runtime/vm/compiler/ffi/abi.h
index fb6f937..118054f 100644
--- a/runtime/vm/compiler/ffi/abi.h
+++ b/runtime/vm/compiler/ffi/abi.h
@@ -17,12 +17,34 @@
 
 namespace ffi {
 
-// These ABIs should be kept in sync with pkg/vm/lib/transformations/ffi.dart.
+// These ABIs should be kept in sync with
+// pkg/vm/lib/transformations/ffi/abi.dart.
 enum class Abi {
-  kWordSize64 = 0,
-  kWordSize32Align32 = 1,
-  kWordSize32Align64 = 2
+  kAndroidArm,
+  kAndroidArm64,
+  kAndroidIA32,
+  kAndroidX64,
+  kFuchsiaArm64,
+  kFuchsiaX64,
+  kIOSArm,
+  kIOSArm64,
+  kIOSX64,
+  kLinuxArm,
+  kLinuxArm64,
+  kLinuxIA32,
+  kLinuxX64,
+  kMacOSArm64,
+  kMacOSX64,
+  kWindowsArm64,
+  kWindowsIA32,
+  kWindowsX64,
 };
+// We use the integer values of this enum in
+// runtime/vm/compiler/frontend/kernel_to_il.cc
+static_assert(static_cast<int64_t>(Abi::kAndroidArm) == 0,
+              "Enum value unexpected.");
+static_assert(static_cast<int64_t>(Abi::kWindowsX64) == 17,
+              "Enum value unexpected.");
 
 // The target ABI. Defines sizes and alignment of native types.
 Abi TargetAbi();
diff --git a/sdk/lib/_internal/vm/lib/ffi_patch.dart b/sdk/lib/_internal/vm/lib/ffi_patch.dart
index 3f7276b..2dcd5f8 100644
--- a/sdk/lib/_internal/vm/lib/ffi_patch.dart
+++ b/sdk/lib/_internal/vm/lib/ffi_patch.dart
@@ -21,8 +21,28 @@
   Double: 8,
 };
 
+// Keep consistent with pkg/vm/lib/transformations/ffi/abi.dart.
 @pragma("vm:prefer-inline")
-int get _intPtrSize => (const [8, 4, 4])[_abi()];
+int get _intPtrSize => (const [
+      4, // androidArm,
+      8, // androidArm64,
+      4, // androidIA32,
+      8, // androidX64,
+      8, // fuchsiaArm64,
+      8, // fuchsiaX64,
+      4, // iosArm,
+      8, // iosArm64,
+      8, // iosX64,
+      4, // linuxArm,
+      8, // linuxArm64,
+      4, // linuxIA32,
+      8, // linuxX64,
+      8, // macosArm64,
+      8, // macosX64,
+      8, // windowsArm64,
+      4, // windowsIA32,
+      8, // windowsX64,
+    ])[_abi()];
 
 @patch
 int sizeOf<T extends NativeType>() {
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index d439fd4..438e967 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -563,9 +563,9 @@
   /// This operation is potentially dangerous and should be used judiciously.
   /// The isolate stops operating *immediately*. It throws if the optional
   /// [message] does not adhere to the limitations on what can be sent from one
-  /// isolate to another. It also throws if a [finalMessagePort] is associated
-  /// with an isolate spawned outside of current isolate group, spawned via
-  /// [spawnUri].
+  /// isolate to another (see [SendPort.send] for more details). It also throws
+  /// if a [finalMessagePort] is associated with an isolate spawned outside of
+  /// current isolate group, spawned via [spawnUri].
   ///
   /// If successful, a call to this method does not return. Pending `finally`
   /// blocks are not executed, control flow will not go back to the event loop,
@@ -575,9 +575,9 @@
   /// code will run in the isolate.)
   ///
   /// If [finalMessagePort] is provided, and the [message] can be sent through
-  /// it, then the message is sent through that port as the final operation of
-  /// the current isolate. The isolate terminates immediately after
-  /// that [SendPort.send] call returns.
+  /// it (see [SendPort.send] for more details), then the message is sent
+  /// through that port as the final operation of the current isolate. The
+  /// isolate terminates immediately after that [SendPort.send] call returns.
   ///
   /// If the port is a native port -- one provided by [ReceivePort.sendPort] or
   /// [RawReceivePort.sendPort] -- the system may be able to send this final
@@ -599,9 +599,10 @@
 /// when sent.
 abstract class SendPort implements Capability {
   /// Sends an asynchronous [message] through this send port, to its
-  /// corresponding `ReceivePort`.
+  /// corresponding [ReceivePort].
   ///
-  /// The content of [message] can be:
+  /// The transitive object graph of [message] can contain the following
+  /// objects:
   ///   - [Null]
   ///   - [bool]
   ///   - [int]
@@ -612,14 +613,34 @@
   ///   - [SendPort]
   ///   - [Capability]
   ///
-  /// In the special circumstances when two isolates share the same code and are
-  /// running in the same process (e.g. isolates created via [Isolate.spawn]),
-  /// it is also possible to send object instances (which would be copied in the
-  /// process).
+  /// If the sender and receiver isolate share the same code (e.g. isolates
+  /// created via [Isolate.spawn]), the transitive object graph of [message] can
+  /// contain any object, with the following exceptions:
   ///
-  /// The send happens immediately and doesn't block.  The corresponding receive
+  ///   - Objects with native resources (subclasses of e.g.
+  ///     `NativeFieldWrapperClass1`). A [Socket] object for example referrs
+  ///     internally to objects that have native resources attached and can
+  ///     therefore not be sent.
+  ///   - [ReceivePort]
+  ///   - [DynamicLibrary]
+  ///   - [Pointer]
+  ///   - [UserTag]
+  ///   - `MirrorReference`
+  ///
+  /// Apart from those exceptions any object can be sent. Objects that are
+  /// identified as immutable (e.g. strings) will be shared whereas all other
+  /// objects will be copied.
+  ///
+  /// The send happens immediately and may have a linear time cost to copy the
+  /// transtive object graph. The send itself doesn't block (i.e. doesn't wait
+  /// until the receiver has received the message). The corresponding receive
   /// port can receive the message as soon as its isolate's event loop is ready
   /// to deliver it, independently of what the sending isolate is doing.
+  ///
+  /// Note: Due to an implementation choice the Dart VM made for how closures
+  /// represent captured state, closures can currently capture more state than
+  /// they need, which can cause the transitive closure to be larger than
+  /// needed. Open bug to address this: http://dartbug.com/36983
   void send(Object? message);
 
   /// Tests whether [other] is a [SendPort] pointing to the same
diff --git a/tests/web/dummy_compiler_test.dart b/tests/web/dummy_compiler_test.dart
deleted file mode 100644
index 53d4c20..0000000
--- a/tests/web/dummy_compiler_test.dart
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Tests that the dart2js compiler can be run in a js engine.  This ensures that
-// the internal compiler APIs have no dependency on dart:io.
-library dummy_compiler;
-
-import 'dart:async';
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/compiler.dart';
-
-import 'mock_libraries.dart';
-
-String libProvider(Uri uri) {
-  if (uri.path.endsWith(".platform")) {
-    return DEFAULT_PLATFORM_CONFIG;
-  }
-  if (uri.path.endsWith("/core.dart")) {
-    return buildLibrarySource(DEFAULT_CORE_LIBRARY);
-  } else if (uri.path.endsWith('core_patch.dart')) {
-    return DEFAULT_PATCH_CORE_SOURCE;
-  } else if (uri.path.endsWith('internal.dart')) {
-    return buildLibrarySource(DEFAULT_INTERNAL_LIBRARY);
-  } else if (uri.path.endsWith('interceptors.dart')) {
-    return buildLibrarySource(DEFAULT_INTERCEPTORS_LIBRARY);
-  } else if (uri.path.endsWith('js_helper.dart')) {
-    return buildLibrarySource(DEFAULT_JS_HELPER_LIBRARY);
-  } else if (uri.path.endsWith('/async.dart')) {
-    return buildLibrarySource(DEFAULT_ASYNC_LIBRARY);
-  } else {
-    return "library lib${uri.path.replaceAll('/', '.')};";
-  }
-}
-
-Future<String> provider(Uri uri) {
-  String source;
-  if (uri.scheme == "main") {
-    source = "main() {}";
-  } else if (uri.scheme == "lib") {
-    source = libProvider(uri);
-  } else {
-    throw "unexpected URI $uri";
-  }
-  return new Future.value(source);
-}
-
-void handler(Uri uri, int begin, int end, String message, Diagnostic kind) {
-  if (uri == null) {
-    print('$kind: $message');
-  } else {
-    print('$uri:$begin:$end: $kind: $message');
-  }
-}
-
-main() {
-  asyncStart();
-  Future<CompilationResult> result = compile(new Uri(scheme: 'main'),
-      new Uri(scheme: 'lib', path: '/'), provider, handler);
-  result.then((CompilationResult result) {
-    if (!result.isSuccess) {
-      throw 'Compilation failed';
-    }
-  }, onError: (e, s) {
-    throw 'Compilation failed: $e\n$s';
-  }).then(asyncSuccess);
-}
diff --git a/tests/web/internal/mock_libraries.dart b/tests/web/internal/mock_libraries.dart
deleted file mode 100644
index d279e0c..0000000
--- a/tests/web/internal/mock_libraries.dart
+++ /dev/null
@@ -1,463 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Library for creating mock versions of platform and internal libraries.
-
-library mock_libraries;
-
-const DEFAULT_PLATFORM_CONFIG = """
-[libraries]
-core:core/core.dart
-async:async/async.dart
-_js_helper:_internal/js_runtime/lib/js_helper.dart
-_interceptors:_internal/js_runtime/lib/interceptors.dart
-_internal:internal/internal.dart
-""";
-
-String buildLibrarySource(Map<String, String> elementMap,
-    [Map<String, String> additionalElementMap = const <String, String>{}]) {
-  Map<String, String> map = new Map<String, String>.from(elementMap);
-  if (additionalElementMap != null) {
-    map.addAll(additionalElementMap);
-  }
-  StringBuffer sb = new StringBuffer();
-  map.values.forEach((String element) {
-    sb.write('$element\n');
-  });
-  return sb.toString();
-}
-
-const Map<String, String> DEFAULT_CORE_LIBRARY = const <String, String>{
-  '<imports>': '''
-import 'dart:_internal' as internal;
-''',
-  'bool': 'class bool {}',
-  'Comparator': 'abstract class Comparator<T> {}',
-  'DateTime': r'''
-      class DateTime {
-        DateTime(year);
-        DateTime.utc(year);
-      }''',
-  'Deprecated': r'''
-      class Deprecated extends Object {
-        final String expires;
-        const Deprecated(this.expires);
-      }''',
-  'deprecated': 'const Object deprecated = const Deprecated("next release");',
-  'double': r'''
-      abstract class double extends num {
-        static var nan = 0;
-        static parse(s) {}
-      }''',
-  'Enum': r'''
-      abstract class Enum {
-        int get index;
-      }''',
-  'Function': r'''
-      class Function {
-        static apply(Function fn, List positional, [Map named]) => null;
-      }''',
-  'identical': 'bool identical(Object a, Object b) { return true; }',
-  'int': 'abstract class int extends num { }',
-  'Iterable': '''
-      abstract class Iterable<E> {
-          Iterator<E> get iterator => null;
-      }''',
-  'Iterator': '''
-      abstract class Iterator<E> {
-          E get current => null;
-      }''',
-  'LinkedHashMap': r'''
-      class LinkedHashMap<K, V> implements Map<K, V> {
-      }''',
-  'List': r'''
-      class List<E> extends Iterable<E> {
-        var length;
-        List([length]);
-        List.filled(length, element);
-        E get first => null;
-        E get last => null;
-        E get single => null;
-        E removeLast() => null;
-        E removeAt(i) => null;
-        E elementAt(i) => null;
-        E singleWhere(f) => null;
-      }''',
-  'Map': 'abstract class Map<K,V> {}',
-  'Null': 'class Null {}',
-  'num': r'''
-      abstract class num {
-        operator +(_);
-        operator *(_);
-        operator -();
-      }''',
-  'print': 'print(var obj) {}',
-  'proxy': 'const proxy = 0;',
-  'Object': r'''
-      class Object {
-        const Object();
-        operator ==(other) { return true; }
-        get hashCode => throw "Object.hashCode not implemented.";
-        String toString() { return null; }
-        noSuchMethod(im) { throw im; }
-      }''',
-  'StackTrace': 'abstract class StackTrace {}',
-  'String': 'class String implements Pattern {}',
-  'Symbol': '''
-      abstract class Symbol {
-        const factory Symbol(String name) = internal.Symbol;
-      }
-      ''',
-  'Type': 'class Type {}',
-  'Pattern': 'abstract class Pattern {}',
-  '_genericNoSuchMethod': '_genericNoSuchMethod(a,b,c,d,e) {}',
-  '_unresolvedConstructorError': '_unresolvedConstructorError(a,b,c,d,e) {}',
-  '_malformedTypeError': '_malformedTypeError(message) {}',
-};
-
-const Map<String, String> DEFAULT_INTERNAL_LIBRARY = const <String, String>{
-  '<imports>': '''
-import 'dart:core' as core;
-''',
-  'Symbol': '''
-class Symbol implements core.Symbol {
-  final core.String _name;
-
-  const Symbol(this._name);
-  Symbol.validated(this._name);
-}
-''',
-};
-
-const String DEFAULT_PATCH_CORE_SOURCE = r'''
-import 'dart:_js_helper';
-import 'dart:_interceptors';
-import 'dart:async';
-
-@patch
-class LinkedHashMap<K, V> {
-  factory LinkedHashMap._empty() => null;
-  factory LinkedHashMap._literal(elements) => null;
-  static _makeEmpty() => null;
-  static _makeLiteral(elements) => null;
-}
-''';
-
-const Map<String, String> DEFAULT_JS_HELPER_LIBRARY = const <String, String>{
-  'assertTest': 'assertTest(a) {}',
-  'assertThrow': 'assertThrow(a) {}',
-  'assertHelper': 'assertHelper(a) {}',
-  'assertUnreachable': 'assertUnreachable() {}',
-  'assertIsSubtype': 'assertIsSubtype(subtype, supertype, message) {}',
-  'assertSubtype': 'assertSubtype(object, isField, checks, asField) {}',
-  'assertSubtypeOfRuntimeType': 'assertSubtypeOfRuntimeType(object, type) {}',
-  'asyncHelper': 'asyncHelper(object, asyncBody, completer) {}',
-  'boolConversionCheck': 'boolConversionCheck(x) {}',
-  'boolTypeCast': 'boolTypeCast(value) {}',
-  'boolTypeCheck': 'boolTypeCheck(value) {}',
-  'checkSubtype': 'checkSubtype(object, isField, checks, asField) {}',
-  'checkSubtypeOfRuntimeType': 'checkSubtypeOfRuntimeType(o, t) {}',
-  'BoundClosure': r'''abstract class BoundClosure extends Closure {
-    var self;
-    var target;
-    var receiver;
-  }''',
-  'buildFunctionType': r'''buildFunctionType(returnType, parameterTypes,
-                            optionalParameterTypes) {
-            return new RuntimeFunctionType();
-          }''',
-  'buildInterfaceType': '''buildInterfaceType(rti, typeArguments) {
-                             if (rti == null) return new RuntimeTypePlain();
-                             return new RuntimeTypeGeneric();
-                           }''',
-  'buildNamedFunctionType':
-      r'''buildNamedFunctionType(returnType, parameterTypes,
-                                 namedParameters) {
-            return new RuntimeFunctionType();
-          }''',
-  'checkFunctionSubtype':
-      r'''checkFunctionSubtype(var target, String signatureName,
-                               String contextName, var context,
-                               var typeArguments) {}''',
-  'checkMalformedType': 'checkMalformedType(value, message) {}',
-  'checkInt': 'checkInt(value) {}',
-  'checkNum': 'checkNum(value) {}',
-  'checkString': 'checkString(value) {}',
-  'Closure': 'abstract class Closure implements Function { }',
-  'closureFromTearOff':
-      r'''closureFromTearOff(receiver, functions, reflectionInfo,
-                             isStatic, jsArguments, name) {}''',
-  'computeSignature':
-      'computeSignature(var signature, var context, var contextName) {}',
-  'ConstantMap': 'class ConstantMap<K, V> {}',
-  'ConstantProtoMap': 'class ConstantProtoMap<K, V> {}',
-  'ConstantStringMap': 'class ConstantStringMap<K, V> {}',
-  'createInvocationMirror': 'createInvocationMirror(a0, a1, a2, a3, a4, a5) {}',
-  'createRuntimeType': 'createRuntimeType(a) {}',
-  'doubleTypeCast': 'doubleTypeCast(value) {}',
-  'doubleTypeCheck': 'doubleTypeCheck(value) {}',
-  'functionSubtypeCast':
-      r'''functionSubtypeCast(Object object, String signatureName,
-                              String contextName, var context) {}''',
-  'functionTypeTestMetaHelper': r'''
-      functionTypeTestMetaHelper() {
-        buildFunctionType(null, null, null);
-        buildNamedFunctionType(null, null, null);
-        buildInterfaceType(null, null);
-      }''',
-  'functionTypeTest': r'functionTypeTest(f, t) {}',
-  'functionTypeCast': r'functionTypeCast(f, t) { return f; }',
-  'functionTypeCheck': r'functionTypeCheck(f, t) { return f; }',
-  'futureOrTest': r'futureOrTest(f, t) {}',
-  'futureOrCast': r'futureOrCast(f, t) { return f; }',
-  'futureOrCheck': r'futureOrCheck(f, t) { return f; }',
-  'getFallThroughError': 'getFallThroughError() {}',
-  'getIsolateAffinityTag': 'getIsolateAffinityTag(_) {}',
-  'getRuntimeTypeArgumentIntercepted':
-      'getRuntimeTypeArgumentIntercepted(interceptor, target, substitutionName, index) {}',
-  'getRuntimeTypeArgument':
-      'getRuntimeTypeArgument(target, substitutionName, index) {}',
-  'getRuntimeTypeArguments':
-      'getRuntimeTypeArguments(target, substitutionName) {}',
-  'getRuntimeTypeInfo': 'getRuntimeTypeInfo(a) {}',
-  'getTraceFromException': 'getTraceFromException(exception) {}',
-  'getTypeArgumentByIndex': 'getTypeArgumentByIndex(target, index) {}',
-  'GeneralConstantMap': 'class GeneralConstantMap {}',
-  'iae': 'iae(x) { throw x; } ioore(x) { throw x; }',
-  'Instantiation1': 'class Instantiation1<T1> extends Closure {}',
-  'Instantiation2': 'class Instantiation2<T1,T2> extends Closure {}',
-  'Instantiation3': 'class Instantiation3<T1,T2,T3> extends Closure {}',
-  'interceptedTypeCast': 'interceptedTypeCast(value, property) {}',
-  'interceptedTypeCheck': 'interceptedTypeCheck(value, property) {}',
-  'intTypeCast': 'intTypeCast(value) {}',
-  'intTypeCheck': 'intTypeCheck(value) {}',
-  'isJsIndexable': 'isJsIndexable(a, b) {}',
-  'JavaScriptIndexingBehavior': 'abstract class JavaScriptIndexingBehavior {}',
-  'JSInvocationMirror': r'''
-  class JSInvocationMirror {
-    get typeArguments => null;
-  }''',
-  'listSuperNativeTypeCast': 'listSuperNativeTypeCast(value) {}',
-  'listSuperNativeTypeCheck': 'listSuperNativeTypeCheck(value) {}',
-  'listSuperTypeCast': 'listSuperTypeCast(value) {}',
-  'listSuperTypeCheck': 'listSuperTypeCheck(value) {}',
-  'listTypeCast': 'listTypeCast(value) {}',
-  'listTypeCheck': 'listTypeCheck(value) {}',
-  'makeLiteralMap': 'makeLiteralMap(List keyValuePairs) {}',
-  'Native': 'class Native {}',
-  'numberOrStringSuperNativeTypeCast':
-      'numberOrStringSuperNativeTypeCast(value) {}',
-  'numberOrStringSuperNativeTypeCheck':
-      'numberOrStringSuperNativeTypeCheck(value) {}',
-  'numberOrStringSuperTypeCast': 'numberOrStringSuperTypeCast(value) {}',
-  'numberOrStringSuperTypeCheck': 'numberOrStringSuperTypeCheck(value) {}',
-  'numTypeCast': 'numTypeCast(value) {}',
-  'numTypeCheck': 'numTypeCheck(value) {}',
-  '_Patch': 'class _Patch { final tag; const _Patch(this.tag); }',
-  'patch': 'const patch = const _Patch(null);',
-  'patch_full': 'const patch_full = const _Patch("full");',
-  'patch_lazy': 'const patch_lazy = const _Patch("lazy");',
-  'patch_startup': 'const patch_startup = const _Patch("startup");',
-  'propertyTypeCast': 'propertyTypeCast(x) {}',
-  'propertyTypeCheck': 'propertyTypeCheck(value, property) {}',
-  'requiresPreamble': 'requiresPreamble() {}',
-  'RuntimeFunctionType': 'class RuntimeFunctionType {}',
-  'RuntimeTypeGeneric': 'class RuntimeTypeGeneric {}',
-  'RuntimeTypePlain': 'class RuntimeTypePlain {}',
-  'S': 'S() {}',
-  'setRuntimeTypeInfo': 'setRuntimeTypeInfo(a, b) {}',
-  'stringSuperNativeTypeCast': 'stringSuperNativeTypeCast(value) {}',
-  'stringSuperNativeTypeCheck': 'stringSuperNativeTypeCheck(value) {}',
-  'stringSuperTypeCast': 'stringSuperTypeCast(value) {}',
-  'stringSuperTypeCheck': 'stringSuperTypeCheck(value) {}',
-  'stringTypeCast': 'stringTypeCast(x) {}',
-  'stringTypeCheck': 'stringTypeCheck(x) {}',
-  'subtypeCast': 'subtypeCast(object, isField, checks, asField) {}',
-  'subtypeOfRuntimeTypeCast': 'subtypeOfRuntimeTypeCast(object, type) {}',
-  'checkConcurrentModificationError':
-      'checkConcurrentModificationError(collection) {}',
-  'throwConcurrentModificationError':
-      'throwConcurrentModificationError(collection) {}',
-  'throwCyclicInit': 'throwCyclicInit(staticName) {}',
-  'throwExpression': 'throwExpression(e) {}',
-  'throwNoSuchMethod':
-      'throwNoSuchMethod(obj, name, arguments, expectedArgumentNames) {}',
-  'throwUnsupportedError': 'throwUnsupportedError(message) {}',
-  'throwTypeError': 'throwTypeError(message) {}',
-  'unwrapException': 'unwrapException(e) {}',
-  'voidTypeCheck': 'voidTypeCheck(value) {}',
-  'wrapException': 'wrapException(x) { return x; }',
-  'badMain': 'badMain() { throw "bad main"; }',
-  'missingMain': 'missingMain() { throw "missing main"; }',
-  'mainHasTooManyParameters': 'mainHasTooManyParameters() '
-      '{ throw "main has too many parameters"; }',
-};
-
-const Map<String, String> DEFAULT_FOREIGN_HELPER_LIBRARY =
-    const <String, String>{
-  'JS': r'''
-      dynamic JS(String typeDescription, String codeTemplate,
-        [var arg0, var arg1, var arg2, var arg3, var arg4, var arg5, var arg6,
-         var arg7, var arg8, var arg9, var arg10, var arg11]) {}''',
-};
-
-const Map<String, String> DEFAULT_INTERCEPTORS_LIBRARY = const <String, String>{
-  'findIndexForNativeSubclassType': 'findIndexForNativeSubclassType(type) {}',
-  'getDispatchProperty': 'getDispatchProperty(o) {}',
-  'getInterceptor': 'getInterceptor(x) {}',
-  'getNativeInterceptor': 'getNativeInterceptor(x) {}',
-  'initializeDispatchProperty': 'initializeDispatchProperty(f,p,i) {}',
-  'initializeDispatchPropertyCSP': 'initializeDispatchPropertyCSP(f,p,i) {}',
-  'Interceptor': r'''
-      class Interceptor {
-        toString() {}
-        bool operator==(other) => identical(this, other);
-        get hashCode => throw "Interceptor.hashCode not implemented.";
-        noSuchMethod(im) { throw im; }
-      }''',
-  'JSArray': r'''
-          class JSArray<E> extends Interceptor implements List<E>, JSIndexable {
-            JSArray();
-            factory JSArray.typed(a) => a;
-            var length;
-            operator[](index) => this[index];
-            operator[]=(index, value) { this[index] = value; }
-            add(value) { this[length] = value; }
-            insert(index, value) {}
-            E get first => this[0];
-            E get last => this[0];
-            E get single => this[0];
-            E removeLast() => this[0];
-            E removeAt(index) => this[0];
-            E elementAt(index) => this[0];
-            E singleWhere(f) => this[0];
-            Iterator<E> get iterator => null;
-          }''',
-  'JSBool': 'class JSBool extends Interceptor implements bool {}',
-  'JSDouble': 'class JSDouble extends JSNumber implements double {}',
-  'JSExtendableArray': 'class JSExtendableArray extends JSMutableArray {}',
-  'JSFixedArray': 'class JSFixedArray extends JSMutableArray {}',
-  'JSFunction':
-      'abstract class JSFunction extends Interceptor implements Function {}',
-  'JSIndexable': r'''
-      abstract class JSIndexable {
-        get length;
-        operator[](index);
-      }''',
-  'JSInt': r'''
-       class JSInt extends JSNumber implements int {
-         operator~() => this;
-       }''',
-  'JSMutableArray':
-      'class JSMutableArray extends JSArray implements JSMutableIndexable {}',
-  'JSUnmodifiableArray': 'class JSUnmodifiableArray extends JSArray {}',
-  'JSMutableIndexable':
-      'abstract class JSMutableIndexable extends JSIndexable {}',
-  'JSPositiveInt': 'class JSPositiveInt extends JSInt {}',
-  'JSNull': r'''
-      class JSNull extends Interceptor {
-        bool operator==(other) => identical(null, other);
-        get hashCode => throw "JSNull.hashCode not implemented.";
-        String toString() => 'Null';
-        Type get runtimeType => null;
-        noSuchMethod(x) => super.noSuchMethod(x);
-      }''',
-  'JSNumber': r'''
-      class JSNumber extends Interceptor implements num {
-        // All these methods return a number to please type inferencing.
-        operator-() => (this is JSInt) ? 42 : 42.2;
-        operator +(other) => (this is JSInt) ? 42 : 42.2;
-        operator -(other) => (this is JSInt) ? 42 : 42.2;
-        operator ~/(other) => _tdivFast(other);
-        operator /(other) => (this is JSInt) ? 42 : 42.2;
-        operator *(other) => (this is JSInt) ? 42 : 42.2;
-        operator %(other) => (this is JSInt) ? 42 : 42.2;
-        operator <<(other) => _shlPositive(other);
-        operator >>(other) {
-          return _shrBothPositive(other) + _shrReceiverPositive(other) +
-            _shrOtherPositive(other);
-        }
-        operator |(other) => 42;
-        operator &(other) => 42;
-        operator ^(other) => 42;
-
-        operator >(other) => !identical(this, other);
-        operator >=(other) => !identical(this, other);
-        operator <(other) => !identical(this, other);
-        operator <=(other) => !identical(this, other);
-        operator ==(other) => identical(this, other);
-        get hashCode => throw "JSNumber.hashCode not implemented.";
-
-        // We force side effects on _tdivFast to mimic the shortcomings of
-        // the effect analysis: because the `_tdivFast` implementation of
-        // the core library has calls that may not already be analyzed,
-        // the analysis will conclude that `_tdivFast` may have side
-        // effects.
-        _tdivFast(other) => new List()..length = 42;
-        _shlPositive(other) => 42;
-        _shrBothPositive(other) => 42;
-        _shrReceiverPositive(other) => 42;
-        _shrOtherPositive(other) => 42;
-
-        abs() => (this is JSInt) ? 42 : 42.2;
-        remainder(other) => (this is JSInt) ? 42 : 42.2;
-        truncate() => 42;
-      }''',
-  'JSString': r'''
-      class JSString extends Interceptor implements String, JSIndexable {
-        split(pattern) => [];
-        int get length => 42;
-        operator[](index) {}
-        toString() {}
-        operator+(other) => this;
-        codeUnitAt(index) => 42;
-      }''',
-  'JSUInt31': 'class JSUInt31 extends JSUInt32 {}',
-  'JSUInt32': 'class JSUInt32 extends JSPositiveInt {}',
-  'ObjectInterceptor': 'class ObjectInterceptor {}',
-  'JavaScriptObject': 'class JavaScriptObject {}',
-  'PlainJavaScriptObject': 'class PlainJavaScriptObject {}',
-  'UnknownJavaScriptObject': 'class UnknownJavaScriptObject {}',
-  'JavaScriptFunction': 'class JavaScriptFunction {}',
-};
-
-const Map<String, String> DEFAULT_ASYNC_LIBRARY = const <String, String>{
-  'DeferredLibrary': 'class DeferredLibrary {}',
-  'Future': '''
-      class Future<T> {
-        Future.value([value]);
-      }
-      ''',
-  'Stream': 'class Stream<T> {}',
-  'Completer': 'class Completer<T> {}',
-  'StreamIterator': 'class StreamIterator<T> {}',
-};
-
-/// These members are only needed when async/await is used.
-const Map<String, String> ASYNC_AWAIT_LIBRARY = const <String, String>{
-  '_wrapJsFunctionForAsync': '_wrapJsFunctionForAsync(f) {}',
-  '_asyncHelper': '_asyncHelper(o, f, c) {}',
-  '_SyncStarIterable': 'class _SyncStarIterable {}',
-  '_IterationMarker': 'class _IterationMarker {}',
-  '_AsyncStarStreamController': 'class _AsyncStarStreamController {}',
-  '_asyncStarHelper': '_asyncStarHelper(x, y, z) {}',
-  '_streamOfController': '_streamOfController(x) {}',
-};
-
-const String DEFAULT_MIRRORS_SOURCE = r'''
-import 'dart:_js_mirrors' as js;
-class Comment {}
-class MirrorSystem {}
-class MirrorsUsed {
-  final targets;
-  const MirrorsUsed({this.targets});
-}
-void reflectType(Type t) => js.disableTreeShaking();
-''';
-
-const String DEFAULT_JS_MIRRORS_SOURCE = r'''
-disableTreeShaking(){}
-preserveMetadata(){}
-preserveLibraryNames(){}
-''';
diff --git a/tests/web_2/dummy_compiler_test.dart b/tests/web_2/dummy_compiler_test.dart
deleted file mode 100644
index 1f66dca..0000000
--- a/tests/web_2/dummy_compiler_test.dart
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.7
-
-// Tests that the dart2js compiler can be run in a js engine.  This ensures that
-// the internal compiler APIs have no dependency on dart:io.
-library dummy_compiler;
-
-import 'dart:async';
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/compiler.dart';
-
-import 'mock_libraries.dart';
-
-String libProvider(Uri uri) {
-  if (uri.path.endsWith(".platform")) {
-    return DEFAULT_PLATFORM_CONFIG;
-  }
-  if (uri.path.endsWith("/core.dart")) {
-    return buildLibrarySource(DEFAULT_CORE_LIBRARY);
-  } else if (uri.path.endsWith('core_patch.dart')) {
-    return DEFAULT_PATCH_CORE_SOURCE;
-  } else if (uri.path.endsWith('internal.dart')) {
-    return buildLibrarySource(DEFAULT_INTERNAL_LIBRARY);
-  } else if (uri.path.endsWith('interceptors.dart')) {
-    return buildLibrarySource(DEFAULT_INTERCEPTORS_LIBRARY);
-  } else if (uri.path.endsWith('js_helper.dart')) {
-    return buildLibrarySource(DEFAULT_JS_HELPER_LIBRARY);
-  } else if (uri.path.endsWith('/async.dart')) {
-    return buildLibrarySource(DEFAULT_ASYNC_LIBRARY);
-  } else {
-    return "library lib${uri.path.replaceAll('/', '.')};";
-  }
-}
-
-Future<String> provider(Uri uri) {
-  String source;
-  if (uri.scheme == "main") {
-    source = "main() {}";
-  } else if (uri.scheme == "lib") {
-    source = libProvider(uri);
-  } else {
-    throw "unexpected URI $uri";
-  }
-  return new Future.value(source);
-}
-
-void handler(Uri uri, int begin, int end, String message, Diagnostic kind) {
-  if (uri == null) {
-    print('$kind: $message');
-  } else {
-    print('$uri:$begin:$end: $kind: $message');
-  }
-}
-
-main() {
-  asyncStart();
-  Future<CompilationResult> result = compile(new Uri(scheme: 'main'),
-      new Uri(scheme: 'lib', path: '/'), provider, handler);
-  result.then((CompilationResult result) {
-    if (!result.isSuccess) {
-      throw 'Compilation failed';
-    }
-  }, onError: (e, s) {
-    throw 'Compilation failed: $e\n$s';
-  }).then(asyncSuccess);
-}
diff --git a/tests/web_2/internal/mock_libraries.dart b/tests/web_2/internal/mock_libraries.dart
deleted file mode 100644
index 9aa36ad..0000000
--- a/tests/web_2/internal/mock_libraries.dart
+++ /dev/null
@@ -1,417 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.7
-
-// Library for creating mock versions of platform and internal libraries.
-
-library mock_libraries;
-
-const DEFAULT_PLATFORM_CONFIG = """
-[libraries]
-core:core/core.dart
-async:async/async.dart
-_js_helper:_internal/js_runtime/lib/js_helper.dart
-_interceptors:_internal/js_runtime/lib/interceptors.dart
-_internal:internal/internal.dart
-""";
-
-String buildLibrarySource(Map<String, String> elementMap,
-    [Map<String, String> additionalElementMap = const <String, String>{}]) {
-  Map<String, String> map = new Map<String, String>.from(elementMap);
-  if (additionalElementMap != null) {
-    map.addAll(additionalElementMap);
-  }
-  StringBuffer sb = new StringBuffer();
-  map.values.forEach((String element) {
-    sb.write('$element\n');
-  });
-  return sb.toString();
-}
-
-const Map<String, String> DEFAULT_CORE_LIBRARY = const <String, String>{
-  '<imports>': '''
-import 'dart:_internal' as internal;
-''',
-  'bool': 'class bool {}',
-  'Comparator': 'abstract class Comparator<T> {}',
-  'DateTime': r'''
-      class DateTime {
-        DateTime(year);
-        DateTime.utc(year);
-      }''',
-  'Deprecated': r'''
-      class Deprecated extends Object {
-        final String expires;
-        const Deprecated(this.expires);
-      }''',
-  'deprecated': 'const Object deprecated = const Deprecated("next release");',
-  'double': r'''
-      abstract class double extends num {
-        static var nan = 0;
-        static parse(s) {}
-      }''',
-  'Function': r'''
-      class Function {
-        static apply(Function fn, List positional, [Map named]) => null;
-      }''',
-  'identical': 'bool identical(Object a, Object b) { return true; }',
-  'int': 'abstract class int extends num { }',
-  'Iterable': '''
-      abstract class Iterable<E> {
-          Iterator<E> get iterator => null;
-      }''',
-  'Iterator': '''
-      abstract class Iterator<E> {
-          E get current => null;
-      }''',
-  'LinkedHashMap': r'''
-      class LinkedHashMap<K, V> implements Map<K, V> {
-      }''',
-  'List': r'''
-      class List<E> extends Iterable<E> {
-        var length;
-        List([length]);
-        List.filled(length, element);
-        E get first => null;
-        E get last => null;
-        E get single => null;
-        E removeLast() => null;
-        E removeAt(i) => null;
-        E elementAt(i) => null;
-        E singleWhere(f) => null;
-      }''',
-  'Map': 'abstract class Map<K,V> {}',
-  'Null': 'class Null {}',
-  'num': r'''
-      abstract class num {
-        operator +(_);
-        operator *(_);
-        operator -();
-      }''',
-  'print': 'print(var obj) {}',
-  'proxy': 'const proxy = 0;',
-  'Object': r'''
-      class Object {
-        const Object();
-        operator ==(other) { return true; }
-        get hashCode => throw "Object.hashCode not implemented.";
-        String toString() { return null; }
-        noSuchMethod(im) { throw im; }
-      }''',
-  'StackTrace': 'abstract class StackTrace {}',
-  'String': 'class String implements Pattern {}',
-  'Symbol': '''
-      abstract class Symbol {
-        const factory Symbol(String name) = internal.Symbol;
-      }
-      ''',
-  'Type': 'class Type {}',
-  'Pattern': 'abstract class Pattern {}',
-  '_genericNoSuchMethod': '_genericNoSuchMethod(a,b,c,d,e) {}',
-  '_unresolvedConstructorError': '_unresolvedConstructorError(a,b,c,d,e) {}',
-  '_malformedTypeError': '_malformedTypeError(message) {}',
-};
-
-const Map<String, String> DEFAULT_INTERNAL_LIBRARY = const <String, String>{
-  '<imports>': '''
-import 'dart:core' as core;
-''',
-  'Symbol': '''
-class Symbol implements core.Symbol {
-  final core.String _name;
-
-  const Symbol(this._name);
-  Symbol.validated(this._name);
-}
-''',
-};
-
-const String DEFAULT_PATCH_CORE_SOURCE = r'''
-import 'dart:_js_helper';
-import 'dart:_interceptors';
-import 'dart:async';
-
-@patch
-class LinkedHashMap<K, V> {
-  factory LinkedHashMap._empty() => null;
-  factory LinkedHashMap._literal(elements) => null;
-  static _makeEmpty() => null;
-  static _makeLiteral(elements) => null;
-}
-''';
-
-const Map<String, String> DEFAULT_JS_HELPER_LIBRARY = const <String, String>{
-  'assertTest': 'assertTest(a) {}',
-  'assertThrow': 'assertThrow(a) {}',
-  'assertHelper': 'assertHelper(a) {}',
-  'assertUnreachable': 'assertUnreachable() {}',
-  'assertSubtype': 'assertSubtype(object, isField, checks, asField) {}',
-  'asyncHelper': 'asyncHelper(object, asyncBody, completer) {}',
-  'boolConversionCheck': 'boolConversionCheck(x) {}',
-  'checkSubtype': 'checkSubtype(object, isField, checks, asField) {}',
-  'BoundClosure': r'''abstract class BoundClosure extends Closure {
-    var self;
-    var target;
-    var receiver;
-  }''',
-  'buildFunctionType': r'''buildFunctionType(returnType, parameterTypes,
-                            optionalParameterTypes) {
-            return new RuntimeFunctionType();
-          }''',
-  'buildInterfaceType': '''buildInterfaceType(rti, typeArguments) {
-                             if (rti == null) return new RuntimeTypePlain();
-                             return new RuntimeTypeGeneric();
-                           }''',
-  'buildNamedFunctionType':
-      r'''buildNamedFunctionType(returnType, parameterTypes,
-                                 namedParameters) {
-            return new RuntimeFunctionType();
-          }''',
-  'checkFunctionSubtype':
-      r'''checkFunctionSubtype(var target, String signatureName,
-                               String contextName, var context,
-                               var typeArguments) {}''',
-  'checkMalformedType': 'checkMalformedType(value, message) {}',
-  'checkInt': 'checkInt(value) {}',
-  'checkNum': 'checkNum(value) {}',
-  'checkString': 'checkString(value) {}',
-  'Closure': 'abstract class Closure implements Function { }',
-  'closureFromTearOff':
-      r'''closureFromTearOff(receiver, functions, reflectionInfo,
-                             isStatic, jsArguments, name) {}''',
-  'computeSignature':
-      'computeSignature(var signature, var context, var contextName) {}',
-  'ConstantMap': 'class ConstantMap<K, V> {}',
-  'ConstantProtoMap': 'class ConstantProtoMap<K, V> {}',
-  'ConstantStringMap': 'class ConstantStringMap<K, V> {}',
-  'createInvocationMirror': 'createInvocationMirror(a0, a1, a2, a3, a4, a5) {}',
-  'createRuntimeType': 'createRuntimeType(a) {}',
-  'functionSubtypeCast':
-      r'''functionSubtypeCast(Object object, String signatureName,
-                              String contextName, var context) {}''',
-  'functionTypeTestMetaHelper': r'''
-      functionTypeTestMetaHelper() {
-        buildFunctionType(null, null, null);
-        buildNamedFunctionType(null, null, null);
-        buildInterfaceType(null, null);
-      }''',
-  'getFallThroughError': 'getFallThroughError() {}',
-  'getIsolateAffinityTag': 'getIsolateAffinityTag(_) {}',
-  'getRuntimeTypeArguments':
-      'getRuntimeTypeArguments(target, substitutionName) {}',
-  'getRuntimeTypeInfo': 'getRuntimeTypeInfo(a) {}',
-  'getTraceFromException': 'getTraceFromException(exception) {}',
-  'GeneralConstantMap': 'class GeneralConstantMap {}',
-  'iae': 'iae(x) { throw x; } ioore(x) { throw x; }',
-  'Instantiation1': 'class Instantiation1<T1> extends Closure {}',
-  'Instantiation2': 'class Instantiation2<T1,T2> extends Closure {}',
-  'Instantiation3': 'class Instantiation3<T1,T2,T3> extends Closure {}',
-  'interceptedTypeCast': 'interceptedTypeCast(value, property) {}',
-  'interceptedTypeCheck': 'interceptedTypeCheck(value, property) {}',
-  'isJsIndexable': 'isJsIndexable(a, b) {}',
-  'JavaScriptIndexingBehavior': 'abstract class JavaScriptIndexingBehavior {}',
-  'JSInvocationMirror': r'''
-  class JSInvocationMirror {
-    get typeArguments => null;
-  }''',
-  'makeLiteralMap': 'makeLiteralMap(List keyValuePairs) {}',
-  'Native': 'class Native {}',
-  '_Patch': 'class _Patch { final tag; const _Patch(this.tag); }',
-  'patch': 'const patch = const _Patch(null);',
-  'patch_full': 'const patch_full = const _Patch("full");',
-  'patch_lazy': 'const patch_lazy = const _Patch("lazy");',
-  'patch_startup': 'const patch_startup = const _Patch("startup");',
-  'requiresPreamble': 'requiresPreamble() {}',
-  'RuntimeFunctionType': 'class RuntimeFunctionType {}',
-  'RuntimeTypeGeneric': 'class RuntimeTypeGeneric {}',
-  'RuntimeTypePlain': 'class RuntimeTypePlain {}',
-  'S': 'S() {}',
-  'setRuntimeTypeInfo': 'setRuntimeTypeInfo(a, b) {}',
-  'subtypeOfRuntimeTypeCast': 'subtypeOfRuntimeTypeCast(object, type) {}',
-  'checkConcurrentModificationError':
-      'checkConcurrentModificationError(collection) {}',
-  'throwConcurrentModificationError':
-      'throwConcurrentModificationError(collection) {}',
-  'throwCyclicInit': 'throwCyclicInit(staticName) {}',
-  'throwExpression': 'throwExpression(e) {}',
-  'throwNoSuchMethod':
-      'throwNoSuchMethod(obj, name, arguments, expectedArgumentNames) {}',
-  'throwUnsupportedError': 'throwUnsupportedError(message) {}',
-  'unwrapException': 'unwrapException(e) {}',
-  'voidTypeCheck': 'voidTypeCheck(value) {}',
-  'wrapException': 'wrapException(x) { return x; }',
-  'badMain': 'badMain() { throw "bad main"; }',
-  'missingMain': 'missingMain() { throw "missing main"; }',
-  'mainHasTooManyParameters': 'mainHasTooManyParameters() '
-      '{ throw "main has too many parameters"; }',
-};
-
-const Map<String, String> DEFAULT_FOREIGN_HELPER_LIBRARY =
-    const <String, String>{
-  'JS': r'''
-      dynamic JS(String typeDescription, String codeTemplate,
-        [var arg0, var arg1, var arg2, var arg3, var arg4, var arg5, var arg6,
-         var arg7, var arg8, var arg9, var arg10, var arg11]) {}''',
-};
-
-const Map<String, String> DEFAULT_INTERCEPTORS_LIBRARY = const <String, String>{
-  'findIndexForNativeSubclassType': 'findIndexForNativeSubclassType(type) {}',
-  'getDispatchProperty': 'getDispatchProperty(o) {}',
-  'getInterceptor': 'getInterceptor(x) {}',
-  'getNativeInterceptor': 'getNativeInterceptor(x) {}',
-  'initializeDispatchProperty': 'initializeDispatchProperty(f,p,i) {}',
-  'initializeDispatchPropertyCSP': 'initializeDispatchPropertyCSP(f,p,i) {}',
-  'Interceptor': r'''
-      class Interceptor {
-        toString() {}
-        bool operator==(other) => identical(this, other);
-        get hashCode => throw "Interceptor.hashCode not implemented.";
-        noSuchMethod(im) { throw im; }
-      }''',
-  'JSArray': r'''
-          class JSArray<E> extends Interceptor implements List<E>, JSIndexable {
-            JSArray();
-            factory JSArray.typed(a) => a;
-            var length;
-            operator[](index) => this[index];
-            operator[]=(index, value) { this[index] = value; }
-            add(value) { this[length] = value; }
-            insert(index, value) {}
-            E get first => this[0];
-            E get last => this[0];
-            E get single => this[0];
-            E removeLast() => this[0];
-            E removeAt(index) => this[0];
-            E elementAt(index) => this[0];
-            E singleWhere(f) => this[0];
-            Iterator<E> get iterator => null;
-          }''',
-  'JSBool': 'class JSBool extends Interceptor implements bool {}',
-  'JSDouble': 'class JSDouble extends JSNumber implements double {}',
-  'JSExtendableArray': 'class JSExtendableArray extends JSMutableArray {}',
-  'JSFixedArray': 'class JSFixedArray extends JSMutableArray {}',
-  'JSFunction':
-      'abstract class JSFunction extends Interceptor implements Function {}',
-  'JSIndexable': r'''
-      abstract class JSIndexable {
-        get length;
-        operator[](index);
-      }''',
-  'JSInt': r'''
-       class JSInt extends JSNumber implements int {
-         operator~() => this;
-       }''',
-  'JSMutableArray':
-      'class JSMutableArray extends JSArray implements JSMutableIndexable {}',
-  'JSUnmodifiableArray': 'class JSUnmodifiableArray extends JSArray {}',
-  'JSMutableIndexable':
-      'abstract class JSMutableIndexable extends JSIndexable {}',
-  'JSPositiveInt': 'class JSPositiveInt extends JSInt {}',
-  'JSNull': r'''
-      class JSNull extends Interceptor {
-        bool operator==(other) => identical(null, other);
-        get hashCode => throw "JSNull.hashCode not implemented.";
-        String toString() => 'Null';
-        Type get runtimeType => null;
-        noSuchMethod(x) => super.noSuchMethod(x);
-      }''',
-  'JSNumber': r'''
-      class JSNumber extends Interceptor implements num {
-        // All these methods return a number to please type inferencing.
-        operator-() => (this is JSInt) ? 42 : 42.2;
-        operator +(other) => (this is JSInt) ? 42 : 42.2;
-        operator -(other) => (this is JSInt) ? 42 : 42.2;
-        operator ~/(other) => _tdivFast(other);
-        operator /(other) => (this is JSInt) ? 42 : 42.2;
-        operator *(other) => (this is JSInt) ? 42 : 42.2;
-        operator %(other) => (this is JSInt) ? 42 : 42.2;
-        operator <<(other) => _shlPositive(other);
-        operator >>(other) {
-          return _shrBothPositive(other) + _shrReceiverPositive(other) +
-            _shrOtherPositive(other);
-        }
-        operator |(other) => 42;
-        operator &(other) => 42;
-        operator ^(other) => 42;
-
-        operator >(other) => !identical(this, other);
-        operator >=(other) => !identical(this, other);
-        operator <(other) => !identical(this, other);
-        operator <=(other) => !identical(this, other);
-        operator ==(other) => identical(this, other);
-        get hashCode => throw "JSNumber.hashCode not implemented.";
-
-        // We force side effects on _tdivFast to mimic the shortcomings of
-        // the effect analysis: because the `_tdivFast` implementation of
-        // the core library has calls that may not already be analyzed,
-        // the analysis will conclude that `_tdivFast` may have side
-        // effects.
-        _tdivFast(other) => new List()..length = 42;
-        _shlPositive(other) => 42;
-        _shrBothPositive(other) => 42;
-        _shrReceiverPositive(other) => 42;
-        _shrOtherPositive(other) => 42;
-
-        abs() => (this is JSInt) ? 42 : 42.2;
-        remainder(other) => (this is JSInt) ? 42 : 42.2;
-        truncate() => 42;
-      }''',
-  'JSString': r'''
-      class JSString extends Interceptor implements String, JSIndexable {
-        split(pattern) => [];
-        int get length => 42;
-        operator[](index) {}
-        toString() {}
-        operator+(other) => this;
-        codeUnitAt(index) => 42;
-      }''',
-  'JSUInt31': 'class JSUInt31 extends JSUInt32 {}',
-  'JSUInt32': 'class JSUInt32 extends JSPositiveInt {}',
-  'ObjectInterceptor': 'class ObjectInterceptor {}',
-  'JavaScriptObject': 'class JavaScriptObject {}',
-  'PlainJavaScriptObject': 'class PlainJavaScriptObject {}',
-  'UnknownJavaScriptObject': 'class UnknownJavaScriptObject {}',
-  'JavaScriptFunction': 'class JavaScriptFunction {}',
-};
-
-const Map<String, String> DEFAULT_ASYNC_LIBRARY = const <String, String>{
-  'DeferredLibrary': 'class DeferredLibrary {}',
-  'Future': '''
-      class Future<T> {
-        Future.value([value]);
-      }
-      ''',
-  'Stream': 'class Stream<T> {}',
-  'Completer': 'class Completer<T> {}',
-  'StreamIterator': 'class StreamIterator<T> {}',
-};
-
-/// These members are only needed when async/await is used.
-const Map<String, String> ASYNC_AWAIT_LIBRARY = const <String, String>{
-  '_wrapJsFunctionForAsync': '_wrapJsFunctionForAsync(f) {}',
-  '_asyncHelper': '_asyncHelper(o, f, c) {}',
-  '_SyncStarIterable': 'class _SyncStarIterable {}',
-  '_IterationMarker': 'class _IterationMarker {}',
-  '_AsyncStarStreamController': 'class _AsyncStarStreamController {}',
-  '_asyncStarHelper': '_asyncStarHelper(x, y, z) {}',
-  '_streamOfController': '_streamOfController(x) {}',
-};
-
-const String DEFAULT_MIRRORS_SOURCE = r'''
-import 'dart:_js_mirrors' as js;
-class Comment {}
-class MirrorSystem {}
-class MirrorsUsed {
-  final targets;
-  const MirrorsUsed({this.targets});
-}
-void reflectType(Type t) => js.disableTreeShaking();
-''';
-
-const String DEFAULT_JS_MIRRORS_SOURCE = r'''
-disableTreeShaking(){}
-preserveMetadata(){}
-preserveLibraryNames(){}
-''';
diff --git a/tools/VERSION b/tools/VERSION
index f10e4ba..7d84f54 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 283
+PRERELEASE 284
 PRERELEASE_PATCH 0
\ No newline at end of file
